home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 1997 November
/
PCWorld_1997-11_cd.bin
/
software
/
programy
/
ozogan
/
KURZ.602
< prev
next >
Wrap
Text File
|
1997-08-24
|
106KB
|
2,148 lines
@CT 0
@LM 1
@RM 65
@PL 62
@TB -----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T
@MT 2
@MB 2
@PO 5
@PN 1
@OP
@FO --- # ---
@LH 6
KURS PROGRAMOVÅNï A POUÆITï PROGRAMU OZOGAN KLONDAIK
ùvod:
Pro ty, kte⌐í dosud nikdy neprogramovali na poçítaçi se mûæeì
zdát pojem programování záhadnÿ a tajemnÿ. Jedná se v¿ak o zcelaì
bêænou vêc, kterou vlastnê v¿ichni známe jiæ od dêtskÿch let.ì
Urçitê jste si jiæ mnohokrát ⌐ekli: "ráno pûjdu do ¿koly (práce),ì
odpoledne na koupali¿tê a veçer se budu dívat na televizi". Tímì
jste si sestavili program dne. Definovali jste posloupnost akcí,ì
které provedete. Mûæete si v¿ak také stanovit podmínky programu.ì
Nap⌐íklad pokud bude odpoledne hezky, pûjdete na koupali¿tê,ì
jinak (bude pr¿et) si budete çíst nebo se uçit. V nêkterÿchì
p⌐ípadech si mûæete stanovit opakování nêkterÿch akcí. Nap⌐íkladì
æe se budete uçit tak dlouho, dokud to nepochopíte. Jak vidíte,ì
programovat uæ umíte. Sestavujete si program dne, vÿuky,ì
dovolené. Nyní uæ zbÿvá pouze nauçit se p⌐evést program doì
podoby, kterou zvládne i poçítaç.
Poçítaçovÿ program p⌐edstavuje definici posloupnosti akcí,ì
podmínky jejich provedení a opakování. Aby byl poçítaç schopenì
poæadované çinnosti provádêt, musíte mu je zadat v podobê, kteréì
on rozumí. Pokud budete chtít angliçanovi ⌐íct svûj program dne,ì
budete mu jej muset p⌐eloæit do angliçtiny. Stejnê tak musíteì
p⌐eloæit program ze slovní podoby do poçítaçového jazyka. Poçítaçì
potom bude çíst jednu ⌐ádku programu za druhou a vykonávat to, coì
jste mu zadali.
1.lekce - instalace, spu¿têní a ukonçení programu
2.lekce - základy ovládání programu
3.lekce - práce s p⌐íkazovÿm a textovÿm vÿstupním oknem
4.lekce - p⌐íkaz WRITELN, matematické vÿpoçty
5.lekce - grafické vÿstupní okno, grafickÿ editor
6.lekce - ovládání grafického okna z p⌐íkazového okna
7.lekce - vÿstup do grafického okna
8.lekce - první program, procedura main
9.lekce - editace programu
10.lekce - promênné a jejich typy
11.lekce - deklarace a pouæívání promênnÿch
12.lekce - podmínky v programu, logické vÿrazy
13.lekce - programové cykly (FOR, REPEAT, UNTIL)
14.lekce - zadání vstupních hodnot, tisk vÿsledkû
15.lekce - vícenásobné vêtvení programu
16.lekce - struktura programu
17.lekce - deklarace a pouæívání procedur
18.lekce - deklarace a pouæívání funkcí
19.lekce - lokální a globální promênné
20.lekce - rekurze v programu
21.lekce - návrh a sestavení programu
22.lekce - ladící a animaçní reæim programu
1.lekce - instalace, spu¿têní a ukonçení programu
Postup instalace programu záleæí na verzi programu, kterou máteì
k dispozici a na pouæitém zdrojovém médiu. Demoverze, kterou máteì
moænost získat na internetu je ¿í⌐ena ve zkomprimovaném formátuì
v souboru KLONDAIK.ZIP a staçí ji pouze "rozbalit" do libovolnéhoì
adresá⌐e na disku poçítaçe. V tomto p⌐ípadê se nezakládáì
programová skupina ve Windows a spu¿têní programu je nutnéì
provést spu¿têním souboru KLONDAIK.EXE. Demoverze zabírá na diskuì
asi 1 Mb prostoru.
Demoverze ¿í⌐ená na disketách i plná verze programu obsahujeì
jiæ instalaçní program. Program se dodává na jedné disketêì
formátu 3,5" HD. Instalace se spustí z diskety p⌐íkazemì
INSTALL.EXE. Zobrazí se vám ⌐ídící instalaçní panel, ve kterémì
musíte zadat nejprve adresá⌐ pro instalaci programu. Standardnêì
je pro instalaci nastaven adresá⌐ C:\OZOKLOND\ pro demoverzi,ì
p⌐ípadnê C:\OZOKLON2 pro plnou verzi programu. Cílovÿ diskì
i adresá⌐ je moæné zmênit, p⌐esto v¿ak doporuçujeme zachovatì
p⌐eddefinované jméno adresá⌐e. Kopírování souborû do zadanéhoì
adresá⌐e se zahájí po stisku tlaçítka "Instalace". Program zabíráì
na disku asi 1 Mb prostoru. Po zkopírování souborû je nabídnutaì
moænost zaloæení skupiny programû Windows. Pokud budeteì
souhlasit, zaloæí se skupina OZOGAN, do které se nadefinujeì
spu¿têní programu KLONDAIK, p⌐ípadnê prohlíæení helpu k programu.
Pro rozli¿ení p⌐esné definice programu OZOGAN KLONDAIK odì
editovaného a ladêného programu bude v následujícím textu u v¿echì
lekcí uvádên program OZOGAN KLONDAIK jako systém a pod pojmemì
program se bude rozumêt ladênÿ a editovanÿ uæivatelûv program.
Systém se startuje po dokonçené instalaci spu¿têním souboruì
OZOKLOND.EXE (demoverze), p⌐ípadnê OZOKLON2.EXE (plná verzeì
programu). P⌐i prvním spu¿têní systému je integrované uæivatelskéì
prost⌐edí nastaveno do standardního stavu.
Program je moæné ukonçit buâ volbou z menu Soubor/Ukonçitì
program, p⌐ípadnê ikonou z toolbaru. Pokud je editován programì
a zmêny nebyly dosud uloæeny, budete dotázáni systémem na uloæeníì
zmên. P⌐i ukonçení programu se provede uloæení rozloæení okenì
integrovaného prost⌐edí do inicializaçního souboru OZOKLON*.INIì
(dle druhu verze programu), kterÿ se nachází v adresá⌐i Windows.ì
P⌐i dal¿ím spu¿têní programu bude potom obnoven stav rozloæeníì
jednotlivÿch oken na pracovní plo¿e systému.
2.lekce - základy ovládání programu
Systém OZOGAN KLONDAIK je aplikace Windows a proto je ovládáníì
programu pod⌐ízeno tomuto standardu. Systém je ovládán z menu,ì
çasto pouæívané volby jsou p⌐itom p⌐ístupné i z toolbaru pomocíì
ikon, p⌐ípadnê pomocí funkçních kláves. Ve¿keré akce probíhajíì
v nêkolika oknech s p⌐esnê definovanÿm urçením. Celá práce seì
systémem probíhá v nêkolika reæimech dle kterÿch jsou vyuæívánaì
p⌐íslu¿ná okna. Okna lze na plo¿e obrazovky uspo⌐ádat podleì
aktuální pot⌐eby. Okna je moæné minimalizovat, nelze je v¿akì
æádnÿm zpûsobem zru¿it.
Nejçastêji pouæívané okno je okno s programem, které obsahujeì
vyvíjenÿ a ladênÿ program. V dal¿ím, p⌐íkazovém oknê je moænéì
zadávat p⌐ímo p⌐íkazy jazyka bez nutnosti spu¿têní programu.ì
Vÿsledky programu jsou zobrazovány buâ v textovém nebo grafickémì
vÿstupním oknê. P⌐i krokování programu je moæné zobrazovat stavì
promênnÿch v oknê sledování promênnÿch. Pomocnou funkci má oknoì
text, ve kterém je moæné zobrazit libovolnÿ textovÿ soubor.ì
Nêkterá z oken mají svou vlastní sadu ikon umístênÿch v toolbaru,ì
kterÿ se zobrazí po aktivaci okna v jeho horní li¿tê.
Okna mûæete po pracovní plo¿e libovolnê p⌐epínat, posouvat,ì
zvêt¿ovat je çi zmen¿ovat. P⌐epínání oken je moæné kliknutím naì
libovolnou viditelnou çást okna. Po kliknutí se stane p⌐íslu¿néì
okno aktivní. Pokud není okno viditelné, pouæijte menu Okna, kdeì
zvolíte poæadované okno. V dal¿ích lekcích se nauçíte, æe jeì
moæné zviditelnit poæadované okno i p⌐íkazem z programu.ì
Kliknutím na p⌐íslu¿nou ikonu v pravém horním rohu okna je moænéì
okno maximalizovat, p⌐ípadnê minimalizovat. Okno se p⌐esouváì
nejlépe my¿í, kdy je uchopíte za horní li¿tu a p⌐esunete naì
poæadované místo. Zmêny velikosti okna dosáhnete po uchopeníì
pravého dolního rohu okna a nastavení na poæadovanou velikost.
Vædy p⌐i spu¿têní systému je nastaven editaçní reæim, ve kterémì
je moæné editovat vytvá⌐enÿ program, p⌐ípadnê zadávat p⌐íkazyì
z p⌐íkazového okna. Po spu¿têní editovaného programu je nastavenì
provozní reæim, ve kterém je provozována ladêná aplikace.ì
Zvlá¿tním druhem provozního reæimu je potom ladící reæim, veì
kterém lze krokovat program a amimaçní reæim, p⌐i kterém je moænéì
zobrazovat prûbêh çinnosti programu. Kaædÿ reæim má sváì
specifika, která budou popsána v následujících lekcích.
Systém obsahuje kontextovou nápovêdu, která je dostupnáì
v nêkolika stupních. P⌐i vÿbêru volby z menu je krátká nápovêdaì
k vybrané volbê zobrazována ve stavovém ⌐ádku v dolní çástiì
systému. Tzv. bublinová nápovêda je zobrazována po najetí my¿í naì
ikony v toolbaru. Nejobsáhlej¿í nápovêda se zobrazí po stiskuì
klávesy F1. Jedná se o hypertextovÿ dokument s provázanÿmi odkazyì
na zvolená hesla. Zde uvádêné p⌐íklady programû máte moænost siì
do systému z nápovêdy p⌐etáhnout pomocí blokového p⌐esunu p⌐esì
schránku Windows. To provedete tak, æe najedete v nápovêdê my¿íì
na zaçátek ukázky programu, stisknete levé tlaçítko my¿i, dræíteì
jej stisknuté a p⌐etáhnete my¿ na konec textu p⌐íkladu. Tamì
tlaçítko my¿i uvolníte. Stiskem kláves Ctrl+C se p⌐evede taktoì
oznaçenÿ blok textu do schránky Windows. Nyní se p⌐epnete do oknaì
s programem a stiskem kláves Ctrl+V p⌐evedeme obsah schránky.
K ovládání programu je vhodné pouæívat my¿. Vêt¿ina voleb jeì
sice dostupná souçasnê z menu i my¿í, p⌐esto je v¿ak ovládáníì
my¿í mnohem p⌐íjemnêj¿í a operativnêj¿í. Pokud se v dal¿ím textuì
pouæívá my¿, p⌐edpokládá se levé tlaçítko.
3.lekce - práce s p⌐íkazovÿm a textovÿm vÿstupním oknem
Nejprve si ukáæeme, jak se dají velmi jednodu¿e zadávat systémuì
p⌐íkazy bez zápisu programu. Najdête na pracovní plo¿e oknoì
nazvané p⌐íkazy a uçiñte je aktivním - kliknête na nêj my¿í.ì
Pokud není okno viditelné , p⌐ípadnê je minimalizované, mûæeteì
zvolit z menu volbu Okna/P⌐íkazy nebo stiskem kláves Ctrl+F2.ì
Upravte my¿í velikost okna tak, aby zabíralo levou polovinuì
obrazovky. Obdobnÿm zpûsobem nastavte okno Vÿstup-text do pravéì
poloviny obrazovky. P⌐epnête ze zpêt do p⌐íkazového okna.
Okno p⌐íkazy se podobá textovému editoru. Má v¿ak velmiì
dûleæitou vlastnost. Pokud napí¿ete v oknê libovolnÿ textì
a stisknete klávesu ENTER, pokusí se systém ihned napsanÿ ⌐ádekì
interpretovat jako známÿ p⌐íkaz. To znamená, æe systém si p⌐eçteì
text ⌐ádku, na kterém stál kurzor a zji¿ƒuje, zda se jedná o jemuì
známÿ povel nebo p⌐íkaz. Pokud ano, povel nebo p⌐íkaz provede.ì
Proto se toto okno nazÿvá p⌐íkazové.
P⌐íkazy a povely jsou p⌐itom pro systém instrukce, co máì
vykonat. P⌐íkazem je vêt¿inou oznaçen p⌐ímÿ hlavní povel systému.ì
P⌐íkazy jsou v programech psány velkÿmi písmeny. Jako povely jsouì
oznaçovány doplñkové p⌐íkazy, které jsou zabudovány jako podpûrnéì
akce. Jsou psány malÿmi písmeny s velkÿmi písmeny na poçátkuì
slova. Pokud jsou názvy povelû uvedeny z více slov, nesmí bÿtì
mezi nimi uvedeny mezery.
Napi¿te nyní v p⌐íkazovém oknê slovo BEEP a stisknête klávesuì
ENTER. Systém zjistí, æe p⌐íkaz BEEP je pokyn, pro pípnutí.ì
Zajistí proto, æe reproduktor poçítaçe krátce pípne. Takto systémì
interpretoval vámi zadanÿ p⌐íkaz do podoby srozumitelné proì
poçítaç. Interpretace proto znamená p⌐evedení p⌐íkazu nebo ⌐ádkuì
programu do formy srozumitelné pro za⌐ízení poçítaçe (obrazovka,ì
tiskárna ...). Takto je v systému OZOGAN KLONDAIK interpretovánì
kaædÿ ⌐ádek programu. Pokud je nêkterÿ ⌐ádek nêkolikrát opakován,ì
provádí se i opakovanê jeho interpretace. Takovÿm systémûm seì
proto ⌐íká interprety. Jiné systémy p⌐ekládají zdrojovÿ programì
pouze jednou p⌐ímo do spustitelné podoby. To jsou kompilátoryì
a bÿvají rychlej¿í. Neumoæñují ale interaktivní práci uæivateleì
se systémem. Proto jsou pro zaçátky programování vhodnêj¿íì
interprety, které vám umoæní lépe a rychleji proniknout do tajûì
programování.
V p⌐íkazovém oknê máte moænost vyzkou¿et si mnoho p⌐íkazûì
a povelû systému OZOGAN KLONDAIK, aniæ napí¿ete jedinou ⌐ádkuì
programu. Pokud udêláte chybu, systém vás na to upozorní a vyì
máte moænost ihned chybu opravit bez nutnosti kompilace programu.ì
Zapomenete-li nap⌐íklad napsat ve vÿ¿e uvedeném p⌐íkazu BEEPì
jedno 'E', oznámí vám systém, æe uvedenÿ p⌐íkaz nezná. Najedeteì
proto kurzorem na chybné místo, provedete opravu a po stiskuì
klávesy ENTER se jiæ p⌐íkaz vykoná.
Jistê jste si jiæ v¿imli, æe klávesa ENTER neukonçí na místêì
kurzoru ⌐ádek, jak to bÿvá u textovÿch editorû. ₧ádek zûstaneì
celÿ zachován a kurzor se automaticky p⌐esune na zaçátekì
prázdného ⌐ádku za p⌐edchozí p⌐íkazy. Pokud zkusíte zapsat p⌐íkaz
WRITELN("KLONDAIK");
vypí¿e se do textového vÿstupního okna text KLONDAIK. Moænostmiì
p⌐íkazu WRITELN je vênována následující lekce. Nyní bude staçit,ì
pokud si zapamatujete, æe p⌐íkaz WRITELN v uvedeném tvaru vypí¿eì
obsah textu uvedeného mezi uvozovkami do textového vÿstupníhoì
okna. Mezi uvozovky mûæete zkusit p⌐itom zadat libovolnÿ jinÿì
text. Zkuste text mezi uvozovkami nêkolikrát zmênit a zmêny vædyì
ode¿lete klávesou ENTER. Jistê si v¿imnete, æe pûvodní text p⌐edì
opravou zûstane v p⌐íkazovém oknê zachován a p⌐íkaz s novÿmì
textem bude doplnên na konec p⌐íkazového okna. Díky tomu máteì
vædy p⌐ehled o historii zadávanÿch p⌐íkazû. Neprovedete-liì
v textu æádnou zmênu a p⌐íkaz opakovanê ode¿lete, nebude stejnÿì
p⌐íkaz zadávanÿ beze zmêny za sebou v historii p⌐íkazového oknaì
za sebou znovu opakován.
Historii zadávanÿch p⌐íkazû mûæete libovolnê pouæívat bezì
ohledu na po⌐adí pûvodního zadávání. Pokud provedete v nêkterémì
⌐ádku p⌐íkazového okna libovolnou zmênu a následnê stiskneteì
klávesu ESC, p⌐íkaz se neprovede a text upraveného ⌐ádku budeì
uveden do pûvodního stavu. P⌐íkazy vyzkou¿ené v p⌐íkazovém oknêì
máte moænost p⌐es schránku Windows následnê p⌐evést do programu.
Rûznÿmi pokusy s p⌐íkazovÿm oknem jste dosáhli toho, æe máte veì
vÿstupním textovém oknê uvedeny rûzné texty. S kaædÿm pouæitímì
p⌐íkazu WRITELN p⌐ibude na konec okna jeden ⌐ádek. To p⌐ipomínáì
pouæití psacího stroje, kdy také není moæné se vracet zpêt.ì
V dávnÿch dobách prahistorie vÿpoçetní techniky sálovÿch poçítaçûì
se podobné psací stroje pouæívaly pro komunikaci s poçítaçem.ì
Tehdy se jim ⌐íkalo konzole - anglicky console. Uvedené anglickéì
oznaçení je proto také pouæíváno pro p⌐íkazy p⌐ímo souvisejícíì
s obsluhou textového vÿstupního okna. Pokud nap⌐íklad zkusíteì
zadat v p⌐íkazovém oknê p⌐íkaz ConsoleClear, zjistíte, æe zru¿íì
obsah textového vÿstupního okna. Obdobného efektu dosáhnete,ì
pokud se p⌐epnete do textového vÿstupního okna a stiskneteì
v pod⌐ízeném toolbaru uvedeného okna ikonu znázorñující prázdnouì
stránku. Po kontrolním dotazu bude obsah textového vÿstupníhoì
okna zru¿en.
V následující kapitole se seznámíte, jak vypisovat v textovémì
vÿstupním oknê za pouæití p⌐íkazu WRITELN i jiné informaceì
a hodnoty.
4.lekce - p⌐íkaz WRITELN, matematické vÿpoçty
V p⌐edchozí kapitole jste se nauçili zadávat z p⌐íkazového oknaì
p⌐íkazy umoæñující vypsat do textového vÿstupního okna znaky.ì
Nyní si ukáæeme, jak vypisovat çísla a aritmetické vÿpoçty.
S p⌐íkazem WRITELN jste jiæ mêli moænost se krátce seznámit.ì
Pouæívá se na vÿpis hodnot. Poæadovaná hodnota se p⌐itom uvádêlaì
v závorce. Pokud se u p⌐íkazu WRITELN uvedou pouze prázdnéì
závorky, nebude nic vypsáno a dal¿í vÿstup do textovéhoì
vÿstupního okna bude provádên na novou ⌐ádku. WRITELN je pouzeì
p⌐íkaz kterÿ uvádí systému, æe má nêco vypsat. Uvedené nêco seì
p⌐itom uvádí v závorce jako parametr p⌐íkazu. Pokud uvedete znakyì
v uvozovkách nebo apostrofech, p⌐evedou se uvedené znaky doì
textového vÿstupního okna. Pokud by jste chtêli vypsat çíslo,ì
musíte zadat p⌐íkaz v následujícím tvaru:
WRITELN(10);
Staçí tedy napsat jako parametr p⌐íkazu do závorek p⌐ímoì
poæadované çíslo. Çíslo se vypí¿e se zarovnáním od levého krajeì
okna. Pokud budete chtít ponechat zleva odsazené místo, budeteì
muset zadat poæadovanou délku vypsaného çísla v poçtech znakû:
WRITELN(10:5)
Délka vypsaného çísla je v tomto p⌐ípadê pêt znakû. To jeì
parametr uvedenÿ v p⌐íkazu za dvojteçkou a udává poçet místì
zobrazení çísla. Nejedná se proto o vÿpoçet dêlení. Vÿpoçty jeì
ale samoz⌐ejmê také moæné zadat. V tomto p⌐ípadê by jste proì
dêlení museli zadat:
WRITELN(10/5:5)
Jako vÿsledek bude zobrazeno çíslo 2 o délce pêti znakû. Zkusteì
si sami zadat souçet, rozdíl, p⌐ípadnê násobek çísel:
WRITELN(10+5:5);
WRITELN(10-5:5);
WRITELN(10*5:5);
Zobrazí se vædy vÿsledek aritmetického vÿrazu o délce pêti znakû.ì
P⌐ekvapeni budete moæná pokud zadáte p⌐íkaz:
WRITELN(10/3:5);
Sami jistê poznáte, æe nêco není v po⌐ádku. Ztratila se desetinnáì
çást vÿsledku. Aæ dosud jsme pracovali pouze s celÿmi çísly.ì
Vÿsledky se také vædy zobrazují standardnê jako celá çísla.ì
Zkuste nyní následující p⌐íkaz:
WRITELN(10/3:5:2);
Zobrazí se jiæ vÿsledek s uvedením dvou desetinnÿch míst. Je toì
proto, æe jsme za dvojteçkou uvedli délku vypisovaného çíslaì
a souçasnê za dal¿í dvojteçkou poçet zobrazenÿch desetinnÿchì
míst. Zkuste si sami dal¿í p⌐íklady a seznamte se zadávánímì
uvedenÿch parametrû.
S moæností vÿpisu nenumerickÿch údajû, tedy znakû jste se jiæì
seznámili v p⌐edchozí lekci. Seskupení nêkolika znakû se p⌐itomì
nazÿvá ⌐etêzec a také tak jiæ bude v následujícím textu uvádêno.ì
Pokud by jste chtêli jedním p⌐íkazem WRITELN vypsat najednouì
⌐etêzec i znaky, mûæete tak uçinit uvedením nêkolika parametrûì
oddêlenÿch çárkou:
WRITELN('Vÿsledek vÿpoçtu je:', 10/3:5:2);
Stejnê tak mûæete vypsat samoz⌐ejmê i nêkolik çísel neboì
⌐etêzcû oddêlenÿch v p⌐íkazu çárkami. To vám dovolí ve spojeníì
s moæností uvádêní délky çísel vhodnou grafickou úpravu textu:
WRITELN('Seznam vÿsledkû:', 12/3:5:2, 45-26:5:2, 3*3:5:2);
P⌐íkaz WRITELN provede po svém ukonçení vædy p⌐echod na novouì
⌐ádku. Pokud v¿ak budete pot⌐ebovat, aby dal¿í vÿpis pokraçovalì
na stejné ⌐ádce, mûæete pouæít p⌐íkazu WRITE. Ten neprovádíì
ukonçení ⌐ádku, následující vÿpis je zahájen od pozice ukonçeníì
p⌐íkazu WRITE. Moænosti a parametry p⌐íkazu WRITE jsou p⌐itomì
totoæné jako pro uvádênÿ popis p⌐íkazu WRITELN.
Vÿ¿e uvedenÿ popis pouæití p⌐íkazu WRITELN se vám mûæe zdát naì
první pohled sloæitÿ. Je v¿ak nutné jej p⌐esnê dodræet. Systém siì
hlídá dûslednê jeho dodræování a v p⌐ípadê chyby odmítne p⌐íkazì
vykonat. P⌐esná definice jakéhokoliv pouæívaného jazyka se nazÿváì
syntaktická pravidla. Pokud zadá uæivatel chybnÿ zápis, dojdeì
k poru¿ení syntaxe a odmítnutí systému k vykonání chybnéhoì
zadání. Byla proto sestavena pravidla pro pouæití v¿ech p⌐íkazû.ì
Uvádíme zde pro p⌐edstavu zkrácenou definici syntaxe zápisuì
p⌐íkazu WRITELN tak, jak byla vÿ¿e popsána:
WRITELN( [ vÿraz [:délka] [:desetiny] ] ) [;]
V zápise znamená vÿraz libovolnÿ vÿraz, Nap⌐íklad ⌐etêzec,ì
çíslo nebo vÿpoçet. ùdaje v hranatÿch závorkách se nemusí uvádêt.ì
Pokud proto uvedeme dvojteçku následovanou çíslem, jedná seì
o délku vypisovaného çísla. P⌐ípadná dal¿í dvojteçka s çíslemì
uvádí poçet desetinnÿch míst. Pokud si dob⌐e prohlédnete uvedenÿì
syntaktickÿ zápis zjistíte, æe mezi závorkami nemusíte nicì
uvádêt. To je dáno levou hranatou závorkou uvedenou ihned zaì
levou kulatou závorkou. Ukonçení této volitelné çásti jeì
provedeno pravou hranatou závorkou p⌐ed pravou kulatou závorkou.ì
Pokud proto uvedete p⌐íkaz:
WRITELN();
nevypí¿e se æádnÿ text, dojde ale k vynechání prázdného ⌐ádku.ì
St⌐edník uvedenÿ v hranatÿch závorkách na konci p⌐íkazu neníì
nutné uvádêt. V popisu syntaxe je uveden, protoæe v klasickémì
jazyku Pascal musí bÿt kaædÿ ⌐ádek programu ukonçen st⌐edníkem.ì
Uvedenÿ zpûsob popisu syntaxe je pouæit u popisu v¿ech p⌐íkazûì
a knihoven procedur a funkcí uvedenÿch v manuálu i helpuì
k programu.
Pokud jste se dokonale seznámili s pouæitím p⌐íkazu WRITELN,ì
mûæete ve spolupráci s manuálem k programu vyzkou¿et nêkteréì
funkce matematické knihovny. Dále uvedené p⌐íklady uvádêjí naì
konci ⌐ádku mezi sloæenÿmi závorkami komentá⌐e, které nemají naì
vÿsledek æádnÿ vliv. Ve skuteçnosti je proto nemusíte vçetnêì
sloæenÿch závorek uvádêt.
WRITELN(Abs(-55)); {absolutní hodnota çísla}
WRITELN(Cos(PI)); {kosinus Ludolfova çísla PI}
WRITELN(Max(3,10); {maximální hodnota zadanÿch çísel}
WRITELN(Min(3,10); {minimální hodnota zadanÿch çísel}
WRITELN(Random(500); {náhodné çíslo do 500}
WRITELN(Round(12.82); {zaokrouhluje çíslo}
WRITELN(Sqr(5); {vrací druhou mocninu çísla}
WRITELN(Sqrt(16); {vrací druhou odmocninu çísla}
WRITELN(Trunc(12.82); {od⌐ízne desetinou çást çísla}
Jak vidíte, mûæete pouæít p⌐íkaz WRITELN jako docela chytrouì
kalkulaçku. V souçasnosti p⌐i pouæití pouze p⌐íkazového okna máì
ale jednu dosti velkou vadu. Nemá æádnou pamêƒ, do které by jsteì
si zaznamenali hodnoty mezivÿsledkû. V nêkteré z dal¿ích lekcí,ì
kdy budeme probírat deklaraci promênnÿch v programu se aleì
nauçíme i to.
V následujících lekcích se seznámíte s dal¿ím vÿstupním oknem,ì
které se pouæívá pro vÿstup a kreslení grafiky.
5.lekce - grafické vÿstupní okno, grafickÿ editor
V p⌐edchozích kapitolách jsme se nauçili pouæívat p⌐íkazovéì
okno a textové vÿstupní okno. Systém ale obsahuje i dal¿í, velmiì
zajímavé vÿstupní okno. Je to grafické vÿstupní okno, které vámì
umoæní do své plochy libovolnê kreslit.
Uzav⌐ete d⌐íve pouæívané textové vÿstupní okno. Mûæete takì
uçinit kliknutím na uzavírací ikonu, p⌐ípadnê mûæete zadatì
v p⌐íkazovém oknê povel ConsoleHide. Dále aktivujte grafickéì
vÿstupní okno. To lze provést z menu volbou Okna/vÿstup grafika.ì
Okno je moæné také zobrazit povelem ImageShow. Zobrazené oknoì
upravte opêt tak, aby pokrÿvalo pravou polovinu obrazovky.
Jak vidíte, kaædé okno je pro úçely ovládání z programuì
pojmenováno vÿznamovê dle anglického názvosloví. Existují p⌐itomì
povely pro zobrazení (anglicky show) a ukrytí (anglicky hide)ì
okna. Moæná se pozastavujete nad tím, æe u çeského programu seì
pouæívá cizojazyçnÿch termínû. Je to proto, æe systém OZOGANì
KLONDAIK mûæe slouæit jako nástroj pro vÿuku programování. Protoì
je podle nás vhodné si jiæ od poçátku zvyknout na terminologii,ì
která se p⌐i bêæném programování pouæívá. Názvy procedur, funkcíì
a konstant p⌐itom vychází z pouæívané terminologie jazykû Pascalì
a získané znalosti jistê dále zuæitkujete. Pouæitá poçítaçováì
angliçtina je p⌐itom velmi jednoduchá a nemêla by nikomu çinitì
problémy.
Po aktivování grafického vÿstupního okna se vám v jeho horníì
li¿tê zobrazí ⌐ada ikon pro ovládání zabudovaného grafickéhoì
editoru a ikony pro moænost kreslení na grafické plo¿e. Ikonyì
jsou umístêny do t⌐í skupin. Levá skupina se pouæívá pro naçítáníì
a ukládání obrázkû v grafickém formátu *.BMP. St⌐ední skupinaì
slouæí pro definici kresleného tvaru a v pravé skupinê nalezneteì
nastavení typu çáry a vÿplnê ploch.
Nejprve se seznámíme s moæností kreslení základníchì
geometrickÿch tvarû. Ve st⌐ední skupinê ikon jsou seskupenaì
tlaçítka pro çáru, obdélník, kruænici a obdélník se zakulacenÿmiì
hranami. Kliknête nejprve na tlaçítko s çárou. Tím jste zadali,ì
æe budete chtít kreslit çáry. Uvidíte, æe tlaçítko zûstaloì
stisknuto. P⌐esuñte ukazatel my¿i na grafickou plochu. Pokud nyníì
na grafické plo¿e stisknete tlaçítko my¿i, podræíte jejì
a p⌐esunete na novou pozici, bude se kreslit çára z bodu stiskuì
tlaçítka do aktuální pozice ukazatele my¿i. Po uvolnêní tlaçítkaì
zûstane çára zachována. Zkuste si nakreslit i vodorovné a svisléì
çáry. Obdobnÿm zpûsobem lze na grafickou plochu kreslitì
obdélníky, kruænice a obdélníky se zakulacenÿmi rohy. Pro zvoleníì
nového tvaru musíte stisknout p⌐íslu¿né tlaçítko na li¿têì
s ikonami.
Çáry se kreslí çernou barvou a tenkou çárou. Pokud budete chtítì
zmênit barvu çáry, nebo její tlou¿ƒku, stisknête ikonu v pravéì
horní çásti okna s vyobrazením tuæky. Zobrazí se vám dal¿í ⌐adaì
ikon pro zadávání barvy, typu a tlou¿ƒky çáry. Po opêtovnémì
stisku ikony s tuækou se nastavení skryje. Ikona tedy pracujeì
jako p⌐epínací tlaçítko. Kliknête si proto na tlaçítko tak, abyì
jste mêli zobrazeny ikony pro nastavení çar. Vlevo je umístênaì
tabulka barev, uprost⌐ed tlaçítka pro vÿbêr typu çáry a vpravoì
mûæete zadat tlou¿ƒku çáry. Barvy se vybírají kliknutím naì
poæadovanou barvu. Vybraná barva je oznaçena dvoupísmennouì
anglickou zkratkou barvy. Typ çáry mûæete vybrat plnou çáru,ì
teçkovanou, çárkovanou, çerchovanou nebo mûæete poslednímì
tlaçítkem úplnê zru¿it. Tlou¿ƒka çáry se udává v bodech. Proì
znênu tlou¿ƒky mûæete zapsat do editaçního boxu p⌐ímo novouì
hodnotu, nebo mûæete pouæít pro nastavení ¿ipek. Pokud budeì
nastavena tlou¿ƒka çáry vêt¿í neæ jedna, neuplatní se zadanÿ typì
çáry a çára se bude vykreslovat vædy plná, p⌐ípadnê se nebudeì
kreslit vûbec. Zkuste si nastavit parametry çáry a provê⌐te siì
úçinky zmêny p⌐i kreslení základních geometrickÿch tvarû.
Dosud jsme kreslili pouze okraje geometrickÿch tvarû.ì
Standardnê je totiæ nastaveno, æe se plocha kreslenÿchì
geometrickÿch tvarû nevykresluje. Podobnÿm zpûsobem, jako seì
nastavují parametry kreslení çar máte moænost nastavit parametryì
vykreslování ploch. Ikony pro nastavení se zobrazí po stiskuì
tlaçítka s vyobrazením ¿têtce. Opêt máte moænost zadat barvu,ì
tentokrát plochy (vÿplnê). Souçasnê mûæete zadat typ vÿplnê. Máteì
moænost vybrat si buâ kreslení plné plochy zadanou barvou,ì
nevykreslování plochy, nebo z nêkolika druhû vykreslení plochyì
çárami. Lze vybrat çáry vodorovné, svislé, vodorovné i svisléì
souçasnê (m⌐íæka) a rûzné druhy diagonálních çar. Tlou¿ƒka çáryì
vÿplnê je p⌐itom vædy jeden bod.
Nyní jste jiæ schopni nakreslit na grafické plo¿e pouze zaì
pouæití my¿i jednoduché obrázky. Vyzkou¿ejte si rûzné moænostiì
nastavení çáry a plochy. Parametry nastavení çar a plochy jeì
moæné zmênit samoz⌐ejmê také p⌐ímo z programu, p⌐ípadnê zadatì
z p⌐íkazového okna. To si v¿ak ukáæeme aæ v následujícíchì
lekcích. Nyní bude pro vás jistê zajímavá moænost uloæeníì
nakreslenÿch obrázkû na disk do souboru pro pozdêj¿í pouæitíì
a zpêtná moænost naçtení obrázku z disku do grafického okna proì
provedení úprav. Ukáæeme si také, jak je moæné obrázekì
vytisknout.
Pokud máte grafickou plochu zaplnênou p⌐edchozími pokusy,ì
mûæete provést její vÿmaz pomocí ikony s obrázkem prázdnéì
stránky. Ikona se nachází v levé skupinê ikon umístênéì
v grafickém vÿstupním oknê. Po kontrolním dotazu bude grafickáì
plocha vymazána. Stejného efektu lze dosáhnout povelem ImageClearì
zadanÿm v p⌐íkazovém oknê. Povel se zadává bez parametrû, v tomtoì
p⌐ípadê se provede vÿmaz grafické plochy jiæ bez kontrolníhoì
dotazu.
Nakreslené obrázky máte samoz⌐ejmê moænost uloæit do souboru.ì
Pouæívá se známÿ a bêænÿ bitmapovÿ soubor typu *.BMP. Pro uloæeníì
stisknête ikonu s obrázkem diskety. V dialogovém oknê zadejteì
adresá⌐ a jméno souboru. Obrázek mûæete uloæit samoz⌐ejmêì
i povelem ImageSave z p⌐íkazového okna. Nap⌐íklad:
ImageSave("obrazek.bmp")
Obrázky mûæete i zpêt naçíst. Pouæijte ikonu s obrázkem ¿ipkyì
smê⌐ující do stránky. V dialogovém oknê vyberte adresá⌐ a jménoì
souboru typu *.BMP. Naçíst mûæete i obrázky vytvo⌐ené v jinÿchì
grafickÿch systémech. Po naçtení obrázku je velikost grafickéì
plochy nastavena dle naçítaného obrázku. Obrázek mûæete naçístì
i povelem z p⌐íkazového okna ImageLoad. Nap⌐íklad:
ImageLoad("obrazek.bmp")
Pokud by jste chtêli vytvo⌐enÿ obrázek vytisknout, mûæete takì
uçinit pomocí ikony zobrazující tiskárnu. Pro tisk obrázkuì
z p⌐íkazového okna mûæete pouæít povel ImagePrint.
V následující lekci se seznámíte s moænostmi ovládáníì
grafického vÿstupního okna pomocí povelû z p⌐íkazového okna.
6.lekce - ovládání grafického okna z p⌐íkazového okna
P⌐edchozí lekce vás seznámila krátce se základními moænostmiì
pouæití grafického vÿstupního okna. Nauçili jste se kreslit doì
grafické plochy pomocí my¿i, ukládat, naçítat a vytisknoutì
vytvo⌐enÿ obrázek. Nyní se seznámíte s dal¿ími moænostmiì
grafického okna a s parametry okna, které budete pot⌐ebovat proì
programování grafickÿch povelû. Poznáte, æe v¿e, co bylo moænéì
nastavit v grafickém oknê budete mít moænost zadat pomocí poveluì
z p⌐íkazového okna.
Çinnost grafického okna je moæné si p⌐edstavit jako malí⌐skéì
plátno definovanÿch rozmêrû, na které se kreslí perem (anglickyì
pen). Vêt¿í plochy je moæné vybarvit ¿têtcem (anglicky brush).ì
Kreslí se p⌐itom vædy nastavenou barvou. Systém obsahuje povelyì
pro nastavení parametrû pera i ¿têtce. S moænostmi se seznámíteì
v následujícím textu.
P⌐i kreslení obrazcû do grafického okna se kreslí obrazceì
çárou, jejíæ typ je definován povelem ImagePenStyle a tlou¿ƒkaì
çáry je definována povelem ImagePenWidth. Plocha nakreslenÿchì
geometrickÿch obrazcû je vyplnêna stylem zadanÿm povelemì
ImageBrushStyle.
Nejjednodu¿¿í je zmêna tlou¿ƒky çáry, kdy uvádíte p⌐ímo jakoì
parametr povelu tlou¿ƒku çáry v bodech. Pro zmênu tlou¿ƒky çáryì
na pêt bodû pouæijete z p⌐íkazového okna následující povel:
ImagePenWidth(5);
V¿imnête si, æe pokud nastavíte sílu çáry povelem z p⌐íkazovéhoì
okna, pouæije se nastavená síla çáry i pro následné kresleníì
pomocí my¿i p⌐ímo v grafickém oknê. Obdobná vlastnost je platnáì
i pro nastavení v¿ech parametrû grafického okna. Máte protoì
moænost libovolnê kombinovat zadávaní povelû z p⌐íkazového oknaì
nebo jejich nastavení pomocí ikon. V budoucnu budete mítì
samoz⌐ejmê moænost uvedené parametry nastavit i p⌐ímo z programu.
Styl çáry máte moænost zadávat povelem ImagePenStyle.ì
P⌐eddefinováno je ¿est stylû. Jako parametr povelu musíte p⌐itomì
zadat definovanÿ styl çáry. Parametr mûæete uvést buâ çíselnouì
hodnotou, nebo jménem konstanty dle následující tabulky:
---------------------------------------------------------
hodnota konstanta název stylu
---------------------------------------------------------
1 psSolid souvislá çára
2 psDash p⌐eru¿ovaná çára
3 psDot teçkovaná çára
4 psDashDot çerchovaná çára
5 psDashDotDot çerchovaná çára se dvêma teçkami
6 psClear neviditelná çára
---------------------------------------------------------
P⌐íklady pouæití definice stylu çáry (text mezi sloæenÿmiì
závorkami nemusíte psát, jedná se o poznámku):
ImagePenStyle(1); { souvislá plná çára }
ImagePenStyle(3); { teçkovaná çára }
ImagePenStyle(6); { neviditelná çára }
ImagePenStyle(psSolid); { souvislá plná çára }
ImagePenStyle(psDot); { teçkovaná çára }
ImagePenStyle(psClear); { neviditelná çára }
Existuje samoz⌐ejmê i zpûsob nastavení barvy çáry. Nejprve seì
v¿ak budeme muset seznámit s moænostmi pouæití barev v poçítaçi.ì
Zobrazování barev závisí na vlastnostech videokarty ve va¿emì
poçítaçi. Pouæíváte-li barevnou VGA kartu, máte moænost zobrazitì
minimálnê 16 barev. Po p⌐íslu¿ném nastavení videoadaptéru jeì
moæné bêænê zobrazovat 256 barev, vÿjimeçnê i více. Vy budete mítì
moænost nastavit v systému libovolnou barvu z rozsahu 16 miliónûì
barev. Skuteçnê zobrazená barva ale závisí na vlastnostechì
technického za⌐ízení, protoæe se zobrazí vædy barva nejbliæ¿í.
Hodnotu barev je moæné zadávat dvêma zpûsoby, které lzeì
v programu libovolnê kombinovat. Pokud budete pouæívat pouzeì
základní, ¿estnáctibarevnou paletu, mûæete tak uçinit zadávánímì
p⌐eddefinované konstanty udávající anglické jméno barvy. Stejnouì
barvu máte moænost zadat i pomocí tzv. RGB hodnoty.
Hodnota barev zadávaná definicí RGB znamená, æe kaædá barva jeì
definována jako pomêr kombinace barev modré, zelené a çervené.ì
Pro kaædou barvu je moæné volit hodnoty v rozsahu 0 aæ 256.ì
Násobek têchto hodnot (modrá x zelená x çervená) udává vÿslednouì
barvu. Vÿhodné je pouæívat tzv. hexadecimálního zápisu, kdy jsouì
pro kaædou barvu vyhrazeny dvê pozice çísla s hodnotami od 00ì
(çíslo 0) aæ do FF (çíslo 256). P⌐i pouæití hexadecimálního çíslaì
je nutné uvést p⌐ed çíslem rozli¿ovací znak $. Viz tabulka hodnotì
barev.
------------------------------------------
hodnota konstanta název barvy
------------------------------------------
$000000 clBlack çerná
$000080 clMaroon ka¿tanovê çervená
$0000FF clRed svêtle çervená
$008000 clGreen tmavê zelená
$008080 clOlive tmavê ælutá
$00FF00 clLime svêtle zelená
$00FFFF clYelow ælutá
$800000 clNavy tmavê modrá
$800080 clPurple tmavê fialová
$808000 clTeal tmavê modrozelená
$808080 clDkGray tmavo¿edá
$C0C0C0 clLtGray svêtle ¿edá
$FF0000 clBlue modrá
$FF00FF clFuschsia fialová
$FFFF00 clAgua modrozelená
$FFFFFF clWhite bílá
------------------------------------------
P⌐íklady pouæití definice barvy çáry (text mezi sloæenÿmiì
závorkami nemusíte psát, jedná se o poznámku):
ImagePenColor(clWhite); { bílá barva çáry }
ImagePenColor(clRed); { svêtle çervená barva çáry }
ImagePenColor(clBlue); { modrá barva çáry }
ImagePenColor($FFFFFF); { bílá barva çáry }
ImagePenColor($0000FF); { svêtle çervená barva çáry }
ImagePenColor($FF0000); { modrá barva çáry }
Podobnê, jako je moæné nastavit parametry kreslené çáry jeì
moæné nastavit parametry vykreslovanÿch ploch geometrickÿchì
obrazcû. Barva plochy se p⌐itom zadává povelem ImageBryshColor.ì
Pouæívá se p⌐itom vÿ¿e zadanÿch hodnot a konstant pro definiciì
parametru barvy. P⌐íklady pouæití definice barvy plochy (textì
mezi sloæenÿmi závorkami nemusíte psát, jedná se o poznámku):
ImageBrushColor(clWhite); { bílá barva plochy }
ImageBrushColor(clRed); { svêtle çervená barva plochy}
ImageBrushColor(clBlue); { modrá barva plochy }
ImageBrushColor($FFFFFF); { bílá barva plochy }
ImageBrushColor($0000FF); { svêtle çervená barva plochy}
ImageBrushColor($FF0000); { modrá barva plochy }
Pro nastavení stylu vyplñování ploch se pouæívá povelì
ImageBrushStyle, kde se jako parametr povelu udává buâ çíslemì
definovanÿ styl, nebo jméno konstanty dle následující tabulky:
-----------------------------------------------------------
hodnota konstanta název stylu
-----------------------------------------------------------
1 bsSolid vyplní oblast jednou barvou
2 bsClear vyplní oblast barvou pozadí
3 bsHorizontal vyplní oblast vodorovnÿmi çárami
4 bsVertical vyplní oblast svislÿmi çárami
5 bsFDiagonal diagonální çáry \\\\\\\
6 bsBDiagonal diagonální çáry ///////
7 bsCros vodorovné a svislé çáry
8 bsDiagCross vodorovné a svislé çáry diagonálnê
------------------------------------------------------------
P⌐íklady pouæití definice stylu plochy (text mezi sloæenÿmiì
závorkami nemusíte psát, jedná se o poznámku):
ImageBrushStyle(1); {plné vybarvení plochy}
ImageBrushStyle(3); {vÿplñ vodorovnÿmi çárami}
ImageBrushStyle(8); {vÿplñ diagonálními çárami}
ImageBrushStyle(bsSolid); {plné vybarvení plochy}
ImageBrushStyle(bsHorizontal);{vÿplñ vodorovnÿmi çárami}
ImageBrushStyle(bsDiagCros); {vÿplñ diagonálními çárami}
Aby bylo moæné kreslit v grafickém oknê do p⌐esnê urçenÿchì
pozic, musí bÿt zadány sou⌐adnice pro kreslení. Sou⌐adnice urçujíì
polohu jednotlivÿch bodû kresby. Sou⌐adnice znamená, æe musíteì
uvést vzdálenost v bodech od levého okraje grafického oknaì
a vzdálenost v bodech od horního okraje grafického okna.ì
Sou⌐adnicovÿ systém je tedy vztaæen k levému hornímu rohu, kterÿì
má sou⌐adnici 0,0. Hodnoty ve smêru osy X narûstají smêremì
doprava, hodnoty ve smêru osy Y narûstají smêrem dolû. P⌐i zápisuì
sou⌐adnice se uvádí nejprve osa x, potom osa y. Je p⌐itom moænéì
zadávat p⌐íkazy pro kreslení mimo plochu grafického okna, zobrazíì
se v¿ak pouze ta çást, která je obsaæena maximálními sou⌐adnicemiì
grafického okna.
Aktuální sou⌐adnice se zobrazují ve stavovém ⌐ádku systémuì
vædy, kdyæ máte nastavenou my¿ nad grafickÿm oknem. Sou⌐adnice jeì
vhodné si vyzkou¿et také na povelu Point, kterÿ slouæí proì
zobrazení bodu na zadané sou⌐adnici. Povel nakreslí na zadanÿchì
sou⌐adnicích bod o zadané velikosti. Bod se nakreslí aktuálníì
barvou pera, kterou lze nastavit procedurou ImagePenColor.ì
Vyzkou¿ejte si nêkolik p⌐íkladû pro seznámení se se zpûsobemì
oznaçování sou⌐adnic grafické polohy:
Point( 0, 0, 2); { levÿ horní roh }
Point( 0, 100, 2); { levÿ dolní roh }
Point(100, 0, 2); { pravÿ horní roh }
Point(100, 100, 2); { pravÿ dolní roh }
Point( 50, 50, 10); { uprost⌐ed, vêt¿í bod }
Sou⌐adnice grafického okna se pouæijí i pro kresleníì
geometrickÿch tvarû pomocí povelû. Moæné je kreslit çáru povelemì
Line, obdélník povelem Rectangle, kruænici nebo elipsu povelemì
Ellipse a obdélník se zaoblenÿmi rohy povelem RoundRect. Povelemì
Triangle je moæné nakreslit trojúhelník, coæ není pomocí my¿iì
moæné. Pomocí povelû je moæné také kreslit povelem Arc çástì
k⌐ivky a povelem Pie kruhovou vÿseç. Vyzkou¿ejte si kresleníì
základních geometrickÿch tvarû:
Line(20, 20, 50, 100); { nakreslí çáru }
Rectangle(10, 10, 100, 100); { nakreslí çtverec }
Ellipse(30, 30, 120, 120); { nakreslí kruænici }
Ellipse(30, 30, 120, 60); { nakreslí elipsu }
Triangle(10,100,55,10,100,100}; { nakreslí trojúhelník }
Arc(0,0,100,100, 50,0,0,50); {levÿ horní çtvrtkruh}
Pie(0,0,100,100, 50,100,100,50) {pravÿ dolní çtvrtkruh}
7.lekce - vÿstup do grafického okna
V p⌐edchozí lekci jsme se nauçili kreslit do grafickéhoì
vÿstupního okna z p⌐íkazového okna a nastavovat parametry çarì
a ploch. Nyní se zamê⌐íme na nastavení grafické plochy a p⌐evodì
çásti grafického okna ze zásobníku Windows a zpêt. Seznámíme seì
také s moæností zápisu textu do grafického okna.
Aæ dosud jsme mêli velikost grafické plochy nastavenou vædyì
podle toho, jak veliké bylo grafické okno v okamæiku aktivaceì
grafické plochy. Dal¿í zmênou velikosti grafického vÿstupníhoì
okna se jiæ velikost grafické plochy nemênila. Pokud protoì
pot⌐ebujete nastavit velikost grafické plochy na poæadovanéì
rozmêry, mûæete tak uçinit povelem ImageInit. Povel inicializujeì
grafické okno a nastaví jeho velikost na rozmêry zadanéì
parametry. Nastaví souçasnê bílou barvu plochy, styl ¿têtce proì
plnê vybarvené plochy, çernou barvu pera, sílu çáry na jeden bod.ì
Inicializací se provede vÿmaz pûvodního obsahu grafického okna.ì
Vyzkou¿ejte si nap⌐íklad následující hodnoty:
ImageInit( 50, 200);
ImageInit(120, 60);
Pokud pot⌐ebujete znát parametry jiæ inicializované grafickéì
plochy, mûæete pouæít dotazu GetMaxX a GetMaxY, kterÿ vracíì
velikost grafické plochy zadané strany. Pokud budete nap⌐íkladì
pot⌐ebovat vykreslit bod uprost⌐ed grafické plochy bez ohledu naì
velikost aktuálnê inicializované plochy, mûæete tak uçinitì
povelem:
Point(GetMaxX/2, GetMaxY/2, 5);
V nêkterÿch p⌐ípadech by bylo vhodné kreslit çáry do grafickéì
plochy zadáváním v absolutních p⌐írûstkovÿch hodnotách místoì
p⌐esné definice sou⌐adnic. Proto je v grafickém oknê definovánì
tzv. grafickÿ ukazatel, kterÿ zaznamenává pozici vykresleníì
posledního bodu. Poloha grafického ukazatele se p⌐i pouæitíì
nêkterÿch povelû automaticky mêní. Je moæné ji nastavitì
i z programu povelem MoveTo. Çáry je moæné potom zadat povelemì
LineTo definicí koneçného bodu. Vyuæitím uvedenÿch povelû jeì
moæné nap⌐íklad nakreslit libovolnÿ mnohostrannÿ mnohoúhelník.ì
Vyzkou¿ejte si následující povely, které by mêly v grafické plo¿eì
nakreslit çty⌐úhelník:
MoveTo( 10, 10); { p⌐esun na poçáteçní bod }
LineTo(100, 10); { horní hrana }
LineTo(100, 100); { pravá hrana }
LineTo(100, 10); { spodní hrana }
LineTo( 10, 10); { levá strana }
Aæ dosud jsme dûslednê dodræovali, æe je moæné textovéì
informace vypisovat zásadnê do textového vÿstupního oknaì
a grafické informace do grafického vÿstupního okna. Je v¿ak moænéì
provádêt vÿstup textovÿch informací i do grafického okna. Nelzeì
p⌐itom pouæít povelu WRITELN, se kterÿm jsme se jiæ d⌐íveì
seznámili. Zobrazovat lze pouze textové informace. Çísla je nutnéì
p⌐edem p⌐evést na ⌐etêzce. K vÿstupu textovÿch informací seì
pouæívá povelu TextOut. Jako parametry povelu se udávajíì
sou⌐adnice pro zobrazení textu v grafickém oknê a ⌐etêzec, kterÿì
se má zobrazit. Povel si mûæete vyzkou¿et nap⌐íklad následujícímiì
p⌐íklady:
TextOut(10, 10, "OZOGAN");
TextOut(10, 30, "KLONDAIK");
Text se p⌐i pouæití povelu TextOut vypisuje p⌐eddefinovanÿmì
fontem. Jeho zmêna se provede buâ povelem ImageSetFont, kdy jeì
moæné zadat v dialogovém oknê nejen jméno fontu, ale p⌐ímo i jehoì
styl a velikost. Dal¿í moæností je pouæití ikony z grafickéhoì
vÿstupního okna. Pokud pot⌐ebujete nastavit pouze nêkteréì
atributy fontu, mûæete tak uçinit povely ImageFontColor (barvaì
fontu), ImageFontName (jméno fontu), ImageFontSize (velikostì
fontu) a ImageFontStyle (styl fontu).
P⌐i nastavení barvy fontu se zadává u povelu ImageFontColorì
jako parametr buâ çíslo barvy, nebo jméno konstanty udávajícíì
barvu. Tabulka hodnot barev je stejná jako pro nastavení barvyì
çar a ploch. U povelu ImageFontName, kterÿ nastavuje jméno fontuì
se uvádí p⌐ímo jméno fontu. Pokud není zadané jméno v systémuì
Windows dostupné, pouæije se font s podobnÿm jménem. Velikostì
fontu se uvádí v povelu ImageFontSize p⌐ímo poæadovanou hodnotou.ì
P⌐íklad moænÿch nastavení si prozkou¿ejte vçetnê vÿpisu textu poì
kaædé zmênê parametrû fontu:
ImageFontColor(clRed); { nastaví çervenou barvu fontu }
ImageFontColor($00FFFF); { nastaví ælutou barvu fontu }
ImageFontName("Arial CE");{ nastaví font Arial CE }
ImageFontSize(12); { nastaví velikost fontu 12 bodû}
Pro nastavení stylu fontu se v povelu ImafeFontStyle poæívajíì
jako parametr p⌐eddefinované hodnoty jednotlivÿch stylû. Uvádí seì
souçet hodnot poæadovaného vÿsledného stylu:
------------------------------------------
hodnota konstanta popis stylu
------------------------------------------
0 fsNormal normální písmo
1 fsBold tuçné písmo
2 fsItalic naklonêné písmo
4 fsUnderline podtræené písmo
8 fsStrikeOut p⌐e¿krtnuté písmo
------------------------------------------
Pro nastavení naklonêného podtræeného písma mûæete zadat jednuì
z následujících moæností:
ImageFontStyle(2 + 4); {souçet hodnot}
ImageFontStyle(6); {souçet 2 + 4}
ImageFontStyle(fsItalic + fsUnderline); {uvedení konstanty}
Pokud budete pot⌐ebovat p⌐evést nakreslenÿ obrázek p⌐esì
schránku Windows (clipboard) do jiné aplikace, mûæete tak provéstì
pomocí povelu InageToClip, kdy uvedete jako parametry sou⌐adniceì
ohraniçené plochy pro p⌐evod. Pokud budete chtít nap⌐íkladì
p⌐esunout do schránky obsah celého grafického okna, zadejteì
p⌐íkaz:
ImageToClip(0,0,GetMaxX,GetMaxY);
Naçtení obsahu schránky se provádí povelem ImageFromClip, kdyì
se jako parametry uvedou sou⌐adnice ohraniçené plochy, kam se máì
obsah schránky p⌐evést. Pokud budete chtít p⌐evést obsah schránkyì
Windows na celou plochu grafického okna, zadejte p⌐íkaz:
ImageFromClip(0,0,GetMaxX,GetMaxY);
Nêkoho z vás jiæ urçitê napadlo, æe vÿ¿e uvedené povely, pomocíì
kterÿch mûæete p⌐evádêt obrázky do schránky a naçítat zpêt zeì
schránky by bylo moæné pouæít na p⌐esun çásti obrázku na novéì
místo. Na to je ale vÿhodnêj¿í pouæít samostatného poveluì
ImageMove, kterÿ provede obê akce najednou. Zadáváte p⌐itom jakoì
parametry sou⌐adnice místa, odkud se má naçtení provéstì
a sou⌐adnice, kam se má plocha p⌐enést. Neodpovídá-li p⌐itomì
pomêr stran zdrojové a cílové plochy, nebude zkopírovanÿ obrazì
u⌐íznut, ale bude upraven (deformován) do zadanÿch sou⌐adnic. Toì
je moæné vyuæít k mnoha zajímavÿm efektûm. Nap⌐íklad ke zvêt¿eníì
çásti plochy apod.
Nêkte⌐í jste jiæ moæná netrpêliví, kdy se zaçne programovat.ì
Místo programování jsme zadávali pouze povely do p⌐íkazovéhoì
okna. Tím jsme se vás snaæili nauçit nejprve pouæívat nêkolikì
základních povelû programovacího jazyka. Pokud by jsme zaçaliì
ihned se základy programování vçetnê popisu pouæití povelû byloì
by toho najednou moc. Proto jsme si nejprve probrali základyì
pouæívání povelû a p⌐íkazû jazyka a v p⌐í¿tí kapitole jiæ zaçnemeì
opravdu programovat.
8.lekce - první program, procedura main
V p⌐edchozích lekcích jsme si probrali základní informaceì
o pouæívání p⌐íkazového okna pro zadávání povelû jazyka p⌐ímoì
z klávesnice. Vÿstup vÿsledkû byl provádên do textového neboì
grafického okna. V následujících lekcích vyuæijeme získanéì
poznatky jiæ p⌐ímo p⌐i vÿvoji vlastních programû.
Programy se zadávají (zapisují) do samostatného okna, kteréì
slouæí jako textovÿ editor programu. Pokud je okno na obrazovceì
viditelné, mûæete jej aktivovat kliknutím my¿i na jeho plochu.ì
V opaçném p⌐ípadê vyuæijte z menu volbu Okna/Program. Pokudì
budete chtít pouæít povelu z p⌐íkazového okna, budete muset zadatì
povel ProgramShow. Pro moænost automatického vytvo⌐ení základníì
kostry programu stisknête klávesy Ctrl+N, nebo zadejte volbu menuì
Soubor/Novÿ. Do okna program se vygeneruje kostra prázdnéhoì
programu.
Novÿ, prázdnÿ vygenerovanÿ program je moæné ihned spustitì
volbou z menu Program/Spustit, p⌐ípadnê stiskem funkçní klávesyì
F9 nebo kliknutím my¿i na ikonê s obrázkem bêæícího panáçka.ì
Prázdnÿ program obsahuje pouze základní kostru bez æádnéhoì
povelu, kterÿ by vykonával viditelnou çinnost a proto programì
skonçí, aniæ by cokoliv uçinil. Vyuæijeme proto získanÿchì
zku¿eností a doplníme text programu o nám jiæ známé povelyì
a p⌐íkazy. Dávejte si pozor na to, aby jste ponechali beze zmênyì
první a poslední ⌐ádek programu. Pokud by se tak nestalo, programì
by se nemusel vûbec spustit. Proveâte proto pouze doplnêníì
programu o p⌐íkaz WRITELN dle následující ukázky:
PROCEDURE main
// zde zapi¿te vá¿ program
WRITELN("Ahoj, zdraví Vás systém KLONDAIK");
ENDPROC
Program spustíme funkçní klávesou F9 a pokud máte viditelnÿì
obsah textového vÿstupního okna, zobrazí se v nêm pozdrav odì
systému. Vyzkou¿ejte si dal¿í, d⌐íve probrané povely, kteréì
zapisujte pouze do çásti programu mezi slovy PROCEDURE a ENDPROC.ì
Takto by nap⌐íklad mohla bÿt upravena procedura main:
PROCEDURE main
ConsoleShow; { zobrazí a aktivuje textovÿ vÿstup }
ConsoleClear; { vymaæe plochu textového vÿstupu }
WRITELN("Ahoj, zdraví Vás systém KLONDAIK");
ENDPROC
Obdobnÿm zpûsobem mûæete zadat i povely pro pouæití grafickéhoì
vÿstupního okna. Opêt pouæijeme pouze d⌐íve probrané povely,ì
které zapí¿ete do çásti programu mezi slovy PROCEDURE a ENDPROC.ì
Text ve sloæenÿch závorkách nemusíte zapisovat, jsou to poznámky,ì
které nemají na çinnost programu vliv. O tom, jak p⌐ebírat dáleì
uvedené p⌐íklady z nápovêdê k programu se dozvíte podrobnê veì
druhé lekci.
PROCEDURE main
ImageShow; {aktivuje textovÿ vÿstup}
ImageInit(150, 200); {inicializuje plochu}
Rectangle(10, 10, 140, 190); {nakreslí obdélník }
ImageFontColor(clBlue); {nastaví modrou barvu fontu}
ImageFontSize(16); {nastaví velikost fontu}
TextOut(50, 30, "KLONDAIK"); { vypí¿e text }
ENDPROC
Jak jsme jiæ hned v úvodu probíranÿch lekcí uvedli, je základemì
programování zadání posloupností akcí. To si mûæete nyníì
vyzkou¿et. Projdête si p⌐edchozí lekce a pokuste se z jiæì
získanÿch znalostí sestavit program, kterÿ nap⌐íklad nakreslí dûmì
a vedle nêj zelenÿ strom. Aby jste to nemêli tak sloæité, uvádímeì
zde çást programu pro nakreslení domu. Povely pro nakresleníì
strumu jiæ doplñte sami. Samoz⌐ejmê mûæete v programu provéstì
i dal¿í úpravy dle vlastního uváæení. Aby jste se také nauçiliì
nêco nového z ovládání uæivatelského prost⌐edí systému, zkusteì
tentokrát spustit program klávesou F6. Tomu, co uvidíte se ⌐íkáì
animace programu. Podrobnêji se s ní seznámíme aæ v nêkteréì
z dal¿ích lekcí. Nyní krátce jen to, æe animace mimo interpretaceì
programu souçasnê v oknê s programem soubêænê zobrazujeì
interpretovanÿ ⌐ádek programu.
PROCEDURE main
ImageShow; {aktivace grafické plochy}
ImageInit(200, 150); {inicializace graf.plochy}
ImageBrushColor(clLime); {nastavení zelené barvy}
Rectangle(0, 130, 200, 150); {nakreslení zahrádky}
ImageBrushColor(clOlive); {nastavení tmavê zelené}
Rectangle(20,60, 105, 130); {nakreslení stêny domu}
ImageBrushColor(clYelow); {nastavení æluté barvy}
Rectangle(28, 70, 48, 90); {horní levé okno}
Rectangle(72, 70, 52, 90); {horní st⌐ední okno}
Rectangle(96, 70, 76, 90); {horní pravé okno}
Rectangle(28, 100, 48, 120); {levé dolní okno}
Rectangle(72, 100, 52, 130); {dve⌐e}
Rectangle(96, 100, 76, 120); {pravé dolní okno}
Ellipse(140,20, 170, 50); {sluníçko}
ImageBrushColor(clRed); {nastavení çervené barvy}
Triangle(20,60, 60,25, 105,60);{st⌐echa}
ENDPROC
Takæe jak vypadá program jiæ víte. Mêli by jste bÿt jiæ takéì
schopni sestavit jednoduchÿ program z posloupnosti vykonávanÿchì
povelû. Zatím jsme si ale nic ne⌐ekli o tom, co znamená prvníì
a poslední ⌐ádek programu, ve kterÿch jsou uvedena klíçová slovaì
PROCEDURE a ENDPROC. To se dozvíte v nêkteré z následujícíchì
lekcích, ve které si vysvêtlíme, co v¿echno program mûæe a musíì
obsahovat a jakou má mít strukturu.
9.lekce - editace programu
P⌐i zápisu programu se zapisuje text programu textovÿmì
editorem. Jedná se o tzv. programátorskÿ editor, kterÿ neumoæñujeì
nastavovat promênnÿ druh ani velikost písma. Není to ani nutné,ì
protoæe zapsanÿ text programu slouæí pouze jako zápisì
posloupnosti instrukcí pro systém interpretu.
Zápis nového programu zahájíte stiskem kláves Ctrl+N neboì
volbou z menu Soubor/Novÿ. Do okna program se vytvo⌐í nováì
prázdná struktura programu, kterou mûæete bêænÿm zpûsobemì
doplñovat o nové ⌐ádky programu. Jiæ existující program mûæeteì
otev⌐ít stiskem kláves Ctrl+O, nebo volbou z menuì
Soubor/Otev⌐ít. Program máte moænost uloæit Stiskem klávesì
Ctrl+S nebo volbou z menu Soubor/Uloæit. Pokud se jedná o novÿì
program, musíte v dialogovém oknê zadat jméno souboru a tímì
i programu pro uloæení. Pokud jiæ zadanÿ soubor existoval, budeì
p⌐epsán novou verzí. Neprovádí se p⌐itom záloæní kopie pûvodníhoì
souboru a tím samoz⌐ejmê i programu !
Pokud budete chtít uloæit program pod novÿm jménem, mûæete takì
uçinit volbou z menu Soubor/Uloæit pod jménem. Budete dotázáni naì
jméno nového souboru, do kterého se program uloæí. Pûvodní souborì
zûstane p⌐itom zachován beze zmêny. P⌐i práci se soubory a tudíæì
i s programy vædy platí, æe mûæe bÿt v jednom okamæiku aktivníì
vædy pouze jeden. Nemûæete editovat najednou nêkolik programû.
Základy editace programu jsou obdobné, jako u v¿ech textovÿchì
editorû. Jakÿm zpûsobem zapsat nebo p⌐epsat text snad není nutnéì
uvádêt. Stejnê tak jak se dostat na konec programu, procházetì
text po⌐ádcích a podobnê. Seznámíme se ale s blokovÿmi operacemi,ì
které jsou p⌐i programování velmi vÿhodné. Pokud budeteì
pot⌐ebovat p⌐esunout çást textu na jiné místo, budete si musetì
poæadovanÿ blok textu nejprve oznaçit. To mûæete provést buâì
my¿í, kdy se p⌐esunete na zaçátek bloku, stisknete tlaçítko my¿i,ì
dræíte je stisknuté a p⌐esunete ukazatel my¿i na konecì
poæadovaného bloku textu. Text zapsanÿ v bloku se p⌐itomì
zvÿrazní. Z klávesnice mûæete blok textu oznaçit tak, æe najedeteì
kurzorem na poæadovanÿ poçátek bloku textu, stisknete klávesuì
Alt, podræíte ji stisknutou a p⌐ejedete kurzorem na poæadovanÿì
konec bloku textu. Po uvolnêní klávesy Alt máte oznaçen blokì
textu pro dal¿í operace. Pokud j budete chtít blok textu pouzeì
vymazat, stisknête nyní klávesu Delete. Oznaçenÿ blok textu budeì
zru¿en. Pozor proto p⌐i práci s oznaçenÿm blokem na uvedenouì
klávesu.
Pro p⌐esun oznaçeného bloku textu programu na jiné místoì
v programu budete muset pouæít schránku Windows. Pokud stiskneteì
klávesy Ctrl+C zkopíruje se text z oznaçeného bloku do schránkyì
a blok zûstane v textu stále zachován. Naopak, pokud stiskneteì
klávesy Ctrl+X, bude blok textu p⌐eveden do schránky Windowsì
(z textu programu bude zru¿en). Pokud se p⌐esunete na poæadovanéì
místo v programu, mûæete do nêj text ze schránky Windowsì
zkopírovat. To se provede stiskem kláves Ctrl+V. Text ve schránceì
zûstává p⌐itom stále zachován do doby dal¿ího naçtení bloku.ì
Pozor v¿ak na to, æe obsah schránky Windows se mûæe v ostatníchì
aplikací Windows zru¿it. Pro p⌐esun textu mezi editorem a Windowsì
jsou v menu systému za⌐azeny p⌐íslu¿né volby v menu Editace.
Stejnê jako máte moænost p⌐esouvat text mezi schránkou Windowsì
a programem, mûæete podobnÿm zpûsobem p⌐evádêt text povelûì
zadanÿch v p⌐íkazovém oknê systému. Po dobu editace programu máteì
stále moænost pouæívat p⌐íkazové okno a tím i nap⌐íklad zkou¿etì
parametry povelu. Aæ získáte správnÿ vÿsledek, p⌐evedeteì
odzkou¿enÿ povel p⌐es schránku Windows do programu. Teoretickyì
mûæete pomocí bloku p⌐evádêt do programu v p⌐ípadê pot⌐ebyì
i obsah vÿstupního textového okna.
Aæ budete psát rozsáhlej¿í programy, budete obças pot⌐ebovatì
nalézt v textu programu urçitÿ text. Po stisku kláves Ctrl+F,ì
nebo poloækou z menu Editace/Hledat se vám zobrazí dialogovÿ boxì
pro zadání parametrû hledání. Zadáte poæadovanÿ text pro hledání,ì
poæadavek zda hledat pouze celá slova, jestli rozli¿ovat velkáì
a malá písmena a smêr hledání.
Podobnÿm zpûsobem máte moænost zadat náhradu textu jinÿmì
textem. Dialogovÿ box se zobrazí po stisku kláves Ctrl+L nebo poì
zadání volby menu Editace/Zmênit. Nahrazovat p⌐itom mûæete pouzeì
poæadované vÿskyty hledaného textu, nebo komplet.
Pokud budete chtít program vytisknout, stisknête klávesyì
Ctrl+P, nebo pouæijte volbu menu Editace/Tisk.
10.lekce - promênné a jejich typy
Kdyæ jsme si ukazovali, jak vypsat p⌐íkazem WRITELN çíslo doì
vÿstupního textového okna, bylo uvedeno, æe není moænéì
jednoduchÿm zpûsobem uloæit vÿsledek vÿpoçtu do pamêti. Je toì
proto, æe to nelze z p⌐íkazového ⌐ádku provést. Musí se pouæítì
program, ve kterém bude hodnota definována. V této lekci si protoì
ukáæeme, jaké typy hodnot mûæeme do pamêti ukládat.
Hodnoty uloæené v pamêti se nazÿvají promênné. To proto, æeì
jejich hodnoty se mohou programem mênit. Kaædou promênnou musímeì
p⌐ed jejím prvním pouæitím nejprve pojmenovat a 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ÿ. V systému je v¿ak definovánoì
nêkolik typû çíselnÿch promênnÿch, které se li¿í velikostíì
moænÿch hodnot zpracovávanÿch çísel. Nêkteré typy çíselnÿchì
promênnÿch jsou urçeny pouze pro celá çísla, jiné mohou obsahovatì
i desetinnou çást. Rozli¿uje se také, æe çísla mohou bÿt buâì
pouze kladná, nebo i záporná. Poæadovanÿ typ çíselné promênné jeì
proto vædy nutno peçlivê zváæit. 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.
Je¿tê d⌐íve, neæ bude promênná v programu poprvé pouæita, musíì
se v programu deklarovat. To znamená, æe musíme uvést její jméno,ì
typ a p⌐ípadnê i poçáteçní hodnotu. Typ promênné popisuje p⌐itomì
mnoæinu hodnot, které mûæe nabÿvat a operace, které se s ní mohouì
provádêt.
Základní promênné jsou nejjednodu¿¿í promênné, kteréì
reprezentují jeden vÿskyt prvku údaje. Ze základních typûì
promênnÿch jsou odvozovány dal¿í deklarace promênnÿch typû pole,ì
záznam a tabulky, se kterÿmi se seznámíme aæ pozdêji.
Podporované typy promênnÿch:
BYTE - celoçíselnÿ typ s rozsahem 0 aæ 255
INTEGER - celoçíselnÿ typ s rozsahem od -32768 do +32767
WORD - celoçíselnÿ typ s rozsahem od 0 do 65535
LONGINT - celé çíslo od -2 miliard do + 2 miliard
REAL - çíslo v rozsahu od 2.9*10-39 do 1.7*1038
STRING - ⌐etêzec znakû o délce 255 znakû
CHAR - jeden znak
BOOLEAN - logická promênná typu BOOLEAN (True/False)
TEXT - textovÿ soubor typu Pascal TEXT
ARRAY - jednorozmêrné pole promênnÿch
Typ BYTE zabírá v pamêti jednu slabiku a mûæe proto obsahovatì
pouze celá çísla pro hodnoty od 0 do 255.
Datovÿ typ INTEGER je v pamêti uloæen ve dvou slabikách a mûæeì
proto nabÿvat hodnot od -32768 do +32767.
Typ WORD zabírá v pamêti také dvê slabiky, ale protoæe mûæeì
obsahovat pouze kladná çísla, mûæe obsahovat çísla od 0 do 65535.
Typ LONGINT mûæe nabÿvat zápornÿch hodnot a protoæe obsahujeì
v pamêti çty⌐i slabiky, mûæe nabÿvat hodnot od mínus dvou miliardì
do plus dvou miliard.
Datovÿ typ REAL se pouæívá pro vyjád⌐ení hodnot s pohyblivouì
⌐ádovou çárkou. Çíslo je uloæeno v ¿esti slabikách a mûæe nabÿvatì
hodnot od 2.9*10-39 do 1.7*1038
Datovÿ typ znak CHAR má velikost jedné slabiky a uchovává jedenì
znak. 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.ì
Na rozdíl od klasického jazyka PASCAL je moæné znaky uzavíratì
i do uvozovek.
Datovÿ typ STRING p⌐edstavuje posloupnost znakû s pevnou délkouì
255 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 mûæe obsahovat maximálnê 255 znakû.
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.
Dále jsou definovány je¿tê promênné typu TEXT a ARRAY. Jimi seì
budeme podrobnêji zabÿvat aæ pozdêji. V následující lekci siì
probereme, jak se promênné v programu deklarují a jak s mimiì
pracovat.
11.lekce - deklarace a pouæívání promênnÿch
V p⌐edchozí lekci jsme se seznámili s tím, æe prûbêæné hodnotyì
vÿpoçtû se ukládají promênnÿch. Popsali jsme si také, jaké typyì
promênnÿch mohou existovat. V této lekci si ukáæeme, jakì
promênnou v programu deklarovat a jak ji pouæívat.
Promênné musí bÿt v programu deklarovány je¿tê p⌐ed svÿm prvnímì
pouæitím ve vÿpoçtech. V deklaraci promênné se definuje, názevì
promênné a její typ s moæností uvedení poçáteçní hodnoty. Názevì
promênné musí zaçínat písmenem a nesmí obsahovat mezeru.ì
V programu se musí p⌐ed deklarací promênnÿch uvést klíçové slovoì
VAR a na konci ENDVAR. V tomto bloku deklarace promênnÿch neníì
moæné pouæívat æádné povely. Vyzkou¿ejte si následující p⌐íklad:
VAR
a : integer = 100;
b : integer = 3;
c : integer;
d : real;
s : string;
ENDVAR
PROCEDURE main
c := a/b; {vÿpoçet hodnoty}
d := a/b; {vÿpoçet hodnoty}
s := 'OZOGAN KLONDAIK'; {p⌐i⌐azení hodnoty}
WRITELN(c:10:3); {vypí¿e vÿsledek 3.000 }
WRITELN(d:10:3); {vypí¿e vÿsledek 3.333 }
WRITELN(s);
ENDPROC
Promênné a, b a c jsou deklarovány jako typ integer, toì
znamená, æe mohou obsahovat pouze celá çísla. Promênná d 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ì
oznaçeném slovy VAR a ENDVAR deklarovali. U promênné a, b jsmeì
definovali souçasnê poçáteçní hodnoty. V dal¿ím bloku programuì
oznaçeném bloky PROCEDURE a ENDPROC jsme deklarované promênnéì
pouæili.
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.
Po spu¿têní vÿ¿e uvedeného programu si systém nejprve z çástiì
VAR..ENDVAR definuje pouæité promênné a jejich typ a v druhéì
çásti programu PROCEDURE..ENDPROC s nimi provádí zadané p⌐íkazy.ì
Nejprve do promênné c uloæí dêlení a/b. Stejnê tak uçiníì
s promênnou d. Po vÿpisu promênnÿch do vÿstupního okna si mûæeteì
myslet, æe vÿpoçet neprobêhl správnê. Obsah promênnÿch se li¿í,ì
u promênné c nelze vypsat desetinnou çást vÿsledku. Pokud si v¿akì
zkontrolujete typ promênné c, zjistíte, æe je v¿e v po⌐ádku.ì
Promênná je deklarována jako integer, coæ znamená pouze celéì
çíslo (kladné nebo záporné). Desetinná çást vÿsledku se protoì
neukládá a není moæné ji také vypsat.
Po ukonçení programu zûstanou deklarované promênné stáleì
aktivní. Mûæeme je proto i po ukonçení programu dále pouæívatì
a vypsat nap⌐íklad p⌐íkazem WRITELN jejich obsah. Nyní máte protoì
moænost vyzkou¿et si pouæívání nadeklarovanÿch promênnÿchì
z p⌐íkazového okna. Novÿm spu¿têním programu dojde k jejichì
deaktivaci (zru¿ení) a nahrazení novÿmi promênnÿmi. Prozkou¿ejteì
si vyuæití i jinÿch typû promênnÿch deklarovanÿch v programu.
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.
12.lekce - podmínky v programu, logické vÿrazy
Jak jsme jiæ uvedli v úvodu probíranÿch lekcí, je programováníì
vlastnê sestavování posloupnosti vykonávanÿch akcí. V nêkterÿchì
p⌐ípadech musíme mít ale moænost nêkterou z akcí buâ vynechat,ì
nebo provést akce jiné. Obojí na základê zadané podmínky.ì
Nap⌐íklad pokud mám v kapse více neæ dvacet korun, pûjdu do kina,ì
jinak pûjdu domû na televizi. Zadaná podmínka by se dala v lidskéì
mluvê popsat následujícím vztahem:
POKUD hotovost > 20 POTOM
pûjdu do kina
JINAK
budu se dívat na televizi
KONEC
Uvedenému zápisu se ⌐íká algoritmus a popisuje schematickyì
postup provádênÿch akcí. Vztahu hotovost>20 se ⌐íká podmínka.ì
Podmínka nám tedy urçuje, jaká akce se bude provádêt. Zápisì
algoritmu je nutné pro poçítaç p⌐evést do programu. Nap⌐íkladì
následujícím zpûsobem:
VAR
hotovost : integer;
ENDVAR
PROCEDURA main
hotovost := 15; {zadejte va¿i hotovost}
IF hotovost > 20 THEN
WRITELN("Kino") {pokud je podmínka splnêna}
ELSE
WRITELN("Televize") {pokud není podmínka splnêna}
ENDIF;
ENDROC
Nejprve jsme deklarovali promênnou se jménem hotovost. Dáleì
jsme jí v programu p⌐i⌐adili urçitou hodnotu. V podmínce jsmeì
potom zji¿ƒovali, zda odpovídá na¿im poæadavkûm a podle toho jsmeì
provedli urçitou akci. Zkuste si zadat sami rûzné hodnoty stavuì
va¿í hotovosti. Pozor ale na to, æe hotovost je deklarována jakoì
typ integer. Nesmíte bÿt proto moc bohatí a mít v hotovosti víceì
neæ 32767 Kç. Zkuste upravit program tak, aby jste mohli zadávatì
i vêt¿í çástky. Závisí to na typu promênné.
V¿imnête si, æe jsme v programu u zápisu podmínky odsadiliì
vykonávané p⌐íkazy na ⌐ádku o t⌐i znaky. Tím vynikla strukturaì
podmínky a na první pohled je viditelné její rozçlenêní. Není toì
sice nutnost, p⌐esto v¿ak doporuçujeme uvedenou grafickou podobuì
zápisu programu ve vlastním zájmu dodræovat.
Podmínka se v programu zadává klíçovÿm slovem IF, za kterÿmì
musí následovat vyhodnocovaná podmínka. Klíçové slovo THEN neníì
povinné, p⌐esto jej v¿ak doporuçujeme uvádêt, protoæe to vyæadujeì
klasickÿ jazyk Pascal. Dále následují povely, které se provedouì
pouze p⌐i splnêní podmínky. Za klíçovÿm slovem ELSE se uvedouì
povely, které se provedou p⌐i nesplnêní podmínky. Zápis podmínkyì
je ukonçen klíçovÿm slovem ENDIF. V zápise podmínky mûæeteì
vynechat klíçové slovo ELSE vçetnê akcí pro nesplnêní podmínky.ì
Vædy ale musíte uvést ukonçení podmínky klíçovÿm slovem ENDIF.ì
Pokud se tak nestane, nahlásí systém chybu v programu.
Podmínku p⌐edstavuje logickÿ vÿraz, kterÿ udává, zda jeì
podmínka splnêna nebo ne. Logické vÿrazy mohou mít proto vÿsledekì
pouze pravda nebo nepravda. V poçítaçové terminologii Trueì
(pravda) nebo False (nepravda). Pokud by jste chtêli vÿsledekì
podmínky deklarovat jako promênnou, museli by jste pouæít typì
BOOLEAN. Logická podmínka zpracovává nejçastêji matematickÿì
vÿraz. Mûæe to v¿ak bÿt i vÿraz zpracovávající ⌐etêzce, to v¿akì
bude psáno aæ se nauçíme s rêtêzci dûkladnêji pracovat.
Matematické vÿrazy porovnávají nejçastêji nêkolik hodnot. Veì
vÿrazu se p⌐itom mûæe také pouæít libovolného matematickéhoì
vÿpoçtu, kterÿ je v jazyce definován.
Matematické vÿrazy zpracovávají aritmetické operace. Vÿrazy seì
skládají z operátorû a operandû. Operátor je p⌐itom porovnávanáì
hodnota a operand je zpûsob porovnání hodnot. Operátor mûæeì
p⌐edstavovat libovolnÿ matematickÿ vÿpoçet, kterÿ je v jazyceì
definován. Operand slouæí k vyhodnocení operátorû. P⌐i zápisuì
dodræte, aby byly operátory oddêleny od operandû mezerami !ì
Pouæívají se následující dostateçnê známé operandy:
> vêt¿í neæ
>= vêt¿í nebo rovno neæ
< men¿í neæ
<= men¿í nebo rovno neæ
= rovno
<> nerovno
Ve vÿrazu je samoz⌐ejmê moæné pouæívat závorky. P⌐íklad vÿrazûì
zpracovávajících matematickÿ vÿpoçet:
hotovost > 20
a/2 < 10
2*(a+b) = 2*a+2*b
Vÿrazy mûæeme dále v jedné podmínce spojit logickÿm operátoremì
s dal¿ím vÿrazem a vyhodnocovat tak sloæenou podmínku. Pouæívajíì
se p⌐itom následující logické operátory:
AND a zároveñ platí
OR platí jeden nebo druhÿ vÿraz
NOT není pravda, negace vÿrazu
V p⌐ípadê pouæití logickÿch operátorû mají tyto veì
vyhodnocování vÿrazû p⌐ednost p⌐ed ostatními operátory. Dále seì
vyhodnocují závorky a aæ na konci matematické vÿpoçty. Pokudì
budete chtít zapsat v programu nêkolik vÿrazû spojenÿch logickÿmì
operátorem, musíte umístit vÿrazy do závorek. Nap⌐íklad proì
zji¿têní rozsahu hotovosti od 10 Kç do 30 Kç pouæijeteì
následující zápis:
IF (hotovost >= 10) and (hotovost <= 30) THEN
WRITELN("Kino") {pokud je podmínka splnêna}
ELSE
WRITELN("Televize") {pokud není podmínka splnêna}
ENDIF;
V této lekci jsme si probrali mimo moænosti rozvêtvení çinnostiì
programu také zpûsob zápisu podmínek v programu. Podmínky seì
v programu pouæívají i v dal¿ích p⌐íkazech. Nap⌐íklad pro zadáníì
poçtu opakování zvolené çásti programu, jak si ukáæemeì
v následující lekci.
13.lekce - programové cykly (FOR, REPEAT, UNTIL)
Aæ doposud provádêly na¿e programy pouze zadanÿ sled povelû bezì
moænosti opakování poæadovanÿch akcí. Pokud by jsme pot⌐ebovaliì
nap⌐íklad vykonat nêjakou çást programu stokrát, museli by jsmeì
uvedenou çást programu zapsat stokrát. To by v¿ak bylo, jak samiì
jistê uznáte znaçnê nevhodné. V této lekci si proto probereme,ì
jak je moæné na základê vyhodnocení podmínek opakovat zadanouì
çást programu.
Pokud budete pot⌐ebovat v programu provést nêjakou akciì
s p⌐edem známÿm poçtem opakování, bude nejvhodnêj¿í pouæít cyklusì
typu FOR..ENDFOR. Jedná se o cyklus, ve kterém je definován tzv.ì
çítaç, kterÿ udává kolikrát se má cyklus je¿tê provést. Çítaç jeì
automaticky systémem zvy¿ován o zadanou hodnotu. Smêr naçítáníì
mûæe bÿt p⌐itom nahoru, nebo dolû:
VAR
x : real
ENDVAR
PROCEDURE main
ConsoleClear;
FOR x := 1 to 3 step 0.5 {cyklus nahoru, udán krok}
WRITELN(x:10:1);
ENDFOR
FOR x := 5 downto 1 {cyklus smêrem dolû}
WRITELN(x:10);
ENDFOR
ENDPROC
V uvedeném p⌐íkladê jsou v programu dva cykly FOR. První z nichì
zvy¿uje stav çítaçe x smêrem nahoru, druhÿ smêrem dolû. V¿imnêteì
si, æe çítaç musí bÿt sice deklarován jako promênná, aleì
p⌐i⌐azení poçáteçní hodnoty se provádí aæ v definici cyklu.ì
Koneçná hodnota çítaçe se pro smêr naçítání nahoru zadává zaì
klíçovÿm slovem 'to'. Pro smêr naçítání dolû je urçeno klíçovéì
slovo 'downto'. Pokud chceme zvy¿ovat, nebo sniæovat stav çítaçeì
o jinou hodnotu neæ jedna, musíme poæadovanou hodnotu uvést zaì
klíçovÿm slovem 'step'. Hodnota ⌐ídící promênné se nesmí v cykluì
mênit. Hodnoty cyklu jsou vyhodnocovány pouze jednou a to p⌐iì
spu¿têní p⌐íkazu FOR.
Dûleæitá poznámka: promênná x je v p⌐edchozím p⌐íkladêì
deklarována jako typ real, to znamená æe mûæe nabÿvatì
i desetinnÿch hodnot. Pokud by jste uvedli v tomto p⌐íkladêì
promênnou x jako typ integer, zvy¿oval by se çítaç vædy siceì
o hodnotu 0.5 ale protoæe typ integer je pouze celoçíselnÿ, keì
zvÿ¿ení çítaçe by nikdy nedo¿lo a program by skonçil v nekoneçnéì
smyçce. Museli by jste jej restartovat pomocí volbou z menuì
Program/Restart programu.
Pokud budete chtít ve svém programu pouæít cyklus, jehoæì
ukonçení bude záviset na splnêní zadané podmínky, máte moænostì
pouæít cyklus typu REPEAT..UNTIL. Vnit⌐ní çást tohoto cyklu seì
provede vædy minimálnê jednou, protoæe podmínka ukonçení cyklu jeì
uvedena aæ na jeho konci:
VAR
x : real
ENDVAR
PROCEDURE main
ConsoleClear;
x := 1;
REPEAT {zaçátek cyklu}
WRITELN(x/(x+1):10:3);
x := x+1; {zvÿ¿ení hodnoty çítaçe}
UNTIL x = 5 {dokud není vÿraz pravdivÿ}
ENDPROC
P⌐íkazy uvedené mezi klíçovÿmi slovy REPEAT a UNTIL se provádíì
tak dlouho, dokud není vÿraz definovanÿ na konci podmínkyì
pravdivÿ. Nesmíte p⌐itom zapomenout na zvÿ¿ení hodnoty çítaçe,ì
p⌐ípadnê provést jinou akci, která mûæe mít za následek ukonçeníì
cyklu.
Jako dal¿í cyklus mûæete pouæít WHILE..ENDWHILE, kterÿì
vyhodnocuje podmínku opakování cyklu na jeho poçátku. Toì
umoæñuje, æe pokud není podmínka splnêna, neprovedou se p⌐íkazyì
uvedené mezi klíçovÿmi slovy WHILE a ENDWHILE ani jednou. To mûæeì
bÿt v nêkterÿch p⌐ípadech vÿhodné a je proto nutné se p⌐iì
vlastním programování rozhodnout, kterÿ druh cyklu má bÿt pouæit.
VAR
x : integer
ENDVAR
PROCEDURE main
ConsoleClear;
x := 1;
WHILE x < 5 {dokud je vÿraz pravdivÿ}
WRITELN(x*3:10);
x := x+1; {zvÿ¿ení hodnoty çítaçe}
ENDWHILE {konec cyklu}
ENDPROC
Pro zápis podmínek p⌐i pouæívání cyklû platí v¿e co byloì
uvedeno u popisu vêtvení programu p⌐íkazem IF..ENDIF. Stejnê takì
je velmi vÿhodné a hlavnê p⌐ehledné v textu programu odsaditì
⌐ádky programu uvnit⌐ cyklû o t⌐i prázdné znaky doprava. Viz vÿ¿eì
uvedené p⌐íklady. Programy tím získají na p⌐ehlednosti. Souçasnêì
doporuçujeme uvádêt v programu poznámky ve formê komentá⌐e. Jakì
jste si jiæ mohli v¿imnout, poznámky se uvádêjí ve sloæenÿchì
závorkách. Pokud by jste na zaçátku ⌐ádku uvedli dvê lomítka, bylì
by text aæ do konce ⌐ádku v programu ignorován.
V nêkterÿch p⌐ípadech mûæete pot⌐ebovat, aby se cyklus WHILE,ì
REPEAT nebo FOR p⌐edçasnê p⌐eru¿il a pokraçoval dal¿ím cyklem odì
zaçátku. K tomu se pouæívá p⌐íkaz CONTINUE, kterÿ je vyhodnocenì
jako ENDWHILE, UNTIL nebo ENDFOR a ⌐ízení programu je p⌐edánoì
zpêt na zaçátek cyklu. Klíçové slovo je p⌐itom uvedeno aæ zaì
p⌐íkazy, které se mají provést vædy, je¿tê p⌐ed ukonçenímì
(p⌐eru¿ením) cyklu. Pokud se p⌐íkaz pouæije mimo smyçku, jeì
vyvoláno chybové hlá¿ení. Následující p⌐íklad kreslí pomocíì
vykreslování bodû çáry s p⌐eru¿ením uprost⌐ed.
VAR
x : integer
ENDVAR
PROCEDURE main
ImageInit(100,100); {Inicializuje grafickou plochu}
ImageShow; {zobrazí grafickÿ vÿstup }
ImagePenColor(clBlue); {nastaví modrou barvu}
FOR x := 1 to 100;
Point(25,x,3);
Point(75,x,3);
IF (x > 25) and (x < 75) then
CONTINUE; {p⌐eru¿í cyklus s návratem}
ENDIF
Point(50,x,3); {pro x od 25 do 75 se neprovede !}
ENDFOR
ImagePenColor(clRed); {nastaví çervenou barvu}
Point(GetmaxX/2,GetmaxY/2,30); {nakreslí bod doprost⌐ed}
ENDPROC
V této lekci jsme se zabÿvali nêkolika p⌐íkazy, které v¿akì
provádêly podobnou çinnost. P⌐íkazy cyklu jsou v programech velmiì
çasto pouæívané. Je v¿ak nutné si podle poæadovanÿch akcí vybratì
nevhodnêj¿í p⌐íkaz pro cyklus.
14.lekce - zadání vstupních hodnot, tisk vÿsledkû
U programû v p⌐edchozích lekcích jsme vædy poçítali s tím, æeì
jsou v¿echna data pro vÿpoçty zadána p⌐ímo v programu. Aby jsmeì
ale mêli moænost ovlivnit prûbêh vÿpoçtu, bylo by vhodné zadávatì
poæadované hodnoty p⌐ímo dotazem od uæivatele. To je moæné dvêmaì
zpûsoby. Buâ pouæijeme p⌐íkaz READ, kterÿ umoæñuje mimo jinéì
uæivatelské zadaní hodnoty promênné, nebo sloæitêj¿í postup, kdyì
pouæijeme interaktivní knihovnu pro tvorbu formulá⌐û.
P⌐íkaz READ se pouæívá pro vstup hodnoty promênné ze souboru,ì
nebo od uæivatele z klávesnice. Hodnotu potom mûæeme pouæít dáleì
v programu k vÿpoçtûm. Promênná musí bÿt nejprve definována.ì
Moæné je pouæít pouze çíselné a ⌐etêzcové promênné. Çtení hodnotyì
ze souboru si ukáæeme pozdêji, nyní si p⌐edvedeme, jak zadatì
promênnou z klávesnice.
P⌐íkaz READ vyvolá jednoduchÿ formulá⌐ s moæností zadáníì
hodnoty promênné. Jméno formulá⌐e je 'vstup' a pokud by jsteì
chtêli umístit nad editaçní box pro zadání hodnoty promênné vá¿ì
text, museli by jste text vypsat p⌐íkazem WRITE (pozor, neì
WRITELN !) je¿tê p⌐ed pouæitím p⌐íkazu READ. Zadanÿ text seì
samoz⌐ejmê také vypí¿e do textového vÿstupního okna. Toho lzeì
vyuæít pro následné zadání vÿstupních hodnot. Pokud by vám vÿpisì
textu vadil, je moæné nejprve navstupovat poæadované vstupníì
hodnoty, vymazat obsah vÿstupního okna a aæ potom provést vÿpoçtyì
a zobrazení vÿsledkû. Následuje p⌐íklad pouæití p⌐íkazu READ.
VAR
s : string;
r : real;
ENDVAR
PROCEDURE main
ConsoleClear;
WRITE("Zadejte celé çíslo");
READ(s);
WRITELN();
WRITELN("Zadal jste çíslo:",StrToInt(s):12);
WRITELN();
WRITE("Zadejte libovolné çíslo");
READ(r);
WRITELN();
WRITELN("Zadal jste çíslo:",r:12:4);
WRITELN();
WRITE("Zadejte libovolnÿ ⌐etêzec");
READ(s);
WRITELN();
WRITELN("Zadal jste ⌐etêzec: ",s);
WRITELN();
ENDPROC
-------------------------------------------------------------
POZOR !!!
V souçasné verzi nesmíte zadat p⌐i vstupu do çíselné promênnéì
nenumerickÿ znak. Pokud tak uçiníte, bude vÿsledkemì
nulová hodnota. V dal¿ích verzích bude upraveno.
-------------------------------------------------------------
Se sloæitêj¿ím, ale efektnêj¿ím zpûsobem se seznámíme p⌐iì
probírání interaktivní knihovny, která umoæñuje definovatì
v programu vzhled i obsah formulá⌐e. Zkuste si proto zatímì
alespoñ následující p⌐íklad:
VAR
jmeno : string = '';
rok1 : integer = 1900; rok2 : integer;
mesic : integer;
den1 : integer; den2 : integer;
ENDVAR;
ROCEDURE formular;
createForm('form1',"Vítám Vás !", 100, 100, 270, 180);
addStatic ('form1',"Dobrÿ den,", 10, 15, 200, 14);
addStatic ('form1',"jaké je Va¿e jméno ?",10,45,200,14);
addEditBox('form1','jmeno', 'jmeno', 10, 80, 250, 20);
addStatic('form1',"narodil jste se v roce:",10,120,200,14);
addEditBox('form1','rok1', 'rok1', 210, 120, 40, 20);
ENDPROC;
PROCEDURE main
formular;
IF (formDialog("form1"))
ConsoleClear;
WRITELN('Dobrÿ den ' + jmeno, ', p⌐eji pêknÿ den !');
GetDate(rok2, mesic, den1, den2);
WRITE("dnes je ", den1, "/", mesic, "/", rok2, ", ");
WRITELN("je Vám ", rok2-rok1, " rokû.");
ENDIF
ENDPROC
Takæe jak zadávat obsah promênné od uæivatele jiæ známe. Vímeì
také, jak vypsat jejich obsah s p⌐ípadnou dal¿í úpravou doì
textového vÿstupního okna. Zatím jsme se ale nic nedozvêdêliì
o tom, jak je moæné provést vÿstup informací na tiskárnu. Systémì
sice neobsahuje æádné p⌐íkazy pro p⌐ímÿ tisk na tiskárnu,ì
dovoluje vám ale vytisknout kompletní obsah textového vÿstupníhoì
okna. Musíte proto nejprve provést vÿstup poæadovanÿch informacíì
a textû do vÿstupního okna a potom p⌐íkazem ConsolePrintì
vytisknout jeho obsah. Mûæete také po ukonçení programu, kdy seì
zobrazí poæadované vÿsledky ve vÿstupním oknê provést jeho tiskì
pomocí ikony s obrázkem tiskárny, umístêné v horní li¿têì
textového vÿstupního okna.
15. lekce - vícenásobné vêtvení programu
V jedné z p⌐edchozích lekcí jsme se seznámili s p⌐íkazemì
IF..ENDIF, kterÿ slouæí pro vêtvení çinnosti programu. Poznaliì
jsme, æe mûæeme çinnost programu rozdêlit do dvou vêtví, podleì
pravdivosti zadané podmínky. Pokud by jste v¿ak pot⌐ebovaliì
rozdêlit çinnost programu podle vÿsledku na více vêtví, byl byì
zápis pomocí p⌐íkazu IF velmi nep⌐ehlednÿ. Proto systém obsahujeì
p⌐íkaz SWITCH, kterÿ mûæete pouæít pro rozdêlení çinnostiì
programu do libovolného poçtu vêtví na základê vyhodnoceníì
vÿsledku zadané podmínky. Pokud budete nap⌐íklad pot⌐ebovat proì
kaædé çíslo samostatnou akci, mûæete tak uçinit podleì
následujícího p⌐íkladu:
VAR
x : integer
ENDVAR
PROCEDURE main
ConsoleClear;
FOR x := 1 to 10;
SWITCH x OF {porovnávej promênnou x }
CASE 1: {pokud má hodnotu 1 }
WRITELN("çíslo jedna");
ENDCASE
CASE 5: {pokud má hodnotu 5 }
WRITELN("çíslo pêt");
ENDCASE
ELSE {pokud má jinou hodnotu}
WRITELN(x:10);
ENDCASE
ENDSWITCH
ENDFOR
ENDPROC
Za klíçové slovo SWITCH se v programu uvádí hodnota, neboì
vÿraz, kterÿ se potom následnê povelem CASE vyhodnocuje. Pokud seì
hodnota, nebo vÿsledek vÿrazu rovná nêkterému z vÿrazû uvedenÿchì
za klíçovÿm slovem CASE, bude proveden blok p⌐íkazû za tímtoì
vÿrazem. Program bude potom pokraçovat po ukonçení konstrukceì
p⌐íkazu klíçovÿm slovem ENDSWITCH. Pokud se vÿraz nebude rovnatì
æádnému z porovnávanÿch vÿrazû, provede se blok p⌐íkazû uvedenÿì
mezi klíçovÿmi slovy ELSE a ENDCASE.
Jedná se o pomêrnê dosti sloæitou konstrukci jazyka. Proì
názorné p⌐edvedení proto mûæete program spustit klávesou F6ì
v animaçním reæimu, kdy systém zobrazuje postupnê ⌐ádek programu,ì
kterÿ právê vykonává. V¿imnête si p⌐itom, æe ⌐ádky, kteréì
nevyhovují zadání jsou p⌐eskakovány. Pokud nebudete staçitì
sledovat animaci, mûæete zkusit krokování programu poì
jednotlivÿch ⌐ádcích. Po stisku klávesy F7 se vykoná vædy pouzeì
jeden ⌐ádek programu.
16.lekce - struktura programu
Aæ dosud se na¿e programy skládaly pouze ze dvou çástí. V prvníì
çásti uvedené mezi slovy VAR a ENDVAR jsme deklarovali dáleì
pouæívané promênné. Ve druhé çásti se mezi klíçovÿmi slovyì
PROCEDURE a ENDPROC uvádêly jednotlivé p⌐íkazy programu. Takovÿmì
çástem programu se ⌐íká bloky. Zaçátek i konec bloku je vædyì
definován p⌐íslu¿nÿmi klíçovÿmi slovy pro zaçátek a konec bloku.ì
V programu mohou bÿt mimo deklarací a hlavního p⌐íkazového blokuì
uvedeny i dal¿í çásti, se kterÿmi jsme se dosud neseznámili. Vizì
následující schématická struktura programu:
TYPE
{definice datovÿch typû - záznamû}
ENDTYPE
VAR
{deklarace promênnÿch}
ENDVAR
PROCEDURE ...
{deklarace uæivatelské procedury}
ENDPROC
FUNCTION ...
{deklarace uæivatelské funkce}
ENDPROC
PROCEDURE main
{têlo hlavního programu}
ENDPROC
Definice datovÿch typû
Datové typy jsou uæivatelsky definované typy promênnÿch, kteréì
umoæñují nap⌐íklad seskupovat nêkolik promênnÿch a pouæívat jeì
jako jednu strukturovanou promênnou. Podrobnêji budou popsányì
pozdêji.
Deklarace promênnÿch
Jiæ znáte. Jsou uvedeny v bloku mezi klíçovÿmi slovy VARì
a ENDVAR. Obsahují deklarace promênnÿch, urçení jejich typuì
a p⌐ípadné stanovení poçáteçní hodnoty. Podrobnêji se k nim je¿têì
vrátíme pozdêji.
Deklarace uæivatelskÿch procedur
Procedury jsou uæivatelsky definované p⌐íkazy, které umoæníì
lépe rozçlenit program do logickÿch celkû a vícenásobné pouæitíì
çásti kódu. Podrobnêji se budeme procedurami zabÿvatì
v následující lekci.
Deklarace uæivatelskÿch funkcí
Funkce se pouæívají pro uæivatelskou definici zpracování vÿrazûì
s moæností vícenásobného pouæití v programu. Podrobnêji se budemeì
funkcemi zabÿvat v následující kapitole.
Têlo hlavního programu
Musí bÿt uvedeno v kaædém programu a musí bÿt obsaæenoì
v procedu⌐e se jménem main, kterou doporuçujeme umístit vædy naì
konec programu. Jejím provádêním se zaçíná vædy çinnost programu.ì
Pokud by nebyla procedura se jménem main v programu nalezena,ì
systém by nahlásil chybu a program by byl ukonçen.
Standardní jazyk Pascal dodræuje mnohem p⌐ísnêj¿í formát zápisuì
programu. Platí p⌐itom obecné pravidlo, æe kaædÿ prvek programuì
se musí v jazyce Pascal nejprve deklarovat a aæ potom se mûæeì
pouæívat. Bloky v programech v jazyce Pascal jsou vyznaçenyì
klíçovÿmi slovy Begin a End místo námi pouæívaného ukonçeníì
ENDIF, ENDFOR, ENDPROC a podobnê. Námi pouæívané ⌐e¿ení vycházíì
z jazykû pouæívanÿch pro programování databází. Má tu vÿhodu, æeì
je mnohem p⌐ehlednêj¿í a rychleji se jej nauçíte pouæívat.
Bloková struktura programu se dodræuje i u dal¿ích, d⌐íveì
probranÿch p⌐íkazû. Jedná se o rozhodovací p⌐íkaz IF..ENDIFì
a v¿echny p⌐íkazy cyklû FOR..ENDFOR, REPEAT..UNTILì
a WHILE..ENDWHILE. V¿echny struktury programu musí bÿt ukonçenyì
svÿm p⌐íslu¿nÿm ukonçením. Bloky mohou bÿt do sebe vno⌐ovány,ì
nesmí v¿ak docházet k p⌐esahûm jejich koncû. Proto je vhodnéì
dodræovat grafickou úpravu programu, kdy jsou pod⌐ízené çástiì
blokû odsazeny od svého poçátku a konce. Tím se dosáhne souçasnêì
p⌐ehlednosti programu.
Jak jiæ bylo uvedeno, musí bÿt v programy vædy definovánaì
procedura se jménem main. Co jsou to procedury a jak je mûæemeì
vyuæít si ukáæeme v následující lekci.
17.lekce - deklarace a pouæívání procedur
Doposud jsme v na¿ich programech pouæívali pouze p⌐íkazyì
zabudované v systému. Nyní si ale p⌐edvedeme, jak si mûæemeì
naprogramovat vlastní p⌐íkazy. Urçitê jste se jiæ setkali s tím,ì
æe pokud by jste seskupili nêkolik ⌐ádkû programu, které seì
v uvedené sestavê v programu nêkolikrát opakují do jednoho, bylì
by program p⌐ehlednêj¿í a krat¿í. Na to mûæete pouæít procedury,ì
kterÿm se také nêkdy ⌐íká podprogramy.
Procedury jsou volány z hlavního programu, vykonají p⌐íkazyì
zadané ve svém têle procedury a po jejím ukonçení p⌐edajíì
vykonávání programu zpêt do hlavního programu. Procedury jsouì
v programu oznaçeny klíçovÿmi slovy PROCEDURE a ukonçeny klíçovÿmì
slovem ENDPROC, mezi nimiæ jsou uvedeny vÿkonné p⌐íkazyì
procedury. Kaædá procedura musí bÿt pojmenována. V programu seì
p⌐itom nesmí vyskytovat více procedur se stejnÿm jménem.ì
Následuje p⌐íklad jednoduché procedury:
VAR
a : integer = 10;
b : integer = 3;
ENDVAR
PROCEDURE nadpis
WRITELN("**************************");
WRITELN("* poçítá systém KLONDAIK * ");
WRITELN("**************************");
ENDPROC;
PROCEDURE main
nadpis;
WRITELN("souçet :", a+b:10:3):
nadpis;
WRITELN("rozdíl :", a-b:10:3):
nadpis;
WRITELN("násobek:", a*b:10:3):
ENDPROC
V p⌐íkladê jsme definovali proceduru se jménem nadpis, kteráì
vædy mezi vÿpoçty vypí¿e t⌐i ⌐ádky nadpisu. V hlavní procedu⌐eì
main jiæ potom staçí zadat volání procedury nadpis. Systém v tomì
okamæiku vypí¿e vædy t⌐i ⌐ádky nadpisu. Tím jsme u¿et⌐ili místoì
a program je p⌐ehlednêj¿í.
Jistê budete souhlasit s tím, æe moænost pouæívání procedur jeì
zajímavá vlastnost systému, æe by ale byla je¿tê zajímavêj¿í,ì
pokud by procedura dokázala pracovat s rûznÿmi vstupnímiì
hodnotami. To je také moæné, musíme v¿ak ve volání proceduryì
i v její deklaraci uvést seznam parametrû a upravit p⌐íkazyì
uvnit⌐ procedury tak, aby dokázaly s promênnÿmi parametryì
pracovat. Pokud by jste nap⌐íklad pot⌐ebovali nakreslit doì
grafického vÿstupního okna na zadanou pozici çtverec s délkouì
hrany 20 bodû, mohli by jste pouæít následující p⌐íklad:
VAR
k : integer;
ENDVAR
PROCEDURE ctverec(x : integer, y : integer);
Rectangle(x, y, x+20, y+20);
ENDPROC
PROCEDURE main
ImageInit(100,100);
ImageBrushColor(clYelow);
Rectangle(5, 5, 95, 95);
ImageBrushColor(clRed);
FOR k:= 10 to 70 step 30
ctverec(10, k);
ctverec(40, k);
ctverec(70, k);
ENDFOR
ENDPROC
Procedura ctverec je volána se dvêmi parametry uvedenÿmiì
v závorce, oddêlenÿmi çárkou. Procedura má ve své definiciì
deklarovány promênné x a y, které se dále v procedu⌐e pouæívají.ì
Do uvedenÿch promênnÿch se p⌐evedou hodnoty zadané ve voláníì
procedury. Procedura potom se zadanÿmi hodnotami pracuje. Tak jeì
umoænêno p⌐edávat procedu⌐e ke zpracování vstupní hodnoty.
Pokud má procedura pracovat s p⌐edávanÿmi parametry, je nutnéì
v deklaraci procedury uvést za jejím jménem v závorce seznamì
pouæitÿch promênnÿch. V seznamu se uvádí jméno promênné a zaì
dvojteçkou její typ. Promênné jsou v seznamu oddêlovány çárkami.ì
Poçet deklarovanÿch promênnÿch v procedu⌐e musí p⌐itom vædyì
odpovídat poçtu p⌐edávanÿch parametrû ve volání procedury.
Zkuste nyní upravit proceduru ctverec i její volání tak, abyì
jste mohli zadávat ve volání procedury i délku strany çtverce.ì
Musíte proto p⌐idat do volání procedury dal¿í parametr. Stejnêì
tak budete muset p⌐idat parametr do deklarace procedury. Parametrì
potom pouæijete pro zadání délky hrany çtverce.
Pokud v programu nadeklarujete svou vlastní proceduru a programì
spustíte, zachová si systém informace o deklarované procedu⌐eì
i po ukonçení programu. Mûæete potom proceduru pouæítì
z p⌐íkazového okna jako souçást systému. To je velmi vÿhodnáì
vlastnost, protoæe vám umoæñuje seznámit se dokonale s moænostmiì
vlastnosti jazyka.
Pomocí deklarace procedur dosáhnete toho, æe si mûæeteì
definovat své vlastní p⌐íkazy. Je p⌐itom moæné volané procedu⌐eì
zadávat p⌐edávané parametry. Není ale moæné, aby proceduraì
vracela zpêt vÿsledek provedení procedury. To vám umoæní aæì
funkce, které budou probrány v následující lekci.
18.lekce - deklarace a pouæívání funkcí
V p⌐edchozí lekci jsme si ukázali, jak si nadefinovat vlastníì
p⌐íkaz ve formê procedury. Mnohdy by ale bylo vÿhodné, pokud byì
jsme mohli volat proceduru jako souçást vÿrazu tak, aby námì
vrátila procedura vÿsledek, se kterÿm by jsme ve vÿrazu dáleì
pracovali. Nêco takového je sice moæné, pouæívají se k tomu aleì
funkce.
Funkce je definovaná çást programu, která je volaná z vÿrazuì
a provádí urçité vÿpoçty, p⌐ípadnê akce. P⌐i ukonçení funkce námì
vrací poæadovanÿ vÿsledek, se kterÿm se ve vÿrazu, odkud bylaì
funkce volána dále pracuje. Uveâme si proto p⌐íklad deklaraceì
a pouæití funkce v programu, kterÿ nám provádí vÿpoçet mocninyì
zadanÿm exponentem (53 = 5 x 5 x 5, vÿsledek je 125).
VAR
k : integer;
v : real;
ENDVAR
FUNCTION umocni(x : integer, y : integer): integer
v := x; {p⌐evezneme základ}
FOR k := 1 to y
v := v*x; {násobíme opakovanê základem}
ENDFOR
umocni := v; {p⌐edáme vÿsledku funkce}
ENDFUNC
PROCEDURE main
ConsoleClear;
WRITELN(umocni(2,9):10); {vypí¿e hodnotu 1024}
WRITELN(umocni(3,3):10); {vypí¿e hodnotu 81}
WRITELN(umocni(5,2):10); {vypí¿e hodnotu 125}
ENDPROC
Funkce se od procedury li¿í svÿm zahájením a ukonçením, kdy jeì
vÿpoçet funkce uveden mezi klíçová slova FUNCTION a ENDFUNC.ì
V deklaraci funkce se navíc od procedury musí uvést za seznamemì
p⌐ebíranÿch parametrû i typ vÿsledku, kterÿ funkce vrací.
Dal¿í odli¿ností je zpûsob vytvo⌐ení hodnoty vÿsledku funkce.ì
To je vÿsledku, kterÿ bude p⌐edán zpêt. Jsou p⌐itom dvê moænosti.ì
První z nich je standardní a pouæívá ji i jazyk Pascal a proto jiì
doporuçujeme preferovat. Na konci zpracování funkce zapí¿emeì
p⌐i⌐azovací p⌐íkaz:
identifikátor := vÿraz;
kde na levé stranê p⌐i⌐azovacího p⌐íkazu je uvedeno jménoì
funkce a na pravé stranê její vÿsledná hodnota. Pozor na to, æeì
identifikátor p⌐itom není deklarován jako promênná. Je to proto,ì
æe stejnê jako si systém deklaruje sám promênné, které seì
p⌐edávají jako parametry procedury a funkce, stejnê tak si systémì
deklaruje i promênnou se jménem deklarované procedury.
Druhou moæností pro p⌐edání vÿsledné hodnoty je p⌐íkaz RETURNì
s uvedením návratové hodnoty:
FUNCTION umocni(x : integer, y : integer): integer
v := x; {p⌐evezneme základ}
FOR k := 1 to y
v := v*x; {násobíme opakovanê základem}
ENDFOR
RETURN v; {p⌐edáme vÿsledek funkce}
ENDFUNC
Uvedené pouæití vychází z jazyka BASIC a databázovÿch jazykû.ì
Mûæe bÿt v nêkterÿch p⌐ípadech jednodu¿¿í, jak v¿ak jiæ byloì
uvedeno, nejedná se o standardní postup jazyka Pascal.
Pokud v programu nadeklarujete svou vlastní funkci a programì
spustíte, zachová si systém informace o deklarované funkci i poì
ukonçení programu. Mûæete potom funkci pouæít u p⌐íkazûì
z p⌐íkazového okna jako souçást systému. To je velmi vÿhodnáì
vlastnost, protoæe vám umoæñuje seznámit se dokonale s moænostmiì
vlastnosti jazyka.
19.lekce - lokální a globální promênné
V p⌐edchozích lekcích jsme v programu deklarovali promênnéì
v samostatném bloku umístêném na zaçátku programu. Nadeklarovanéì
promênné p⌐itom platily po celou dobu programu a zûstávalyì
aktivní dokonce i po ukonçení programu. Tomu se ⌐íká globálníì
platnost promênné, protoæe je dosaæitelná kdykoliv z libovolnéì
procedury v programu. Opakem je promênná deklarovaná pouzeì
s lokální dobou platnosti. Pro dokonalej¿í seznámení seì
s lokálními a globálními promênnÿmi si upravíme d⌐íve uvedenÿì
p⌐íklad z lekce zabÿvající se funkcemi do následující podoby:
VAR
v : integer = 999;
ENDVAR
FUNCTION umocni(x : integer, y : integer): integer
VAR
k : integer;
v : real;
ENDVAR
v := x; {p⌐evezmeme základ}
WRITELN("p⌐edávaná hodnota x:",x:4);
WRITELN("lokální hodnota v:",v:4);
FOR k:= 1 to y
v := v*x; {násobíme opakovanê základem}
ENDFOR
umocni := v; {p⌐edáme vÿsledku funkce}
ENDPROC
PROCEDURE main
ConsoleClear;
WRITELN("globálnní hodnota v:",V:4);
WRITELN(umocni(2,9):10); {vypí¿e hodnotu 1024}
WRITELN(umocni(3,3):10); {vypí¿e hodnotu 81}
WRITELN("globálnní hodnota v:",V:4);
ENDPROC
V¿imnête si, æe program obsahuje dva bloky s deklarovanÿmiì
promênnÿmi. Deklaraçní blok na zaçátku programu obsahuje pouzeì
promênnou 'v' s p⌐idêlenou hodnotou. Tato promênná, protoæe jeì
deklarována mimo jakékoliv procedury je globální a dosaæitelnáì
v celém programu. V definované funkci umocni je uveden znovu blokì
definice promênnÿch, kde je opêt deklarována promênná se jménemì
'v' (dokonce rozdílného typu). Tato promênné je pouze lokální, toì
znamená, æe je platná pouze ve funkci, kde byla deklarována.ì
Pokud deklarujeme lokální promênou stejného jména, jaké má jiæì
existující globální promênná, zastíní lokální promênná po dobuì
své platnosti d⌐íve definovanou globální promênnou.
Pokud vÿ¿e uvedenÿ program spustíme, bude se mimo vÿpoçtuì
vypisovat i obsah zadanÿch promênnÿch. V¿imnête si, æe pokudì
vypí¿eme stav promênné 'v' z hlavní procedury main, bude vypsánaì
vædy hodnota, která byla p⌐idêlena promênné p⌐i její deklaraci.ì
Vypsána je tedy hodnota promênné s globální platností v celémì
programu. Pokud se bude vypisovat hodnota promênné 'v' z funkceì
umocni, bude se vypisovat hodnota lokální promênné, která doçasnêì
p⌐ekryje globální promênnou. Mûæeme také vypsat hodnotu promênnéì
'x', kterou jsme sami ani nedeklarovali. Deklaroval si ji opêtì
doçasnê sám systém pro p⌐evedení hodnoty z nad⌐azeného programu.
Moæná se vám bude zpoçátku zdát pouæívání a sledování lokálníchì
a globálních promênnÿch nep⌐ehledné. Jejich pouæívání ale umoæníì
zp⌐ehlednêní programu. V nêkterÿch p⌐ípadech je správné pochopeníì
rozsahu platnosti lokálních a globálních promênnÿch dokonceì
nutné. Je to nap⌐íklad problém rekurze, kdy z têla funkce volámeì
stejnou funkci (volání funkce sebe sama).
20. lekce - rekurze v programu
Rekurzívní funkce (nebo procedura) bêhem provádêní p⌐íkazûì
svého têla vyvolá je¿tê p⌐ed jeho ukonçením sama sebe. Znovu seì
tedy zaçne provádêt tatáæ posloupnost p⌐íkazû, aniæ by pûvodníì
byla dokonçena. Pokud budeme chtít nap⌐íklad vypoçítat faktoriálì
nêjakého çísla, musíme postupnê vynásobit poæadované çíslo v¿emiì
çísly niæ¿ími vædy o jedniçku. Faktoriál çísla 5 se nap⌐íkladì
vypoçítá vztahem 5*4*3*2*1. Pokud budeme chtít pro vÿpoçetì
faktoriálu napsat obecnou funkci, mûæeme vztah upravit doì
následujícího tvaru: 5*(4*(3*(2*(1)))). Zde je jiæ vidêt, æe jeì
moæné p⌐i násobení sníæit vædy základ o jedniçku a násobitì
opakováním vÿsledku volané funkce. Funkce pro vÿpoçet faktoriáluì
bude mít proto následující zápis:
FUNCTION factorial(n: real): real;
IF (n = 0) then
factorial := 1
ELSE
factorial := n*factorial(n-1); { REKURZE ! }
ENDIF
ENDFUNC;
PROCEDURE main
ConsoleClear;
WRITELN('Test rekurze:');
WRITELN('faktoriál çísla 1 je:', factorial(1):5); {= 1}
WRITELN('faktoriál çísla 2 je:', factorial(2):5); {= 2}
WRITELN('faktoriál çísla 3 je:', factorial(3):5); {= 6}
WRITELN('faktoriál çísla 4 je:', factorial(4):5); {= 24}
WRITELN('faktoriál çísla 5 je:', factorial(5):5); {= 120}
WRITELN('faktoriál çísla 6 je:', factorial(6):5); {= 720}
WRITELN('faktoriál çísla 7 je:', factorial(7):5); {=5040}
ENDPROC;
V¿imnête si, æe uvedenÿ program neobsahuje æádnou deklaraciì
promênnÿch a p⌐esto je pouæívá. Je to proto, æe promênné jsouì
deklarovány systémem v deklaraci funkce.
Má-li rekurzivnê aktivovaná funkce lokální promênné, je p⌐iì
kaædé aktivaci vytvo⌐ena nová sada lokálních promênnÿch, p⌐içemæì
p⌐i nové aktivaci zûstanou lokální promênné nad⌐azenÿch aktivacíì
zachovány. Kaædá aktivace funkce má tedy své lokální promênné.ì
K promênnÿm nad⌐azenÿch aktivací téæe procedury çi funkce neníì
p⌐ístup moænÿ. Po ukonçení aktivace zaniknou odpovídající lokálníì
promênné a platnÿmi se stanou lokální promênné nad⌐azenéì
aktivace.
Existují úkoly, jejichæ ⌐e¿ení vede na zápis programûì
s rekurzivními procedurami nebo funkcemi. Jsou to problémy, p⌐iì
jejichæ rozkladu na podproblémy vznikne problém, kterÿ je obdobnÿì
pûvodnímu, av¿ak je jednodu¿¿í. S tím také souvisí následujícíì
lekce, kde se budeme vênovat návrhu programu a rozkladu zadání naì
jednotlivé procedury.
21. lekce - návrh a zápis programu
V p⌐edchozích lekcích jsme se seznámili se základními p⌐íkazyì
systému a strukturou programu. Poznali jsme, æe program tvo⌐íì
posloupnost operací, vêtvení programu podle podmínek a opakováníì
çástí programu. Poznali jsme, æe program tvo⌐í i data, kteráì
program zpracovává. Nyní by bylo vhodné seznámit se s tím, jak byì
mêl novÿ program vznikat.
Je¿tê d⌐íve, neæ zaçneme psát novÿ program by jsme si mêliì
ujasnit poæadovanou çinnost programu. Nejlépe tak, æe seì
seznámíme nejprve s tím, jaké vÿsledky nám má program poskytnout.ì
Podle toho si musíme zadat poçáteçní podmínky a vstupní hodnoty.ì
Dal¿ím krokem by jiæ mêl bÿt rozklad problému tak, aby jsme siì
v blocích definovali çinnost programu od poçáteçních hodnot aæì
k poæadovanÿm vÿstupním hodnotám. Pokud nap⌐íklad zjistíme, æeì
musíme nejprve provést vÿpoçet vstupních hodnot a potom vÿslednéì
hodnoty zobrazit, mûæeme jiæ zaçít psát kostru programu:
PROCEDURE main
vypocet;
zobrazeni;
ENDPROC
Tím máme souçasnê zadány jména procedur, které musímeì
naprogramovat. Dále jiæ budeme provádêt postupnê rozklad dílçíchì
problémû na dal¿í podproblémy. V p⌐ípadê sloæitÿch zadání se mûæeì
dokonce stát, æe nejsme schopni sestavit ihned program proì
vy⌐e¿ení dílçích problémû, ale musíme znovu definovat rozkladì
problému na men¿í související posloupné akce. Uvedenÿm zpûsobemì
se snaæíme rozloæit poçáteçní zadání problému do postupnÿchì
krokû, které dále zjemñujeme. Na konci by jsme se mêli dostat doì
fáze, æe ⌐e¿ení jiæ zapisujeme p⌐ímo v programovém jazyce.ì
Soubêænê s tím up⌐esñujeme poæadovaná data a jejich uloæeníì
v promênnÿch definovaného typu.
Vÿ¿e uvedenému zpûsobu ⌐e¿ení programû se ⌐íká metoda návrhuì
programu shora dolû. To proto, æe od celkového zadání p⌐echázímeì
postupnê k jednotlivÿm dílçím úkolûm, které nakonec zadávámeì
v programovém jazyce.
Velmi dûleæité je také zaznamenání postupu ⌐e¿ení ve formêì
poznámek. Nyní se vám zdá v¿echno jasné. Pokud se v¿ak dostaneteì
k programu po del¿í dobê, nemusí vám bÿt ihned jasné, proç jsteì
postupovali uvedenÿm zpûsobem. Zaznamenávejte si proto maximumì
poznámek k ⌐e¿ení problému. Poznámky mohou bÿt v programu dvojíhoì
druhu. Pokud uvedeme na zaçátku ⌐ádky dvê lomítka za sebou, budeì
systém celÿ ⌐ádek ignorovat a bude jej povaæovat za poznámku.ì
Takto je moæné nap⌐íklad psát del¿í komentá⌐e, nebo p⌐i rûznÿchì
pokusech mûæeme zneplatnit celÿ ⌐ádek programu, aniæ by jsme jejì
museli vymazávat.
Druhou moæností zápisu vlastního komentá⌐e do programu jeì
pouæití sloæenÿch závorek. V¿e, co je v programu uvedeno meziì
levou a pravou sloæenou závorkou je povaæováno za komentá⌐ a jeì
systémem ignorováno. Tento druh poznámek je vÿhodné pouæívat naì
konci ⌐ádku pro zápis popisu provedené çinnosti ⌐ádku. Takto jeì
moæné oznaçit jako poznámku i text uprost⌐ed ⌐ádku, nebo nêkolikì
⌐ádkû najednou.
P⌐i zápisu programu se snaæte dodræovat grafickou úpravuì
programu, kdy jsou têla blokû odsazena od svého záhlaví o nêkolikì
znakû. Takovÿ program je potom i na první pohled lépe çitelnÿì
a snáze se hledají p⌐ípadné chyby.
Systém nerozli¿uje v programu malá a velká písmena. P⌐esto budeì
vhodné, pokud budete dodræovat jednotnou dále popsanou úpravu.ì
Nejvhodnêj¿í je pouæívat pro návê¿tí a ukonçení blokuì
(FOR..ELSE..ENDFOR) velká písmena. Stejnê tak je vhodné psátì
jména základních p⌐íkazû systému (READ, WRITELN, CONTINUE ..)ì
velkÿmi písmeny. Jména procedur a funkcí p⌐ebíraná z knihovenì
systému je vhodné zapisovat tak, aby vædy první písmeno slovaì
bylo velké. Sloæenÿm slovem se rozumí jméno sloæené z nêkolikaì
slov, mezi nimiæ nesmí bÿt mezera. Nap⌐íklad ImageInit,ì
ConsoleClear apod. Stejnÿm zpûsobem je vhodné pojmenovat vlastníì
víceznaková jména deklarovanÿch promênnÿch.
22. lekce - ladící a animaçní reæim programu
V p⌐edchozí lekci jsme se seznámili s tím, jak programì
navrhnout a sestavit. Nikdy v¿ak není zaruçeno, æe vám budeì
program ihned pracovat správnê. Chybu v programu vám mûæe ohlásitì
systém v p⌐ípadê chybnê deklarované promênné, ¿patnê zadanéhoì
p⌐íkazu a podobnê. Av¿ak i v p⌐ípadê, æe program probêhne aæ doì
konce bez vypsání chybového hlá¿ení, neznamená to, æe je programì
bez chyb. Chyba nemusí bÿt v samotném zápisu programu, aleì
v chybném sestavení algoritmu. Protoæe se takové chyby ¿patnêì
hledají, byl systém doplnên nêkolika pomûckami, dovolujícím chybyì
v programu nalézt.
V jedné z p⌐edchozích lekcí jsme si zbêænê ukázali animaciì
programu. P⌐i ní se program spou¿tí klávesou F6 p⌐ípadnê volbouì
z menu Program/Animace, nebo kliknutím na ikonu s obrázkem filmu.ì
Program p⌐itom bude mimo vykonávání naprogramované çinnostiì
souçasnê zobrazovat v oknê s programem ⌐ádku, kterou právêì
vykonává. Chod programu je souçasnê zpomalen tak, aby bylo moænéì
prûbêh animace programu sledovat. To nám umoæní kontrolovatì
prûbêh programu p⌐es jednotlivé p⌐íkazy, volání procedurì
a funkcí. Animaci programu máte moænost kdykoliv p⌐eru¿it tak, æeì
stisknete klávesu F9 a program bude pokraçovat normální rychlostíì
bez zobrazování vykonávaného ⌐ádku programu. Pokud by jste chtêliì
animaci pouze doçasnê pozastavit, mûæete tak uçinit kliknutímì
my¿í na ikonu s obrázkem STOP znaçky.
Dal¿í, velmi zajímavou moæností systému vzhledem k ladêníì
programu je schopnost prûbêæného vypisování hodnot promênnÿch.ì
Promênné se zobrazují ve svém samostatném oknê, které otev⌐eteì
z menu volbou Okna/Promênné. Zobrazí se vám tabulka se dvêmaì
ikonami v horní li¿tê. Levá ikona se pouæívá pro p⌐idání promênnéì
do tabulky, pravá ikona promênnou z tabulky zru¿í. Zkuste siì
proto napsat program, ve kterém pouæijete cyklus FOR..ENDFOR.ì
Mimo ⌐ídící promênné deklarujte i dal¿í promênné. Jménaì
promênnÿch zadejte i do tabulky pro sledování promênnÿch. Toì
uçiníte tak, æe kliknete my¿í na levou ikonu, a do dotazovacíhoì
okna zadejte jméno promênnou, kterou chcete sledovat. Po jejímì
zadání se zobrazí promênné v tabulce s uvedením, æe hodnotaì
promênné není definována. stejnÿm zpûsobem zadejte i dal¿íì
promênné, jejichæ stav budete chtít sledovat. P⌐i spu¿têníì
programu v reæimu animace sledujte souçasnê tabulku s hodnotamiì
promênnÿch. Dokud není v programu promênné p⌐idêlena hodnota,ì
zobrazuje se v jejich stavu tzv. nedefinovaná náhodná veliçina.ì
Po p⌐idêlení hodnoty a její kaædé zmênê je stav hodnoty promênnéì
v tabulce aktualizován. Mûæete proto sledovat, zda odpovídá jejíì
hodnota p⌐edpokládanÿm veliçinám.
Mimo reæimu animace, kdy jsou ⌐ádky programu vykonáványì
automaticky se zadanou çasovou prodlevou máte moænost programì
krokovat sami po jednotlivÿch ⌐ádcích. Krokování programu poì
⌐ádcích se aktivuje klávesou F7. Systém p⌐i kaædém stisku klávesyì
F7 provede pouze jeden ⌐ádek programu se souçasnÿm zobrazenímì
⌐ádky, kterou bude provádêt v následujícím kroku. Máte takì
moænost sami ovládat çasové prodlevy mezi provádêním jednotlivÿchì
⌐ádek programu. Souçasnê máte také moænost vÿ¿e popsanéhoì
zobrazení hodnot promênnÿch v p⌐íslu¿ném oknê. Pokud seì
z programu volá procedura, pokraçuje krokování programu ve volanéì
procedu⌐e. Pokud ale nechcete proceduru krokovat, stisknête naì
⌐ádku s procedurou místo F7 klávesu F8, která umoæní skok doì
procedury p⌐eskoçit. Program v takovém p⌐ípadê vykoná volanouì
proceduru bêænou rychlostí bez zobrazování provádênÿch ⌐ádekì
programu. Obdobnê to platí i pro volání funkce v programu.
Pokud budete chtít sledovat prûbêh programu aæ od urçitéhoì
místa, nastavte kurzor v oknê s programem na poæadované místoì
a spusƒte program funkçní klávesou F4. Program se spustí bêænouì
rychlostí a po dosaæení ⌐ádku programu, na kterém je kurzorì
p⌐ejde do ladícího reæimu. Dále budete mít moænost pokraçovat buâì
krokováním, animací nebo nap⌐íklad po kontrole hodnot promênnÿchì
pokraçovat bêænou rychlostí.
Vÿ¿e popsaná animace programu i jeho krokování vám dovolíì
sledovat prûbêh çinnosti programu a zmêny hodnot promênnÿch. Toì
vám umoæní poznat dûkladnêji çinnost p⌐íkazû pro cyklus a vêtveníì
programu. Krokování i animaci programu máte moænost kdykolivì
p⌐eru¿it s tím, æe çinnost programu buâ pozastavíte nebo spustíteì
bêænou rychlostí. P⌐eru¿ení se provede kliknutím my¿i na ikonu seì
STOP znaçkou. Pokraçování programu bêænou rychlostí je moænéì
stiskem klávesy F9. Krokování programu, jeho animaci i bêænéì
spu¿têní je moæné libovolnê kombinovat.
Protoæe zûstává aktivní p⌐íkazové okno stále p⌐ístupné, máteì
moænost kdykoliv zmênit hodnotu promênné, vypsat si obsahì
promênnÿch, které nemáte v oknê pro sledování promênnÿch apod.ì
Tím dosáhnete absolutní nadvlády nad programem, coæ vámì
kompilované programy nikdy neumoæní.