Seriál o C++ pro úplné začátečníky; díl 3.

Dnes dokončíme proměnné, naučíme se definovat nové typy a vytvářet pole proměnných. Dozvíme se co je to příkaz a výraz a také si ukážeme jakými operátory C++ disponuje a ty v dalším díle využijeme při řízení programu.
Tento díl se vám možná bude zdát trochu náročnější než minulé díly, ale pokud si budete zkoušet různé příklady přímo u počítače, myslím, že vše brzy pochopíte.

Dnes dokončíme proměnné, naučíme se definovat nové typy a vytvářet pole proměnných. Dozvíme se, co je to příkaz a výraz, a také si ukážeme, jakými operátory C++ disponuje; ty v dalším díle využijeme při řízení programu. Vysvětlíme si, co to jsou a jak se používají komentáře.

Char letmo…
Proměnné typu char jsou opět proměnné, které obsahují číselnou hodnotu reprezentující určitý znak v tabulce ASCII.

char a=65;
cout << a;

Výstupem bude A, protože 65 reprezentuje v ASCII tabulce znak A.

>

Definice zástupného jména pro typ proměnné - typedef
To, co si zde nyní ukážeme, není definice nového typu proměnné jako takové, ale jen vytvoření tzv. aliasu typu proměnné. Typ tedy zůstane stejný, jen si pro něj vytvoříme jeden přídavný název, který se nám lépe hodí například tehdy, pokud je původní název moc dlouhý. V C++ je syntaxe jazyka volnější než třeba v Pascalu, takže můžeme použít typedef prakticky kdekoliv v programu. Pokud se nám třeba nechce pokaždé psát unsigned short int, můžeme definovat novou proměnnou takto:

typedef unsigned short int USHORT;

A dále pak namísto unsigned short int používat jen USHORT.

Obecná syntaxe je:

typedef existující_typ nový_typ;

Definice nového typu proměnné - enum
Pokud však chceme definovat úplně nový typ, použijeme příkaz enum.

Příkazem enum vytvoříme nový typ proměnné s určitým počtem hodnot. Proměnné tohoto typu pak můžeme definovat, jak už jsme se to naučili v 2. dílu.

Takže pokud chceme vytvořit nový typ proměnné - tyden skládající se ze 7 dnů:

enum tyden {pondeli,utery,streda,ctvrtek,patek,sobota,nedele};

Každá hodnota (pondělí, úterý..) má svůj číselný ekvivalent – pondělí je 0, úterý 1 atd.

Jestliže chceme přiřadit vlastní hodnoty, provedeme to takto:

enum tyden {pondeli=10,utery=20,streda,ctvrtek,patek,sobota,nedele};

Kde pondělí bude mít hodnotu 10, úterý 20, středa 21, čtvrtek 22 atd…

Kbychom tedy chtěli výpis na obrazovku: cout << pondeli; uviděli bychom číslo 10.

Číselné hodnoty jsou potřeba např. ve for cyklech a dalších.

Nyní si vyzkoušíme, jak se s nově vytvořeným typem pracuje:

enum tyden {pondeli,utery,streda,ctvrtek,patek,sobota,nedele};
tyden jedenden=utery;
cout << pondeli << jedenden;

V tomto příkladě jsme vytvořili nový typ proměnné – tyden a definovali jsme proměnnou jedenden typu tyden. Proměnné jedenden jsme přiřadili hodnotu utery. Následovně jsme nechali na obrazovku vypsat hodnotu pondeli a proměnnou jedenden (tedy vlastně utery);

Pokud vás to mate, ani se vám nedivím. Pro lepši pochopení uvedu ekvivalentní příklad, kde namísto typu tyden použiji typ int;

enum int {0,1,2,3,4,5,6};
int jednocislo=1;
cout << 0 << 1;

Ovšemže nemůžeme předefinovat typ int, ale předpokládejme, že int ještě neexistuje, a my si ho pomocí enum vytvoříme (fiktivní příklad).

Z tohoto příkladu už snadněji pochopíte příklad minulý.

Pole proměnných
Pole proměnných používáme, chceme-li vytvořit větší množství hodnot stejného typu.

Všechny elementy pole se skládají z názvu a indexu, prostřednictvím kterého k jednotlivým hodnotám přistupujeme – název[index].

Pole může obsahovat proměnné jakéhokoliv typu, včetně typu char, ukazatelů a vlastních typů. Také můžeme vytvořit pole objektů. (Neznáme-poznáme :))

Pokud bychom například chtěli vytvořit hodně proměnných reprezentující výplaty zaměstnanců a neznali bychom problematiku polí, museli bychom napsat:

int zamestnanec1=2000,zamestnanec2=3000,zamestnanec3=4000…;

Pomocí pole je vše mnohem jednodušší a s poli se dá také mnohem lépe pracovat například v cyklech for atd.

int zamestnanci[5];

Tím jsme deklarovali pole zaměstnanci, do kterého můžeme uložit až 5 hodnot. K jednotlivým položkám přistupujeme pomocí již zmíněných indexů:

zamestnanci[0]=20;zamestnanci[1]=12;
cout << zamestnanci[0];

Pokud chceme hodnoty do pole přidat implicitně, hned na začátku, můžeme použít způsob, který už známe z definování nových typů proměnných:

int zamestnanci[5]={100,102,200};

Kde přiřadíme proměnným zamestnanci[0] hodnotu 100, zamestnanci[1] hodnotu 102 , zamestnanci[2] hodnotu 200 a ostatním zaměstnancům hodnotu 0. Pamatujte si tedy, že pokud chcete vytvořit pole o 5 proměnných napíšete int zamestnanec[5], ale nejvyšší možný zaměstnanec je zamestnanec[4]!

Existují i vícerozměrná pole, v nichž si můžeme uspořádání hodnot představit jako obdélník u pole dvojrozměrného a kvádr u pole trojrozměrného.

Můžeme vytvářet i vícerozměrná pole, ale to už je velmi těžké si představit a někdy také velmi náročné na paměť počítače. Vícerozměrná pole se používala např. ve starších počítačových hrách. Vytvoříme-li si třeba takové trojrozměrné pole int velke_pole[1000][1000][1000], bude zabírat tolik paměti jako 1000*1000*1000=miliarda proměnných int. Každá proměnná typu int je velká 16 bitů, toto pole tedy zabere 1600000000 bitů = 2000000000 bytů = 2000000 kilobytů = 2000Mb = 2GB paměti, což je určitě VELMI vysoké číslo, nehledě na velikost zkompilovaného programu…proto si dávejte při použití pozor na paměť!

Pracovat s vícerozměrnými poli můžete stejně jako s obyčejnými poli, zápis je následující:

int pocty[3][2]={1,2,3,4,5,6}

Ale přehlednější je:

int pocty[3][2]={{1,2},{3,4},{4,5}};

V části o cyklech for se k polím ještě vrátíme.

Komentáře

Komentář je úsek programu, který kompilátor ignoruje a který vám pomáhá, abyste se lépe vyznali v programu. U složitějších programů bývá takřka nezbytný. V nepřehledných úsecích si můžete komentářem připomenout, co daný příkaz dělá, atp.

Komentáře jsou v C++ dvojího typu: Jednořádkové a víceřádkové.

Jednořádkové komentáře můžeme vložit kdekoliv pomocí dvojitého lomítka - // a jeho platnost sahá až ke konci řádku. Používá se hlavně k popisu nebo doplňující informaci o příkazu:

Int a=5;  //jednořádkový komentář

V tomto seriálu je budeme hojně používat např. pro popis neznámých nebo komplikovaných příkazů.

Víceřádkové komentáře se používají například k odkomentování bloku příkazů. Komentář začíná znaky /* a vše, co je za nimi, překladač ignoruje, dokud nenarazí na znaky */ značící jeho konec.

Výrazy
Cokoliv, co v C++ vrací nějakou hodnotu, je výraz.

Pokud nerozumíte, co to znamená, že vrací nějakou hodnotu, tak vězte, že výraz má nějakou hodnotu, kterou je možno přiřadit například do proměnné, nebo ji lze použít pro vyhodnocování podmínky.

5      //výraz vracející hodnotu 5
hodina //výraz vracející  hodnotu 60

Druhý výraz platí pouze v případě, máme-li definovanou konstantu hodina s hodnotou 60;

Ale i komplikovanější:

a=b+c;  //tímto nejenže přiřadíme do proměnné a hodnotu b+c, ale
        //výraz také vrací hodnotu a.

Operátory jazyka C++

Operátor je symbol, který vykonává nějakou činnost s operandy. Každý operand je výraz.

Pomocí operátorů můžeme násobit, dělit, přiřazovat, ale i vyhodnocovat podmínky. Operátory můžeme dělit více způsoby, ale nám postačí tento:

A.Matematické

+ Sčítání
- Odčítání
* Násobení
/ Dělení
% Modulus
Zde není moc co vysvětlovat, s těmito operátory pracujeme tak, jak jsme zvyklí z “normálního” světa. Jediný neznámý pojem by pro nás mohl být modulus. Modulus jednoduše provádí celočíselné dělení a vrací zbytek:

Int a=13,b=2,c,d; //definice a přiřazení hodnot proměnným.
c=a%b;            //výsledek a modulus b je přiřazen do proměnné c.
d=a*b;            //a výsledek a krát b je přiřazen  do proměnné d.

Asi jste uhodli, že c se po této operaci bude rovnat 1 a d 26.

Jistě si také pamatujete na 2. díl, kde jsem upozorňoval, že je lepší užívat pro úschovu menších čísel vhodné typy proměnných, a nyní zde sám toto pravidlo porušuji – pro úschovu čísla 12 používám typ int. To proto, že tento kód je a)jen ilustrační, b)v článku je přehlednější a c)kdo si toho všiml – gratuluji.

B.Přířazovací

= Přiřazení hodnoty
+= Přiřazení součtu uložené a nové hodnoty
-= Přiřazení rozdílu uložené a nové hodnoty
Zde už bude potřeba vysvětlit si více. Přiřazení znamená uložení výrazu na pravé straně (pravé operandy) do levé operandy.

A=4;  a=3*b; a=b*b;

Ale co když třeba chceme přičíst k hodnotě jedné proměnné další hodnotu a výsledek vrátit zpět do první proměnné?

Uveďme si příklad, kdy do proměnné počet, která má hodnotu 2, chceme přičíst číslo 3.

Int pocet=2, mezisoucet;
Mezisoucet=pocet+3;
Pocet=mezisoucet;

Tento postup je zdlouhavý a neefektivní, ale z hlediska „nepočítačové“ matematiky je celkem správný. V C++ si k můžeme práci usnadnit:

Pocet=pocet+3;

dělá totéž jako toto:

Počet+=3;

Pro ještě větší usnadnění tu jsou tzv. samopřiřazovací operátory, které pracují na principu: Vezmi hodnotu na levé straně a sečti(vynásob/vyděl…) s hodnotou na pravé straně a přiřaď opět do proměnné na levé straně. Pokud tomu nerozumíte, zkuste si vyzkoušet použití v praxi, zkompilujte si program a sledujte výstup. To platí všeobecně, po chvíli tomu určitě přijdete na kloub.

B.Porovnávací

== Rovná se
!= Nerovná se
< Je menší než
> Je větší než
<= Je menší nebo rovná se
>= Je větší nebo rovná se
Porovnávací operátory nejčastěji používáme v různých cyklech nebo podmínkách.

Vzniklý výraz vždy vrací hodnotu 1, pokud je výraz pravdivý, nebo 0, pokud je nepravdivý. Jestliže si říkáte, k čemu je to dobré, počkejte si na další díl, kde budeme probírat podmínky a cykly :) a kde si také probereme tyto operátory do hloubky. Ale jen na zkoušku, abyste věděli, že si nevymýšlím, a také proto, abyste si vyzkoušeli, co už jsme se naučili, nebo protože už jste dlouho neviděli žádný ukázkový program, si zkuste zkompilovat toto:

1.  #include <iostream.h>            //vysvětlíme si později
2.
3.  typedef unsigned short int USHORT; 
4.
5.  int main()         
6.  {
7.  USHORT pole[5] = {2,4,6,8,10}; 
8.  cout << “Pole[0] je nyní “ << pole[0] << endl; 
9.  pole[0]+=pole[4];          //to už znáte, ne?
10.  cout << “A teď  “ << pole[0] << endl; 
11.  pole[2]=pole[3]>pole[4];
12.  pole[0]=pole[3]<pole[4];
13.  cout << pole[2] << “,” << pole[0];
14.  /*
15.    A toto je mnohařádkový komentář
16.  */
14.  }

Příklad jsem uvedl s použitím polí – opakování je matka moudrosti :)

Většině kódu bychom rozuměli, ale podivně vypadají řádky 11. a 12. Pojďme si je rozebrat podrobněji: Na 11. řádce se ověřuje, zda je větší hodnota v proměnné pole[3] než v pole[4], to samozřejmě není pravda, a tedy výraz pole[3]>pole[4] vrací 0. 0 je pak přiřazena do proměnné pole[2].

Na řádku 12 probíhá podobné ověření, až na to, že výraz je pravdivý -> nabývá hodnoty 1 a je přiřazen do proměnné pole[0];

Na řádku 13. je na obrazovku vypsán obsah proměnných pole[2] a pole[0];

V ukázkovém kódu jsou použity komentáře.

Rekapitulace
Dnes jsme toho probrali opravdu hodně, bohužel jsme se však ještě nedostali ke slibovanému řízení programu.

Naučili jsme se vytvářet nové typy proměnných pomocí typedef a enum, operátory jazyka C++, základní práci s poli, komentovat kód a rozpoznat výrazy.

Diskuze (17) Další článek: Jak přeměnit starý server do elegantní ledničky

Témata článku: Software, Programování, Nový typ, Zdlouhavá činnost, Code, Levá strana, Seriál, Neznámý pojem, Začátečník, Normální svět, Pole, Dvojí typ, Pravá strana, 1000, Díl, Ukázkový příklad


Určitě si přečtěte

Windows 10X už si můžete vyzkoušet. Novému systému Microsoft zjevně věří

Windows 10X už si můžete vyzkoušet. Novému systému Microsoft zjevně věří

** Windows 10X přijdou již ke konci roku ** Microsoft vydal emulátor, kde systém ukázal ** Vývojáři musí upravit své aplikace

Vladislav Kluska | 62

17 užitečných tipů a triků pro Mapy Googlu, které byste měli znát

17 užitečných tipů a triků pro Mapy Googlu, které byste měli znát

** Mapy Googlu mají spoustu funkcí, které jsou často přehlíženy ** Využijte například podrobnější možnosti plánování cest ** Hodit se mohou i tipy na sdílení nebo pohledy do minulosti

Karel Kilián | 25

12 nejšílenějších programovacích jazyků, ze kterých vám praskne hlava

12 nejšílenějších programovacích jazyků, ze kterých vám praskne hlava

** Myslíte si, že umíte programovat? ** Ale prosím vás, zkuste jazyk Wenyan nebo Malbolge ** Z ezoterických jazyků zešílíte, nebo vás zaměstnají v Googlu

Jakub Čížek | 26



Aktuální číslo časopisu Computer

Velký test autokamer

Test ATX skříní

Jak surfovat pohodlně

Sportovní aplikace

Jak funguje procesor