<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C/DTD XHTML+Voice 1.2 /EN' 'http://www.voicexml.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xmlns:ev='http://www.w3.org/2001/xml-events'>
<head>
<link rel='canonical' href='http://pabi3.com/blog/programovanie-v-c-3-diel/' />
<link rel='stylesheet' href='http://pabi3.com/modules/items/voice.css' type='text/css' media='all' />
<form xmlns='http://www.w3.org/2001/vxml' id='title'>
<block>
The article Programovanie v C++ - 3. diel is written by Ribi
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='body'>
<block>
Serial o programovani v programovacom jazyku C++. V tretom diele si blizsie opiseme funkcie a zoznamime sa s premennymi.</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='full'>
<block>
V predchadzajucej casti sme si opisali, co je to funkcia, zoznamili sme sa so zakladnymi datovymi typmi jazykov C a C++. V tejto casti sa pozrieme na zubok velmi dolezitej sucasti
kazdeho programovacieho jazyka, premennym, a blizsie si vysvetlime funkcie.   Premenne  Premenne su oblasti v pamati urciteho typu, ktore mozu nadobudat nejaku hodnotu. Typ premennej moze byt akykolvek zakladny datovy typ, s ktorym sme sa oboznamili v ostatnom diele, alebo, ako sa neskor dozviete, aj typ nami vytvoreny. Deklaracia premennej vyzera nasledovne: __typ __nazov_premennej ; 
 int premenna1; // v pamati sa vyhradia 4B 
 bool premenna2; // v pamati sa vyhradi 1B Ked deklarujeme premennu, tak kompilatoru oznamime, ze existuje nejaka premenna nejakeho typu, ale pamat sa alokovat nebude. Na to, aby nam kompilator pozadovanu pamat vyhradil, musime premennu aj definovat, cize jej priradit hodnotu z jej oboru hodnot. int premenna1; // deklaracia 
 int premenna2 = 1; // definicia
Premenna1 je iba deklarovana, pretoze nie je inicializovana nijakou hodnotou. Zato premenna2 je inicializovana hodnotou 1, teda je definovana. Na uvedenom priklade vydime, ze prememenne mozno v C/C++ aj automaticky inicializovat (priradit im hodnotu). Este pripomeniem, ze znamienko "=" (rovna sa) je operatorom priradenia. int premenna1 = 0; // celociselna 0 
 float premenna2 = 0.0f; // realna 0 
 bool premenna3 = true; V prvom pripade priradujeme premennej premenna1, ktora je typu int celociselnu hodnotu 0. V druhom mame premennu typu float, pricom jej priradime hodnotu 0.0f, cize tiez nula, ale realneho charakteru. I ked to vyzera tak, ze medzi tymito dvoma nulami nie je prakticky ziadny rozdiel, je tam! Keby ste chceli priradit 0.0f premennej typu int, niektore kompilatory by mohli vyhadzovat varovanie o nekompatibilite datovych typov, popripade o moznej strate dat, alebo nejake podobne hlasenia. int premenna1 = 0.0f; // bude obsahovat hodnotu 0 

int premenna2 = 0.4f; // bude obsahovat hodnotu 0! 
 int premenna3 = 0.6f; // bude obsahovat hodnotu 1! Vsimnite si, ze ked premennej celociselneho typu priradite realnu hodnotu, do celocilenej premennej sa ulozi jej zaokruhlena verzia (zaokruhluje sa podla normalnych pravidiel matematiky). V opacnom pripade, cize keby ste priradovali premennej realneho typu celociselnu hodnotu sa nic podobne stat nemoze, cele cisla su totiz podmnozinou realnych cisel.  Premenne sa daju rozdelit nielen podla typu, ale aj podla toho, ci su globalne, alebo lokalne. Globalne premenne su take, ktore deklarujeme/definujeme mimo akejkolvek funkcie, teda v tele programu. Existuju pocas celeho behu programu, od jeho zaciatku az po jeho koniec. Lokalne su take, ktore su deklarovane/definovane v ramci funkcie. Existuju preto len po dobu vykonavania danej funkcie. void globalna; 
 
 void main() { 
 void lokalna; 
 }  Funkcie 
Uz sme sa naucili, ze kazdy program napisany v C/C++ musi obsahovat funkciu &#8222;main()&#8220; (popripade jej ekvivalent). Tato funkcia sa v 99.9% pripadov vyskytuje len v definovanej podobe. To vsak pre ostatne funkcie platit nemusi. V C/C++ preto mozeme ako premenne, tak aj funkcie deklarovat a definovat. Deklaracia funkcie je vlastne len uvedenie jej typu a nazvu bez toho, aby sme uvadzali telo: int func(); // telo nie je uvedene Definicia vyzera takmer rovnako, len pribudnu zatvorky a telo funkcie: int func() { 
 // typ a nazov return 0; 
 // telo } Ak sa vam zda, ze funkcie a premenna zdielaju mnoho spolocnych vlastnosti, tak mate pravdu. Potvrdzuje to aj to, ze funkcie mozu byt takisto lokalne a globalne. void globalna() {} // globalna funkcie 
 
 void main() { 
 void lokalna() {} // lokalna funkcia 
 }
V tomto priklade definujeme funkciu lokalna() v ramci funkcie main(). To znamena, ze bude pristupne iba a len z funkcie main(). Funkcia globalna() bude dostupna aj z funkcie main(), aj z funkcie lokalna().   Rozsah platnosti  Premenne aj funkcie maju svoj rozsah platnosti, cize oblast, v ktorej funguju a v ktorej nie. Kompilator C/C++ kompiluje zhora nadol. Keby sme teda vo funkcii globalna() zavolali funkciu lokalna(), kompilator by nam oznamil chybu. Situaciu vam blizsie objasni tento vypis: /* volame funkciu lokalna(), no ta je definovana az pod touto, preto je neznama */ 
 void globalna() { 
 lokalna(); 
 } 
 
 /* v poriadku, pretoze funkcia globalna() je definovana nad funkciou lokalna() */ 
 void main() { 
 lokalna() { 
 globalna(); 
 } 
 }
V niektorych pripadoch by bolo zdlhave obchadzat toto "obmedzenie", preto je v C/C++ mozne funkcie preddefinovat. Preddefinovat funkciu znamena deklarovat ju nad funkciou, v ktorej budeme danu funkciu volat, pricom jej definicia bude uvedena pod funkciou, z ktorej bude volana. Mozno to znie zlozito, ale priklad vam vsetko objasni. /* tu funkciu lokalna() preddefinujeme */ 
 void lokalna(); 
 /* OK, volame funkciu lokalna(), ktora je predefinovana */ 
 void globalna() { 
 lokalna(); 
 } 
 
 /* a tu je definicia funkcie lokalna() */ 
 void main() { 
 lokalna() {} 
 } V pripade premennych prebieha vsetko presne tak isto - premenna, ktora je deklarovana/definovana pod premennou, ktora ju vola pre nu neexistuje. Hovorit o preddefinovani premennych asi ani nema zmysel... int horna = dolna; // chyba, dolna nie je dostupna 
 int dolna = horna; // OK 
... 
 int dolna; // deklarujeme premenuu dolna 

int horna = dolna; // teraz je uz vsetko OK 
 dolna = horna; Zaver  Oboznamili sme sa s mnohymi faktami a kedze nechcem, aby ste si k programovaniu vytvorili odpor, tak som sa rozhodol, ze toto by na dnes aj mohlo stacit ;-). Mozno sa vam niektore veci budu zdat zlozite na pochopenie, ale vedze, ze je to len a len zdanie. Akonahle si to vyskusate v praxi, hned vsetko pochopite. V nasledujucom diele za budeme zaoberat operatormi a urobime si aj prvy jednoduchy programcek. Tesim sa na dalsie stretnutie s vami a nezabudajte, ak mate nejake pripomienky k serialu, napiste mi email, alebo sa vyjadrite vo fore. Do programovania.</block>
</form>
<base href='http://pabi3.com/' />
<title>Programovanie v C++ - 3. diel</title>
</head>
<body ev:event='load' ev:handler='#title'>
<a href='http://pabi3.com/blog/programovanie-v-c-3-diel/' title='Návrat'>Návrat</a>
<h1 style='padding:0.5em;'>Programovanie v C++ - 3. diel</h1>
<ul>
<li ev:event='click' ev:handler='#body'>Speak introduction</li>
<li ev:event='click' ev:handler='#full'>Speak full</li>
</ul>
</body>
</html>

