Odpovědi na kontrolní otázky k programátorskému kurzu

30. 4. 2008

Sdílet

Přinášíme vám vypracované odpovědi na kontrolní otázky k programátorskému kurzu "C++: Pojďte s námi programovat!" z PC WORLDu číslo 05/2008.

ICTS24

V rámci našeho pravidelného programovacího seriálu, s nímž se setkáváte každý měsíc na stránkách PC WORLDu, jsme vám položili několik kontrolních otázek. Zde naleznetevypracované odpovědi.


1. Vysvětlete význam proměnných v programování.

Odpověď: Proměnná je v programování datovým kontejnerem, jenž je alokován v operační paměti počítače. Proměnná slouží k uchování dat, s nimiž v programu pracujeme. Prostor, jenž proměnná v paměti zabírá, se nazývá alokační kapacita proměnné. Alokační kapacita proměnné je dána datovým typem, který je aplikován při definici proměnné. V jednom okamžiku smí proměnná uchovávat právě jednu konkrétní hodnotu.

2.Jak jsou do proměnných ukládány hodnoty?

Odpověď: Data, s nimiž při programování pracujeme, aproximujeme datovými položkami neboli hodnotami různých datových typů. Hodnoty do proměnných ukládáme přiřazovacím příkazem. Obecná podoba přiřazovacího příkazu je P = H; kde P je proměnná, do níž ukládáme hodnotu H (operátor = je přiřazovací operátor). Jestliže poté, co proměnnou definujeme, použijeme přiřazovací příkaz pro uložení jisté hodnoty do této proměnné, říkáme, že jsme proměnnou inicializovali. Jazyk C++, ostatně podobně jako jazyk C nebo C#, dovoluje programátorům inicializovat proměnnou již v rámci definičního příkazu. Této akci se říká definiční inicializace proměnné.

3. Můžeme používat definované, ovšem neinicializované proměnné?

Odpověď: Jestliže proměnnou pouze definujeme, nevíme, co je v ní uloženo. Poznamenejme, že toto konstatování se váže k lokálním proměnným čili proměnným definovaným v tělech funkcí. Jednou definovaná proměnná je zpravidla dříve nebo později také náležitě inicializována. Kdybychom měli pouze definovanou, ovšem neinicializovanou proměnnou, oprávněně bychom mohli pochybovat o smyslu její existence.

4. Je možné v definičním příkazu proměnné vynechat její datový typ?


Odpověď: Ne, takovou operaci jazyk C++ nedovoluje. Překladač vyžaduje, aby byl v definičním příkazu proměnné určen její datový typ a rovněž identifikátor proměnné.

5. Co je to definiční inicializace proměnné?

Odpověď: Definiční inicializace je terminus technicus pro příkaz, v němž dochází k definici a okamžité inicializaci proměnné. Definiční inicializace tedy vhodně kombinuje možnosti dvou samostatných příkazů (definiční příkaz a přiřazovací příkaz). Dodejme, že definiční inicializaci lze s výhodou využít v situacích, kdy již v okamžiku vytváření proměnné známe její inicializační hodnotu.

6. Co jsou to lokální a globální proměnné? Jaké jsou mezi nimi rozdíly?

Odpověď: Podle směrnic základní klasifikace proměnných dělíme proměnné na lokální a globální. Každá proměnná, která je definována uvnitř jisté funkce, je vůči této funkci lokální proměnnou. Naproti tomu definiční příkaz vytvářející globální proměnnou se nachází mimo tělo jakýchkoliv funkcí. Mezi lokálními a globálními proměnnými existují tyto rozdíly:
Životní cyklus lokální proměnné je ohraničen životním cyklem funkce, v níž je lokální proměnná situována. Vzhledem k tomu, že lokální proměnná žije pouze v rámci jedné funkce, nemůže být sdílena více funkcemi. Je proto možné, aby byly v různých funkcích definovány lokální proměnné se shodným identifikátorem. To znamená, že kdybychom kromě hlavní funkce main měli ještě jednu funkci F, tak v tělech obou zmíněných funkcí by se mohl vyskytovat definiční příkaz int o;, jenž by zakládal celočíselnou proměnnou o.

Život globální proměnné je totožný s dobou běhu programu jazyka C++. Globální proměnná žije déle než lokální proměnná. Globální proměnná smí být sdílena napříč více funkcemi, ovšem je nutno zabránit situacím, kdy by hodnota globální proměnné mohla být nepatřičně modifikována.

Ačkoliv definované lokální proměnné nedisponují implicitními inicializačními hodnotami, překladač jazyka C++ garantuje implicitní inicializaci všech řádně definovaných globálních proměnných.

7. Jak vypadá management lokálních proměnných?

Odpověď: Správa lokálních proměnných je automatická a uskutečňuje se ve speciální paměťové oblasti, které se říká zásobník. Zásobník pracuje podle principů organizačního modelu LIFO, jenž umožňuje ze zásobníku odebrat pouze tu lokální proměnnou, která do něj byla uložena jako poslední. Jakmile se ukončí zpracování funkce, v níž jsou lokální proměnné definovány, zcela samočinně budou ze zásobníku odebrány a podrobeny explicitní destrukci.

8. Vysvětlete práci objektů cin a cout.

Odpověď: Objekty cin a cout představují pomocníky, jejichž prostřednictvím jsou v jazyce C++ realizovány vstupně-výstupní datové operace. Objekt cin je odpovědný za načtení vstupních dat, jejich konverzi do požadované podoby a uložení do cílové proměnné. Obecná forma syntaktického zápisu pro načtení dat do proměnné A pomocí objektu cin je následující: cin >> A;. Objekt cout provádí výstupní operace. Data, která chceme odeslat objektu cout ke zpracování, determinujeme takto: cout << A;. Oba objekty interně spolupracují s vstupně-výstupními datovými proudy, poněvadž jsou to právě tyto proudy, které realizují vstup a výstup dat. Naštěstí objekty cin a cout ukrývají implementaci činností, které provádějí. Tím chrání programátory před nízkoúrovňovými technickými detaily a umožňují jim pracovat na vyšší úrovni abstrakce.