Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

3. diel - Premenné a typový systém v C ++

Z minulej lekcie, Visual Studio a prvý konzolová aplikácie v C ++ , už vieme pracovať s Visual Studiom a vytvoriť konzolovú aplikáciu. Dnes sa v C ++ tutoriálu pozrieme na tzv. Typový systém, ukážeme si základné dátové typy a prácu s premennými. Výsledkom budú 4 jednoduché programy vrátane kalkulačky.

Premenné

Než začneme riešiť dátové typy, poďme sa zhodnúť na tom, čo je to premenná (programátori mi teraz iste odpustí okamih vysvetľovanie). Určite poznáte z matematiky premennou (napr. x), do ktorej sme si mohli uložiť nejakú hodnotu, najčastejšie číslo. Premenná je v informatike úplne to isté, je to miesto v pamäti počítača, kam si môžeme uložiť nejaké dáta (napr. Meno používateľa). Toto miesto má podľa typu premennej tiež vyhradenú určitú veľkosť, ktorú premenná nesmie presiahnuť (napr. Číslo nesmie byť väčšie ako 2 147 483 647).

Premenná má vždy nejaký dátový typ, môže to byť číslo, znak, text a podobne, záleží na tom, na čo ju chceme používať. Väčšinou musíme pred prácou s premennou túto premennú najskôr tzv. Deklarovať, či povedať jazyku ako sa bude volať a akého dátového typu bude (aký v nej bude obsah). Jazyk ju v pamäti založia a až potom s ňou môžeme pracovať. Podľa dátového typu premennej si ju jazyk dokáže z pamäti načítať, modifikovať, prípadne ju v pamäti založiť. O každom dátovom typu jazyk vie, koľko v pamäti zaberá miesta a ako s týmto kusom pamäte pracovať.

Typový systém

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

  • Dynamický typový systém nás plne odtieňuje od toho, že premenná má vôbec nejaký dátový typ. Ona ho samozrejme vnútorne má, ale jazyk to nedáva najavo. Dynamické typovanie ide mnohokrát tak ďaleko, že premenné nemusíme ani deklarovať, akonáhle do nejakej premennej niečo uložíme a jazyk zistí, že nebola nikdy deklarovaná, sám ju založí. Do tej istej premennej môžeme ukladať text, potom objekt používateľa a potom desatinné číslo. Jazyk sa s tým sám pobije a vnútorne automaticky mení dátový typ. V týchto jazykoch ide vývoj rýchlejšie vďaka menšiemu množstvo kódu, zástupcovia sú napr. PHP alebo Ruby.
  • Statický typový systém naopak striktne vyžaduje definovať typ premennej a tento typ je ďalej nemenný. Akonáhle premennú raz deklarujeme, nie je možné jej dátový typ zmeniť. Akonáhle sa do textového reťazca pokúsime uložiť objekt užívateľ, dostaneme vynadané.

C ++ je staticky typizovanom jazyk, všetky premenné musíme najprv deklarovať s ich dátovým typom. Nevýhodou je, že vďaka deklaráciám je zdrojový kód trochu objemnejší a vývoj pomalší. Obrovskou výhodou však je, že nám kompiler pred spustením skontroluje, či všetky dátové typy sedia. Dynamické typovanie síce vyzerá ako výhodné, ale zdrojový kód nie je možné automaticky kontrolovať a keď niekde očakávame objekt používateľ a príde nám tam namiesto toho desatinné číslo, odhalí sa chyba až za behu a interpret program zhodí. Naopak C ++ nám nedovolí program ani skompilovať a na chybu nás upozorní (to je ďalšia výhoda kompilácia).

Poďme si teraz niečo naprogramovať, nech si nadobudnuté vedomosti trochu osvojíme, s teóriou budeme pokračovať až nabudúce. Povedzme si teraz tri základné dátové typy:

  • Celé čísla: int
  • Desatinné čísla: float
  • Textový reťazec: string

Program Vyhlasujúca premennú

Skúsime si nadeklarovat celočíselnú premennú a, dosadiť do nej číslo 56 a jej obsah vypísať do konzoly. Založte si nový projekt, pomenujte ho Vypis (i ku všetkým ďalším príkladom si vždy založte nový projekt). Kód samozrejme píšeme do tela funkcie main() ako minule, čiže ju tu už nebudem opisovať.

int a;
a = 56;
cout << a << endl;
cin.get();

Mená premenných môžu obsahovať malé a veľké písmená, znak _ a číslice, ale tými nesmie názov začínať. Nemala by obsahovať diakritiku (aj keď Visual Studio si s ňou poradí), tá v identifikátoroch (názvoch premenných a funkcií) robí len problémy.

Prvý príkaz nám nadeklaruje novú premennú a dátového typu int, premenná teda bude slúžiť na ukladanie celých čísel. Druhý príkaz vykonáva priradenie hodnoty do premennej, slúži na to operátor "rovná sa". Posledný príkaz je nám známy, vypíše do konzoly obsah premennej a. Konzola je múdra a vie vypísať aj číselné premenné.

Konzolová aplikácia
56

Pre desatinnú premennú by kód vyzeral takto:

float a;
a = 56.6f;
cout << a << endl;
cin.get();

Je to takmer rovnaké ako s celočíselnú. Všimnite si, že za desatinné čísla typu float píšeme ešte tzv. Suffix f, ďalej v kurze sa dozvieme prečo.

Pozn: Ak sa pokúsime do celočíselné premenné uložiť desatinné číslo, prekladači to vadiť nebude. U iných jazykov (napr. C #, Java) by nám vynadal, že to nejde, ale v C ++ jednoducho zmaže všetko za desatinnou bodkou.

Program Papagáj

Minulý program bol trochu nudný, skúsme nejako reagovať na vstup od užívateľa. Napíšeme program papagáj, ktorý bude dvakrát opakovať to, čo používateľ napísal. Ešte sme neskúšali z konzoly nič načítavať, ale je to veľmi jednoduché. Slúži na to objekt cin. O objektoch si niečo povieme oveľa neskôr, je tu pre to samostatný kurz. Zatiaľ nám stačí vedieť, že cin jednoducho vie čítať dáta z klávesnice. My sme ho už dokonca použili, cin.get() nám čakal na stlačenie klávesy Enter.

Skúsme si napísať nasledujúci kód:

#include <iostream>
#include <string>
using namespace std;

int main(void)
{
    cout << "Ahoj, som virtualne papagáj Lora, rád opakujem!" << endl;
    cout << "Napis neco: " << endl;
    string vstup;
    cin >> vstup;
    string vystup;
    vystup = vstup + ", " + vstup + "!";
    cout << vystup << endl;
    cin.get(); cin.get();
    return 0;
}

Pre používanie typu string musíme na začiatok kódu pridať #include <string>.

To už je trochu zábavnejšia :) Prvé dva riadky sú jasné, ďalej deklarujeme textový reťazec vstup, do neho sa priradí hodnota z objektu cin, teda to, čo používateľ zadal. Pre výstup si pre názornosť zakladáme ďalšie premennú typu textový reťazec. Zaujímavé je, ako do vystup priradíme, využívame tzv. Konkatenace (spájanie) reťazcov. Pomocou operátora "plus" totiž môžeme pripojiť textový reťazec k inému a je jedno, či je reťazec v premennej alebo je explicitne zadaný v úvodzovkách v zdrojovom kóde. Do premennej teda priradíme vstup, ďalej čiarku, znovu vstup a potom výkričník. Premennú vypíšeme, počkáme na stlačenie klávesy a skončíme.

A prečo je na konci použitý 2x cin.get() ? Povedali sme si, že cin.get() čaká na stlačenie Enter. Problémom je, že cin číta iba tlačiteľné znaky, takže enter na vstupe zostane. Pomocou prvého cin.get() enter zmažeme a vďaka ďalšiemu cin.get() čakáme na ďalší enter, ktorý už musí prísť od užívateľa.

Ešte by som rád upozornil, že cin načíta len jedno slovo. Pokiaľ mu zadáme napr. Text " Ahoj C++ ", Dostaneme len "Ahoj".

Konzolová aplikácia
Ahoj, som virtualne papagáj Lora, rád opakujem!
Napis neco:
ahoj
ahoj, ahoj!

Do premennej môžeme priraďovať už v jej deklarácii, môžeme teda nahradiť:

string vystup;
vystup = vstup + ", " + vstup + "!";

za

string vystup = vstup + ", " + vstup + "!";

Program by išiel skrátiť ešte viac v mnohých ohľadoch, ale všeobecne je lepšie používať viac premenných a dodržiavať prehľadnosť, než písať čo najkratšie kód a po mesiaci zabudnúť, ako vôbec funguje.

Program zdvojnásobovač

Zdvojnásobovač si vyžiada na vstupe číslo a to potom zdvojnásobí a vypíše. Doterajšie poznatky by nám mali stačiť na to, aby sme napísali niečo takéto:

cout << "Zadajte cislo k zdvojnásobeniu:" << endl;
int a;
cin >> a;
a = a * 2;
cout << a;
cin.get(); cin.get();

Všimnite si zdvojnásobenie čísla a, ktoré sme vykonali pomocou priradenia.

Tento zápis sa dá skrátiť aj na obyčajné:

a *= 2;
Konzolová aplikácia
Zadajte cislo k zdvojnásobeniu:
1024
2048

Jednoduchá kalkulačka

Ešte sme nepracovali s desatinnými číslami, skúsime si teda napísať sľubovanú kalkulačku. Bude veľmi jednoduchá, na vstup prídu dve čísla, program potom vypíše výsledky pre sčítanie, odčítanie, násobenie a delenie.

cout << "Vitajte v kalkulačke" << endl;
cout << "Zadajte prvni cislo: ";
float a;
cin >> a;
cout << "Zadajte druhe cislo: ";
float b;
cin >> b;
float soucet = a + b;
float rozdil = a - b;
float soucin = a * b;
float podil = a / b;
cout << "Sucet: " << soucet << endl;
cout << "Rozdiel: " << rozdil << endl;
cout << "Súčin: " << soucin << endl;
cout << "Podiel: " << podil << endl;
cout << "Dekuji za použitia kalkulačky, aplikáciu ukončíme ľubovoľného klávesu." << endl;
cin.get(); cin.get();

Pozn .: Výpočty by sme tiež mohli vykonať až pri výpise a ušetriť si premenné s výsledkami:

cout << "Sucet: " << (a + b) << endl;
Konzolová aplikácia
Vitajte v kalkulačke
Zadajte prvni cislo: 15
Zadajte druhe cislo: 3
Sucet: 18
Rozdiel: 12
Súčin: 45
Podiel: 5
Dekuji za použitia kalkulačky, aplikáciu ukončíme ľubovoľného klávesu.

Pre dnešný lekciu je to všetko. V lekcii budúci, Riešené úlohy k 1.-3. lekciu C ++ , si povieme viac o typovom systému a predstavíme si ďalšie dátové typy.

Všetky programy máte samozrejme opäť v prílohe, skúšajte si vytvárať nejaké podobné, vedomosti už k tomu máte :)

V nasledujúcom cvičení, Riešené úlohy k 1.-3. lekciu C ++, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 484x (12.71 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C++

 

Predchádzajúci článok
Visual Studio a prvý konzolová aplikácie v C ++
Všetky články v sekcii
Základné konštrukcie jazyka C ++
Preskočiť článok
(neodporúčame)
Riešené úlohy k 1.-3. lekciu C ++
Článok pre vás napísal Zdeněk Pavlátka
Avatar
Užívateľské hodnotenie:
5 hlasov
Autor se věnuje spoustě zajímavých věcí ze světa informatiky a grafiky
Aktivity