home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / ozogan / KURZ.602 < prev    next >
Text File  |  1997-08-24  |  106KB  |  2,148 lines

  1. @CT 0
  2. @LM 1
  3. @RM 65
  4. @PL 62
  5. @TB -----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T
  6. @MT 2
  7. @MB 2
  8. @PO 5
  9. @PN 1
  10. @OP 
  11. @FO                               --- # ---
  12. @LH 6
  13.       KURS PROGRAMOVÅNï A POUÆITï PROGRAMU OZOGAN KLONDAIK
  14.  
  15.   ùvod:
  16.   Pro ty,  kte⌐í dosud nikdy  neprogramovali na poçítaçi  se mûæeì
  17. zdát pojem programování záhadnÿ a  tajemnÿ. Jedná se v¿ak o zcelaì
  18. bêænou  vêc, kterou  vlastnê v¿ichni  známe jiæ  od dêtskÿch let.ì
  19. Urçitê jste si jiæ mnohokrát ⌐ekli: "ráno pûjdu do ¿koly (práce),ì
  20. odpoledne na koupali¿tê  a veçer se budu dívat  na televizi". Tímì
  21. jste si sestavili program  dne. Definovali jste posloupnost akcí,ì
  22. které provedete. Mûæete si  v¿ak také stanovit podmínky programu.ì
  23. Nap⌐íklad  pokud  bude  odpoledne  hezky,  pûjdete na koupali¿tê,ì
  24. jinak  (bude pr¿et)  si budete   çíst nebo  se uçit.  V nêkterÿchì
  25. p⌐ípadech si mûæete stanovit  opakování nêkterÿch akcí. Nap⌐íkladì
  26. æe se budete  uçit tak dlouho, dokud to  nepochopíte. Jak vidíte,ì
  27. programovat  uæ   umíte.  Sestavujete  si   program  dne,  vÿuky,ì
  28. dovolené.  Nyní  uæ  zbÿvá  pouze  nauçit  se  p⌐evést program doì
  29. podoby, kterou zvládne i poçítaç.
  30.   Poçítaçovÿ  program  p⌐edstavuje  definici  posloupnosti  akcí,ì
  31. podmínky jejich  provedení a opakování.  Aby byl poçítaç  schopenì
  32. poæadované çinnosti provádêt, musíte mu  je zadat v podobê, kteréì
  33. on rozumí. Pokud budete chtít  angliçanovi ⌐íct svûj program dne,ì
  34. budete  mu jej  muset p⌐eloæit  do angliçtiny.  Stejnê tak musíteì
  35. p⌐eloæit program ze slovní podoby do poçítaçového jazyka. Poçítaçì
  36. potom bude çíst jednu ⌐ádku programu za druhou a vykonávat to, coì
  37. jste mu zadali.
  38.  
  39.  1.lekce - instalace, spu¿têní a ukonçení programu
  40.  2.lekce - základy ovládání programu
  41.  3.lekce - práce s p⌐íkazovÿm a textovÿm vÿstupním oknem
  42.  4.lekce - p⌐íkaz WRITELN, matematické vÿpoçty
  43.  5.lekce - grafické vÿstupní okno, grafickÿ editor
  44.  6.lekce - ovládání grafického okna z p⌐íkazového okna
  45.  7.lekce - vÿstup do grafického okna
  46.  8.lekce - první program, procedura main
  47.  9.lekce - editace programu
  48. 10.lekce - promênné a jejich typy
  49. 11.lekce - deklarace a pouæívání promênnÿch
  50. 12.lekce - podmínky v programu, logické vÿrazy
  51. 13.lekce - programové cykly (FOR, REPEAT, UNTIL)
  52. 14.lekce - zadání vstupních hodnot, tisk vÿsledkû
  53. 15.lekce - vícenásobné vêtvení programu
  54. 16.lekce - struktura programu
  55. 17.lekce - deklarace a pouæívání procedur
  56. 18.lekce - deklarace a pouæívání funkcí
  57. 19.lekce - lokální a globální promênné
  58. 20.lekce - rekurze v programu
  59. 21.lekce - návrh a sestavení programu
  60. 22.lekce - ladící a animaçní reæim  programu
  61.  
  62.   1.lekce - instalace, spu¿têní a ukonçení programu
  63.   Postup instalace programu záleæí na verzi programu, kterou máteì
  64. k dispozici a na pouæitém zdrojovém médiu. Demoverze, kterou máteì
  65. moænost získat  na internetu je ¿í⌐ena  ve zkomprimovaném formátuì
  66. v souboru KLONDAIK.ZIP a staçí ji pouze "rozbalit" do libovolnéhoì
  67. adresá⌐e  na  disku  poçítaçe.   V  tomto  p⌐ípadê  se  nezakládáì
  68. programová  skupina  ve  Windows  a  spu¿têní  programu  je nutnéì
  69. provést spu¿têním souboru KLONDAIK.EXE. Demoverze zabírá na diskuì
  70. asi 1 Mb prostoru.
  71.   Demoverze ¿í⌐ená  na disketách i  plná verze programu  obsahujeì
  72. jiæ  instalaçní  program.  Program  se  dodává  na  jedné disketêì
  73. formátu  3,5"   HD.  Instalace  se  spustí   z  diskety  p⌐íkazemì
  74. INSTALL.EXE. Zobrazí  se vám ⌐ídící  instalaçní panel, ve  kterémì
  75. musíte zadat  nejprve adresá⌐ pro  instalaci programu. Standardnêì
  76. je  pro instalaci  nastaven adresá⌐  C:\OZOKLOND\ pro  demoverzi,ì
  77. p⌐ípadnê  C:\OZOKLON2  pro  plnou  verzi  programu.  Cílovÿ  diskì
  78. i adresá⌐  je  moæné  zmênit,  p⌐esto  v¿ak doporuçujeme zachovatì
  79. p⌐eddefinované  jméno  adresá⌐e.  Kopírování  souborû do zadanéhoì
  80. adresá⌐e se zahájí po stisku tlaçítka "Instalace". Program zabíráì
  81. na disku asi  1 Mb prostoru. Po zkopírování  souborû je nabídnutaì
  82. moænost   zaloæení   skupiny   programû   Windows.  Pokud  budeteì
  83. souhlasit,  zaloæí  se  skupina  OZOGAN,  do  které se nadefinujeì
  84. spu¿têní programu KLONDAIK, p⌐ípadnê prohlíæení helpu k programu.
  85.   Pro  rozli¿ení  p⌐esné  definice  programu  OZOGAN  KLONDAIK odì
  86. editovaného a ladêného programu bude v následujícím textu u v¿echì
  87. lekcí  uvádên program  OZOGAN KLONDAIK  jako systém  a pod pojmemì
  88. program se bude rozumêt ladênÿ a editovanÿ uæivatelûv program.
  89.   Systém  se startuje  po dokonçené  instalaci spu¿têním  souboruì
  90. OZOKLOND.EXE  (demoverze),  p⌐ípadnê   OZOKLON2.EXE  (plná  verzeì
  91. programu). P⌐i prvním spu¿têní systému je integrované uæivatelskéì
  92. prost⌐edí nastaveno do standardního stavu.
  93.   Program  je  moæné  ukonçit  buâ  volbou  z menu Soubor/Ukonçitì
  94. program, p⌐ípadnê  ikonou z toolbaru.  Pokud je editován  programì
  95. a zmêny nebyly dosud uloæeny, budete dotázáni systémem na uloæeníì
  96. zmên.  P⌐i ukonçení  programu se  provede uloæení  rozloæení okenì
  97. integrovaného  prost⌐edí do  inicializaçního souboru OZOKLON*.INIì
  98. (dle druhu verze programu), kterÿ  se nachází v adresá⌐i Windows.ì
  99. P⌐i dal¿ím  spu¿têní programu bude  potom obnoven stav  rozloæeníì
  100. jednotlivÿch oken na pracovní plo¿e systému.
  101.  
  102.   2.lekce - základy ovládání programu
  103.  
  104.   Systém OZOGAN KLONDAIK je aplikace  Windows a proto je ovládáníì
  105. programu pod⌐ízeno  tomuto standardu. Systém  je ovládán z  menu,ì
  106. çasto pouæívané  volby jsou p⌐itom p⌐ístupné  i z toolbaru pomocíì
  107. ikon,  p⌐ípadnê pomocí  funkçních kláves.  Ve¿keré akce probíhajíì
  108. v nêkolika  oknech s  p⌐esnê definovanÿm  urçením. Celá  práce seì
  109. systémem probíhá  v nêkolika reæimech dle  kterÿch jsou vyuæívánaì
  110. p⌐íslu¿ná  okna.  Okna  lze  na  plo¿e  obrazovky uspo⌐ádat podleì
  111. aktuální  pot⌐eby. Okna  je  moæné  minimalizovat, nelze  je v¿akì
  112. æádnÿm zpûsobem zru¿it.
  113.   Nejçastêji pouæívané  okno je okno s  programem, které obsahujeì
  114. vyvíjenÿ  a ladênÿ  program. V  dal¿ím, p⌐íkazovém  oknê je moænéì
  115. zadávat  p⌐ímo  p⌐íkazy  jazyka  bez  nutnosti spu¿têní programu.ì
  116. Vÿsledky programu jsou zobrazovány  buâ v textovém nebo grafickémì
  117. vÿstupním oknê.  P⌐i krokování programu je  moæné zobrazovat stavì
  118. promênnÿch v  oknê sledování promênnÿch. Pomocnou  funkci má oknoì
  119. text,  ve  kterém  je  moæné  zobrazit  libovolnÿ textovÿ soubor.ì
  120. Nêkterá z oken mají svou vlastní sadu ikon umístênÿch v toolbaru,ì
  121. kterÿ se zobrazí po aktivaci okna v jeho horní li¿tê.
  122.   Okna  mûæete po  pracovní plo¿e  libovolnê p⌐epínat,  posouvat,ì
  123. zvêt¿ovat je  çi zmen¿ovat. P⌐epínání oken  je moæné kliknutím naì
  124. libovolnou viditelnou  çást okna. Po kliknutí  se stane p⌐íslu¿néì
  125. okno aktivní. Pokud není okno  viditelné, pouæijte menu Okna, kdeì
  126. zvolíte  poæadované okno.  V dal¿ích  lekcích se  nauçíte, æe  jeì
  127. moæné  zviditelnit   poæadované  okno  i   p⌐íkazem  z  programu.ì
  128. Kliknutím na p⌐íslu¿nou ikonu v  pravém horním rohu okna je moænéì
  129. okno  maximalizovat,  p⌐ípadnê  minimalizovat.  Okno  se p⌐esouváì
  130. nejlépe  my¿í, kdy  je uchopíte   za horní  li¿tu a  p⌐esunete naì
  131. poæadované  místo.  Zmêny  velikosti  okna  dosáhnete po uchopeníì
  132. pravého dolního rohu okna a nastavení na poæadovanou velikost.
  133.   Vædy p⌐i spu¿têní systému je nastaven editaçní reæim, ve kterémì
  134. je  moæné editovat  vytvá⌐enÿ program,  p⌐ípadnê zadávat  p⌐íkazyì
  135. z p⌐íkazového okna. Po spu¿têní  editovaného programu je nastavenì
  136. provozní  reæim,  ve  kterém   je  provozována  ladêná  aplikace.ì
  137. Zvlá¿tním  druhem provozního  reæimu  je  potom ladící  reæim, veì
  138. kterém lze krokovat program a amimaçní reæim, p⌐i kterém je moænéì
  139. zobrazovat   prûbêh  çinnosti   programu.  Kaædÿ   reæim  má  sváì
  140. specifika, která budou popsána v následujících lekcích.
  141.   Systém  obsahuje   kontextovou  nápovêdu,  která   je  dostupnáì
  142. v nêkolika stupních.  P⌐i vÿbêru volby z  menu je krátká nápovêdaì
  143. k vybrané  volbê  zobrazována  ve  stavovém  ⌐ádku  v dolní çástiì
  144. systému. Tzv. bublinová nápovêda je zobrazována po najetí my¿í naì
  145. ikony  v toolbaru.  Nejobsáhlej¿í nápovêda  se zobrazí  po stiskuì
  146. klávesy F1. Jedná se o hypertextovÿ dokument s provázanÿmi odkazyì
  147. na zvolená  hesla. Zde uvádêné p⌐íklady  programû máte moænost siì
  148. do systému  z nápovêdy p⌐etáhnout  pomocí blokového p⌐esunu  p⌐esì
  149. schránku Windows.  To provedete tak, æe  najedete v nápovêdê my¿íì
  150. na zaçátek ukázky programu,  stisknete levé tlaçítko my¿i, dræíteì
  151. jej  stisknuté  a  p⌐etáhnete  my¿  na  konec textu p⌐íkladu. Tamì
  152. tlaçítko my¿i  uvolníte. Stiskem kláves  Ctrl+C se p⌐evede  taktoì
  153. oznaçenÿ blok textu do schránky Windows. Nyní se p⌐epnete do oknaì
  154. s programem a stiskem kláves Ctrl+V p⌐evedeme obsah schránky.
  155.   K ovládání  programu je vhodné  pouæívat my¿. Vêt¿ina  voleb jeì
  156. sice  dostupná souçasnê  z menu  i my¿í,  p⌐esto je v¿ak ovládáníì
  157. my¿í mnohem p⌐íjemnêj¿í a operativnêj¿í.  Pokud se v dal¿ím textuì
  158. pouæívá my¿, p⌐edpokládá se levé tlaçítko.
  159.  
  160.   3.lekce - práce s p⌐íkazovÿm a textovÿm vÿstupním oknem
  161.  
  162.   Nejprve si ukáæeme, jak se dají velmi jednodu¿e zadávat systémuì
  163. p⌐íkazy  bez  zápisu  programu.  Najdête  na  pracovní plo¿e oknoì
  164. nazvané  p⌐íkazy a  uçiñte je  aktivním -  kliknête na  nêj my¿í.ì
  165. Pokud není  okno viditelné ,  p⌐ípadnê je minimalizované,  mûæeteì
  166. zvolit  z menu  volbu Okna/P⌐íkazy  nebo stiskem  kláves Ctrl+F2.ì
  167. Upravte  my¿í  velikost  okna  tak,  aby  zabíralo levou polovinuì
  168. obrazovky. Obdobnÿm  zpûsobem nastavte okno  Vÿstup-text do pravéì
  169. poloviny obrazovky. P⌐epnête ze zpêt do p⌐íkazového okna.
  170.   Okno  p⌐íkazy  se  podobá  textovému  editoru.  Má  v¿ak  velmiì
  171. dûleæitou  vlastnost.  Pokud  napí¿ete   v  oknê  libovolnÿ  textì
  172. a stisknete klávesu  ENTER, pokusí se systém  ihned napsanÿ ⌐ádekì
  173. interpretovat jako známÿ p⌐íkaz. To  znamená, æe systém si p⌐eçteì
  174. text ⌐ádku, na kterém stál kurzor a zji¿ƒuje, zda se jedná o jemuì
  175. známÿ povel  nebo p⌐íkaz. Pokud  ano, povel nebo  p⌐íkaz provede.ì
  176. Proto se toto okno nazÿvá p⌐íkazové.
  177.   P⌐íkazy  a  povely  jsou  p⌐itom  pro  systém  instrukce, co máì
  178. vykonat. P⌐íkazem je vêt¿inou oznaçen p⌐ímÿ hlavní povel systému.ì
  179. P⌐íkazy jsou v programech psány velkÿmi písmeny. Jako povely jsouì
  180. oznaçovány doplñkové p⌐íkazy, které jsou zabudovány jako podpûrnéì
  181. akce.  Jsou psány  malÿmi písmeny  s velkÿmi  písmeny na  poçátkuì
  182. slova.  Pokud jsou  názvy povelû  uvedeny z  více slov, nesmí bÿtì
  183. mezi nimi uvedeny mezery.
  184.   Napi¿te nyní  v p⌐íkazovém oknê slovo  BEEP a stisknête klávesuì
  185. ENTER.  Systém  zjistí,  æe  p⌐íkaz  BEEP  je pokyn, pro pípnutí.ì
  186. Zajistí proto, æe reproduktor poçítaçe krátce pípne. Takto systémì
  187. interpretoval  vámi  zadanÿ  p⌐íkaz  do  podoby  srozumitelné proì
  188. poçítaç. Interpretace proto znamená  p⌐evedení p⌐íkazu nebo ⌐ádkuì
  189. programu do formy srozumitelné  pro za⌐ízení poçítaçe (obrazovka,ì
  190. tiskárna ...).  Takto je v systému  OZOGAN KLONDAIK interpretovánì
  191. kaædÿ ⌐ádek programu. Pokud je nêkterÿ ⌐ádek nêkolikrát opakován,ì
  192. provádí  se i  opakovanê jeho  interpretace. Takovÿm  systémûm seì
  193. proto ⌐íká  interprety. Jiné systémy  p⌐ekládají zdrojovÿ programì
  194. pouze  jednou p⌐ímo  do spustitelné  podoby. To  jsou kompilátoryì
  195. a bÿvají rychlej¿í.  Neumoæñují ale interaktivní  práci uæivateleì
  196. se  systémem.  Proto  jsou  pro  zaçátky  programování  vhodnêj¿íì
  197. interprety, které  vám umoæní lépe a  rychleji proniknout do tajûì
  198. programování.
  199.   V  p⌐íkazovém  oknê  máte  moænost  vyzkou¿et  si mnoho p⌐íkazûì
  200. a povelû  systému OZOGAN  KLONDAIK, aniæ  napí¿ete jedinou  ⌐ádkuì
  201. programu.  Pokud udêláte  chybu, systém  vás na  to upozorní a vyì
  202. máte moænost ihned chybu opravit bez nutnosti kompilace programu.ì
  203. Zapomenete-li  nap⌐íklad  napsat  ve  vÿ¿e  uvedeném p⌐íkazu BEEPì
  204. jedno 'E',  oznámí vám systém, æe  uvedenÿ p⌐íkaz nezná. Najedeteì
  205. proto  kurzorem na  chybné místo,  provedete opravu  a po  stiskuì
  206. klávesy ENTER se jiæ p⌐íkaz vykoná.
  207.   Jistê jste  si jiæ v¿imli,  æe klávesa ENTER  neukonçí na místêì
  208. kurzoru  ⌐ádek, jak  to bÿvá  u textovÿch  editorû. ₧ádek zûstaneì
  209. celÿ  zachován  a  kurzor   se  automaticky  p⌐esune  na  zaçátekì
  210. prázdného ⌐ádku za p⌐edchozí p⌐íkazy. Pokud zkusíte zapsat p⌐íkaz
  211.  
  212. WRITELN("KLONDAIK");
  213.  
  214. vypí¿e se  do textového vÿstupního okna  text KLONDAIK. Moænostmiì
  215. p⌐íkazu WRITELN je vênována  následující lekce. Nyní bude staçit,ì
  216. pokud si zapamatujete, æe p⌐íkaz  WRITELN v uvedeném tvaru vypí¿eì
  217. obsah  textu uvedeného  mezi uvozovkami  do textového  vÿstupníhoì
  218. okna.  Mezi uvozovky  mûæete zkusit  p⌐itom zadat  libovolnÿ jinÿì
  219. text. Zkuste text mezi uvozovkami  nêkolikrát zmênit a zmêny vædyì
  220. ode¿lete klávesou ENTER. Jistê si  v¿imnete, æe pûvodní text p⌐edì
  221. opravou  zûstane  v  p⌐íkazovém  oknê  zachován  a p⌐íkaz s novÿmì
  222. textem  bude doplnên  na konec  p⌐íkazového okna.  Díky tomu máteì
  223. vædy  p⌐ehled  o   historii  zadávanÿch  p⌐íkazû.  Neprovedete-liì
  224. v textu æádnou  zmênu a p⌐íkaz opakovanê  ode¿lete, nebude stejnÿì
  225. p⌐íkaz zadávanÿ  beze zmêny za sebou  v historii p⌐íkazového oknaì
  226. za sebou znovu opakován.
  227.   Historii  zadávanÿch  p⌐íkazû  mûæete  libovolnê  pouæívat  bezì
  228. ohledu na  po⌐adí pûvodního zadávání. Pokud  provedete v nêkterémì
  229. ⌐ádku  p⌐íkazového  okna  libovolnou  zmênu  a následnê stiskneteì
  230. klávesu  ESC, p⌐íkaz  se neprovede  a text  upraveného ⌐ádku budeì
  231. uveden do  pûvodního stavu. P⌐íkazy vyzkou¿ené  v p⌐íkazovém oknêì
  232. máte moænost p⌐es schránku Windows následnê p⌐evést do programu.
  233.   Rûznÿmi pokusy s p⌐íkazovÿm oknem jste dosáhli toho, æe máte veì
  234. vÿstupním textovém  oknê uvedeny rûzné  texty. S kaædÿm  pouæitímì
  235. p⌐íkazu WRITELN  p⌐ibude na konec okna  jeden ⌐ádek. To p⌐ipomínáì
  236. pouæití  psacího  stroje,  kdy  také  není  moæné se vracet zpêt.ì
  237. V dávnÿch dobách prahistorie vÿpoçetní techniky sálovÿch poçítaçûì
  238. se  podobné psací  stroje pouæívaly  pro komunikaci  s poçítaçem.ì
  239. Tehdy se jim ⌐íkalo konzole  - anglicky console. Uvedené anglickéì
  240. oznaçení je  proto také pouæíváno  pro p⌐íkazy p⌐ímo  souvisejícíì
  241. s obsluhou  textového  vÿstupního  okna.  Pokud nap⌐íklad zkusíteì
  242. zadat v  p⌐íkazovém oknê p⌐íkaz ConsoleClear,  zjistíte, æe zru¿íì
  243. obsah  textového  vÿstupního  okna.  Obdobného  efektu dosáhnete,ì
  244. pokud  se  p⌐epnete  do  textového  vÿstupního  okna  a stiskneteì
  245. v pod⌐ízeném toolbaru uvedeného  okna ikonu znázorñující prázdnouì
  246. stránku.  Po kontrolním  dotazu bude  obsah textového  vÿstupníhoì
  247. okna zru¿en.
  248.   V následující  kapitole se seznámíte, jak  vypisovat v textovémì
  249. vÿstupním  oknê  za  pouæití  p⌐íkazu  WRITELN  i  jiné informaceì
  250. a hodnoty.
  251.  
  252.   4.lekce - p⌐íkaz WRITELN, matematické vÿpoçty
  253.  
  254.   V p⌐edchozí kapitole jste se nauçili zadávat z p⌐íkazového oknaì
  255. p⌐íkazy  umoæñující vypsat  do textového  vÿstupního okna  znaky.ì
  256. Nyní si ukáæeme, jak vypisovat çísla a aritmetické vÿpoçty.
  257.   S p⌐íkazem  WRITELN jste jiæ  mêli moænost se  krátce seznámit.ì
  258. Pouæívá se na vÿpis hodnot.  Poæadovaná hodnota se p⌐itom uvádêlaì
  259. v závorce.  Pokud  se  u  p⌐íkazu  WRITELN  uvedou  pouze prázdnéì
  260. závorky,  nebude   nic  vypsáno  a  dal¿í   vÿstup  do  textovéhoì
  261. vÿstupního okna  bude provádên na  novou ⌐ádku. WRITELN  je pouzeì
  262. p⌐íkaz kterÿ  uvádí systému, æe  má nêco vypsat.  Uvedené nêco seì
  263. p⌐itom uvádí v závorce jako parametr p⌐íkazu. Pokud uvedete znakyì
  264. v uvozovkách  nebo  apostrofech,  p⌐evedou  se  uvedené  znaky doì
  265. textového  vÿstupního okna.  Pokud by  jste chtêli  vypsat çíslo,ì
  266. musíte zadat p⌐íkaz v následujícím tvaru:
  267.  
  268. WRITELN(10);
  269.  
  270.   Staçí  tedy  napsat  jako  parametr  p⌐íkazu  do  závorek p⌐ímoì
  271. poæadované çíslo.  Çíslo se vypí¿e se  zarovnáním od levého krajeì
  272. okna. Pokud  budete chtít ponechat  zleva odsazené místo,  budeteì
  273. muset zadat poæadovanou délku vypsaného çísla v poçtech znakû:
  274.  
  275. WRITELN(10:5)
  276.  
  277.   Délka  vypsaného çísla  je v   tomto p⌐ípadê  pêt znakû.  To jeì
  278. parametr  uvedenÿ  v  p⌐íkazu  za  dvojteçkou  a udává poçet místì
  279. zobrazení çísla.  Nejedná se proto  o vÿpoçet dêlení.  Vÿpoçty jeì
  280. ale  samoz⌐ejmê také  moæné zadat.  V tomto  p⌐ípadê by  jste proì
  281. dêlení museli zadat:
  282.  
  283. WRITELN(10/5:5)
  284.  
  285. Jako vÿsledek bude  zobrazeno çíslo 2 o délce  pêti znakû. Zkusteì
  286. si sami zadat souçet, rozdíl, p⌐ípadnê násobek çísel:
  287.  
  288. WRITELN(10+5:5);
  289. WRITELN(10-5:5);
  290. WRITELN(10*5:5);
  291.  
  292. Zobrazí se vædy vÿsledek aritmetického vÿrazu o délce pêti znakû.ì
  293. P⌐ekvapeni budete moæná pokud zadáte p⌐íkaz:
  294.  
  295. WRITELN(10/3:5);
  296.  
  297. Sami jistê poznáte, æe nêco není v po⌐ádku. Ztratila se desetinnáì
  298. çást  vÿsledku. Aæ  dosud jsme  pracovali pouze  s celÿmi  çísly.ì
  299. Vÿsledky  se  také  vædy  zobrazují  standardnê  jako celá çísla.ì
  300. Zkuste nyní následující p⌐íkaz:
  301.  
  302. WRITELN(10/3:5:2);
  303.  
  304. Zobrazí se jiæ  vÿsledek s uvedením dvou desetinnÿch  míst. Je toì
  305. proto,  æe jsme  za  dvojteçkou  uvedli délku  vypisovaného çíslaì
  306. a souçasnê  za  dal¿í  dvojteçkou  poçet  zobrazenÿch desetinnÿchì
  307. míst.  Zkuste  si  sami  dal¿í  p⌐íklady  a seznamte se zadávánímì
  308. uvedenÿch parametrû.
  309.   S moæností  vÿpisu nenumerickÿch údajû, tedy  znakû jste se jiæì
  310. seznámili v  p⌐edchozí lekci. Seskupení nêkolika  znakû se p⌐itomì
  311. nazÿvá ⌐etêzec a také tak  jiæ bude v následujícím textu uvádêno.ì
  312. Pokud  by jste  chtêli  jedním  p⌐íkazem WRITELN  vypsat najednouì
  313. ⌐etêzec i  znaky, mûæete tak  uçinit uvedením nêkolika  parametrûì
  314. oddêlenÿch çárkou:
  315.  
  316. WRITELN('Vÿsledek vÿpoçtu je:', 10/3:5:2);
  317.  
  318.   Stejnê  tak  mûæete  vypsat  samoz⌐ejmê  i  nêkolik  çísel neboì
  319. ⌐etêzcû oddêlenÿch  v p⌐íkazu çárkami.  To vám dovolí  ve spojeníì
  320. s moæností uvádêní délky çísel vhodnou grafickou úpravu textu:
  321.  
  322. WRITELN('Seznam vÿsledkû:', 12/3:5:2, 45-26:5:2, 3*3:5:2);
  323.  
  324.   P⌐íkaz WRITELN  provede po svém ukonçení  vædy p⌐echod na novouì
  325. ⌐ádku. Pokud  v¿ak budete pot⌐ebovat, aby  dal¿í vÿpis pokraçovalì
  326. na  stejné  ⌐ádce,  mûæete  pouæít  p⌐íkazu  WRITE. Ten neprovádíì
  327. ukonçení ⌐ádku,  následující vÿpis je zahájen  od pozice ukonçeníì
  328. p⌐íkazu  WRITE. Moænosti  a parametry  p⌐íkazu WRITE  jsou p⌐itomì
  329. totoæné jako pro uvádênÿ popis p⌐íkazu WRITELN.
  330.   Vÿ¿e uvedenÿ popis pouæití p⌐íkazu  WRITELN se vám mûæe zdát naì
  331. první pohled sloæitÿ. Je v¿ak nutné jej p⌐esnê dodræet. Systém siì
  332. hlídá dûslednê  jeho dodræování a v  p⌐ípadê chyby odmítne p⌐íkazì
  333. vykonat. P⌐esná definice jakéhokoliv pouæívaného jazyka se nazÿváì
  334. syntaktická  pravidla. Pokud  zadá uæivatel  chybnÿ zápis,  dojdeì
  335. k poru¿ení  syntaxe  a  odmítnutí  systému  k  vykonání  chybnéhoì
  336. zadání. Byla proto sestavena  pravidla pro pouæití v¿ech p⌐íkazû.ì
  337. Uvádíme  zde  pro  p⌐edstavu  zkrácenou  definici  syntaxe zápisuì
  338. p⌐íkazu WRITELN tak, jak byla vÿ¿e popsána:
  339.  
  340. WRITELN( [ vÿraz [:délka] [:desetiny] ] ) [;]
  341.  
  342.   V  zápise  znamená  vÿraz  libovolnÿ  vÿraz, Nap⌐íklad ⌐etêzec,ì
  343. çíslo nebo vÿpoçet. ùdaje v hranatÿch závorkách se nemusí uvádêt.ì
  344. Pokud  proto  uvedeme  dvojteçku  následovanou  çíslem,  jedná seì
  345. o délku  vypisovaného çísla.  P⌐ípadná dal¿í  dvojteçka s  çíslemì
  346. uvádí poçet desetinnÿch míst.  Pokud si dob⌐e prohlédnete uvedenÿì
  347. syntaktickÿ  zápis  zjistíte,  æe  mezi  závorkami  nemusíte  nicì
  348. uvádêt.  To je  dáno levou  hranatou závorkou  uvedenou ihned  zaì
  349. levou  kulatou   závorkou.  Ukonçení  této   volitelné  çásti  jeì
  350. provedeno pravou hranatou závorkou  p⌐ed pravou kulatou závorkou.ì
  351. Pokud proto uvedete p⌐íkaz:
  352.  
  353. WRITELN();
  354.  
  355. nevypí¿e se  æádnÿ text, dojde  ale k vynechání  prázdného ⌐ádku.ì
  356. St⌐edník  uvedenÿ v  hranatÿch  závorkách  na konci  p⌐íkazu neníì
  357. nutné  uvádêt. V  popisu syntaxe  je uveden,  protoæe v klasickémì
  358. jazyku Pascal  musí bÿt kaædÿ ⌐ádek  programu ukonçen st⌐edníkem.ì
  359. Uvedenÿ zpûsob  popisu syntaxe je  pouæit u popisu  v¿ech p⌐íkazûì
  360. a knihoven  procedur  a  funkcí   uvedenÿch  v  manuálu  i  helpuì
  361. k programu.
  362.   Pokud jste  se dokonale seznámili  s pouæitím p⌐íkazu  WRITELN,ì
  363. mûæete  ve spolupráci  s  manuálem  k programu  vyzkou¿et nêkteréì
  364. funkce  matematické knihovny.  Dále uvedené  p⌐íklady uvádêjí  naì
  365. konci ⌐ádku  mezi sloæenÿmi závorkami komentá⌐e,  které nemají naì
  366. vÿsledek  æádnÿ vliv.  Ve  skuteçnosti  je proto  nemusíte vçetnêì
  367. sloæenÿch závorek uvádêt.
  368.  
  369. WRITELN(Abs(-55));       {absolutní hodnota çísla}
  370. WRITELN(Cos(PI));        {kosinus Ludolfova çísla PI}
  371. WRITELN(Max(3,10);       {maximální hodnota zadanÿch çísel}
  372. WRITELN(Min(3,10);       {minimální hodnota zadanÿch çísel}
  373. WRITELN(Random(500);     {náhodné çíslo do 500}
  374. WRITELN(Round(12.82);    {zaokrouhluje çíslo}
  375. WRITELN(Sqr(5);          {vrací druhou mocninu çísla}
  376. WRITELN(Sqrt(16);        {vrací druhou odmocninu çísla}
  377. WRITELN(Trunc(12.82);    {od⌐ízne desetinou çást çísla}
  378.  
  379.   Jak vidíte,  mûæete pouæít p⌐íkaz  WRITELN jako docela  chytrouì
  380. kalkulaçku. V  souçasnosti p⌐i pouæití pouze  p⌐íkazového okna máì
  381. ale jednu dosti velkou vadu. Nemá  æádnou pamêƒ, do které by jsteì
  382. si zaznamenali  hodnoty mezivÿsledkû. V nêkteré  z dal¿ích lekcí,ì
  383. kdy  budeme  probírat  deklaraci  promênnÿch  v  programu  se aleì
  384. nauçíme i to.
  385.   V následujících lekcích se  seznámíte s dal¿ím vÿstupním oknem,ì
  386. které se pouæívá pro vÿstup a kreslení grafiky.
  387.  
  388.   5.lekce - grafické vÿstupní okno, grafickÿ editor
  389.  
  390.   V  p⌐edchozích kapitolách  jsme se  nauçili pouæívat  p⌐íkazovéì
  391. okno a textové vÿstupní okno.  Systém ale obsahuje i dal¿í, velmiì
  392. zajímavé vÿstupní  okno. Je to grafické  vÿstupní okno, které vámì
  393. umoæní do své plochy libovolnê kreslit.
  394.   Uzav⌐ete  d⌐íve  pouæívané  textové  vÿstupní  okno. Mûæete takì
  395. uçinit  kliknutím  na  uzavírací  ikonu,  p⌐ípadnê  mûæete  zadatì
  396. v p⌐íkazovém  oknê  povel  ConsoleHide.  Dále  aktivujte grafickéì
  397. vÿstupní okno. To lze provést  z menu volbou Okna/vÿstup grafika.ì
  398. Okno  je moæné  také zobrazit  povelem ImageShow.  Zobrazené oknoì
  399. upravte opêt tak, aby pokrÿvalo pravou polovinu obrazovky.
  400.   Jak  vidíte,  kaædé  okno  je  pro  úçely  ovládání  z programuì
  401. pojmenováno vÿznamovê dle  anglického názvosloví. Existují p⌐itomì
  402. povely  pro zobrazení  (anglicky show)  a ukrytí  (anglicky hide)ì
  403. okna. Moæná  se pozastavujete nad  tím, æe u  çeského programu seì
  404. pouæívá  cizojazyçnÿch termínû.  Je  to  proto, æe  systém OZOGANì
  405. KLONDAIK mûæe slouæit jako  nástroj pro vÿuku programování. Protoì
  406. je podle nás  vhodné si jiæ od poçátku  zvyknout na terminologii,ì
  407. která se p⌐i bêæném  programování pouæívá. Názvy procedur, funkcíì
  408. a konstant p⌐itom vychází z  pouæívané terminologie jazykû Pascalì
  409. a získané  znalosti  jistê  dále  zuæitkujete. Pouæitá poçítaçováì
  410. angliçtina je  p⌐itom velmi jednoduchá  a nemêla by  nikomu çinitì
  411. problémy.
  412.   Po aktivování  grafického vÿstupního okna  se vám v  jeho horníì
  413. li¿tê  zobrazí  ⌐ada  ikon  pro  ovládání zabudovaného grafickéhoì
  414. editoru  a ikony  pro moænost  kreslení na  grafické plo¿e. Ikonyì
  415. jsou umístêny do t⌐í skupin. Levá skupina se pouæívá pro naçítáníì
  416. a ukládání  obrázkû v  grafickém formátu  *.BMP. St⌐ední  skupinaì
  417. slouæí pro definici kresleného tvaru  a v pravé skupinê nalezneteì
  418. nastavení typu çáry a vÿplnê ploch.
  419.   Nejprve   se   seznámíme   s   moæností   kreslení   základníchì
  420. geometrickÿch  tvarû.  Ve  st⌐ední  skupinê  ikon  jsou seskupenaì
  421. tlaçítka pro çáru, obdélník,  kruænici a obdélník se zakulacenÿmiì
  422. hranami. Kliknête  nejprve na tlaçítko s  çárou. Tím jste zadali,ì
  423. æe  budete  chtít  kreslit  çáry.  Uvidíte,  æe  tlaçítko zûstaloì
  424. stisknuto. P⌐esuñte ukazatel my¿i na grafickou plochu. Pokud nyníì
  425. na   grafické  plo¿e   stisknete  tlaçítko   my¿i,  podræíte  jejì
  426. a p⌐esunete na novou  pozici, bude se kreslit çára  z bodu stiskuì
  427. tlaçítka do aktuální pozice  ukazatele my¿i. Po uvolnêní tlaçítkaì
  428. zûstane çára zachována. Zkuste si  nakreslit i vodorovné a svisléì
  429. çáry.   Obdobnÿm  zpûsobem   lze  na   grafickou  plochu  kreslitì
  430. obdélníky, kruænice a obdélníky se zakulacenÿmi rohy. Pro zvoleníì
  431. nového  tvaru  musíte  stisknout   p⌐íslu¿né  tlaçítko  na  li¿têì
  432. s ikonami.
  433.   Çáry se kreslí çernou barvou a tenkou çárou. Pokud budete chtítì
  434. zmênit barvu  çáry, nebo její  tlou¿ƒku, stisknête ikonu  v pravéì
  435. horní çásti okna  s vyobrazením tuæky. Zobrazí se  vám dal¿í ⌐adaì
  436. ikon  pro  zadávání  barvy,  typu  a  tlou¿ƒky çáry. Po opêtovnémì
  437. stisku  ikony s  tuækou se  nastavení skryje.  Ikona tedy pracujeì
  438. jako p⌐epínací  tlaçítko. Kliknête si proto  na tlaçítko tak, abyì
  439. jste mêli  zobrazeny ikony pro  nastavení çar. Vlevo  je umístênaì
  440. tabulka barev,  uprost⌐ed tlaçítka pro  vÿbêr typu çáry  a vpravoì
  441. mûæete  zadat  tlou¿ƒku  çáry.  Barvy  se  vybírají  kliknutím naì
  442. poæadovanou  barvu.  Vybraná   barva  je  oznaçena  dvoupísmennouì
  443. anglickou  zkratkou barvy.  Typ  çáry  mûæete vybrat  plnou çáru,ì
  444. teçkovanou,   çárkovanou,  çerchovanou   nebo  mûæete   poslednímì
  445. tlaçítkem  úplnê zru¿it.  Tlou¿ƒka çáry  se udává  v bodech.  Proì
  446. znênu  tlou¿ƒky  mûæete  zapsat  do  editaçního  boxu p⌐ímo novouì
  447. hodnotu,  nebo  mûæete  pouæít  pro  nastavení  ¿ipek. Pokud budeì
  448. nastavena tlou¿ƒka çáry vêt¿í neæ  jedna, neuplatní se zadanÿ typì
  449. çáry  a çára  se bude  vykreslovat vædy  plná, p⌐ípadnê se nebudeì
  450. kreslit vûbec.  Zkuste si nastavit  parametry çáry a  provê⌐te siì
  451. úçinky zmêny p⌐i kreslení základních geometrickÿch tvarû.
  452.   Dosud   jsme   kreslili   pouze   okraje  geometrickÿch  tvarû.ì
  453. Standardnê   je  totiæ   nastaveno,  æe   se  plocha   kreslenÿchì
  454. geometrickÿch  tvarû  nevykresluje.  Podobnÿm  zpûsobem,  jako seì
  455. nastavují parametry kreslení çar  máte moænost nastavit parametryì
  456. vykreslování  ploch. Ikony  pro  nastavení  se zobrazí  po stiskuì
  457. tlaçítka  s vyobrazením  ¿têtce. Opêt  máte moænost  zadat barvu,ì
  458. tentokrát plochy (vÿplnê). Souçasnê mûæete zadat typ vÿplnê. Máteì
  459. moænost  vybrat  si  buâ  kreslení  plné  plochy  zadanou barvou,ì
  460. nevykreslování  plochy, nebo  z nêkolika  druhû vykreslení plochyì
  461. çárami.  Lze vybrat  çáry vodorovné,  svislé, vodorovné  i svisléì
  462. souçasnê (m⌐íæka)  a rûzné druhy diagonálních  çar. Tlou¿ƒka çáryì
  463. vÿplnê je p⌐itom vædy jeden bod.
  464.   Nyní  jste jiæ  schopni nakreslit  na grafické  plo¿e pouze  zaì
  465. pouæití  my¿i jednoduché  obrázky. Vyzkou¿ejte  si rûzné moænostiì
  466. nastavení  çáry a  plochy. Parametry  nastavení çar  a plochy  jeì
  467. moæné  zmênit samoz⌐ejmê  také p⌐ímo  z programu,  p⌐ípadnê zadatì
  468. z p⌐íkazového  okna.  To  si  v¿ak  ukáæeme  aæ  v  následujícíchì
  469. lekcích.  Nyní  bude  pro  vás  jistê  zajímavá  moænost  uloæeníì
  470. nakreslenÿch  obrázkû na  disk  do  souboru pro  pozdêj¿í pouæitíì
  471. a zpêtná moænost  naçtení obrázku z disku  do grafického okna proì
  472. provedení  úprav.   Ukáæeme  si  také,   jak  je  moæné   obrázekì
  473. vytisknout.
  474.   Pokud  máte  grafickou  plochu  zaplnênou  p⌐edchozími  pokusy,ì
  475. mûæete  provést  její  vÿmaz  pomocí  ikony  s  obrázkem  prázdnéì
  476. stránky.  Ikona   se  nachází  v   levé  skupinê  ikon   umístênéì
  477. v grafickém  vÿstupním oknê.  Po kontrolním  dotazu bude grafickáì
  478. plocha vymazána. Stejného efektu lze dosáhnout povelem ImageClearì
  479. zadanÿm v p⌐íkazovém oknê. Povel se zadává bez parametrû, v tomtoì
  480. p⌐ípadê  se provede  vÿmaz  grafické  plochy jiæ  bez kontrolníhoì
  481. dotazu.
  482.   Nakreslené obrázky  máte samoz⌐ejmê moænost  uloæit do souboru.ì
  483. Pouæívá se známÿ a bêænÿ bitmapovÿ soubor typu *.BMP. Pro uloæeníì
  484. stisknête  ikonu s  obrázkem diskety.  V dialogovém  oknê zadejteì
  485. adresá⌐  a  jméno  souboru.   Obrázek  mûæete  uloæit  samoz⌐ejmêì
  486. i povelem ImageSave z p⌐íkazového okna. Nap⌐íklad:
  487.  
  488. ImageSave("obrazek.bmp")
  489.  
  490.   Obrázky mûæete  i zpêt naçíst. Pouæijte  ikonu s obrázkem ¿ipkyì
  491. smê⌐ující do  stránky. V dialogovém oknê  vyberte adresá⌐ a jménoì
  492. souboru typu  *.BMP. Naçíst mûæete  i obrázky vytvo⌐ené  v jinÿchì
  493. grafickÿch  systémech. Po  naçtení obrázku  je velikost  grafickéì
  494. plochy  nastavena dle  naçítaného obrázku.  Obrázek mûæete naçístì
  495. i povelem z p⌐íkazového okna ImageLoad. Nap⌐íklad:
  496.  
  497. ImageLoad("obrazek.bmp")
  498.  
  499.   Pokud by  jste chtêli vytvo⌐enÿ obrázek  vytisknout, mûæete takì
  500. uçinit  pomocí  ikony  zobrazující  tiskárnu.  Pro  tisk  obrázkuì
  501. z p⌐íkazového okna mûæete pouæít povel ImagePrint.
  502.   V   následující  lekci   se  seznámíte   s  moænostmi  ovládáníì
  503. grafického vÿstupního okna pomocí povelû z p⌐íkazového okna.
  504.  
  505.   6.lekce - ovládání grafického okna z p⌐íkazového okna
  506.  
  507.   P⌐edchozí  lekce vás  seznámila krátce  se základními moænostmiì
  508. pouæití grafického  vÿstupního okna. Nauçili  jste se kreslit  doì
  509. grafické  plochy  pomocí  my¿i,  ukládat,  naçítat  a  vytisknoutì
  510. vytvo⌐enÿ  obrázek.   Nyní  se  seznámíte   s  dal¿ími  moænostmiì
  511. grafického okna  a s parametry okna,  které budete pot⌐ebovat proì
  512. programování grafickÿch  povelû. Poznáte, æe  v¿e, co bylo  moænéì
  513. nastavit v grafickém oknê budete  mít moænost zadat pomocí poveluì
  514. z p⌐íkazového okna.
  515.   Çinnost grafického  okna je moæné  si p⌐edstavit jako  malí⌐skéì
  516. plátno definovanÿch  rozmêrû, na které se  kreslí perem (anglickyì
  517. pen). Vêt¿í  plochy je moæné  vybarvit ¿têtcem (anglicky  brush).ì
  518. Kreslí se  p⌐itom vædy nastavenou barvou.  Systém obsahuje povelyì
  519. pro nastavení  parametrû pera i ¿têtce.  S moænostmi se seznámíteì
  520. v následujícím textu.
  521.   P⌐i  kreslení  obrazcû  do  grafického  okna  se kreslí obrazceì
  522. çárou, jejíæ  typ je definován  povelem ImagePenStyle a  tlou¿ƒkaì
  523. çáry  je  definována  povelem  ImagePenWidth. Plocha nakreslenÿchì
  524. geometrickÿch   obrazcû  je   vyplnêna  stylem   zadanÿm  povelemì
  525. ImageBrushStyle.
  526.   Nejjednodu¿¿í je  zmêna tlou¿ƒky çáry,  kdy uvádíte p⌐ímo  jakoì
  527. parametr povelu  tlou¿ƒku çáry v bodech.  Pro zmênu tlou¿ƒky çáryì
  528. na pêt bodû pouæijete z p⌐íkazového okna následující povel:
  529.  
  530. ImagePenWidth(5);
  531.  
  532.   V¿imnête si, æe pokud nastavíte sílu çáry povelem z p⌐íkazovéhoì
  533. okna,  pouæije se  nastavená síla  çáry i  pro následné  kresleníì
  534. pomocí my¿i  p⌐ímo v grafickém oknê.  Obdobná vlastnost je platnáì
  535. i pro  nastavení  v¿ech  parametrû  grafického  okna.  Máte protoì
  536. moænost libovolnê  kombinovat zadávaní povelû  z p⌐íkazového oknaì
  537. nebo  jejich  nastavení  pomocí   ikon.  V  budoucnu  budete  mítì
  538. samoz⌐ejmê moænost uvedené parametry nastavit i p⌐ímo z programu.
  539.   Styl   çáry   máte   moænost   zadávat  povelem  ImagePenStyle.ì
  540. P⌐eddefinováno je ¿est stylû.  Jako parametr povelu musíte p⌐itomì
  541. zadat definovanÿ  styl çáry. Parametr  mûæete uvést buâ  çíselnouì
  542. hodnotou, nebo jménem konstanty dle následující tabulky:
  543.  
  544. ---------------------------------------------------------
  545. hodnota   konstanta      název stylu
  546. ---------------------------------------------------------
  547.    1      psSolid        souvislá çára
  548.    2      psDash         p⌐eru¿ovaná çára
  549.    3      psDot          teçkovaná çára
  550.    4      psDashDot      çerchovaná çára
  551.    5      psDashDotDot   çerchovaná çára se dvêma teçkami
  552.    6      psClear        neviditelná çára
  553. ---------------------------------------------------------
  554.  
  555. P⌐íklady  pouæití  definice  stylu   çáry  (text  mezi  sloæenÿmiì
  556. závorkami nemusíte psát, jedná se o poznámku):
  557.  
  558. ImagePenStyle(1);         { souvislá plná çára }
  559. ImagePenStyle(3);         { teçkovaná çára }
  560. ImagePenStyle(6);         { neviditelná çára }
  561.  
  562. ImagePenStyle(psSolid);   { souvislá plná çára }
  563. ImagePenStyle(psDot);     { teçkovaná çára }
  564. ImagePenStyle(psClear);   { neviditelná çára }
  565.  
  566.   Existuje samoz⌐ejmê  i zpûsob nastavení barvy  çáry. Nejprve seì
  567. v¿ak budeme muset seznámit s  moænostmi pouæití barev v poçítaçi.ì
  568. Zobrazování  barev  závisí  na  vlastnostech  videokarty ve va¿emì
  569. poçítaçi. Pouæíváte-li barevnou VGA  kartu, máte moænost zobrazitì
  570. minimálnê  16  barev.  Po  p⌐íslu¿ném  nastavení videoadaptéru jeì
  571. moæné bêænê zobrazovat 256 barev, vÿjimeçnê i více. Vy budete mítì
  572. moænost nastavit v systému libovolnou  barvu z rozsahu 16 miliónûì
  573. barev.  Skuteçnê  zobrazená  barva  ale  závisí  na  vlastnostechì
  574. technického za⌐ízení, protoæe se zobrazí vædy barva nejbliæ¿í.
  575.   Hodnotu  barev  je  moæné  zadávat  dvêma  zpûsoby,  které  lzeì
  576. v programu  libovolnê  kombinovat.  Pokud  budete  pouæívat pouzeì
  577. základní, ¿estnáctibarevnou  paletu, mûæete tak  uçinit zadávánímì
  578. p⌐eddefinované konstanty udávající  anglické jméno barvy. Stejnouì
  579. barvu máte moænost zadat i pomocí tzv. RGB hodnoty.
  580.   Hodnota barev zadávaná definicí RGB  znamená, æe kaædá barva jeì
  581. definována jako  pomêr kombinace barev  modré, zelené a  çervené.ì
  582. Pro  kaædou barvu  je moæné  volit hodnoty  v rozsahu  0 aæ  256.ì
  583. Násobek têchto hodnot (modrá x  zelená x çervená) udává vÿslednouì
  584. barvu. Vÿhodné je pouæívat  tzv. hexadecimálního zápisu, kdy jsouì
  585. pro  kaædou barvu  vyhrazeny dvê  pozice çísla  s hodnotami od 00ì
  586. (çíslo 0) aæ do FF (çíslo 256). P⌐i pouæití hexadecimálního çíslaì
  587. je nutné uvést p⌐ed çíslem rozli¿ovací znak $. Viz tabulka hodnotì
  588. barev.
  589.  
  590.  
  591.  
  592.  
  593. ------------------------------------------
  594. hodnota   konstanta    název barvy
  595. ------------------------------------------
  596. $000000   clBlack      çerná
  597. $000080   clMaroon     ka¿tanovê çervená
  598. $0000FF   clRed        svêtle çervená
  599. $008000   clGreen      tmavê zelená
  600. $008080   clOlive      tmavê ælutá
  601. $00FF00   clLime       svêtle zelená
  602. $00FFFF   clYelow      ælutá
  603. $800000   clNavy       tmavê modrá
  604. $800080   clPurple     tmavê fialová
  605. $808000   clTeal       tmavê modrozelená
  606. $808080   clDkGray     tmavo¿edá
  607. $C0C0C0   clLtGray     svêtle ¿edá
  608. $FF0000   clBlue       modrá
  609. $FF00FF   clFuschsia   fialová
  610. $FFFF00   clAgua       modrozelená
  611. $FFFFFF   clWhite      bílá
  612. ------------------------------------------
  613.  
  614. P⌐íklady  pouæití  definice  barvy   çáry  (text  mezi  sloæenÿmiì
  615. závorkami nemusíte psát, jedná se o poznámku):
  616.  
  617. ImagePenColor(clWhite);    { bílá barva çáry }
  618. ImagePenColor(clRed);      { svêtle çervená barva çáry }
  619. ImagePenColor(clBlue);     { modrá barva çáry }
  620.  
  621. ImagePenColor($FFFFFF);    { bílá barva çáry }
  622. ImagePenColor($0000FF);    { svêtle çervená barva çáry }
  623. ImagePenColor($FF0000);    { modrá barva çáry }
  624.  
  625.   Podobnê,  jako je  moæné  nastavit  parametry kreslené  çáry jeì
  626. moæné  nastavit  parametry   vykreslovanÿch  ploch  geometrickÿchì
  627. obrazcû. Barva  plochy se p⌐itom  zadává povelem ImageBryshColor.ì
  628. Pouæívá se  p⌐itom vÿ¿e zadanÿch  hodnot a konstant  pro definiciì
  629. parametru  barvy. P⌐íklady  pouæití definice  barvy plochy  (textì
  630. mezi sloæenÿmi závorkami nemusíte psát, jedná se o poznámku):
  631.  
  632. ImageBrushColor(clWhite);    { bílá barva plochy }
  633. ImageBrushColor(clRed);      { svêtle çervená barva plochy}
  634. ImageBrushColor(clBlue);     { modrá barva plochy }
  635.  
  636. ImageBrushColor($FFFFFF);    { bílá barva plochy }
  637. ImageBrushColor($0000FF);    { svêtle çervená barva plochy}
  638. ImageBrushColor($FF0000);    { modrá barva plochy }
  639.  
  640.   Pro   nastavení  stylu   vyplñování  ploch   se  pouæívá  povelì
  641. ImageBrushStyle,  kde se  jako parametr  povelu udává  buâ çíslemì
  642. definovanÿ styl, nebo jméno konstanty dle následující tabulky:
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651. -----------------------------------------------------------
  652. hodnota   konstanta      název stylu
  653. -----------------------------------------------------------
  654.    1      bsSolid        vyplní oblast jednou barvou
  655.    2      bsClear        vyplní oblast barvou pozadí
  656.    3      bsHorizontal   vyplní oblast vodorovnÿmi çárami
  657.    4      bsVertical     vyplní oblast svislÿmi çárami
  658.    5      bsFDiagonal    diagonální çáry \\\\\\\
  659.    6      bsBDiagonal    diagonální çáry ///////
  660.    7      bsCros         vodorovné a svislé çáry
  661.    8      bsDiagCross    vodorovné a svislé çáry diagonálnê
  662. ------------------------------------------------------------
  663.  
  664.   P⌐íklady  pouæití definice  stylu plochy  (text mezi  sloæenÿmiì
  665. závorkami nemusíte psát, jedná se o poznámku):
  666.  
  667. ImageBrushStyle(1);           {plné vybarvení plochy}
  668. ImageBrushStyle(3);           {vÿplñ vodorovnÿmi çárami}
  669. ImageBrushStyle(8);           {vÿplñ diagonálními çárami}
  670.  
  671. ImageBrushStyle(bsSolid);     {plné vybarvení plochy}
  672. ImageBrushStyle(bsHorizontal);{vÿplñ vodorovnÿmi çárami}
  673. ImageBrushStyle(bsDiagCros);  {vÿplñ diagonálními çárami}
  674.  
  675.   Aby  bylo moæné  kreslit v  grafickém oknê  do p⌐esnê  urçenÿchì
  676. pozic, musí bÿt zadány sou⌐adnice pro kreslení. Sou⌐adnice urçujíì
  677. polohu  jednotlivÿch bodû  kresby. Sou⌐adnice  znamená, æe musíteì
  678. uvést  vzdálenost  v  bodech  od  levého  okraje  grafického oknaì
  679. a vzdálenost  v   bodech  od  horního   okraje  grafického  okna.ì
  680. Sou⌐adnicovÿ systém je tedy vztaæen  k levému hornímu rohu, kterÿì
  681. má  sou⌐adnici  0,0.  Hodnoty  ve  smêru  osy  X narûstají smêremì
  682. doprava, hodnoty ve smêru osy Y narûstají smêrem dolû. P⌐i zápisuì
  683. sou⌐adnice se uvádí  nejprve osa x, potom osa  y. Je p⌐itom moænéì
  684. zadávat p⌐íkazy pro kreslení mimo plochu grafického okna, zobrazíì
  685. se v¿ak pouze ta çást, která je obsaæena maximálními sou⌐adnicemiì
  686. grafického okna.
  687.   Aktuální  sou⌐adnice  se  zobrazují  ve  stavovém ⌐ádku systémuì
  688. vædy, kdyæ máte nastavenou my¿ nad grafickÿm oknem. Sou⌐adnice jeì
  689. vhodné  si  vyzkou¿et  také  na  povelu  Point,  kterÿ slouæí proì
  690. zobrazení bodu  na zadané sou⌐adnici. Povel  nakreslí na zadanÿchì
  691. sou⌐adnicích  bod o  zadané velikosti.  Bod se  nakreslí aktuálníì
  692. barvou  pera,  kterou   lze  nastavit  procedurou  ImagePenColor.ì
  693. Vyzkou¿ejte  si nêkolik  p⌐íkladû  pro  seznámení se  se zpûsobemì
  694. oznaçování sou⌐adnic grafické polohy:
  695.  
  696. Point(  0,   0,  2);    { levÿ  horní roh }
  697. Point(  0, 100,  2);    { levÿ  dolní roh }
  698. Point(100,   0,  2);    { pravÿ horní roh }
  699. Point(100, 100,  2);    { pravÿ dolní roh }
  700. Point( 50,  50, 10);    { uprost⌐ed, vêt¿í bod }
  701.  
  702.   Sou⌐adnice   grafického  okna   se  pouæijí   i  pro   kresleníì
  703. geometrickÿch tvarû pomocí povelû.  Moæné je kreslit çáru povelemì
  704. Line,  obdélník povelem  Rectangle, kruænici  nebo elipsu povelemì
  705. Ellipse a obdélník se  zaoblenÿmi rohy povelem RoundRect. Povelemì
  706. Triangle  je moæné  nakreslit trojúhelník,  coæ není  pomocí my¿iì
  707. moæné.  Pomocí  povelû  je  moæné  také  kreslit povelem Arc çástì
  708. k⌐ivky  a povelem  Pie  kruhovou  vÿseç. Vyzkou¿ejte  si kresleníì
  709. základních geometrickÿch tvarû:
  710.  
  711. Line(20, 20, 50, 100);          { nakreslí çáru }
  712. Rectangle(10, 10, 100, 100);    { nakreslí çtverec }
  713. Ellipse(30, 30, 120, 120);      { nakreslí kruænici }
  714. Ellipse(30, 30, 120, 60);       { nakreslí elipsu }
  715. Triangle(10,100,55,10,100,100}; { nakreslí trojúhelník }
  716.  
  717. Arc(0,0,100,100, 50,0,0,50);    {levÿ  horní çtvrtkruh}
  718. Pie(0,0,100,100, 50,100,100,50) {pravÿ dolní çtvrtkruh}
  719.  
  720.   7.lekce - vÿstup do grafického okna
  721.  
  722.   V  p⌐edchozí  lekci  jsme  se  nauçili  kreslit  do  grafickéhoì
  723. vÿstupního  okna z  p⌐íkazového okna  a nastavovat  parametry çarì
  724. a ploch. Nyní  se zamê⌐íme na nastavení  grafické plochy a p⌐evodì
  725. çásti grafického  okna ze zásobníku Windows  a zpêt. Seznámíme seì
  726. také s moæností zápisu textu do grafického okna.
  727.   Aæ  dosud jsme  mêli velikost  grafické plochy  nastavenou vædyì
  728. podle  toho, jak  veliké bylo  grafické okno  v okamæiku aktivaceì
  729. grafické  plochy.  Dal¿í  zmênou  velikosti grafického vÿstupníhoì
  730. okna  se  jiæ  velikost  grafické  plochy  nemênila.  Pokud protoì
  731. pot⌐ebujete  nastavit  velikost  grafické  plochy  na  poæadovanéì
  732. rozmêry, mûæete tak uçinit  povelem ImageInit. Povel inicializujeì
  733. grafické  okno   a  nastaví  jeho  velikost   na  rozmêry  zadanéì
  734. parametry. Nastaví  souçasnê bílou barvu plochy,  styl ¿têtce proì
  735. plnê vybarvené plochy, çernou barvu pera, sílu çáry na jeden bod.ì
  736. Inicializací se  provede vÿmaz pûvodního  obsahu grafického okna.ì
  737. Vyzkou¿ejte si nap⌐íklad následující hodnoty:
  738.  
  739. ImageInit( 50, 200);
  740. ImageInit(120,  60);
  741.  
  742.   Pokud  pot⌐ebujete znát  parametry jiæ  inicializované grafickéì
  743. plochy,  mûæete  pouæít  dotazu  GetMaxX  a  GetMaxY, kterÿ vracíì
  744. velikost  grafické plochy  zadané strany.  Pokud budete nap⌐íkladì
  745. pot⌐ebovat vykreslit bod uprost⌐ed  grafické plochy bez ohledu naì
  746. velikost  aktuálnê  inicializované   plochy,  mûæete  tak  uçinitì
  747. povelem:
  748. Point(GetMaxX/2, GetMaxY/2, 5);
  749.  
  750.   V nêkterÿch  p⌐ípadech by bylo vhodné  kreslit çáry do grafickéì
  751. plochy  zadáváním  v  absolutních  p⌐írûstkovÿch  hodnotách místoì
  752. p⌐esné definice  sou⌐adnic. Proto je  v grafickém oknê  definovánì
  753. tzv.  grafickÿ  ukazatel,  kterÿ  zaznamenává  pozici  vykresleníì
  754. posledního  bodu.  Poloha  grafického  ukazatele  se  p⌐i pouæitíì
  755. nêkterÿch   povelû  automaticky   mêní.  Je   moæné  ji  nastavitì
  756. i z programu  povelem MoveTo. Çáry  je moæné potom  zadat povelemì
  757. LineTo  definicí  koneçného  bodu.  Vyuæitím  uvedenÿch povelû jeì
  758. moæné  nap⌐íklad nakreslit  libovolnÿ mnohostrannÿ  mnohoúhelník.ì
  759. Vyzkou¿ejte si následující povely, které by mêly v grafické plo¿eì
  760. nakreslit çty⌐úhelník:
  761.  
  762. MoveTo( 10,  10);   { p⌐esun na poçáteçní bod }
  763. LineTo(100,  10);   { horní  hrana }
  764. LineTo(100, 100);   { pravá  hrana }
  765. LineTo(100,  10);   { spodní hrana }
  766. LineTo( 10,  10);   { levá   strana }
  767.  
  768.   Aæ  dosud  jsme  dûslednê   dodræovali,  æe  je  moæné  textovéì
  769. informace   vypisovat  zásadnê   do  textového   vÿstupního  oknaì
  770. a grafické informace do grafického vÿstupního okna. Je v¿ak moænéì
  771. provádêt vÿstup  textovÿch informací i do  grafického okna. Nelzeì
  772. p⌐itom  pouæít  povelu  WRITELN,  se  kterÿm  jsme  se  jiæ d⌐íveì
  773. seznámili. Zobrazovat lze pouze textové informace. Çísla je nutnéì
  774. p⌐edem  p⌐evést  na  ⌐etêzce.  K  vÿstupu  textovÿch informací seì
  775. pouæívá  povelu   TextOut.  Jako  parametry   povelu  se  udávajíì
  776. sou⌐adnice pro zobrazení textu v  grafickém oknê a ⌐etêzec, kterÿì
  777. se má zobrazit. Povel si mûæete vyzkou¿et nap⌐íklad následujícímiì
  778. p⌐íklady:
  779.  
  780. TextOut(10, 10, "OZOGAN");
  781. TextOut(10, 30, "KLONDAIK");
  782.  
  783.   Text  se p⌐i  pouæití povelu  TextOut vypisuje  p⌐eddefinovanÿmì
  784. fontem. Jeho  zmêna se provede  buâ povelem ImageSetFont,  kdy jeì
  785. moæné zadat v dialogovém oknê nejen jméno fontu, ale p⌐ímo i jehoì
  786. styl  a velikost.  Dal¿í moæností  je pouæití  ikony z grafickéhoì
  787. vÿstupního  okna.   Pokud  pot⌐ebujete  nastavit   pouze  nêkteréì
  788. atributy  fontu, mûæete  tak uçinit  povely ImageFontColor (barvaì
  789. fontu),  ImageFontName  (jméno  fontu),  ImageFontSize  (velikostì
  790. fontu) a ImageFontStyle (styl fontu).
  791.   P⌐i  nastavení barvy  fontu se  zadává u  povelu ImageFontColorì
  792. jako  parametr buâ  çíslo barvy,  nebo jméno  konstanty udávajícíì
  793. barvu. Tabulka  hodnot barev je  stejná jako pro  nastavení barvyì
  794. çar a ploch. U povelu  ImageFontName, kterÿ nastavuje jméno fontuì
  795. se  uvádí p⌐ímo  jméno fontu.  Pokud není  zadané jméno v systémuì
  796. Windows  dostupné, pouæije  se font  s podobnÿm  jménem. Velikostì
  797. fontu se uvádí v povelu ImageFontSize p⌐ímo poæadovanou hodnotou.ì
  798. P⌐íklad moænÿch nastavení si  prozkou¿ejte vçetnê vÿpisu textu poì
  799. kaædé zmênê parametrû fontu:
  800.  
  801. ImageFontColor(clRed);    { nastaví çervenou barvu fontu }
  802. ImageFontColor($00FFFF);  { nastaví ælutou barvu fontu }
  803. ImageFontName("Arial CE");{ nastaví font Arial CE }
  804. ImageFontSize(12);        { nastaví velikost fontu 12 bodû}
  805.  
  806.   Pro nastavení  stylu fontu se v  povelu ImafeFontStyle poæívajíì
  807. jako parametr p⌐eddefinované hodnoty jednotlivÿch stylû. Uvádí seì
  808. souçet hodnot poæadovaného vÿsledného stylu:
  809. ------------------------------------------
  810. hodnota   konstanta     popis stylu
  811. ------------------------------------------
  812.    0      fsNormal      normální písmo
  813.    1      fsBold        tuçné písmo
  814.    2      fsItalic      naklonêné písmo
  815.    4      fsUnderline   podtræené písmo
  816.    8      fsStrikeOut   p⌐e¿krtnuté písmo
  817. ------------------------------------------
  818.  
  819.   Pro nastavení naklonêného podtræeného  písma mûæete zadat jednuì
  820. z následujících moæností:
  821.  
  822. ImageFontStyle(2 + 4);                  {souçet hodnot}
  823. ImageFontStyle(6);                      {souçet 2 + 4}
  824. ImageFontStyle(fsItalic + fsUnderline); {uvedení konstanty}
  825.  
  826.   Pokud  budete   pot⌐ebovat  p⌐evést  nakreslenÿ   obrázek  p⌐esì
  827. schránku Windows (clipboard) do jiné aplikace, mûæete tak provéstì
  828. pomocí povelu InageToClip, kdy  uvedete jako parametry sou⌐adniceì
  829. ohraniçené  plochy  pro  p⌐evod.  Pokud  budete  chtít  nap⌐íkladì
  830. p⌐esunout  do  schránky  obsah  celého  grafického  okna, zadejteì
  831. p⌐íkaz:
  832.  
  833. ImageToClip(0,0,GetMaxX,GetMaxY);
  834.  
  835.   Naçtení obsahu  schránky se provádí  povelem ImageFromClip, kdyì
  836. se jako parametry uvedou sou⌐adnice  ohraniçené plochy, kam se máì
  837. obsah schránky p⌐evést. Pokud budete chtít p⌐evést obsah schránkyì
  838. Windows na celou plochu grafického okna, zadejte p⌐íkaz:
  839.  
  840. ImageFromClip(0,0,GetMaxX,GetMaxY);
  841.  
  842.   Nêkoho z vás jiæ urçitê napadlo, æe vÿ¿e uvedené povely, pomocíì
  843. kterÿch  mûæete p⌐evádêt  obrázky do  schránky a  naçítat zpêt zeì
  844. schránky  by bylo  moæné pouæít  na p⌐esun  çásti obrázku na novéì
  845. místo.  Na  to  je  ale  vÿhodnêj¿í  pouæít  samostatného  poveluì
  846. ImageMove, kterÿ provede obê  akce najednou. Zadáváte p⌐itom jakoì
  847. parametry   sou⌐adnice  místa,   odkud  se   má  naçtení  provéstì
  848. a sou⌐adnice,  kam  se  má  plocha  p⌐enést. Neodpovídá-li p⌐itomì
  849. pomêr stran  zdrojové a cílové  plochy, nebude zkopírovanÿ  obrazì
  850. u⌐íznut, ale bude upraven  (deformován) do zadanÿch sou⌐adnic. Toì
  851. je moæné vyuæít k mnoha  zajímavÿm efektûm. Nap⌐íklad ke zvêt¿eníì
  852. çásti plochy apod.
  853.   Nêkte⌐í jste  jiæ moæná netrpêliví,  kdy se zaçne  programovat.ì
  854. Místo  programování  jsme  zadávali  pouze  povely do p⌐íkazovéhoì
  855. okna.  Tím jsme  se vás  snaæili nauçit  nejprve pouæívat nêkolikì
  856. základních  povelû programovacího  jazyka. Pokud  by jsme  zaçaliì
  857. ihned se  základy programování vçetnê popisu  pouæití povelû byloì
  858. by  toho najednou  moc. Proto  jsme si  nejprve probrali  základyì
  859. pouæívání povelû a p⌐íkazû jazyka a v p⌐í¿tí kapitole jiæ zaçnemeì
  860. opravdu programovat.
  861.  
  862.   8.lekce - první program, procedura main
  863.  
  864.   V  p⌐edchozích  lekcích  jsme  si  probrali  základní informaceì
  865. o pouæívání  p⌐íkazového okna  pro zadávání  povelû jazyka  p⌐ímoì
  866. z klávesnice.  Vÿstup  vÿsledkû  byl  provádên  do textového neboì
  867. grafického  okna.  V   následujících  lekcích  vyuæijeme  získanéì
  868. poznatky jiæ p⌐ímo p⌐i vÿvoji vlastních programû.
  869.   Programy  se zadávají  (zapisují) do  samostatného okna,  kteréì
  870. slouæí jako  textovÿ editor programu. Pokud  je okno na obrazovceì
  871. viditelné, mûæete  jej aktivovat kliknutím  my¿i na jeho  plochu.ì
  872. V opaçném  p⌐ípadê  vyuæijte  z  menu  volbu  Okna/Program. Pokudì
  873. budete chtít pouæít povelu z p⌐íkazového okna, budete muset zadatì
  874. povel ProgramShow.  Pro moænost automatického  vytvo⌐ení základníì
  875. kostry programu stisknête klávesy Ctrl+N, nebo zadejte volbu menuì
  876. Soubor/Novÿ.  Do  okna  program  se  vygeneruje  kostra prázdnéhoì
  877. programu.
  878.   Novÿ,  prázdnÿ  vygenerovanÿ  program  je  moæné  ihned spustitì
  879. volbou z  menu Program/Spustit, p⌐ípadnê  stiskem funkçní klávesyì
  880. F9  nebo kliknutím  my¿i na  ikonê s  obrázkem bêæícího  panáçka.ì
  881. Prázdnÿ  program  obsahuje  pouze  základní  kostru  bez  æádnéhoì
  882. povelu,  kterÿ by  vykonával viditelnou  çinnost a  proto programì
  883. skonçí,  aniæ  by  cokoliv   uçinil.  Vyuæijeme  proto  získanÿchì
  884. zku¿eností  a  doplníme  text  programu  o  nám  jiæ známé povelyì
  885. a p⌐íkazy. Dávejte si pozor na  to, aby jste ponechali beze zmênyì
  886. první a poslední ⌐ádek programu. Pokud by se tak nestalo, programì
  887. by  se  nemusel  vûbec  spustit.  Proveâte  proto  pouze doplnêníì
  888. programu o p⌐íkaz WRITELN dle následující ukázky:
  889.  
  890. PROCEDURE main
  891.    // zde zapi¿te vá¿ program
  892.    WRITELN("Ahoj, zdraví Vás systém KLONDAIK");
  893. ENDPROC
  894.  
  895.   Program  spustíme funkçní  klávesou F9  a pokud  máte viditelnÿì
  896. obsah  textového vÿstupního  okna, zobrazí  se v  nêm pozdrav  odì
  897. systému.  Vyzkou¿ejte  si  dal¿í,  d⌐íve  probrané  povely, kteréì
  898. zapisujte pouze do çásti programu mezi slovy PROCEDURE a ENDPROC.ì
  899. Takto by nap⌐íklad mohla bÿt upravena procedura main:
  900.  
  901. PROCEDURE main
  902.    ConsoleShow;      { zobrazí a aktivuje textovÿ vÿstup }
  903.    ConsoleClear;     { vymaæe plochu textového vÿstupu }
  904.    WRITELN("Ahoj, zdraví Vás systém KLONDAIK");
  905. ENDPROC
  906.  
  907.   Obdobnÿm zpûsobem mûæete zadat  i povely pro pouæití grafickéhoì
  908. vÿstupního  okna.  Opêt  pouæijeme  pouze  d⌐íve probrané povely,ì
  909. které zapí¿ete do çásti programu  mezi slovy PROCEDURE a ENDPROC.ì
  910. Text ve sloæenÿch závorkách nemusíte zapisovat, jsou to poznámky,ì
  911. které nemají na  çinnost programu vliv. O tom,  jak p⌐ebírat dáleì
  912. uvedené  p⌐íklady z  nápovêdê k  programu se  dozvíte podrobnê veì
  913. druhé lekci.
  914.  
  915. PROCEDURE main
  916.    ImageShow;                    {aktivuje textovÿ vÿstup}
  917.    ImageInit(150, 200);          {inicializuje plochu}
  918.    Rectangle(10, 10, 140, 190);  {nakreslí obdélník }
  919.    ImageFontColor(clBlue);       {nastaví modrou barvu fontu}
  920.    ImageFontSize(16);            {nastaví velikost fontu}
  921.    TextOut(50, 30, "KLONDAIK");  { vypí¿e text }
  922. ENDPROC
  923.  
  924.   Jak jsme jiæ hned v úvodu probíranÿch lekcí uvedli, je základemì
  925. programování  zadání   posloupností  akcí.  To   si  mûæete  nyníì
  926. vyzkou¿et.  Projdête  si  p⌐edchozí  lekce  a  pokuste  se  z jiæì
  927. získanÿch znalostí sestavit program, kterÿ nap⌐íklad nakreslí dûmì
  928. a vedle nêj zelenÿ strom. Aby jste to nemêli tak sloæité, uvádímeì
  929. zde  çást programu  pro  nakreslení  domu. Povely  pro nakresleníì
  930. strumu  jiæ doplñte  sami. Samoz⌐ejmê  mûæete v  programu provéstì
  931. i dal¿í úpravy  dle vlastního uváæení.  Aby jste se  také nauçiliì
  932. nêco  nového z  ovládání uæivatelského  prost⌐edí systému, zkusteì
  933. tentokrát spustit  program klávesou F6. Tomu,  co uvidíte se ⌐íkáì
  934. animace  programu.  Podrobnêji  se  s  ní  seznámíme aæ v nêkteréì
  935. z dal¿ích lekcí. Nyní krátce jen to, æe animace mimo interpretaceì
  936. programu   souçasnê  v   oknê  s   programem  soubêænê  zobrazujeì
  937. interpretovanÿ ⌐ádek programu.
  938.  
  939.  
  940.  
  941. PROCEDURE main
  942.    ImageShow;                     {aktivace grafické plochy}
  943.    ImageInit(200, 150);           {inicializace graf.plochy}
  944.    ImageBrushColor(clLime);       {nastavení zelené barvy}
  945.    Rectangle(0, 130, 200, 150);   {nakreslení zahrádky}
  946.    ImageBrushColor(clOlive);      {nastavení tmavê zelené}
  947.    Rectangle(20,60, 105, 130);    {nakreslení stêny domu}
  948.    ImageBrushColor(clYelow);      {nastavení æluté barvy}
  949.    Rectangle(28, 70, 48, 90);     {horní levé okno}
  950.    Rectangle(72, 70, 52, 90);     {horní st⌐ední okno}
  951.    Rectangle(96, 70, 76, 90);     {horní pravé okno}
  952.    Rectangle(28, 100, 48, 120);   {levé dolní okno}
  953.    Rectangle(72, 100, 52, 130);   {dve⌐e}
  954.    Rectangle(96, 100, 76, 120);   {pravé dolní okno}
  955.    Ellipse(140,20, 170, 50);      {sluníçko}
  956.    ImageBrushColor(clRed);        {nastavení çervené barvy}
  957.    Triangle(20,60, 60,25, 105,60);{st⌐echa}
  958. ENDPROC
  959.  
  960.   Takæe jak  vypadá program jiæ víte.  Mêli by jste bÿt  jiæ takéì
  961. schopni sestavit  jednoduchÿ program z  posloupnosti vykonávanÿchì
  962. povelû. Zatím  jsme si ale  nic ne⌐ekli o  tom, co znamená  prvníì
  963. a poslední ⌐ádek programu, ve  kterÿch jsou uvedena klíçová slovaì
  964. PROCEDURE  a ENDPROC.  To se  dozvíte v  nêkteré z  následujícíchì
  965. lekcích, ve které  si vysvêtlíme, co v¿echno program  mûæe a musíì
  966. obsahovat a jakou má mít strukturu.
  967.  
  968.   9.lekce - editace programu
  969.  
  970.   P⌐i  zápisu   programu  se  zapisuje   text  programu  textovÿmì
  971. editorem. Jedná se o tzv. programátorskÿ editor, kterÿ neumoæñujeì
  972. nastavovat promênnÿ  druh ani velikost písma.  Není to ani nutné,ì
  973. protoæe   zapsanÿ   text   programu   slouæí   pouze  jako  zápisì
  974. posloupnosti instrukcí pro systém interpretu.
  975.   Zápis  nového  programu  zahájíte  stiskem  kláves  Ctrl+N neboì
  976. volbou  z  menu  Soubor/Novÿ.  Do  okna  program  se vytvo⌐í nováì
  977. prázdná  struktura   programu,  kterou  mûæete   bêænÿm  zpûsobemì
  978. doplñovat o  nové ⌐ádky programu.  Jiæ existující program  mûæeteì
  979. otev⌐ít   stiskem    kláves   Ctrl+O,   nebo    volbou   z   menuì
  980. Soubor/Otev⌐ít.  Program  máte   moænost  uloæit  Stiskem  klávesì
  981. Ctrl+S nebo  volbou z menu  Soubor/Uloæit. Pokud se  jedná o novÿì
  982. program,  musíte  v  dialogovém  oknê  zadat  jméno souboru a tímì
  983. i programu pro  uloæení. Pokud jiæ zadanÿ  soubor existoval, budeì
  984. p⌐epsán novou verzí. Neprovádí  se p⌐itom záloæní kopie pûvodníhoì
  985. souboru a tím samoz⌐ejmê i programu !
  986.   Pokud budete chtít uloæit program  pod novÿm jménem, mûæete takì
  987. uçinit volbou z menu Soubor/Uloæit pod jménem. Budete dotázáni naì
  988. jméno nového souboru, do kterého se program uloæí. Pûvodní souborì
  989. zûstane p⌐itom zachován beze zmêny.  P⌐i práci se soubory a tudíæì
  990. i s programy  vædy platí, æe  mûæe bÿt v  jednom okamæiku aktivníì
  991. vædy pouze jeden. Nemûæete editovat najednou nêkolik programû.
  992.   Základy editace  programu jsou obdobné, jako  u v¿ech textovÿchì
  993. editorû. Jakÿm zpûsobem zapsat nebo  p⌐epsat text snad není nutnéì
  994. uvádêt.  Stejnê tak  jak se  dostat na  konec programu, procházetì
  995. text po⌐ádcích a podobnê. Seznámíme se ale s blokovÿmi operacemi,ì
  996. které   jsou  p⌐i   programování  velmi   vÿhodné.  Pokud  budeteì
  997. pot⌐ebovat p⌐esunout  çást textu na  jiné místo, budete  si musetì
  998. poæadovanÿ  blok textu  nejprve  oznaçit.  To mûæete  provést buâì
  999. my¿í, kdy se p⌐esunete na zaçátek bloku, stisknete tlaçítko my¿i,ì
  1000. dræíte  je   stisknuté  a  p⌐esunete   ukazatel  my¿i  na   konecì
  1001. poæadovaného  bloku  textu.  Text   zapsanÿ  v  bloku  se  p⌐itomì
  1002. zvÿrazní. Z klávesnice mûæete blok textu oznaçit tak, æe najedeteì
  1003. kurzorem  na poæadovanÿ  poçátek bloku  textu, stisknete  klávesuì
  1004. Alt, podræíte  ji stisknutou a  p⌐ejedete kurzorem na  poæadovanÿì
  1005. konec  bloku textu.  Po uvolnêní  klávesy Alt  máte oznaçen  blokì
  1006. textu pro  dal¿í operace. Pokud  j budete chtít  blok textu pouzeì
  1007. vymazat, stisknête nyní klávesu  Delete. Oznaçenÿ blok textu budeì
  1008. zru¿en.  Pozor proto  p⌐i práci  s oznaçenÿm  blokem na  uvedenouì
  1009. klávesu.
  1010.   Pro  p⌐esun  oznaçeného  bloku  textu  programu  na  jiné místoì
  1011. v programu budete muset pouæít  schránku Windows. Pokud stiskneteì
  1012. klávesy Ctrl+C  zkopíruje se text z  oznaçeného bloku do schránkyì
  1013. a blok zûstane  v textu stále  zachován. Naopak, pokud  stiskneteì
  1014. klávesy  Ctrl+X, bude  blok  textu  p⌐eveden do  schránky Windowsì
  1015. (z textu programu bude zru¿en).  Pokud se p⌐esunete na poæadovanéì
  1016. místo  v  programu,  mûæete  do  nêj  text  ze  schránky  Windowsì
  1017. zkopírovat. To se provede stiskem kláves Ctrl+V. Text ve schránceì
  1018. zûstává  p⌐itom stále  zachován  do  doby dal¿ího  naçtení bloku.ì
  1019. Pozor v¿ak na  to, æe obsah schránky Windows  se mûæe v ostatníchì
  1020. aplikací Windows zru¿it. Pro p⌐esun textu mezi editorem a Windowsì
  1021. jsou v menu systému za⌐azeny p⌐íslu¿né volby v menu Editace.
  1022.   Stejnê jako máte moænost  p⌐esouvat text mezi schránkou Windowsì
  1023. a programem,  mûæete  podobnÿm   zpûsobem  p⌐evádêt  text  povelûì
  1024. zadanÿch v p⌐íkazovém oknê systému. Po dobu editace programu máteì
  1025. stále moænost  pouæívat p⌐íkazové okno a  tím i nap⌐íklad zkou¿etì
  1026. parametry   povelu.  Aæ   získáte  správnÿ   vÿsledek,  p⌐evedeteì
  1027. odzkou¿enÿ  povel p⌐es  schránku Windows  do programu. Teoretickyì
  1028. mûæete  pomocí  bloku  p⌐evádêt  do  programu  v  p⌐ípadê pot⌐ebyì
  1029. i obsah vÿstupního textového okna.
  1030.   Aæ  budete psát  rozsáhlej¿í programy,  budete obças pot⌐ebovatì
  1031. nalézt  v textu  programu urçitÿ  text. Po  stisku kláves Ctrl+F,ì
  1032. nebo poloækou z menu Editace/Hledat  se vám zobrazí dialogovÿ boxì
  1033. pro zadání parametrû hledání. Zadáte poæadovanÿ text pro hledání,ì
  1034. poæadavek zda  hledat pouze celá  slova, jestli rozli¿ovat  velkáì
  1035. a malá písmena a smêr hledání.
  1036.   Podobnÿm  zpûsobem  máte  moænost  zadat  náhradu  textu  jinÿmì
  1037. textem. Dialogovÿ box se zobrazí  po stisku kláves Ctrl+L nebo poì
  1038. zadání volby menu Editace/Zmênit.  Nahrazovat p⌐itom mûæete pouzeì
  1039. poæadované vÿskyty hledaného textu, nebo komplet.
  1040.   Pokud  budete  chtít   program  vytisknout,  stisknête  klávesyì
  1041. Ctrl+P, nebo pouæijte volbu menu Editace/Tisk.
  1042.  
  1043.   10.lekce - promênné a jejich typy
  1044.  
  1045.   Kdyæ jsme  si ukazovali, jak  vypsat p⌐íkazem WRITELN  çíslo doì
  1046. vÿstupního   textového  okna,   bylo  uvedeno,   æe  není   moænéì
  1047. jednoduchÿm  zpûsobem uloæit  vÿsledek vÿpoçtu  do pamêti.  Je toì
  1048. proto, æe  to nelze z  p⌐íkazového ⌐ádku provést.  Musí se pouæítì
  1049. program, ve kterém bude hodnota definována. V této lekci si protoì
  1050. ukáæeme, jaké typy hodnot mûæeme do pamêti ukládat.
  1051.   Hodnoty  uloæené v  pamêti se  nazÿvají promênné.  To proto, æeì
  1052. jejich hodnoty se mohou  programem mênit. Kaædou promênnou musímeì
  1053. p⌐ed  jejím prvním  pouæitím nejprve  pojmenovat a  definovat typì
  1054. uloæené  hodnoty. Velmi  zjednodu¿enê by  se dalo  napsat, æe typì
  1055. promênné  je buâ  çíslo,  znakovÿ  ⌐etêzec nebo  logická hodnota.ì
  1056. Pokud systém ví,  s jakÿm typem promênné má  pracovat, je schopenì
  1057. provádêt  prûbêæné kontroly  hodnot a  hlavnê zná,  jaké místo máì
  1058. urçité promênné v pamêti rezervovat.
  1059.   Co  je çíslo,  ví urçitê  kaædÿ. V  systému je  v¿ak definovánoì
  1060. nêkolik  typû  çíselnÿch  promênnÿch,  které  se  li¿í  velikostíì
  1061. moænÿch  hodnot  zpracovávanÿch  çísel.  Nêkteré  typy  çíselnÿchì
  1062. promênnÿch jsou urçeny pouze pro celá çísla, jiné mohou obsahovatì
  1063. i desetinnou  çást. Rozli¿uje  se také,  æe çísla  mohou bÿt  buâì
  1064. pouze kladná, nebo i záporná.  Poæadovanÿ typ çíselné promênné jeì
  1065. proto  vædy  nutno  peçlivê  zváæit.  Znakovÿ ⌐etêzec p⌐edstavujeì
  1066. seskupení  libovolnÿch znakû  - písmen.  Logická hodnota uchováváì
  1067. vÿsledky dotazu a mûæe nabÿvat pouze hodnot pravda nebo nepravda.
  1068.   Je¿tê d⌐íve, neæ bude promênná  v programu poprvé pouæita, musíì
  1069. se v programu deklarovat. To znamená, æe musíme uvést její jméno,ì
  1070. typ a p⌐ípadnê i poçáteçní  hodnotu. Typ promênné popisuje p⌐itomì
  1071. mnoæinu hodnot, které mûæe nabÿvat a operace, které se s ní mohouì
  1072. provádêt.
  1073.   Základní   promênné   jsou    nejjednodu¿¿í   promênné,   kteréì
  1074. reprezentují  jeden  vÿskyt  prvku   údaje.  Ze  základních  typûì
  1075. promênnÿch jsou odvozovány dal¿í  deklarace promênnÿch typû pole,ì
  1076. záznam a tabulky, se kterÿmi se seznámíme aæ pozdêji.
  1077.  
  1078. Podporované typy promênnÿch:
  1079. BYTE     - celoçíselnÿ typ s rozsahem 0 aæ 255
  1080. INTEGER  - celoçíselnÿ typ s rozsahem od -32768 do +32767
  1081. WORD     - celoçíselnÿ typ s rozsahem od 0 do 65535
  1082. LONGINT  - celé çíslo  od -2  miliard do + 2 miliard
  1083. REAL     - çíslo v rozsahu od 2.9*10-39 do 1.7*1038
  1084. STRING   - ⌐etêzec znakû o délce 255 znakû
  1085. CHAR     - jeden znak
  1086. BOOLEAN  - logická promênná typu  BOOLEAN (True/False)
  1087. TEXT     - textovÿ soubor typu Pascal TEXT
  1088. ARRAY    - jednorozmêrné pole promênnÿch
  1089.  
  1090. Typ  BYTE zabírá  v pamêti  jednu slabiku  a mûæe proto obsahovatì
  1091. pouze celá çísla pro hodnoty od 0 do 255.
  1092.  
  1093. Datovÿ typ  INTEGER je v pamêti  uloæen ve dvou slabikách  a mûæeì
  1094. proto nabÿvat hodnot od -32768 do +32767.
  1095.  
  1096. Typ  WORD zabírá  v pamêti   také dvê  slabiky, ale  protoæe mûæeì
  1097. obsahovat pouze kladná çísla, mûæe obsahovat çísla od 0 do 65535.
  1098.  
  1099. Typ  LONGINT mûæe  nabÿvat  zápornÿch  hodnot a  protoæe obsahujeì
  1100. v pamêti çty⌐i slabiky, mûæe nabÿvat hodnot od mínus dvou miliardì
  1101. do plus dvou miliard.
  1102.  
  1103. Datovÿ  typ REAL  se pouæívá  pro vyjád⌐ení  hodnot s  pohyblivouì
  1104. ⌐ádovou çárkou. Çíslo je uloæeno v ¿esti slabikách a mûæe nabÿvatì
  1105. hodnot od 2.9*10-39 do 1.7*1038
  1106.  
  1107. Datovÿ typ znak  CHAR má velikost jedné slabiky  a uchovává jedenì
  1108. znak. Znakové  konstanty se vyjad⌐ují  tak, æe se  znak uzav⌐e doì
  1109. apostrofû,  nap⌐íklad 'A',  '1', '&'.  Zápis '1'  v tomto p⌐ípadêì
  1110. znamená znak pro vyjád⌐ení çíslice jedna nikoli çíselnou hodnotu.ì
  1111. Na  rozdíl od  klasického jazyka  PASCAL je  moæné znaky uzavíratì
  1112. i do uvozovek.
  1113.  
  1114.  
  1115. Datovÿ typ  STRING p⌐edstavuje posloupnost znakû  s pevnou délkouì
  1116. 255  znakû typu  CHAR bezprost⌐ednê  za sebou.  Vytvá⌐í tím  tzv.ì
  1117. ⌐etêzec.  ₧etêzec  musí  bÿt  ohraniçen  apostrofy  nebo dvojitouì
  1118. uvozovkou. ₧etêzec mûæe obsahovat maximálnê 255 znakû.
  1119.  
  1120. Datovÿ typ BOOLEAN má pouze dvê moæné hodnoty a to True (pro stavì
  1121. pravda)  a False  (pro stav  nepravda). Lze  mu proto  v programuì
  1122. p⌐i⌐adit buâ konkrétní hodnotu True nebo False, p⌐ípadnê vÿsledekì
  1123. vyhodnocení  logického  vÿrazu.  Logické  vÿrazy najdou uplatnêníì
  1124. zejména   v   podmínênÿch   p⌐íkazech,   p⌐íkazech   cyklu  apod.ì
  1125. a probereme si je v nêkteré z dal¿ích lekcích.
  1126.  
  1127.   Dále jsou definovány je¿tê promênné  typu TEXT a ARRAY. Jimi seì
  1128. budeme  podrobnêji zabÿvat  aæ  pozdêji.  V následující  lekci siì
  1129. probereme,  jak se  promênné v  programu deklarují  a jak  s mimiì
  1130. pracovat.
  1131.  
  1132.   11.lekce - deklarace a pouæívání promênnÿch
  1133.  
  1134.   V p⌐edchozí lekci jsme se  seznámili s tím, æe prûbêæné hodnotyì
  1135. vÿpoçtû se  ukládají promênnÿch. Popsali jsme  si také, jaké typyì
  1136. promênnÿch  mohou  existovat.  V   této  lekci  si  ukáæeme,  jakì
  1137. promênnou v programu deklarovat a jak ji pouæívat.
  1138.   Promênné musí bÿt v programu deklarovány je¿tê p⌐ed svÿm prvnímì
  1139. pouæitím ve  vÿpoçtech. V deklaraci  promênné se definuje,  názevì
  1140. promênné a  její typ s moæností  uvedení poçáteçní hodnoty. Názevì
  1141. promênné  musí   zaçínat  písmenem  a   nesmí  obsahovat  mezeru.ì
  1142. V programu se musí p⌐ed  deklarací promênnÿch uvést klíçové slovoì
  1143. VAR a  na konci ENDVAR.  V tomto bloku  deklarace promênnÿch neníì
  1144. moæné pouæívat æádné povely. Vyzkou¿ejte si následující p⌐íklad:
  1145.  
  1146. VAR
  1147.    a : integer = 100;
  1148.    b : integer = 3;
  1149.    c : integer;
  1150.    d : real;
  1151.    s : string;
  1152. ENDVAR
  1153.  
  1154. PROCEDURE main
  1155.    c := a/b;                {vÿpoçet   hodnoty}
  1156.    d := a/b;                {vÿpoçet   hodnoty}
  1157.    s := 'OZOGAN KLONDAIK';  {p⌐i⌐azení hodnoty}
  1158.    WRITELN(c:10:3);         {vypí¿e vÿsledek 3.000 }
  1159.    WRITELN(d:10:3);         {vypí¿e vÿsledek 3.333 }
  1160.    WRITELN(s);
  1161. ENDPROC
  1162.  
  1163.   Promênné  a,  b  a  c  jsou  deklarovány  jako  typ integer, toì
  1164. znamená, æe mohou obsahovat pouze  celá çísla. Promênná d je typuì
  1165. real a mûæe proto obsahovat reálné çíslo vçetnê desetinnÿch míst.ì
  1166. Promênná s je  ⌐etêzec. V programu jsme promênné  nejprve v blokuì
  1167. oznaçeném slovy  VAR a ENDVAR  deklarovali. U promênné  a, b jsmeì
  1168. definovali  souçasnê poçáteçní  hodnoty. V  dal¿ím bloku programuì
  1169. oznaçeném  bloky PROCEDURE  a ENDPROC  jsme deklarované  promênnéì
  1170. pouæili.
  1171.  
  1172.  
  1173.   Hodnotu  promênné  stanovíme  jejím  p⌐i⌐azením.  To se provedeì
  1174. pomocí  dvojice znakû  := mezi  nimiæ nesmí  bÿt mezera.  Na levéì
  1175. stranê je  p⌐itom uvedena promênná, jejíæ  hodnota má bÿt zmênênaì
  1176. a na stranê pravé je  uvedena p⌐i⌐azovaná hodnota. Hodnotu mûæemeì
  1177. uvést buâ p⌐ímo (çíslo, ⌐etêzec) nebo  jako vÿraz. Co je to vÿrazì
  1178. si p⌐esnêji probereme v dal¿ích  lekcích. Nyní bude staçit, pokudì
  1179. si  budete pamatovat,  æe  vÿraz  mûæe bÿt  nap⌐íklad matematickÿì
  1180. vÿpoçet.
  1181.   Po spu¿têní  vÿ¿e uvedeného programu si  systém nejprve z çástiì
  1182. VAR..ENDVAR  definuje pouæité  promênné a  jejich typ  a v  druhéì
  1183. çásti programu PROCEDURE..ENDPROC s  nimi provádí zadané p⌐íkazy.ì
  1184. Nejprve  do  promênné  c  uloæí  dêlení  a/b.  Stejnê  tak  uçiníì
  1185. s promênnou d. Po vÿpisu promênnÿch  do vÿstupního okna si mûæeteì
  1186. myslet, æe  vÿpoçet neprobêhl správnê. Obsah  promênnÿch se li¿í,ì
  1187. u promênné c nelze vypsat desetinnou çást vÿsledku. Pokud si v¿akì
  1188. zkontrolujete  typ promênné  c, zjistíte,  æe je  v¿e v  po⌐ádku.ì
  1189. Promênná  je deklarována  jako  integer,  coæ znamená  pouze celéì
  1190. çíslo  (kladné nebo  záporné). Desetinná  çást vÿsledku  se protoì
  1191. neukládá a není moæné ji také vypsat.
  1192.   Po  ukonçení  programu   zûstanou  deklarované  promênné  stáleì
  1193. aktivní.  Mûæeme je  proto i  po ukonçení  programu dále pouæívatì
  1194. a vypsat nap⌐íklad p⌐íkazem WRITELN jejich obsah. Nyní máte protoì
  1195. moænost   vyzkou¿et  si   pouæívání  nadeklarovanÿch   promênnÿchì
  1196. z p⌐íkazového  okna.  Novÿm  spu¿têním  programu  dojde  k jejichì
  1197. deaktivaci (zru¿ení) a  nahrazení novÿmi promênnÿmi. Prozkou¿ejteì
  1198. si vyuæití i jinÿch typû promênnÿch deklarovanÿch v programu.
  1199.   Dosud jsme  sestavovali na¿e programy tak,  æe vykonávaly pouzeì
  1200. zadanou posloupnost  akcí bez moænosti  vynechání nêkterÿch akcí.ì
  1201. V následující  lekci  se  proto  seznámíme  s  moæností rozdêleníì
  1202. çinnosti programu na základê vyhodnocení zadané podmínky.
  1203.  
  1204.   12.lekce - podmínky v programu, logické vÿrazy
  1205.  
  1206.   Jak jsme jiæ uvedli v  úvodu probíranÿch lekcí, je programováníì
  1207. vlastnê sestavování  posloupnosti vykonávanÿch akcí.  V nêkterÿchì
  1208. p⌐ípadech musíme  mít ale moænost  nêkterou z akcí  buâ vynechat,ì
  1209. nebo  provést  akce  jiné.  Obojí  na  základê  zadané  podmínky.ì
  1210. Nap⌐íklad pokud mám v kapse více neæ dvacet korun, pûjdu do kina,ì
  1211. jinak pûjdu domû na televizi. Zadaná podmínka by se dala v lidskéì
  1212. mluvê popsat následujícím vztahem:
  1213.  
  1214. POKUD hotovost > 20 POTOM
  1215.    pûjdu do kina
  1216. JINAK
  1217.    budu se dívat na televizi
  1218. KONEC
  1219.  
  1220.   Uvedenému  zápisu  se  ⌐íká  algoritmus  a popisuje schematickyì
  1221. postup  provádênÿch akcí.  Vztahu hotovost>20  se ⌐íká  podmínka.ì
  1222. Podmínka  nám  tedy  urçuje,  jaká  akce  se bude provádêt. Zápisì
  1223. algoritmu  je nutné  pro poçítaç  p⌐evést do  programu. Nap⌐íkladì
  1224. následujícím zpûsobem:
  1225.  
  1226. VAR
  1227.    hotovost : integer;
  1228. ENDVAR
  1229.  
  1230.  
  1231. PROCEDURA main
  1232.    hotovost := 15;          {zadejte va¿i hotovost}
  1233.    IF hotovost > 20 THEN
  1234.       WRITELN("Kino")       {pokud je podmínka splnêna}
  1235.    ELSE
  1236.       WRITELN("Televize")   {pokud není podmínka splnêna}
  1237.    ENDIF;
  1238. ENDROC
  1239.  
  1240.   Nejprve  jsme deklarovali  promênnou se  jménem hotovost.  Dáleì
  1241. jsme  jí v  programu p⌐i⌐adili  urçitou hodnotu.  V podmínce jsmeì
  1242. potom zji¿ƒovali, zda odpovídá na¿im poæadavkûm a podle toho jsmeì
  1243. provedli urçitou  akci. Zkuste si zadat  sami rûzné hodnoty stavuì
  1244. va¿í hotovosti. Pozor ale na  to, æe hotovost je deklarována jakoì
  1245. typ integer. Nesmíte bÿt proto moc  bohatí a mít v hotovosti víceì
  1246. neæ 32767 Kç. Zkuste upravit  program tak, aby jste mohli zadávatì
  1247. i vêt¿í çástky. Závisí to na typu promênné.
  1248.   V¿imnête  si, æe  jsme v  programu u  zápisu podmínky  odsadiliì
  1249. vykonávané p⌐íkazy  na ⌐ádku o  t⌐i znaky. Tím  vynikla strukturaì
  1250. podmínky a na první pohled  je viditelné její rozçlenêní. Není toì
  1251. sice nutnost, p⌐esto v¿ak  doporuçujeme uvedenou grafickou podobuì
  1252. zápisu programu ve vlastním zájmu dodræovat.
  1253.   Podmínka  se v  programu zadává  klíçovÿm slovem  IF, za kterÿmì
  1254. musí následovat  vyhodnocovaná podmínka. Klíçové  slovo THEN neníì
  1255. povinné, p⌐esto jej v¿ak doporuçujeme uvádêt, protoæe to vyæadujeì
  1256. klasickÿ jazyk  Pascal. Dále následují povely,  které se provedouì
  1257. pouze  p⌐i splnêní  podmínky. Za  klíçovÿm slovem  ELSE se uvedouì
  1258. povely, které se provedou  p⌐i nesplnêní podmínky. Zápis podmínkyì
  1259. je  ukonçen  klíçovÿm  slovem  ENDIF.  V  zápise  podmínky mûæeteì
  1260. vynechat klíçové  slovo ELSE vçetnê akcí  pro nesplnêní podmínky.ì
  1261. Vædy ale  musíte uvést ukonçení  podmínky klíçovÿm slovem  ENDIF.ì
  1262. Pokud se tak nestane, nahlásí systém chybu v programu.
  1263.   Podmínku  p⌐edstavuje  logickÿ  vÿraz,   kterÿ  udává,  zda  jeì
  1264. podmínka splnêna nebo ne. Logické vÿrazy mohou mít proto vÿsledekì
  1265. pouze  pravda  nebo  nepravda.  V  poçítaçové  terminologii  Trueì
  1266. (pravda)  nebo False  (nepravda). Pokud  by jste  chtêli vÿsledekì
  1267. podmínky  deklarovat jako  promênnou, museli  by jste  pouæít typì
  1268. BOOLEAN.  Logická  podmínka   zpracovává  nejçastêji  matematickÿì
  1269. vÿraz. Mûæe to  v¿ak bÿt i vÿraz zpracovávající  ⌐etêzce, to v¿akì
  1270. bude psáno aæ se nauçíme s rêtêzci dûkladnêji pracovat.
  1271.   Matematické  vÿrazy porovnávají  nejçastêji nêkolik  hodnot. Veì
  1272. vÿrazu  se  p⌐itom  mûæe  také  pouæít  libovolného matematickéhoì
  1273. vÿpoçtu, kterÿ je v jazyce definován.
  1274.   Matematické vÿrazy zpracovávají  aritmetické operace. Vÿrazy seì
  1275. skládají z  operátorû a operandû. Operátor  je p⌐itom porovnávanáì
  1276. hodnota  a  operand  je  zpûsob  porovnání  hodnot. Operátor mûæeì
  1277. p⌐edstavovat  libovolnÿ matematickÿ  vÿpoçet, kterÿ  je v  jazyceì
  1278. definován.  Operand slouæí  k vyhodnocení  operátorû. P⌐i  zápisuì
  1279. dodræte,  aby  byly  operátory  oddêleny  od  operandû mezerami !ì
  1280. Pouæívají se následující dostateçnê známé operandy:
  1281.  
  1282.     >        vêt¿í neæ
  1283.     >=       vêt¿í nebo rovno neæ
  1284.     <        men¿í neæ
  1285.     <=       men¿í nebo rovno neæ
  1286.     =        rovno
  1287.     <>       nerovno
  1288.  
  1289.   Ve vÿrazu je samoz⌐ejmê  moæné pouæívat závorky. P⌐íklad vÿrazûì
  1290. zpracovávajících matematickÿ vÿpoçet:
  1291.  
  1292. hotovost >   20
  1293.   a/2    <   10
  1294. 2*(a+b)  = 2*a+2*b
  1295.  
  1296.   Vÿrazy mûæeme dále v  jedné podmínce spojit logickÿm operátoremì
  1297. s dal¿ím vÿrazem a vyhodnocovat  tak sloæenou podmínku. Pouæívajíì
  1298. se p⌐itom následující logické operátory:
  1299.  
  1300. AND        a zároveñ platí
  1301. OR         platí jeden nebo druhÿ vÿraz
  1302. NOT        není pravda, negace vÿrazu
  1303.  
  1304.   V   p⌐ípadê   pouæití   logickÿch   operátorû   mají   tyto  veì
  1305. vyhodnocování vÿrazû  p⌐ednost p⌐ed ostatními  operátory. Dále seì
  1306. vyhodnocují  závorky a  aæ  na  konci matematické  vÿpoçty. Pokudì
  1307. budete chtít zapsat v  programu nêkolik vÿrazû spojenÿch logickÿmì
  1308. operátorem,  musíte  umístit  vÿrazy  do  závorek.  Nap⌐íklad proì
  1309. zji¿têní  rozsahu   hotovosti  od  10  Kç   do  30  Kç  pouæijeteì
  1310. následující zápis:
  1311.  
  1312. IF (hotovost >= 10) and (hotovost <= 30) THEN
  1313.    WRITELN("Kino")       {pokud je podmínka splnêna}
  1314. ELSE
  1315.    WRITELN("Televize")   {pokud není podmínka splnêna}
  1316. ENDIF;
  1317.  
  1318.   V této lekci jsme si probrali mimo moænosti rozvêtvení çinnostiì
  1319. programu  také zpûsob  zápisu  podmínek  v programu.  Podmínky seì
  1320. v programu pouæívají i v  dal¿ích p⌐íkazech. Nap⌐íklad pro zadáníì
  1321. poçtu   opakování  zvolené   çásti  programu,   jak  si   ukáæemeì
  1322. v následující lekci.
  1323.  
  1324.   13.lekce - programové cykly (FOR, REPEAT, UNTIL)
  1325.  
  1326.   Aæ doposud provádêly na¿e programy pouze zadanÿ sled povelû bezì
  1327. moænosti opakování  poæadovanÿch akcí. Pokud  by jsme pot⌐ebovaliì
  1328. nap⌐íklad vykonat  nêjakou çást programu stokrát,  museli by jsmeì
  1329. uvedenou çást programu zapsat stokrát.  To by v¿ak bylo, jak samiì
  1330. jistê uznáte  znaçnê nevhodné. V  této lekci si  proto probereme,ì
  1331. jak  je moæné  na základê  vyhodnocení podmínek  opakovat zadanouì
  1332. çást programu.
  1333.   Pokud  budete  pot⌐ebovat  v   programu  provést  nêjakou  akciì
  1334. s p⌐edem známÿm poçtem opakování, bude nejvhodnêj¿í pouæít cyklusì
  1335. typu FOR..ENDFOR. Jedná se o  cyklus, ve kterém je definován tzv.ì
  1336. çítaç, kterÿ udává kolikrát se  má cyklus je¿tê provést. Çítaç jeì
  1337. automaticky  systémem zvy¿ován  o zadanou  hodnotu. Smêr naçítáníì
  1338. mûæe bÿt p⌐itom nahoru, nebo dolû:
  1339.  
  1340. VAR
  1341.    x : real
  1342. ENDVAR
  1343.  
  1344. PROCEDURE main
  1345.    ConsoleClear;
  1346.    FOR x := 1 to 3 step 0.5  {cyklus nahoru, udán krok}
  1347.       WRITELN(x:10:1);
  1348.    ENDFOR
  1349.  
  1350.    FOR x := 5 downto 1       {cyklus smêrem dolû}
  1351.       WRITELN(x:10);
  1352.    ENDFOR
  1353. ENDPROC
  1354.  
  1355.   V uvedeném p⌐íkladê jsou v programu dva cykly FOR. První z nichì
  1356. zvy¿uje stav çítaçe x smêrem  nahoru, druhÿ smêrem dolû. V¿imnêteì
  1357. si,  æe  çítaç  musí  bÿt  sice  deklarován  jako  promênná,  aleì
  1358. p⌐i⌐azení  poçáteçní  hodnoty  se  provádí  aæ  v definici cyklu.ì
  1359. Koneçná  hodnota çítaçe  se pro  smêr naçítání  nahoru zadává  zaì
  1360. klíçovÿm slovem  'to'. Pro smêr  naçítání dolû je  urçeno klíçovéì
  1361. slovo 'downto'. Pokud chceme  zvy¿ovat, nebo sniæovat stav çítaçeì
  1362. o jinou hodnotu  neæ jedna, musíme  poæadovanou hodnotu uvést  zaì
  1363. klíçovÿm slovem 'step'. Hodnota ⌐ídící  promênné se nesmí v cykluì
  1364. mênit.  Hodnoty cyklu  jsou vyhodnocovány  pouze jednou  a to p⌐iì
  1365. spu¿têní p⌐íkazu FOR.
  1366.   Dûleæitá  poznámka:   promênná  x  je   v  p⌐edchozím  p⌐íkladêì
  1367. deklarována   jako  typ   real,  to   znamená  æe   mûæe  nabÿvatì
  1368. i desetinnÿch  hodnot.  Pokud  by  jste  uvedli  v tomto p⌐íkladêì
  1369. promênnou  x jako  typ integer,  zvy¿oval by  se çítaç  vædy siceì
  1370. o hodnotu 0.5  ale protoæe typ  integer je pouze  celoçíselnÿ, keì
  1371. zvÿ¿ení çítaçe by nikdy nedo¿lo  a program by skonçil v nekoneçnéì
  1372. smyçce.  Museli  by  jste  jej  restartovat  pomocí volbou z menuì
  1373. Program/Restart programu.
  1374.   Pokud  budete  chtít  ve  svém  programu  pouæít  cyklus, jehoæì
  1375. ukonçení bude  záviset na splnêní  zadané podmínky, máte  moænostì
  1376. pouæít cyklus  typu REPEAT..UNTIL. Vnit⌐ní  çást tohoto cyklu  seì
  1377. provede vædy minimálnê jednou, protoæe podmínka ukonçení cyklu jeì
  1378. uvedena aæ na jeho konci:
  1379.  
  1380. VAR
  1381.    x : real
  1382. ENDVAR
  1383.  
  1384. PROCEDURE main
  1385.    ConsoleClear;
  1386.    x := 1;
  1387.    REPEAT               {zaçátek cyklu}
  1388.       WRITELN(x/(x+1):10:3);
  1389.       x := x+1;         {zvÿ¿ení hodnoty çítaçe}
  1390.    UNTIL x = 5          {dokud není vÿraz pravdivÿ}
  1391. ENDPROC
  1392.  
  1393.   P⌐íkazy uvedené mezi klíçovÿmi slovy  REPEAT a UNTIL se provádíì
  1394. tak  dlouho,  dokud  není  vÿraz  definovanÿ  na  konci  podmínkyì
  1395. pravdivÿ.  Nesmíte p⌐itom  zapomenout na  zvÿ¿ení hodnoty çítaçe,ì
  1396. p⌐ípadnê provést jinou akci, která  mûæe mít za následek ukonçeníì
  1397. cyklu.
  1398.  
  1399. Jako   dal¿í   cyklus   mûæete   pouæít   WHILE..ENDWHILE,  kterÿì
  1400. vyhodnocuje  podmínku   opakování  cyklu  na   jeho  poçátku.  Toì
  1401. umoæñuje, æe  pokud není podmínka splnêna,  neprovedou se p⌐íkazyì
  1402. uvedené mezi klíçovÿmi slovy WHILE a ENDWHILE ani jednou. To mûæeì
  1403. bÿt  v  nêkterÿch  p⌐ípadech  vÿhodné  a  je  proto  nutné se p⌐iì
  1404. vlastním programování rozhodnout, kterÿ druh cyklu má bÿt pouæit.
  1405.  
  1406. VAR
  1407.    x : integer
  1408. ENDVAR
  1409.  
  1410. PROCEDURE main
  1411.    ConsoleClear;
  1412.    x := 1;
  1413.    WHILE x < 5          {dokud je vÿraz pravdivÿ}
  1414.       WRITELN(x*3:10);
  1415.       x := x+1;         {zvÿ¿ení hodnoty çítaçe}
  1416.    ENDWHILE             {konec cyklu}
  1417. ENDPROC
  1418.  
  1419.   Pro  zápis  podmínek  p⌐i  pouæívání  cyklû  platí  v¿e co byloì
  1420. uvedeno u popisu vêtvení  programu p⌐íkazem IF..ENDIF. Stejnê takì
  1421. je  velmi vÿhodné  a hlavnê  p⌐ehledné v  textu programu  odsaditì
  1422. ⌐ádky programu uvnit⌐ cyklû o t⌐i prázdné znaky doprava. Viz vÿ¿eì
  1423. uvedené p⌐íklady. Programy tím  získají na p⌐ehlednosti. Souçasnêì
  1424. doporuçujeme uvádêt  v programu poznámky ve  formê komentá⌐e. Jakì
  1425. jste  si jiæ  mohli v¿imnout,  poznámky se  uvádêjí ve  sloæenÿchì
  1426. závorkách. Pokud by jste na zaçátku ⌐ádku uvedli dvê lomítka, bylì
  1427. by text aæ do konce ⌐ádku v programu ignorován.
  1428.   V nêkterÿch  p⌐ípadech mûæete pot⌐ebovat, aby  se cyklus WHILE,ì
  1429. REPEAT nebo FOR p⌐edçasnê p⌐eru¿il  a pokraçoval dal¿ím cyklem odì
  1430. zaçátku. K  tomu se pouæívá p⌐íkaz  CONTINUE, kterÿ je vyhodnocenì
  1431. jako  ENDWHILE, UNTIL  nebo ENDFOR  a ⌐ízení  programu je p⌐edánoì
  1432. zpêt  na zaçátek  cyklu. Klíçové  slovo je  p⌐itom uvedeno  aæ zaì
  1433. p⌐íkazy,  které  se  mají  provést  vædy,  je¿tê  p⌐ed  ukonçenímì
  1434. (p⌐eru¿ením)  cyklu.  Pokud  se  p⌐íkaz  pouæije  mimo smyçku, jeì
  1435. vyvoláno  chybové  hlá¿ení.  Následující  p⌐íklad  kreslí  pomocíì
  1436. vykreslování bodû çáry s p⌐eru¿ením uprost⌐ed.
  1437.  
  1438. VAR
  1439.    x : integer
  1440. ENDVAR
  1441.  
  1442. PROCEDURE main
  1443.    ImageInit(100,100);    {Inicializuje grafickou plochu}
  1444.    ImageShow;             {zobrazí grafickÿ vÿstup }
  1445.    ImagePenColor(clBlue); {nastaví modrou barvu}
  1446.    FOR x := 1 to 100;
  1447.        Point(25,x,3);
  1448.        Point(75,x,3);
  1449.        IF (x > 25) and (x < 75) then
  1450.           CONTINUE;      {p⌐eru¿í cyklus s návratem}
  1451.        ENDIF
  1452.        Point(50,x,3);    {pro x od 25 do 75 se neprovede !}
  1453.    ENDFOR
  1454.    ImagePenColor(clRed);          {nastaví çervenou barvu}
  1455.    Point(GetmaxX/2,GetmaxY/2,30); {nakreslí bod doprost⌐ed}
  1456. ENDPROC
  1457.  
  1458.   V  této lekci  jsme se  zabÿvali nêkolika  p⌐íkazy, které  v¿akì
  1459. provádêly podobnou çinnost. P⌐íkazy cyklu jsou v programech velmiì
  1460. çasto pouæívané. Je v¿ak nutné  si podle poæadovanÿch akcí vybratì
  1461. nevhodnêj¿í p⌐íkaz pro cyklus.
  1462.  
  1463.   14.lekce - zadání vstupních hodnot, tisk vÿsledkû
  1464.  
  1465.   U programû v  p⌐edchozích lekcích jsme vædy poçítali  s tím, æeì
  1466. jsou v¿echna data  pro vÿpoçty zadána p⌐ímo v  programu. Aby jsmeì
  1467. ale mêli moænost ovlivnit prûbêh  vÿpoçtu, bylo by vhodné zadávatì
  1468. poæadované hodnoty p⌐ímo dotazem od  uæivatele. To je moæné dvêmaì
  1469. zpûsoby.  Buâ pouæijeme  p⌐íkaz  READ,  kterÿ umoæñuje  mimo jinéì
  1470. uæivatelské zadaní hodnoty promênné,  nebo sloæitêj¿í postup, kdyì
  1471. pouæijeme interaktivní knihovnu pro tvorbu formulá⌐û.
  1472.   P⌐íkaz READ  se pouæívá pro vstup  hodnoty promênné ze souboru,ì
  1473. nebo od uæivatele z klávesnice.  Hodnotu potom mûæeme pouæít dáleì
  1474. v programu  k  vÿpoçtûm.  Promênná  musí  bÿt nejprve definována.ì
  1475. Moæné je pouæít pouze çíselné a ⌐etêzcové promênné. Çtení hodnotyì
  1476. ze  souboru si  ukáæeme pozdêji,  nyní si  p⌐edvedeme, jak  zadatì
  1477. promênnou z klávesnice.
  1478.   P⌐íkaz  READ  vyvolá  jednoduchÿ  formulá⌐  s  moæností  zadáníì
  1479. hodnoty  promênné. Jméno  formulá⌐e je  'vstup' a  pokud by  jsteì
  1480. chtêli umístit  nad editaçní box pro  zadání hodnoty promênné vá¿ì
  1481. text,  museli  by  jste  text  vypsat  p⌐íkazem  WRITE (pozor, neì
  1482. WRITELN  !)  je¿tê  p⌐ed  pouæitím  p⌐íkazu  READ. Zadanÿ text seì
  1483. samoz⌐ejmê  také vypí¿e  do textového  vÿstupního okna.  Toho lzeì
  1484. vyuæít pro následné zadání vÿstupních  hodnot. Pokud by vám vÿpisì
  1485. textu  vadil,  je  moæné  nejprve  navstupovat poæadované vstupníì
  1486. hodnoty, vymazat obsah vÿstupního okna a aæ potom provést vÿpoçtyì
  1487. a zobrazení vÿsledkû. Následuje p⌐íklad pouæití p⌐íkazu READ.
  1488.  
  1489. VAR
  1490.    s : string;
  1491.    r : real;
  1492. ENDVAR
  1493.  
  1494. PROCEDURE main
  1495.    ConsoleClear;
  1496.    WRITE("Zadejte celé çíslo");
  1497.    READ(s);
  1498.    WRITELN();
  1499.    WRITELN("Zadal jste çíslo:",StrToInt(s):12);
  1500.    WRITELN();
  1501.  
  1502.    WRITE("Zadejte libovolné çíslo");
  1503.    READ(r);
  1504.    WRITELN();
  1505.    WRITELN("Zadal jste çíslo:",r:12:4);
  1506.    WRITELN();
  1507.  
  1508.    WRITE("Zadejte libovolnÿ ⌐etêzec");
  1509.    READ(s);
  1510.    WRITELN();
  1511.    WRITELN("Zadal jste ⌐etêzec: ",s);
  1512.    WRITELN();
  1513. ENDPROC
  1514.  
  1515. -------------------------------------------------------------
  1516. POZOR !!!
  1517. V  souçasné verzi  nesmíte zadat p⌐i  vstupu do çíselné  promênnéì
  1518. nenumerickÿ  znak.  Pokud  tak  uçiníte,  bude  vÿsledkemì
  1519. nulová hodnota. V dal¿ích verzích bude upraveno.
  1520. -------------------------------------------------------------
  1521.   Se  sloæitêj¿ím,  ale  efektnêj¿ím  zpûsobem  se  seznámíme p⌐iì
  1522. probírání   interaktivní  knihovny,   která  umoæñuje   definovatì
  1523. v programu  vzhled  i  obsah  formulá⌐e.  Zkuste  si  proto zatímì
  1524. alespoñ následující p⌐íklad:
  1525.  
  1526. VAR
  1527.    jmeno : string = '';
  1528.    rok1  : integer = 1900;  rok2  : integer;
  1529.    mesic : integer;
  1530.    den1  : integer; den2  : integer;
  1531. ENDVAR;
  1532.  
  1533. ROCEDURE formular;
  1534.    createForm('form1',"Vítám Vás !", 100, 100, 270, 180);
  1535.    addStatic ('form1',"Dobrÿ den,", 10, 15, 200, 14);
  1536.    addStatic ('form1',"jaké je Va¿e jméno ?",10,45,200,14);
  1537.    addEditBox('form1','jmeno', 'jmeno', 10, 80, 250, 20);
  1538.    addStatic('form1',"narodil jste se v roce:",10,120,200,14);
  1539.    addEditBox('form1','rok1', 'rok1', 210, 120, 40, 20);
  1540. ENDPROC;
  1541.  
  1542. PROCEDURE main
  1543.    formular;
  1544.    IF (formDialog("form1"))
  1545.       ConsoleClear;
  1546.       WRITELN('Dobrÿ den ' + jmeno, ', p⌐eji pêknÿ den !');
  1547.       GetDate(rok2, mesic, den1, den2);
  1548.       WRITE("dnes je ", den1, "/", mesic, "/", rok2, ", ");
  1549.       WRITELN("je Vám ", rok2-rok1, " rokû.");
  1550.    ENDIF
  1551. ENDPROC
  1552.  
  1553.   Takæe jak  zadávat obsah promênné od  uæivatele jiæ známe. Vímeì
  1554. také,  jak  vypsat  jejich  obsah  s  p⌐ípadnou  dal¿í úpravou doì
  1555. textového  vÿstupního okna.  Zatím  jsme  se ale  nic nedozvêdêliì
  1556. o tom, jak je moæné provést  vÿstup informací na tiskárnu. Systémì
  1557. sice  neobsahuje  æádné  p⌐íkazy  pro  p⌐ímÿ  tisk  na  tiskárnu,ì
  1558. dovoluje vám ale vytisknout  kompletní obsah textového vÿstupníhoì
  1559. okna. Musíte proto nejprve  provést vÿstup poæadovanÿch informacíì
  1560. a textû  do   vÿstupního  okna  a   potom  p⌐íkazem  ConsolePrintì
  1561. vytisknout jeho  obsah. Mûæete také po  ukonçení programu, kdy seì
  1562. zobrazí poæadované  vÿsledky ve vÿstupním oknê  provést jeho tiskì
  1563. pomocí  ikony  s  obrázkem   tiskárny,  umístêné  v  horní  li¿têì
  1564. textového vÿstupního okna.
  1565.  
  1566.   15. lekce - vícenásobné vêtvení programu
  1567.  
  1568.   V  jedné  z  p⌐edchozích  lekcí  jsme  se  seznámili s p⌐íkazemì
  1569. IF..ENDIF,  kterÿ slouæí  pro vêtvení  çinnosti programu. Poznaliì
  1570. jsme, æe  mûæeme çinnost programu  rozdêlit do dvou  vêtví, podleì
  1571. pravdivosti  zadané  podmínky.  Pokud  by  jste  v¿ak pot⌐ebovaliì
  1572. rozdêlit çinnost  programu podle vÿsledku  na více vêtví,  byl byì
  1573. zápis pomocí p⌐íkazu IF  velmi nep⌐ehlednÿ. Proto systém obsahujeì
  1574. p⌐íkaz  SWITCH,  kterÿ  mûæete   pouæít  pro  rozdêlení  çinnostiì
  1575. programu  do  libovolného  poçtu  vêtví  na  základê  vyhodnoceníì
  1576. vÿsledku zadané  podmínky. Pokud budete  nap⌐íklad pot⌐ebovat proì
  1577. kaædé   çíslo   samostatnou   akci,   mûæete   tak  uçinit  podleì
  1578. následujícího p⌐íkladu:
  1579.  
  1580. VAR
  1581.    x : integer
  1582. ENDVAR
  1583.  
  1584. PROCEDURE main
  1585.    ConsoleClear;
  1586.    FOR x := 1 to 10;
  1587.        SWITCH x OF              {porovnávej promênnou x }
  1588.           CASE 1:               {pokud má hodnotu 1 }
  1589.                WRITELN("çíslo jedna");
  1590.           ENDCASE
  1591.           CASE 5:               {pokud má hodnotu 5 }
  1592.                WRITELN("çíslo pêt");
  1593.           ENDCASE
  1594.           ELSE                  {pokud má jinou hodnotu}
  1595.                WRITELN(x:10);
  1596.           ENDCASE
  1597.        ENDSWITCH
  1598.    ENDFOR
  1599. ENDPROC
  1600.  
  1601.   Za  klíçové  slovo  SWITCH  se  v  programu uvádí hodnota, neboì
  1602. vÿraz, kterÿ se potom následnê povelem CASE vyhodnocuje. Pokud seì
  1603. hodnota, nebo vÿsledek vÿrazu  rovná nêkterému z vÿrazû uvedenÿchì
  1604. za  klíçovÿm slovem  CASE, bude  proveden blok  p⌐íkazû za  tímtoì
  1605. vÿrazem.  Program bude  potom pokraçovat  po ukonçení  konstrukceì
  1606. p⌐íkazu klíçovÿm  slovem ENDSWITCH. Pokud se  vÿraz nebude rovnatì
  1607. æádnému z  porovnávanÿch vÿrazû, provede se  blok p⌐íkazû uvedenÿì
  1608. mezi klíçovÿmi slovy ELSE a ENDCASE.
  1609.   Jedná  se  o  pomêrnê  dosti  sloæitou  konstrukci  jazyka. Proì
  1610. názorné  p⌐edvedení  proto  mûæete  program  spustit  klávesou F6ì
  1611. v animaçním reæimu, kdy systém zobrazuje postupnê ⌐ádek programu,ì
  1612. kterÿ  právê  vykonává.  V¿imnête  si  p⌐itom,  æe  ⌐ádky,  kteréì
  1613. nevyhovují  zadání  jsou   p⌐eskakovány.  Pokud  nebudete  staçitì
  1614. sledovat   animaci,   mûæete   zkusit   krokování   programu   poì
  1615. jednotlivÿch ⌐ádcích.  Po stisku klávesy F7  se vykoná vædy pouzeì
  1616. jeden ⌐ádek programu.
  1617.  
  1618.   16.lekce - struktura programu
  1619.  
  1620.   Aæ dosud se na¿e programy skládaly pouze ze dvou çástí. V prvníì
  1621. çásti  uvedené  mezi  slovy  VAR  a  ENDVAR jsme deklarovali dáleì
  1622. pouæívané  promênné.  Ve  druhé  çásti  se  mezi  klíçovÿmi slovyì
  1623. PROCEDURE a ENDPROC uvádêly  jednotlivé p⌐íkazy programu. Takovÿmì
  1624. çástem  programu se  ⌐íká bloky.  Zaçátek i  konec bloku  je vædyì
  1625. definován p⌐íslu¿nÿmi klíçovÿmi slovy  pro zaçátek a konec bloku.ì
  1626. V programu mohou bÿt mimo  deklarací a hlavního p⌐íkazového blokuì
  1627. uvedeny i dal¿í çásti, se  kterÿmi jsme se dosud neseznámili. Vizì
  1628. následující schématická struktura programu:
  1629.  
  1630. TYPE
  1631.    {definice datovÿch typû - záznamû}
  1632. ENDTYPE
  1633.  
  1634. VAR
  1635.    {deklarace promênnÿch}
  1636. ENDVAR
  1637.  
  1638. PROCEDURE ...
  1639.    {deklarace uæivatelské procedury}
  1640. ENDPROC
  1641.  
  1642. FUNCTION ...
  1643.    {deklarace uæivatelské funkce}
  1644. ENDPROC
  1645.  
  1646. PROCEDURE main
  1647.    {têlo hlavního programu}
  1648. ENDPROC
  1649.  
  1650.   Definice datovÿch typû
  1651.   Datové typy jsou uæivatelsky  definované typy promênnÿch, kteréì
  1652. umoæñují  nap⌐íklad seskupovat  nêkolik promênnÿch  a pouæívat jeì
  1653. jako  jednu  strukturovanou  promênnou.  Podrobnêji budou popsányì
  1654. pozdêji.
  1655.  
  1656.   Deklarace promênnÿch
  1657.   Jiæ  znáte.  Jsou  uvedeny  v  bloku  mezi  klíçovÿmi slovy VARì
  1658. a ENDVAR.  Obsahují  deklarace  promênnÿch,  urçení  jejich  typuì
  1659. a p⌐ípadné stanovení poçáteçní hodnoty. Podrobnêji se k nim je¿têì
  1660. vrátíme pozdêji.
  1661.  
  1662.   Deklarace uæivatelskÿch procedur
  1663.   Procedury  jsou  uæivatelsky  definované  p⌐íkazy, které umoæníì
  1664. lépe rozçlenit  program do logickÿch celkû  a vícenásobné pouæitíì
  1665. çásti   kódu.   Podrobnêji    se   budeme   procedurami   zabÿvatì
  1666. v následující lekci.
  1667.  
  1668.   Deklarace uæivatelskÿch funkcí
  1669.   Funkce se pouæívají pro uæivatelskou definici zpracování vÿrazûì
  1670. s moæností vícenásobného pouæití v programu. Podrobnêji se budemeì
  1671. funkcemi zabÿvat v následující kapitole.
  1672.  
  1673.   Têlo hlavního programu
  1674.  Musí  bÿt  uvedeno  v  kaædém   programu  a  musí  bÿt  obsaæenoì
  1675. v procedu⌐e se  jménem main, kterou doporuçujeme  umístit vædy naì
  1676. konec programu. Jejím provádêním se zaçíná vædy çinnost programu.ì
  1677. Pokud  by nebyla  procedura se  jménem main  v programu nalezena,ì
  1678. systém by nahlásil chybu a program by byl ukonçen.
  1679.  
  1680.   Standardní jazyk Pascal dodræuje mnohem p⌐ísnêj¿í formát zápisuì
  1681. programu. Platí  p⌐itom obecné pravidlo, æe  kaædÿ prvek programuì
  1682. se musí  v jazyce Pascal  nejprve deklarovat a  aæ potom se  mûæeì
  1683. pouæívat.  Bloky  v  programech  v  jazyce  Pascal jsou vyznaçenyì
  1684. klíçovÿmi  slovy  Begin  a  End  místo  námi pouæívaného ukonçeníì
  1685. ENDIF, ENDFOR,  ENDPROC a podobnê. Námi  pouæívané ⌐e¿ení vycházíì
  1686. z jazykû pouæívanÿch pro programování  databází. Má tu vÿhodu, æeì
  1687. je mnohem p⌐ehlednêj¿í a rychleji se jej nauçíte pouæívat.
  1688.   Bloková  struktura  programu  se  dodræuje  i  u dal¿ích, d⌐íveì
  1689. probranÿch  p⌐íkazû.  Jedná  se  o  rozhodovací  p⌐íkaz IF..ENDIFì
  1690. a v¿echny     p⌐íkazy     cyklû     FOR..ENDFOR,    REPEAT..UNTILì
  1691. a WHILE..ENDWHILE. V¿echny  struktury programu musí  bÿt ukonçenyì
  1692. svÿm  p⌐íslu¿nÿm ukonçením.  Bloky mohou  bÿt do  sebe vno⌐ovány,ì
  1693. nesmí  v¿ak docházet  k p⌐esahûm  jejich koncû.  Proto je  vhodnéì
  1694. dodræovat  grafickou úpravu  programu, kdy  jsou pod⌐ízené  çástiì
  1695. blokû odsazeny od svého poçátku  a konce. Tím se dosáhne souçasnêì
  1696. p⌐ehlednosti programu.
  1697.   Jak  jiæ  bylo  uvedeno,  musí  bÿt  v programy vædy definovánaì
  1698. procedura se  jménem main. Co jsou  to procedury a jak  je mûæemeì
  1699. vyuæít si ukáæeme v následující lekci.
  1700.  
  1701.   17.lekce - deklarace a pouæívání procedur
  1702.  
  1703.   Doposud  jsme  v  na¿ich  programech  pouæívali  pouze  p⌐íkazyì
  1704. zabudované  v  systému.  Nyní  si  ale  p⌐edvedeme, jak si mûæemeì
  1705. naprogramovat vlastní p⌐íkazy. Urçitê jste  se jiæ setkali s tím,ì
  1706. æe  pokud  by  jste  seskupili  nêkolik  ⌐ádkû programu, které seì
  1707. v uvedené sestavê  v programu nêkolikrát opakují  do jednoho, bylì
  1708. by program p⌐ehlednêj¿í a krat¿í.  Na to mûæete pouæít procedury,ì
  1709. kterÿm se také nêkdy ⌐íká podprogramy.
  1710.   Procedury  jsou volány  z hlavního  programu, vykonají  p⌐íkazyì
  1711. zadané  ve  svém  têle  procedury  a  po  jejím  ukonçení p⌐edajíì
  1712. vykonávání  programu zpêt  do hlavního  programu. Procedury  jsouì
  1713. v programu oznaçeny klíçovÿmi slovy PROCEDURE a ukonçeny klíçovÿmì
  1714. slovem   ENDPROC,  mezi   nimiæ  jsou   uvedeny  vÿkonné  p⌐íkazyì
  1715. procedury. Kaædá  procedura musí bÿt  pojmenována. V programu  seì
  1716. p⌐itom  nesmí   vyskytovat  více  procedur   se  stejnÿm  jménem.ì
  1717. Následuje p⌐íklad jednoduché procedury:
  1718.  
  1719. VAR
  1720.    a : integer = 10;
  1721.    b : integer =  3;
  1722. ENDVAR
  1723.  
  1724. PROCEDURE nadpis
  1725.    WRITELN("**************************");
  1726.    WRITELN("* poçítá systém KLONDAIK * ");
  1727.    WRITELN("**************************");
  1728. ENDPROC;
  1729.  
  1730. PROCEDURE main
  1731.    nadpis;
  1732.    WRITELN("souçet :", a+b:10:3):
  1733.    nadpis;
  1734.    WRITELN("rozdíl :", a-b:10:3):
  1735.    nadpis;
  1736.    WRITELN("násobek:", a*b:10:3):
  1737. ENDPROC
  1738.  
  1739.   V p⌐íkladê  jsme definovali proceduru  se jménem nadpis,  kteráì
  1740. vædy mezi  vÿpoçty vypí¿e t⌐i  ⌐ádky nadpisu. V  hlavní procedu⌐eì
  1741. main jiæ potom staçí zadat  volání procedury nadpis. Systém v tomì
  1742. okamæiku vypí¿e  vædy t⌐i ⌐ádky nadpisu.  Tím jsme u¿et⌐ili místoì
  1743. a program je p⌐ehlednêj¿í.
  1744.   Jistê budete souhlasit s tím,  æe moænost pouæívání procedur jeì
  1745. zajímavá  vlastnost systému,  æe by  ale byla  je¿tê zajímavêj¿í,ì
  1746. pokud  by   procedura  dokázala  pracovat   s  rûznÿmi  vstupnímiì
  1747. hodnotami.  To je  také moæné,  musíme v¿ak  ve volání  proceduryì
  1748. i v  její  deklaraci  uvést  seznam  parametrû  a upravit p⌐íkazyì
  1749. uvnit⌐  procedury  tak,  aby   dokázaly  s  promênnÿmi  parametryì
  1750. pracovat.  Pokud  by  jste  nap⌐íklad  pot⌐ebovali  nakreslit  doì
  1751. grafického  vÿstupního okna  na zadanou  pozici çtverec  s délkouì
  1752. hrany 20 bodû, mohli by jste pouæít následující p⌐íklad:
  1753.  
  1754. VAR
  1755.    k : integer;
  1756. ENDVAR
  1757.  
  1758. PROCEDURE ctverec(x : integer, y : integer);
  1759.    Rectangle(x, y, x+20, y+20);
  1760. ENDPROC
  1761.  
  1762. PROCEDURE main
  1763.    ImageInit(100,100);
  1764.    ImageBrushColor(clYelow);
  1765.    Rectangle(5, 5, 95, 95);
  1766.    ImageBrushColor(clRed);
  1767.    FOR k:= 10 to 70 step 30
  1768.        ctverec(10, k);
  1769.        ctverec(40, k);
  1770.        ctverec(70, k);
  1771.    ENDFOR
  1772. ENDPROC
  1773.  
  1774.   Procedura  ctverec  je  volána  se  dvêmi  parametry  uvedenÿmiì
  1775. v závorce,  oddêlenÿmi  çárkou.  Procedura  má  ve  své  definiciì
  1776. deklarovány promênné x a y,  které se dále v procedu⌐e pouæívají.ì
  1777. Do  uvedenÿch promênnÿch  se  p⌐evedou  hodnoty zadané  ve voláníì
  1778. procedury. Procedura potom se  zadanÿmi hodnotami pracuje. Tak jeì
  1779. umoænêno p⌐edávat procedu⌐e ke zpracování vstupní hodnoty.
  1780.   Pokud má  procedura pracovat s p⌐edávanÿmi  parametry, je nutnéì
  1781. v deklaraci  procedury uvést  za  jejím  jménem v  závorce seznamì
  1782. pouæitÿch  promênnÿch. V  seznamu se  uvádí jméno  promênné a  zaì
  1783. dvojteçkou její typ. Promênné  jsou v seznamu oddêlovány çárkami.ì
  1784. Poçet  deklarovanÿch  promênnÿch  v  procedu⌐e  musí  p⌐itom vædyì
  1785. odpovídat poçtu p⌐edávanÿch parametrû ve volání procedury.
  1786.   Zkuste nyní  upravit proceduru ctverec  i její volání  tak, abyì
  1787. jste mohli  zadávat ve volání  procedury i délku  strany çtverce.ì
  1788. Musíte proto  p⌐idat do volání  procedury dal¿í parametr.  Stejnêì
  1789. tak budete muset p⌐idat parametr do deklarace procedury. Parametrì
  1790. potom pouæijete pro zadání délky hrany çtverce.
  1791.   Pokud v programu nadeklarujete svou vlastní proceduru a programì
  1792. spustíte,  zachová si  systém informace  o deklarované  procedu⌐eì
  1793. i po   ukonçení   programu.   Mûæete   potom   proceduru   pouæítì
  1794. z p⌐íkazového  okna jako  souçást  systému.  To je  velmi vÿhodnáì
  1795. vlastnost, protoæe vám umoæñuje  seznámit se dokonale s moænostmiì
  1796. vlastnosti jazyka.
  1797.   Pomocí  deklarace   procedur  dosáhnete  toho,   æe  si  mûæeteì
  1798. definovat své  vlastní p⌐íkazy. Je p⌐itom  moæné volané procedu⌐eì
  1799. zadávat  p⌐edávané  parametry.  Není  ale  moæné,  aby  proceduraì
  1800. vracela  zpêt  vÿsledek  provedení  procedury.  To  vám umoæní aæì
  1801. funkce, které budou probrány v následující lekci.
  1802.  
  1803.   18.lekce - deklarace a pouæívání funkcí
  1804.  
  1805.   V p⌐edchozí  lekci jsme si ukázali,  jak si nadefinovat vlastníì
  1806. p⌐íkaz ve formê  procedury. Mnohdy by ale bylo  vÿhodné, pokud byì
  1807. jsme  mohli  volat  proceduru  jako  souçást  vÿrazu tak, aby námì
  1808. vrátila  procedura vÿsledek,  se kterÿm  by jsme  ve vÿrazu  dáleì
  1809. pracovali. Nêco takového  je sice moæné, pouæívají se  k tomu aleì
  1810. funkce.
  1811.   Funkce je  definovaná çást programu,  která je volaná  z vÿrazuì
  1812. a provádí urçité vÿpoçty, p⌐ípadnê  akce. P⌐i ukonçení funkce námì
  1813. vrací  poæadovanÿ vÿsledek,  se kterÿm  se ve  vÿrazu, odkud bylaì
  1814. funkce  volána dále  pracuje. Uveâme  si proto  p⌐íklad deklaraceì
  1815. a pouæití funkce  v programu, kterÿ  nám provádí vÿpoçet  mocninyì
  1816. zadanÿm exponentem (53 = 5 x 5 x 5, vÿsledek je 125).
  1817.  
  1818. VAR
  1819.    k : integer;
  1820.    v : real;
  1821. ENDVAR
  1822.  
  1823. FUNCTION umocni(x : integer, y : integer): integer
  1824.    v := x;          {p⌐evezneme základ}
  1825.    FOR k := 1 to y
  1826.        v := v*x;    {násobíme opakovanê základem}
  1827.    ENDFOR
  1828.    umocni := v;     {p⌐edáme vÿsledku funkce}
  1829. ENDFUNC
  1830.  
  1831. PROCEDURE main
  1832.    ConsoleClear;
  1833.    WRITELN(umocni(2,9):10);  {vypí¿e hodnotu 1024}
  1834.    WRITELN(umocni(3,3):10);  {vypí¿e hodnotu   81}
  1835.    WRITELN(umocni(5,2):10);  {vypí¿e hodnotu  125}
  1836. ENDPROC
  1837.  
  1838.   Funkce se od procedury li¿í  svÿm zahájením a ukonçením, kdy jeì
  1839. vÿpoçet  funkce uveden  mezi  klíçová  slova FUNCTION  a ENDFUNC.ì
  1840. V deklaraci funkce  se navíc od procedury  musí uvést za seznamemì
  1841. p⌐ebíranÿch parametrû i typ vÿsledku, kterÿ funkce vrací.
  1842.   Dal¿í odli¿ností  je zpûsob vytvo⌐ení  hodnoty vÿsledku funkce.ì
  1843. To je vÿsledku, kterÿ bude p⌐edán zpêt. Jsou p⌐itom dvê moænosti.ì
  1844. První z nich je standardní a pouæívá ji i jazyk Pascal a proto jiì
  1845. doporuçujeme  preferovat.  Na  konci  zpracování  funkce zapí¿emeì
  1846. p⌐i⌐azovací p⌐íkaz:
  1847.  
  1848. identifikátor := vÿraz;
  1849.  
  1850.   kde  na  levé  stranê  p⌐i⌐azovacího  p⌐íkazu  je uvedeno jménoì
  1851. funkce a na  pravé stranê její vÿsledná hodnota.  Pozor na to, æeì
  1852. identifikátor p⌐itom není deklarován  jako promênná. Je to proto,ì
  1853. æe  stejnê  jako  si  systém  deklaruje  sám  promênné,  které seì
  1854. p⌐edávají jako parametry procedury a funkce, stejnê tak si systémì
  1855. deklaruje i promênnou se jménem deklarované procedury.
  1856.   Druhou moæností  pro p⌐edání vÿsledné hodnoty  je p⌐íkaz RETURNì
  1857. s uvedením návratové hodnoty:
  1858.  
  1859. FUNCTION umocni(x : integer, y : integer): integer
  1860.    v := x;          {p⌐evezneme základ}
  1861.    FOR k := 1 to y
  1862.        v := v*x;    {násobíme opakovanê základem}
  1863.    ENDFOR
  1864.    RETURN v;        {p⌐edáme vÿsledek funkce}
  1865. ENDFUNC
  1866.  
  1867.   Uvedené pouæití  vychází z jazyka BASIC  a databázovÿch jazykû.ì
  1868. Mûæe  bÿt v  nêkterÿch p⌐ípadech  jednodu¿¿í, jak  v¿ak jiæ  byloì
  1869. uvedeno, nejedná se o standardní postup jazyka Pascal.
  1870.   Pokud v  programu nadeklarujete svou  vlastní funkci a  programì
  1871. spustíte, zachová  si systém informace o  deklarované funkci i poì
  1872. ukonçení   programu.  Mûæete   potom  funkci   pouæít  u  p⌐íkazûì
  1873. z p⌐íkazového  okna jako  souçást  systému.  To je  velmi vÿhodnáì
  1874. vlastnost, protoæe vám umoæñuje  seznámit se dokonale s moænostmiì
  1875. vlastnosti jazyka.
  1876.  
  1877.   19.lekce - lokální a globální promênné
  1878.  
  1879.   V  p⌐edchozích  lekcích  jsme  v  programu deklarovali promênnéì
  1880. v samostatném bloku umístêném  na zaçátku programu. Nadeklarovanéì
  1881. promênné  p⌐itom  platily  po  celou  dobu  programu  a zûstávalyì
  1882. aktivní  dokonce i  po ukonçení  programu. Tomu  se ⌐íká globálníì
  1883. platnost  promênné, protoæe  je dosaæitelná  kdykoliv z libovolnéì
  1884. procedury  v  programu.  Opakem  je  promênná  deklarovaná  pouzeì
  1885. s lokální   dobou   platnosti.   Pro   dokonalej¿í  seznámení  seì
  1886. s lokálními  a globálními  promênnÿmi si  upravíme d⌐íve  uvedenÿì
  1887. p⌐íklad z lekce zabÿvající se funkcemi do následující podoby:
  1888.  
  1889. VAR
  1890.    v : integer = 999;
  1891. ENDVAR
  1892.  
  1893. FUNCTION umocni(x : integer, y : integer): integer
  1894.    VAR
  1895.       k : integer;
  1896.       v : real;
  1897.    ENDVAR
  1898.    v := x;          {p⌐evezmeme základ}
  1899.    WRITELN("p⌐edávaná hodnota x:",x:4);
  1900.    WRITELN("lokální   hodnota v:",v:4);
  1901.    FOR k:= 1 to y
  1902.        v := v*x;    {násobíme opakovanê základem}
  1903.    ENDFOR
  1904.    umocni := v;     {p⌐edáme vÿsledku funkce}
  1905. ENDPROC
  1906.  
  1907. PROCEDURE main
  1908.    ConsoleClear;
  1909.    WRITELN("globálnní hodnota v:",V:4);
  1910.    WRITELN(umocni(2,9):10);  {vypí¿e hodnotu 1024}
  1911.    WRITELN(umocni(3,3):10);  {vypí¿e hodnotu   81}
  1912.    WRITELN("globálnní hodnota v:",V:4);
  1913. ENDPROC
  1914.  
  1915.   V¿imnête  si, æe  program  obsahuje  dva bloky  s deklarovanÿmiì
  1916. promênnÿmi.  Deklaraçní blok  na zaçátku  programu obsahuje pouzeì
  1917. promênnou 'v'  s p⌐idêlenou hodnotou.  Tato promênná, protoæe  jeì
  1918. deklarována  mimo jakékoliv  procedury je  globální a dosaæitelnáì
  1919. v celém programu. V definované funkci umocni je uveden znovu blokì
  1920. definice promênnÿch,  kde je opêt deklarována  promênná se jménemì
  1921. 'v' (dokonce rozdílného typu). Tato promênné je pouze lokální, toì
  1922. znamená,  æe je  platná pouze  ve funkci,  kde byla  deklarována.ì
  1923. Pokud deklarujeme  lokální promênou stejného  jména, jaké má  jiæì
  1924. existující  globální promênná,  zastíní lokální  promênná po dobuì
  1925. své platnosti d⌐íve definovanou globální promênnou.
  1926.   Pokud  vÿ¿e  uvedenÿ  program  spustíme,  bude  se mimo vÿpoçtuì
  1927. vypisovat  i obsah  zadanÿch  promênnÿch.  V¿imnête si,  æe pokudì
  1928. vypí¿eme stav promênné 'v' z  hlavní procedury main, bude vypsánaì
  1929. vædy hodnota,  která byla p⌐idêlena promênné  p⌐i její deklaraci.ì
  1930. Vypsána  je tedy  hodnota promênné  s globální  platností v celémì
  1931. programu. Pokud  se bude vypisovat hodnota  promênné 'v' z funkceì
  1932. umocni, bude se vypisovat hodnota lokální promênné, která doçasnêì
  1933. p⌐ekryje globální promênnou. Mûæeme  také vypsat hodnotu promênnéì
  1934. 'x', kterou  jsme sami ani  nedeklarovali. Deklaroval si  ji opêtì
  1935. doçasnê sám systém pro p⌐evedení hodnoty z nad⌐azeného programu.
  1936.   Moæná se vám bude zpoçátku zdát pouæívání a sledování lokálníchì
  1937. a globálních promênnÿch nep⌐ehledné.  Jejich pouæívání ale umoæníì
  1938. zp⌐ehlednêní programu. V nêkterÿch p⌐ípadech je správné pochopeníì
  1939. rozsahu  platnosti  lokálních  a  globálních  promênnÿch  dokonceì
  1940. nutné. Je to nap⌐íklad problém  rekurze, kdy z têla funkce volámeì
  1941. stejnou funkci (volání funkce sebe sama).
  1942.  
  1943.   20. lekce - rekurze v programu
  1944.  
  1945.   Rekurzívní  funkce  (nebo  procedura)  bêhem  provádêní p⌐íkazûì
  1946. svého têla vyvolá  je¿tê p⌐ed jeho ukonçením sama  sebe. Znovu seì
  1947. tedy zaçne  provádêt tatáæ posloupnost  p⌐íkazû, aniæ by  pûvodníì
  1948. byla dokonçena. Pokud budeme  chtít nap⌐íklad vypoçítat faktoriálì
  1949. nêjakého çísla, musíme postupnê  vynásobit poæadované çíslo v¿emiì
  1950. çísly  niæ¿ími vædy  o jedniçku.  Faktoriál çísla  5 se nap⌐íkladì
  1951. vypoçítá  vztahem  5*4*3*2*1.  Pokud  budeme  chtít  pro  vÿpoçetì
  1952. faktoriálu  napsat  obecnou  funkci,   mûæeme  vztah  upravit  doì
  1953. následujícího tvaru:  5*(4*(3*(2*(1)))). Zde je jiæ  vidêt, æe jeì
  1954. moæné  p⌐i  násobení  sníæit  vædy  základ  o  jedniçku a násobitì
  1955. opakováním vÿsledku volané funkce.  Funkce pro vÿpoçet faktoriáluì
  1956. bude mít proto následující zápis:
  1957.  
  1958. FUNCTION factorial(n: real): real;
  1959.    IF (n = 0) then
  1960.       factorial := 1
  1961.    ELSE
  1962.       factorial := n*factorial(n-1);   { REKURZE ! }
  1963.    ENDIF
  1964. ENDFUNC;
  1965.  
  1966. PROCEDURE main
  1967.    ConsoleClear;
  1968.    WRITELN('Test rekurze:');
  1969.    WRITELN('faktoriál çísla 1 je:', factorial(1):5); {=   1}
  1970.    WRITELN('faktoriál çísla 2 je:', factorial(2):5); {=   2}
  1971.    WRITELN('faktoriál çísla 3 je:', factorial(3):5); {=   6}
  1972.    WRITELN('faktoriál çísla 4 je:', factorial(4):5); {=  24}
  1973.    WRITELN('faktoriál çísla 5 je:', factorial(5):5); {= 120}
  1974.    WRITELN('faktoriál çísla 6 je:', factorial(6):5); {= 720}
  1975.    WRITELN('faktoriál çísla 7 je:', factorial(7):5); {=5040}
  1976. ENDPROC;
  1977.  
  1978.   V¿imnête  si, æe  uvedenÿ program  neobsahuje æádnou  deklaraciì
  1979. promênnÿch  a p⌐esto  je pouæívá.  Je to  proto, æe promênné jsouì
  1980. deklarovány systémem v deklaraci funkce.
  1981.   Má-li  rekurzivnê aktivovaná  funkce lokální  promênné, je  p⌐iì
  1982. kaædé aktivaci vytvo⌐ena nová  sada lokálních promênnÿch, p⌐içemæì
  1983. p⌐i nové aktivaci zûstanou  lokální promênné nad⌐azenÿch aktivacíì
  1984. zachovány. Kaædá  aktivace funkce má  tedy své lokální  promênné.ì
  1985. K promênnÿm  nad⌐azenÿch aktivací  téæe procedury  çi funkce neníì
  1986. p⌐ístup moænÿ. Po ukonçení aktivace zaniknou odpovídající lokálníì
  1987. promênné  a   platnÿmi  se  stanou   lokální  promênné  nad⌐azenéì
  1988. aktivace.
  1989.   Existují   úkoly,  jejichæ   ⌐e¿ení  vede   na  zápis  programûì
  1990. s rekurzivními procedurami  nebo funkcemi. Jsou  to problémy, p⌐iì
  1991. jejichæ rozkladu na podproblémy vznikne problém, kterÿ je obdobnÿì
  1992. pûvodnímu, av¿ak  je jednodu¿¿í. S  tím také souvisí  následujícíì
  1993. lekce, kde se budeme vênovat návrhu programu a rozkladu zadání naì
  1994. jednotlivé procedury.
  1995.  
  1996.   21. lekce - návrh a zápis programu
  1997.  
  1998.   V p⌐edchozích  lekcích jsme se seznámili  se základními p⌐íkazyì
  1999. systému  a strukturou  programu. Poznali  jsme, æe  program tvo⌐íì
  2000. posloupnost operací, vêtvení programu  podle podmínek a opakováníì
  2001. çástí  programu. Poznali  jsme, æe  program tvo⌐í  i data,  kteráì
  2002. program zpracovává. Nyní by bylo vhodné seznámit se s tím, jak byì
  2003. mêl novÿ program vznikat.
  2004.   Je¿tê  d⌐íve, neæ  zaçneme psát  novÿ program  by jsme  si mêliì
  2005. ujasnit  poæadovanou   çinnost  programu.  Nejlépe   tak,  æe  seì
  2006. seznámíme nejprve s tím, jaké vÿsledky nám má program poskytnout.ì
  2007. Podle toho si musíme zadat  poçáteçní podmínky a vstupní hodnoty.ì
  2008. Dal¿ím krokem  by jiæ mêl bÿt  rozklad problému tak, aby  jsme siì
  2009. v blocích  definovali çinnost  programu od  poçáteçních hodnot aæì
  2010. k poæadovanÿm  vÿstupním hodnotám.  Pokud nap⌐íklad  zjistíme, æeì
  2011. musíme nejprve provést vÿpoçet  vstupních hodnot a potom vÿslednéì
  2012. hodnoty zobrazit, mûæeme jiæ zaçít psát kostru programu:
  2013.  
  2014. PROCEDURE main
  2015.    vypocet;
  2016.    zobrazeni;
  2017. ENDPROC
  2018.  
  2019.   Tím   máme  souçasnê   zadány  jména   procedur,  které  musímeì
  2020. naprogramovat. Dále jiæ budeme  provádêt postupnê rozklad dílçíchì
  2021. problémû na dal¿í podproblémy. V p⌐ípadê sloæitÿch zadání se mûæeì
  2022. dokonce  stát,  æe  nejsme  schopni  sestavit  ihned  program proì
  2023. vy⌐e¿ení  dílçích problémû,  ale musíme  znovu definovat  rozkladì
  2024. problému na  men¿í související posloupné  akce. Uvedenÿm zpûsobemì
  2025. se  snaæíme  rozloæit  poçáteçní  zadání  problému  do postupnÿchì
  2026. krokû, které dále zjemñujeme. Na konci  by jsme se mêli dostat doì
  2027. fáze,  æe  ⌐e¿ení  jiæ  zapisujeme  p⌐ímo  v  programovém jazyce.ì
  2028. Soubêænê  s  tím  up⌐esñujeme  poæadovaná  data  a jejich uloæeníì
  2029. v promênnÿch definovaného typu.
  2030.   Vÿ¿e uvedenému  zpûsobu ⌐e¿ení programû  se ⌐íká metoda  návrhuì
  2031. programu shora dolû. To proto,  æe od celkového zadání p⌐echázímeì
  2032. postupnê  k  jednotlivÿm  dílçím  úkolûm,  které nakonec zadávámeì
  2033. v programovém jazyce.
  2034.   Velmi  dûleæité je  také  zaznamenání  postupu ⌐e¿ení  ve formêì
  2035. poznámek. Nyní se vám zdá  v¿echno jasné. Pokud se v¿ak dostaneteì
  2036. k programu po del¿í  dobê, nemusí vám bÿt ihned  jasné, proç jsteì
  2037. postupovali  uvedenÿm zpûsobem.  Zaznamenávejte si  proto maximumì
  2038. poznámek k ⌐e¿ení problému. Poznámky mohou bÿt v programu dvojíhoì
  2039. druhu. Pokud uvedeme na zaçátku  ⌐ádky dvê lomítka za sebou, budeì
  2040. systém  celÿ ⌐ádek  ignorovat a  bude jej  povaæovat za poznámku.ì
  2041. Takto je  moæné nap⌐íklad psát del¿í  komentá⌐e, nebo p⌐i rûznÿchì
  2042. pokusech mûæeme zneplatnit celÿ ⌐ádek  programu, aniæ by jsme jejì
  2043. museli vymazávat.
  2044.   Druhou  moæností  zápisu  vlastního  komentá⌐e  do  programu jeì
  2045. pouæití  sloæenÿch závorek.  V¿e, co  je v  programu uvedeno meziì
  2046. levou a pravou  sloæenou závorkou je povaæováno za  komentá⌐ a jeì
  2047. systémem ignorováno.  Tento druh poznámek je  vÿhodné pouæívat naì
  2048. konci ⌐ádku  pro zápis popisu provedené  çinnosti ⌐ádku. Takto jeì
  2049. moæné oznaçit jako poznámku i  text uprost⌐ed ⌐ádku, nebo nêkolikì
  2050. ⌐ádkû najednou.
  2051.   P⌐i  zápisu  programu  se  snaæte  dodræovat  grafickou  úpravuì
  2052. programu, kdy jsou têla blokû odsazena od svého záhlaví o nêkolikì
  2053. znakû.  Takovÿ program  je potom  i na  první pohled lépe çitelnÿì
  2054. a snáze se hledají p⌐ípadné chyby.
  2055.   Systém nerozli¿uje v programu malá a velká písmena. P⌐esto budeì
  2056. vhodné,  pokud budete  dodræovat jednotnou  dále popsanou úpravu.ì
  2057. Nejvhodnêj¿í   je   pouæívat   pro   návê¿tí   a  ukonçení  blokuì
  2058. (FOR..ELSE..ENDFOR)  velká  písmena.  Stejnê  tak  je vhodné psátì
  2059. jména  základních p⌐íkazû  systému (READ,  WRITELN, CONTINUE  ..)ì
  2060. velkÿmi  písmeny. Jména  procedur a  funkcí p⌐ebíraná  z knihovenì
  2061. systému  je vhodné  zapisovat tak,  aby vædy  první písmeno slovaì
  2062. bylo velké.  Sloæenÿm slovem se  rozumí jméno sloæené  z nêkolikaì
  2063. slov,   mezi  nimiæ   nesmí  bÿt   mezera.  Nap⌐íklad  ImageInit,ì
  2064. ConsoleClear apod. Stejnÿm zpûsobem  je vhodné pojmenovat vlastníì
  2065. víceznaková jména deklarovanÿch promênnÿch.
  2066.  
  2067.   22. lekce  - ladící a animaçní reæim  programu
  2068.  
  2069.   V  p⌐edchozí  lekci  jsme  se  seznámili  s  tím,  jak  programì
  2070. navrhnout  a  sestavit.  Nikdy  v¿ak  není  zaruçeno, æe vám budeì
  2071. program ihned pracovat správnê. Chybu v programu vám mûæe ohlásitì
  2072. systém  v p⌐ípadê  chybnê deklarované  promênné, ¿patnê  zadanéhoì
  2073. p⌐íkazu a podobnê.  Av¿ak i v p⌐ípadê, æe  program probêhne aæ doì
  2074. konce bez vypsání chybového hlá¿ení,  neznamená to, æe je programì
  2075. bez  chyb.  Chyba  nemusí  bÿt  v  samotném  zápisu programu, aleì
  2076. v chybném  sestavení algoritmu.  Protoæe se  takové chyby  ¿patnêì
  2077. hledají, byl systém doplnên nêkolika pomûckami, dovolujícím chybyì
  2078. v programu nalézt.
  2079.   V  jedné z  p⌐edchozích lekcí  jsme si  zbêænê ukázali  animaciì
  2080. programu. P⌐i  ní se program spou¿tí  klávesou F6 p⌐ípadnê volbouì
  2081. z menu Program/Animace, nebo kliknutím na ikonu s obrázkem filmu.ì
  2082. Program  p⌐itom  bude  mimo  vykonávání  naprogramované  çinnostiì
  2083. souçasnê  zobrazovat  v  oknê  s  programem  ⌐ádku,  kterou právêì
  2084. vykonává. Chod programu je souçasnê  zpomalen tak, aby bylo moænéì
  2085. prûbêh  animace  programu  sledovat.  To  nám  umoæní kontrolovatì
  2086. prûbêh   programu  p⌐es   jednotlivé  p⌐íkazy,   volání  procedurì
  2087. a funkcí. Animaci programu máte moænost kdykoliv p⌐eru¿it tak, æeì
  2088. stisknete klávesu F9 a program bude pokraçovat normální rychlostíì
  2089. bez zobrazování vykonávaného ⌐ádku programu. Pokud by jste chtêliì
  2090. animaci  pouze doçasnê  pozastavit, mûæete  tak uçinit  kliknutímì
  2091. my¿í na ikonu s obrázkem STOP znaçky.
  2092.   Dal¿í,  velmi  zajímavou  moæností  systému  vzhledem  k ladêníì
  2093. programu  je schopnost  prûbêæného vypisování  hodnot promênnÿch.ì
  2094. Promênné se  zobrazují ve svém  samostatném oknê, které  otev⌐eteì
  2095. z menu  volbou Okna/Promênné.  Zobrazí  se  vám tabulka  se dvêmaì
  2096. ikonami v horní li¿tê. Levá ikona se pouæívá pro p⌐idání promênnéì
  2097. do  tabulky, pravá  ikona promênnou  z tabulky  zru¿í. Zkuste  siì
  2098. proto  napsat program,  ve kterém  pouæijete cyklus  FOR..ENDFOR.ì
  2099. Mimo   ⌐ídící  promênné   deklarujte  i   dal¿í  promênné.  Jménaì
  2100. promênnÿch  zadejte i  do  tabulky  pro sledování  promênnÿch. Toì
  2101. uçiníte tak, æe  kliknete my¿í na levou ikonu,  a do dotazovacíhoì
  2102. okna zadejte  jméno promênnou, kterou  chcete sledovat. Po  jejímì
  2103. zadání  se  zobrazí  promênné  v  tabulce  s uvedením, æe hodnotaì
  2104. promênné  není  definována.  stejnÿm  zpûsobem  zadejte  i  dal¿íì
  2105. promênné,  jejichæ  stav  budete  chtít  sledovat.  P⌐i  spu¿têníì
  2106. programu v  reæimu animace sledujte souçasnê  tabulku s hodnotamiì
  2107. promênnÿch.  Dokud není  v programu  promênné p⌐idêlena  hodnota,ì
  2108. zobrazuje se  v jejich stavu tzv.  nedefinovaná náhodná veliçina.ì
  2109. Po p⌐idêlení hodnoty a její  kaædé zmênê je stav hodnoty promênnéì
  2110. v tabulce aktualizován. Mûæete proto  sledovat, zda odpovídá jejíì
  2111. hodnota p⌐edpokládanÿm veliçinám.
  2112.   Mimo  reæimu  animace,  kdy   jsou  ⌐ádky  programu  vykonáványì
  2113. automaticky  se zadanou  çasovou prodlevou  máte moænost  programì
  2114. krokovat  sami  po  jednotlivÿch  ⌐ádcích.  Krokování programu poì
  2115. ⌐ádcích se aktivuje klávesou F7. Systém p⌐i kaædém stisku klávesyì
  2116. F7  provede pouze  jeden ⌐ádek  programu se  souçasnÿm zobrazenímì
  2117. ⌐ádky,  kterou  bude  provádêt  v  následujícím  kroku.  Máte takì
  2118. moænost sami ovládat çasové prodlevy mezi provádêním jednotlivÿchì
  2119. ⌐ádek  programu.  Souçasnê  máte   také  moænost  vÿ¿e  popsanéhoì
  2120. zobrazení   hodnot  promênnÿch   v  p⌐íslu¿ném   oknê.  Pokud  seì
  2121. z programu volá procedura, pokraçuje krokování programu ve volanéì
  2122. procedu⌐e.  Pokud ale  nechcete proceduru  krokovat, stisknête naì
  2123. ⌐ádku  s procedurou  místo F7  klávesu F8,  která umoæní  skok doì
  2124. procedury  p⌐eskoçit. Program  v takovém  p⌐ípadê vykoná  volanouì
  2125. proceduru  bêænou  rychlostí  bez  zobrazování  provádênÿch ⌐ádekì
  2126. programu. Obdobnê to platí i pro volání funkce v programu.
  2127.   Pokud  budete chtít  sledovat  prûbêh  programu aæ  od urçitéhoì
  2128. místa,  nastavte kurzor  v oknê  s programem  na poæadované místoì
  2129. a spusƒte program  funkçní klávesou F4. Program  se spustí bêænouì
  2130. rychlostí  a  po  dosaæení  ⌐ádku  programu,  na kterém je kurzorì
  2131. p⌐ejde do ladícího reæimu. Dále budete mít moænost pokraçovat buâì
  2132. krokováním, animací nebo nap⌐íklad  po kontrole hodnot promênnÿchì
  2133. pokraçovat bêænou rychlostí.
  2134.   Vÿ¿e  popsaná  animace  programu  i  jeho  krokování vám dovolíì
  2135. sledovat prûbêh  çinnosti programu a zmêny  hodnot promênnÿch. Toì
  2136. vám umoæní poznat dûkladnêji çinnost p⌐íkazû pro cyklus a vêtveníì
  2137. programu.  Krokování  i  animaci  programu  máte moænost kdykolivì
  2138. p⌐eru¿it s tím, æe çinnost programu buâ pozastavíte nebo spustíteì
  2139. bêænou rychlostí. P⌐eru¿ení se provede kliknutím my¿i na ikonu seì
  2140. STOP  znaçkou.  Pokraçování  programu  bêænou  rychlostí je moænéì
  2141. stiskem  klávesy F9.  Krokování  programu,  jeho animaci  i bêænéì
  2142. spu¿têní je moæné libovolnê kombinovat.
  2143.   Protoæe  zûstává aktivní  p⌐íkazové okno  stále p⌐ístupné, máteì
  2144. moænost  kdykoliv  zmênit  hodnotu   promênné,  vypsat  si  obsahì
  2145. promênnÿch, které  nemáte v oknê  pro sledování promênnÿch  apod.ì
  2146. Tím   dosáhnete  absolutní   nadvlády  nad   programem,  coæ  vámì
  2147. kompilované programy nikdy neumoæní.
  2148.