Lekce 1.11
Pou₧φvßnφ prom∞nn²ch v programu


p°edchozφ lekce (1.10) obsah kurzu nßsledujφcφ lekce (1.12)

Jak jsme si ji₧ uvedli v d°φv∞jÜφch lekcφch, naz²vajφ se hodnoty ulo₧enΘ v pam∞ti prom∞nnΘ. Je to proto, ₧e jejich hodnoty mohou v programu zm∞nit. V programu musφte ka₧dou prom∞nnou p°ed jejφm prvnφm pou₧itφm nejprve pojmenovat, p°φpadn∞ definovat typ ulo₧enΘ hodnoty. Velmi zjednoduÜen∞ by se dalo napsat, ₧e typ prom∞nnΘ je bu∩ Φφslo, znakov² °et∞zec nebo logickß hodnota. Pokud systΘm vφ, s jak²m typem prom∞nnΘ mß pracovat, je schopen provßd∞t pr∙b∞₧nΘ kontroly hodnot a hlavn∞ znß, jakΘ mφsto mß urΦitΘ prom∞nnΘ v pam∞ti rezervovat.

Co je Φφslo, vφ urΦit∞ ka₧d². ╚φslo vÜak m∙₧e b²t pouze celΘ, p°φpadn∞ m∙₧e obsahovat takΘ desetinnou Φßst. Znakov² °et∞zec p°edstavuje seskupenφ libovoln²ch znak∙ - pφsmen. Logickß hodnota uchovßvß v²sledky dotazu a m∙₧e nab²vat pouze hodnot pravda nebo nepravda. Zßkladnφ p°ehled mo₧n²ch typ∙ prom∞nn²ch uvßdφ nßsledujφcφ p°ehled:


INTEGER - celoΦφseln² typ pro celß Φφsla
REAL    - Φφslo obsahujφcφ desetinnou Φßst
STRING  - °et∞zec znak∙ relativn∞ neomezenΘ dΘlky
CHAR    - jeden alfanumerick² znak
BOOLEAN - logickß prom∞nnß typu  BOOLEAN (True/False)
VARIANT - prom∞nnß s variabilnφm obsahem (nap°. Φφslo, °et∞zec)
ARRAY   - prom∞nnß strukturovanΘho typu s indexov²m p°φstupem
Datov² typ INTEGER je urΦen pro celß kladnß i zßpornß Φφsla. Neobsahuje proto desetinnou Φßst.

Datov² typ REAL se pou₧φvß pro vyjßd°enφ hodnot s pohyblivou °ßdovou Φßrkou. To znamenß ₧e obsahuje desetinnou Φßst Φφsla. Vznikß matematick²m d∞lenφm Φφsla typu integer, jeho₧ v²sledkem nenφ celΘ Φφslo.

Datov² typ CHAR je urΦen pro ulo₧enφ jednoho znaku. ZnakovΘ konstanty se vyjad°ujφ tak, ₧e se znak uzav°e do apostrof∙, nap°φklad 'A', '1', '&'. Zßpis '1' v tomto p°φpad∞ znamenß znak pro vyjßd°enφ Φφslice jedna nikoli Φφselnou hodnotu.

Datov² typ STRING p°edstavuje posloupnost znak∙ typu CHAR bezprost°edn∞ za sebou. Vytvß°φ tφm tzv. °et∞zec. ╪et∞zec musφ b²t ohraniΦen apostrofy nebo dvojitou uvozovkou. ╪et∞zec typu string m∙₧e mφt teoreticky neomezenou dΘlkou. Prakticky je vÜak omezen kapacitou volnΘ pam∞ti. Prov∞°ovßno bylo nap°φklad pou₧itφ °et∞zc∙ o dΘlce tΘm∞° 3 Mb.

Datov² typ BOOLEAN mß pouze dv∞ mo₧nΘ hodnoty a to True (pro stav pravda) a False (pro stav nepravda). Lze mu proto v programu p°i°adit bu∩ konkrΘtnφ hodnotu True nebo False, p°φpadn∞ v²sledek vyhodnocenφ logickΘho v²razu. LogickΘ v²razy najdou uplatn∞nφ zejmΘna v podmφn∞n²ch p°φkazech, p°φkazech cyklu apod. a probereme si je v n∞kterΘ z dalÜφch lekcφch.

Nejzajφmav∞jÜφ je typ VARIANT, kter² m∙₧e obsahovat libovolnou prom∞nou v²Üe uvedenΘho typu. Krom∞ ji₧ uveden²ch typ∙ m∙₧e ale obsahovat i pole prom∞nn²ch, se kter²mi je mo₧nΘ provßd∞t jednoduÜe rozsßhlΘ v²poΦty za pomoci indexovΘho p°φstupu. VÜechny prom∞nnΘ jsou ve skuteΦnosti vnit°n∞ typu VARIANT, doporuΦuje se ale zachovat pravidlo rozliÜovßnφ typu prom∞nn²ch z d∙vodu p°ehlednosti programu a mo₧nΘho pozd∞jÜφho d∙sledn∞jÜφho vy₧adovßnφ dodr₧enφ pou₧φvanΘho typu prom∞nn²ch.

Prom∞nnß typy ARRAY p°edstavuje datovou strukturu polo₧ek, kterΘ se vzßjemn∞ odliÜujφ pomocφ indexu. Jako index pole slou₧φ hodnoty urΦitΘho typu, kter² naz²vßme typem indexu pole a kter² je spolu s typem slo₧ek pole stanoven popisem typu pole. PoΦet slo₧ek pole je dßn a₧ dßle v programu p°i inicializaci pole.

V²Üe uveden² seznam typ∙ prom∞nn²ch slou₧φ pouze jako p°ehled mo₧n²ch hodnot. Ve skuteΦnosti jsou vÜechny prom∞nnΘ v jazyce KLONDAIK zpracovßvßny jako typ VARIANT. To znamenß, ₧e pou₧it² typ prom∞nnΘ zßvisφ ve skuteΦnosti na obsahu prom∞nnΘ. SouΦasn∞ s tφm je pro ka₧dou prom∞nnou podle jejφho obsahu urΦena mno₧ina mo₧n²ch operacφ s obsahem prom∞nnΘ. Nenφ nap°φklad mo₧nΘ sΦφtat Φφselnou prom∞nnou s °et∞zcovou prom∞nnou.

JeÜt∞ d°φve, ne₧ bude prom∞nnß v programu poprvΘ pou₧ita, musφ b²t deklarovßna. P°i deklaraci prom∞nnΘ se uvßdφ jmΘno prom∞nnΘ a p°φpadn∞ i typ prom∞nnΘ. Prom∞nnß musφ b²t deklarovßna jeÜt∞ p°ed sv²m prvnφm pou₧itφm ve v²poΦtech. V programu se p°ed deklaracφ prom∞nn²ch uvßdφ klφΦovΘ slovo VAR. V tomto bloku deklarace prom∞nn²ch nenφ mo₧nΘ pou₧φvat ₧ßdnΘ povely a p°φkazy jazyka KLONDAIK. V deklaraci prom∞nnΘ se definuje nßzev prom∞nnΘ (p°φpadn∞ jejich seznam odd∞len² Φßrkami) a typ prom∞nnΘ. Nßzev prom∞nnΘ musφ zaΦφnat pφsmenem a nesmφ obsahovat mezeru.

VyzkouÜejte si nßsledujφcφ p°φklad zobrazujφcφ zp∙sob deklarace prom∞nn²ch, dosazenφ hodnot, v²poΦty s prom∞nn²mi a v²pis hodnot prom∞nn²ch:


Unit variable;
interface
implementation

{deklarace prom∞nn²ch}
var a, b : Integer;
    r    : Real;
    s    : String;

begin; {program}
   a := 100;
   b :=   3;
   r := a/b;                {v²poΦet   hodnoty}
   s := 'OZOGAN KLONDAIK';  {p°i°azenφ hodnoty}
   Writeln(r);              {vypφÜe obsah prom∞nnΘ}
   Writeln(s);              {vypφÜe obsah prom∞nnΘ}
end;
end.
Prom∞nnΘ a, b jsou deklarovßny jako typ Integer, to znamenß, ₧e jsou urΦeny pro pouze celß Φφsla. Prom∞nnß r je typu real a m∙₧e proto obsahovat reßlnΘ Φφslo vΦetn∞ desetinn²ch mφst. Prom∞nnß s je °et∞zec. V programu jsme prom∞nnΘ nejprve v bloku s klφΦov²m slovem VAR deklarovali. Konec deklarace prom∞nn²ch nenφ nijak oznaΦen, je ukonΦen v₧dy deklaracφ jinΘho bloku. V naÜem p°φpad∞ bloku s programem.

Ve vÜech dßle uvßd∞n²ch p°φkladech program∙ bude uvßd∞na v₧dy plnß deklarace prom∞nn²ch, aΦkoliv nenφ nutnΘ uvßd∞t p°i deklaraci prom∞nnΘ jejφ typ. Proto je mo₧nΘ deklaraci prom∞nn²ch ve v²Üe uvedenΘm p°φkladu zjednoduÜit nßsledujφcφm zp∙sobem:


{deklarace prom∞nn²ch}
var a, b, r, s;
Jak ji₧ bylo uvedeno, je jazyk KLONDAIK ke sv²m u₧ivatel∙m velmi tolerantnφ a dovolφ p°i deklaraci prom∞nnΘ uvΘst i neznßm² typ prom∞nnΘ, ani₧ by byla p°i p°ekladu programu nahlßÜena chyba. Je dokonce mo₧nΘ ulo₧it do prom∞nnΘ zadanΘho typu hodnotu jakΘhokoliv jinΘho typu. Je to proto, ₧e jsou vÜechny prom∞nnΘ ve skuteΦnosti definovßny variabiln∞ tak, ₧e mohou obsahovat jak²koliv obsah. Pou₧φvanΘ typy prom∞nn²ch tedy vyjad°ujφ pouze doporuΦen² obsah. Bude vÜak vhodnΘ zvyknout si na pou₧φvßnφ uveden²ch typ∙. Dosßhnete tak p°φpadnΘho snadn∞jÜφho p°echodu k jin²m poΦφtaΦov²m jazyk∙m, kterΘ definice typ∙ p°esn∞ vy₧adujφ. Je takΘ mo₧nΘ, ₧e v dalÜφch verzφch jazyka KLONDAIK bude pou₧φvßnφ sprßvn²ch typ∙ prom∞nn²ch p°esn∞ vy₧adovßno.

Hodnotu prom∞nnΘ stanovφme jejφm p°i°azenφm. To se provede pomocφ dvojice znak∙ := mezi nimi₧ nesmφ b²t mezera. Na levΘ stran∞ je p°itom uvedena prom∞nnß, jejφ₧ hodnota mß b²t zm∞n∞na a na stran∞ pravΘ je uvedena p°i°azovanß hodnota. Hodnotu m∙₧eme uvΘst bu∩ p°φmo (Φφslo, °et∞zec) nebo jako v²raz. Co je to v²raz si p°esn∞ji probereme v dalÜφch lekcφch. Nynφ bude staΦit, pokud si budete pamatovat, ₧e v²raz m∙₧e b²t nap°φklad matematick² v²poΦet.

Deklarovanß prom∞nnß mß ihned po deklaraci v₧dy nulov², Φφseln² obsah. A₧ po p°i°azenφ konkrΘtnφ hodnoty se vnit°n∞ jejφ typ m∞nφ podle zadanΘho obsahu. P°i°adφte-li prom∞nnΘ °et∞zec, bude obsahovat alfanumerickΘ znaky. Po dosazenφ ΦφselnΘ hodnoty bude prom∞nnß bu∩ typu Integer (celΘ Φφslo) nebo Real (Φφslo s desetinami). SystΘm KLONDAIK si takto sßm zajiÜ¥uje vnit°nφ reprezentaci prom∞nn²ch. Vy sami budete muset pouze zajistit to, aby jste neprovßd∞li nap°φklad matematick² v²poΦet d∞lenφ s °et∞zcovou prom∞nnou.

Dosud jsme sestavovali naÜe programy tak, ₧e vykonßvaly pouze zadanou posloupnost akcφ bez mo₧nosti vynechßnφ n∞kter²ch akcφ. V nßsledujφcφ lekci se proto seznßmφme s mo₧nostφ rozd∞lenφ Φinnosti programu na zßklad∞ vyhodnocenφ zadanΘ podmφnky.


p°edchozφ lekce (1.10) obsah kurzu nßsledujφcφ lekce (1.12)

OZOGAN, 1 Mßje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz