NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 1 - Úvod do programovacího jazyka C

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Jozef Vendel
Člen
Avatar
Jozef Vendel:9.12.2021 19:32

Ahoj potreboval by som poradit alebo naviest ak mozes, s myslienkou ako by som mohol urobit to ze, mam napr. pole

int numbers[] = {5, 16, 34, 60, 61, 52, 32};

A ja by som potreboval ich v C pod sebou scitat, takto:
32

52
                  61
                 60
                34
               16
               5
              --------
               7006652

Problem mam stym, ze neviem ako mam riesit to, ked pristupim k prvku napr. numbers[0] co je 61, ako mam pouzit len 1 pre pripocitanie ku numbers[1] ale len 0.

Editováno 9.12.2021 19:32
 
Odpovědět
9.12.2021 19:32
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jozef Vendel
DarkCoder:9.12.2021 22:09

Výsledek je dán součtem čísel v poli braných odzadu, kde každé číslo je modifikováno násobkem hodnoty 10 na (velikost pole - index - 1).
Tedy:
32x10na0 + 52x10na1 + 61x10na2 + 60x10na3 + 34x10na4 + 16x10na5 + 5x10na6 = 7006652

Odpovědět
9.12.2021 22:09
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jozef Vendel
Člen
Avatar
Odpovídá na DarkCoder
Jozef Vendel:9.12.2021 22:59

Nevies preco mi vypocitava zly vysledok ?

#include <stdio.h>
#include <math.h>

#define SIZE 7

int main()
{
    int numbers[] = {5, 16, 34, 60, 61, 52, 32};
    int pomocny;
    int vysledok = 0;


    for(int i = 0; i < SIZE; i++){
        numbers[i] = numbers[i] * 10;
    }


   for(int i = 0; i < SIZE; i++){
        pomocny = pow(numbers[SIZE - i - 1], i);
        vysledok = + pomocny;


    }


  printf("vysledok: %d\n", vysledok);


    return 0;
}
 
Odpovědět
9.12.2021 22:59
Avatar
Jozef Vendel
Člen
Avatar
Odpovídá na Jozef Vendel
Jozef Vendel:9.12.2021 23:02

zaujimave

Editováno 9.12.2021 23:04
 
Odpovědět
9.12.2021 23:02
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jozef Vendel
DarkCoder:10.12.2021 3:08

Dříve, než zde ukáži řešení, tak pár rad k tvému kódu:

  • V C, pokud funkce nepřebírá argumenty, používá se klíčové slovo void.
  • Nepáruješ makro vyjadřující velikost pole s polem.

Buď použij makro jako velikost pole, např:

#define SIZE 7
int numbers[SIZE] = {5, 16, 34, 60, 61, 52, 32};

nebo si velikost pole zjisti pomocí operátoru preprocesoru sizeof

int numbers[] = {5, 16, 34, 60, 61, 52, 32};
int len = sizeof(numbers) / sizeof(numbers[0]);
  • Funkce pow() přebírá dva argumenty typu double, kde první představuje základ, druhý exponent a vrací typ double. Je dobré přetypovávat na typ, který funkce očekává a na typ na který převádíme.
  • pro navyšování hodnoty proměnné se používá operátor +=. Překladač při zpracování příkazu
vysledok = + pomocny;

nezahlásil chybu, neboť si nevědomky použil unární +. Což mělo za následek přiřazení proměnné pomocny proměnné vysledok.

Zde je řešení:

#include <stdio.h>
#include <math.h>

int main(void){
        const int nums[] = { 5, 16, 34, 60, 61, 52, 32 };
        int len = sizeof(nums) / sizeof(nums[0]);
        int sum = 0;

        for (int i = 0, offset = len - 1; i < len; i++) {
                sum += (nums[i] * (int)pow(10.0, offset - (double)i));
        }

        printf("Vysledek: %d\n", sum);
        return 0;
}

Velikost pole je určena pomocí operátoru preprocesoru sizeof, což umožňuje snazší testování přidáváním nebo ubíráním počtu čísel v poli. Výraz len - 1 je konstanta, jejíž hodnota je uložena do proměnné offset. Důvodem je optimalizace, je zbytečné provádět vyhodnocování aritmetického výrazu, který je konstantou v každé iteraci cyklu.

Odpovědět
10.12.2021 3:08
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:12.10.2023 21:49

Kdy bude aktualizovaná sekce - Programovací jazyk C?

Odpovědět
12.10.2023 21:49
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na DarkCoder
David Hartinger:22. dubna 14:57

Děkujeme za tvoji zpětnou vazbu. Tento kurz neplánujeme v blízké době upravovat, protože se prioritně věnujeme sekcím, které jsou součástí našich rekvalifikačních kurzů. Připomínky ale sledujeme pro případné budoucí aktualizace. Vzhledem k popularitě projektu nemůžeme reagovat na každý komentář a zpracováváme zejména opakující se problémy. Zkontrolujeme, že je u kurzu uvedeno, pro které verze byl otestován, pokud pro modernější verze již nemusí vše fungovat. Díky za pochopení a podporu!

Odpovědět
22. dubna 14:57
New kid back on the block with a R.I.P
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 37.