Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Lekce 3 - Proměnné a typový systém v Céčku

Z minulé lekce, Instalace NetBeans a kompilátoru C, již umíme pracovat s NetBeans IDE a vytvořit konzolovou aplikaci.

Dnes se v tutoriálu podíváme na tzv. typový systém, ukážeme si základní datové typy a práci s proměnnými. Výsledkem budou 3 jednoduché programy včetně kalkulačky.

Proměnné

Než začneme řešit datové typy, pojďme se shodnout na tom, co je to proměnná (programátoři mi teď jistě odpustí zbytečné vysvětlování). Určitě znáte z matematiky proměnnou (např. x), do které jsme si mohli uložit nějakou hodnotu, nejčastěji číslo. Proměnná je v informatice naprosto to samé, je to místo v paměti počítače, kam si můžeme uložit nějaká data (jméno uživatele, aktuální čas nebo databázi článků). Toto místo má podle typu proměnné také vyhrazenou určitou velikost, kterou proměnná nesmí přesáhnout (např. číslo nesmí být větší než 32 000).

Proměnná má vždy nějaký datový typ, může to být číslo, znak, text a podobně. Záleží na tom, k čemu ji chceme používat. Většinou musíme před prací s proměnnou tuto proměnnou nejdříve tzv. deklarovat, čili říci jazyku jak se bude jmenovat a jakého datového typu bude (jaký v ní bude obsah). Jazyk ji v paměti založí a teprve potom s ní můžeme pracovat. Podle datového typu proměnné si ji jazyk dokáže z paměti načíst, modifikovat, případně ji v paměti založit. O každém datovém typu jazyk ví, kolik v paměti zabírá místa a jak s tímto kusem paměti pracovat.

Typový systém

Existují dva základní typové systémy: statický a dynamický:

  • Dynamický typový systém nás plně odstiňuje od toho, že proměnná má vůbec nějaký datový typ. Ona ho samozřejmě vnitřně má, ale jazyk to nedává najevo. Dynamické typování jde mnohdy tak daleko, že proměnné nemusíme ani deklarovat. Jakmile do nějaké proměnné něco uložíme a jazyk zjistí, že nebyla nikdy deklarována, sám ji založí. Do té samé proměnné můžeme ukládat text, potom strukturu uživatele a potom desetinné číslo. Jazyk se s tím sám popere a vnitřně automaticky mění datový typ. V těchto jazycích jde vývoj rychleji díky menšímu množství kódu. Zástupci jsou např. PHP nebo Ruby.
  • Statický typový systém naopak striktně vyžaduje definovat typ proměnné a tento typ je dále neměnný. Jakmile proměnnou jednou deklarujeme, není možné její datový typ změnit. Jakmile se do čísla pokusíme uložit strukturu uživatel, dostaneme vynadáno.

Céčko je staticky typovaný jazyk, všechny proměnné musíme nejprve deklarovat s jejich datovým typem. Nevýhodou je, že díky deklaracím je zdrojový kód poněkud objemnější a vývoj pomalejší. Obrovskou výhodou však je, že nám kompilátor před spuštěním zkontroluje, zda všechny datové typy sedí. Dynamické typování sice vypadá jako výhodné, ale zdrojový kód není možné automaticky kontrolovat a když někde očekáváme objekt uživatel a přijde nám tam místo toho desetinné číslo, odhalí se chyba až za běhu a interpret program shodí. Naopak céčko nám nedovolí program ani zkompilovat a na chybu nás upozorní (to je další výhoda kompilace).

Pojďme si nyní něco naprogramovat, ať si nabyté znalosti trochu osvojíme, s teorií budeme pokračovat až příště. Řekněme si nyní tři základní datové typy:

  • Celá čísla: int
  • Desetinná čísla: float
  • Znak (písmeno, text se naučíme později): char

Program vypisující proměnnou

Zkusíme si nadeklarovat celočíselnou proměnnou a, dosadit do ní číslo 56 a její obsah vypsat do konzole. Založte si nový projekt a pojmenujte ho Vypis (i ke všem dalším příkladům si vždy založte nový projekt). Kód samozřejmě píšeme jako minule do těla funkce main(), čili ji zde již nebudu opisovat.

int a;
a = 8;
printf("%d", a);

První příkaz nám nadeklaruje novou proměnnou a datového typu int, proměnná tedy bude sloužit pro ukládání celých čísel. Druhý příkaz provádí přiřazení hodnoty do proměnné, slouží k tomu operátor "rovná se". Poslední příkaz je nám známý, vypíše do konzole obsah proměnné a. Všimněte si %d v uvozovkách, tím definujeme jaký typ proměnné to má vypsat, %d označuje celá čísla (jako decimal).

Konzolová aplikace
8

Pro desetinnou proměnnou by kód vypadal takto:

float a;
a = 56.6F;
printf("%f", a);

Je to téměř stejné jako s celočíselnou, ovšem za hodnoty float píšeme ještě znak F. Jako desetinný oddělovač používáme tečku a změníme %d na %f (jako float), abychom řekli počítači, že chceme vypisovat desetinné číslo.

Program zdvojnásobovač

Minulý program byl poněkud nudný, zkusme nějak reagovat na vstup od uživatele.

Z konzole jsme ještě nezkoušeli nic načítat. Slouží k tomu funkce scanf(), která uživateli umožní zadat do konzole řádku textu a nám do naší proměnné uloží zadanou hodnotu. Abychom si to zkusili, založíme si nový projekt s názvem Zdvojnasobovac. Nyní se přesuňme k samotnému kódu programu a do funkce main() píšeme:

int a;
printf("Zadejte číslo k zdvojnásobení: ");
scanf("%d", &a);
a = a * 2;
printf("%d", a);

To už je trochu zábavnější :) Zdvojnásobovač si vyžádá na vstupu číslo a to poté zdvojnásobí a vypíše. První řádek je jasný, deklaruje proměnnou a typu celé číslo. V céčku bychom všechny proměnné měli definovat na začátku.

Konzolová aplikace
Zadejte číslo k zdvojnásobení: 1024
2048

Do a se přiřadila hodnota z funkce scanf() z konzole, tedy to, co uživatel zadal. Znak & si vysvětlíme později, prozatím se spokojíme s tím, že ho funkce scanf() vyžaduje, aby hodnotu mohla uložit do nějaké proměnné. Opět jsme využili sekvenci %d, čímž říkáme, že vstup se má načíst jako celé číslo. Jen tak mimochodem, znak bychom načetli nebo vypsali pomocí sekvence %c (jako char).

Jednoduchá kalkulačka

Ještě jsme nepracovali s desetinnými čísly, zkusme si napsat slibovanou kalkulačku. Bude velmi jednoduchá, na vstup přijdou dvě čísla, program poté vypíše výsledky pro sčítání, odčítání, násobení a dělení.

float a;
float b;
float soucet;
float rozdil;
float soucin;
float podil;
printf("Vítejte v kalkulačce \n");
printf("Zadejte první číslo: \n");
scanf("%f", &a);
printf("Zadejte druhé číslo: \n");
scanf("%f", &b);
soucet = a + b;
rozdil = a - b;
soucin = a * b;
podil = a / b;
printf("Součet: %f \n", soucet);
printf("Rozdíl: %f \n", rozdil);
printf("Součin: %f \n", soucin);
printf("Podíl: %f \n", podil);

Konzolová aplikace
Vítejte v kalkulačce
Zadejte první číslo:
5
Zadejte druhé číslo:
7
Součet: 12.000000
Rozdíl: -2.000000
Součin: 35.000000
Podíl: 0.714286

Vidíme, že v C můžeme použít nám známé aritmetické operace (+, -, \, *, /). C navíc definuje další operaci (%), která značí zbytek po celočíselným dělení. Všimněte si, že místo %c nebo %d používáme %f. To značí, že chceme použít float neboli desetinná čísla. Pokud by vás zajímaly všechny znaky, které můžete použít, najdete vysvětlení v dokumentaci.

Všechny programy máte samozřejmě opět v příloze, zkoušejte si vytvářet nějaké podobné, znalosti již k tomu máte :)

V následujícím cvičení, Řešené úlohy k 1.-3. lekci Céčka, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 2273x (105.2 kB)

 

Předchozí článek
Instalace NetBeans a kompilátoru C
Všechny články v sekci
Základní konstrukce jazyka C
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 1.-3. lekci Céčka
Článek pro vás napsal Samuel Kodytek
Avatar
Uživatelské hodnocení:
112 hlasů
Autor se věnuje všem jazykům okolo JVM. Rád pomáhá lidem, kteří se zajímají o programování. Věří, že všichni mají šanci se naučit programovat, jen je potřeba prorazit tu bariéru, který se říká lenost.
Aktivity