Azərbaycan dili Bahasa Indonesia Bosanski Català Čeština Dansk Deutsch Eesti English Español Français Galego Hrvatski Italiano Latviešu Lietuvių Magyar Malti Mакедонски Nederlands Norsk Polski Português Português BR Românã Slovenčina Srpski Suomi Svenska Tiếng Việt Türkçe Ελληνικά Български Русский Українська Հայերեն ქართული ენა 中文
Subpage under development, new version coming soon!
 Topic closed!!!

Subject: »iba spam

2006-09-20 13:58:45
hh s takýmito vecami sa nekšeftuje :D to sa proste vystaví na web a hodí sa link :D
2006-09-20 13:59:47
no skuste!
2006-09-20 14:10:49
Message deleted

2006-09-20 14:13:02
však skús čo sa pýtaš :D
2006-09-20 14:13:28
Message deleted

2006-09-20 14:14:24
ty h3ck3r :D
2006-09-20 15:25:06
Message deleted

2006-09-20 15:39:45
Message deleted

2006-09-20 16:17:03
koho sakuješ ? :D
2006-09-20 20:39:38
joj nuda tu je dnes hosi
2006-09-20 21:56:19
No už tu nuda nebude už nemam ban takže to ideme roztočit


No kebyže zase nedrichmete všetci lolaci
2006-09-21 08:09:02
Úvod
Kto vám môže narobiť problémy? Len ten, kto vie, na čo ste citliví a na čo vás "chytí". A mám za to, že tak presne a priamo pod kožu ich vie sformulovať iba informatik. Prečo také odvážne tvrdenie? Ak skutočne, a nie len listovaním, dočítate túto knihu do konca a sem-tam-stále si niečo skúsite vyriešiť, verím, že ďalšie dôkazy uvádzať nie je potrebné.

Ale naspäť k meritu (jadierku) veci. Chrobáka a výzvu menom PROBLÉM, resp. Programovanie v pascale mi nasadil do hlavy pokušiteľ-vydavateľ. Pozná moju minulosť i súčasnosť, a tým aj slabosti. Dal mi lukratívnu ponuku (písomne zvečniť to, čo mažem z tabule na prednáškach už nejaký ten rok. Som mu vďačný za "výzvu na súboj". S jeho "Dvojkou" (Turbo pascal II.) sa však bojuje ťažko. Sú tam použité tie najkrajšie, najťažšie a najúčinnejšie programátorské zbrane. Mne zostali iba nižšie "zbrane krátkeho doletu". Pre niekoho sú to možno primitívne záležitosti a partie. Ale bez základov nie je možné stavať dom. V jednom prípade sa to dá _ ak si postavíte (najlepšie na kľúč) vzdušný zámok. Potom ale pozor, aby nezafúkal silný vietor alebo nepršalo! Pre programovanie _ riešenie problémov na počítači to platí dvojnásobne. Hodiny "relaxu" za počítačom a hľadania chýb zúčastnených strán (človek kontra počítač, či naopak) môžu byť pre okolie signálom hodnotenia osoby okupujúcej počítač:

1. Ticho! Veď ON rieši tak zložitý problém!!

2. Preboha! TENTO by mal radšej vypnúť počítač a ísť od toho preč!


Prajem vám, aby o vás ostatní hovorili iba parafrázy prvého variantu. A keď (zo začiatku) nie, nevadí! Skúste natiahnuť plachty fantázie, chytiť ten správny vietor, nerobiť si z problémov ešte väčšie problémy a mať dosť trpezlivosti, intuície, potrebných znalostí a "strojového" času.


Dostal som striktný pokyn (nie príkaz!), že programovanie by sa nemalo realizovať cez matematiku, ktorá vraj veľa ľudí nebaví. Pokúsim sa ho držať, no niekde mi to nedá, niektoré deformácie sú trvalé. Ale nebojte sa! Bude vám stačiť iba trošku logicky rozmýšľať, aj keď je to niekedy, resp. u niekoho problém, a sem-tam si oprášiť svoje nesmrteľné matematické vedomosti zo základnej školy. Myslím si, že kto sa dobrovoľne rozhodol čítať knihu s takýmto názvom, nebude mať žiadne výhrady.


Ďakujem všetkým, ktorých som využil ako "pokusných králikov" _ mojim bývalým i súčasným študentom; všetkým, ktorí boli a sú pre mňa vzormi _ mojim učiteľom i kolegom, zvlášť docentovi Hvoreckému a profesorovi Kasatkinovi; ako aj tým, ktorí mi zabezpečili pohodu a inšpiráciu pri písaní _ manželke Ľube, synom Martinovi a Ľubošovi.
Problém a riešenie problému
AKO ZAČAŤ?


Chceme sa naučiť riešiť problémy pomocou počítača1, vedieť s ním komunikovať nielen ako bežní používatelia hotových produktov, ale aj ako tvorcovia (autori) "nových" riešení. Je zrejmé, že je málo toho, čo by už nebolo povedané či napísané. Ale nie je isté, či to bolo povedané a napísané tak, ako to dokážeme my. Do programov _ zjednodušene povedané predpisov toho, čo má vykonávať počítač _ vkladá každý programátor kúsok seba, spolu s klasickým postupom riešenia dodáva k nemu aj svoj estetický a podľa neho efektívny pohľad na spracovávanú problematiku. O tom, či je to pre iného používateľa estetické a efek-tívne, by sa dalo meditovať. Ale základom programovania je práve možnosť realizovať riešenie problému podľa svojich predstáv, dať riešeniu svoj vlastný "image" (čítaj "imidž" - preložiť zrejmé pojmy je obtiažne). Je to podobné umeniu i skutočnému životu (nie škole), kde platí, že keď dvaja robia to isté, nikdy to nie je to isté.

Programovanie má oproti mnohým iným činnostiam, ku ktorým nás "dobrovoľne-povinne" vedú v škole, obrovskú výhodu. Často nás núti poriadne naplno roztočiť svoje mozgové závity, rozmýšľať o tom, čo je podstatné a čo nie, čo má byť viditeľné a čo skryté, realizovať svoju vlastnú predstavu použitím známych prostriedkov. Vždy, keď sa človek do niečoho pustí, musí mať správnu motiváciu. Tou môže byť aj skutočnosť, že s počítačmi a informačnými technológiami sa už dnes stretnete prakticky všade. Nechcete dokázať prinútiť stroj _ počítač, aby robil presne to, čo mu zadáte? Je to výzva, ktorej sa ťažko odoláva, ak chcete naozaj niečo dosiahnuť. Skúste to!

Prvé, čo potrebujeme, je zaviesť základné pojmy, vzťahy medzi nimi a metódy _ t. j. spôsoby práce s nimi, skrátka a múdro povedané - terminológiu. Mali sme tu pojmy "problém", "vyriešenie problému", "informatika", "programovanie", "počítač", určite toho však budeme musieť zvládnuť viac.


--------------------------------------------------------------------------------
1 "Osobné počítače, ktoré sa dostali aj do domácností majú oproti ostatným členom domácnosti, kde dnes často hrajú významnú úlohu aj domáce zvieratá, isté prednosti: a) nehryzú, neškriabu, neštekajú, b) nerobia kôpky a mláčky, nepotrebujú venčiť, c) s kýmkoľvek sa ochotne hrajú najrôznejšie hry, d) narozdiel od ostatných členov domácnosti sa dajú hocikedy vypnúť, e) môžeme ich chovať bez akýchkoľvek problémov a sporov so susedmi aj v špecifických podmienkach panelákov, f) v prenosnom vydaní sú vhodné aj na rande do parku, či na dlhé cesty (ak nemáte na lietadlo) za poznaním." (I. Kopeček, J. Kučera: Programátorské poklesky. Mladá fronta, Praha 1989.)
Jazyk, algoritmický jazyk, programovací jazyk
Ak máme s niekým komunikovať, potrebujeme zodpovedajúci prostriedok dorozumievania _ jazyk. Jazyk je podľa J. Mistríka (Jazyk a reč, Mladé letá, Bratislava 1984) "súhrn pravidiel, na základe ktorých vzniká reč". Pôvodne bol jazyk iba prostriedkom komunikácie medzi ľuďmi6, dnes už je aj prostriedkom komunikácie medzi človekom a strojom. Pozrime sa na jazyk tohto typu podrob-nejšie.

Potrebujeme niekoho naučiť postupy _ algoritmy. Pretože algoritmy sú postupy so špecifickými vlastnosťami, bolo by potrebné použiť aj špecifický jazyk. Jazyk určený pre zápis algoritmov nazývame algoritmický jazyk. Jazyky používané pri komunikácii medzi ľuďmi nevyhovujú z viacerých dôvodov:

a) Počet slov je neúmerne vysoký (napr. slovenčina pozná vyše 110.000 slov, angličtina takmer 800.000). Navyše sú tieto jazyky v neustálom vývoji, ročne pribú-dajú desiatky nových slov.

b) V ľudských jazykoch existuje veľa výnimiek spôsobených historickým vývojom, zdanlivo nezmyselné príslovia (napr. "Lož má krátke nohy.", "Kúpil mačku vo vreci."), prirovnania, zaužívané slovné spojenia (napr. "to je babylon", "kocky sú hodené", "medvedia služba").

c) Existencia homoným (slov, ktoré majú viacero významov, napr. "strana", "koruna", "list", "dospievať", "mať"...) a synoným (rôznych slov, ktoré majú rovna-ký význam, napr. "najmä" - "hlavne" - "predovšetkým" - "najskôr") môže spôsobo-vať nejasnosť vysvetlenia. (Obľúbené sú slovné hračky a tzv. dvoj- či en-zmysly.)

d) Niekedy nie je možné ani z kontextu odhadnúť, čo dané slovo vyjadruje. Napr. úryvok z náhodne vypočutého rozhovoru: "Jano išiel do mesta. Mesiac sa neukázal." (cit. z výbornej knižky Hvorecký, Kelemen: Algoritmizácia) Je slovo "Mesiac" príslovkovým určením času alebo podmetom druhej vety? Môžeme iba odhadovať podľa znalosti veci (Jana) alebo hlasovať. Podobné je to s obľúbenou otázkou majora Teraskyho: "Čím je vojak?" (Vyberte si z možností "Obrancom vlasti" či "Lyžicou".)

e) Prirodzený jazyk obsahuje veľa prvkov a konštrukcií, ktoré sú pri formulovaní postupov zbytočné, napr. nič nehovoriace debaty a zdvorilostné otázky ("Už ani to počasie nie je, čo bývalo." alebo "Ako sa máš?" _ aj keď mi je to úplne ukradnuté, čo sa však nehovorí, a pod.)
Tieto dôvody viedli k potrebe vytvoriť formálne jazyky _ umelo vytvorené a špeciálne určené pre zápis algoritmov. Podobne ako sa nepodarilo ľudstvu dohovoriť sa na jednotnom jazyku, ani pri algoritmických jazykoch nedošlo k dohode a vo všeobecnosti sa používa viacero z nich. Najčastejšie sú:

A. Grafické algoritmické jazyky _ napr. vývojové diagramy, rôzne typy štruktúrogramov,

B. Lineárne algoritmické jazyky _ napr. slovný zápis v národnom jazyku, programovací jazyk.


Algoritmický jazyk by mal svojou konštrukciou napomáhať splneniu vlastností algoritmu. Preto v jestvujúcich algoritmických jazykoch sú dve zvýraznené zložky _ operačná a riadiaca.


Operačná zložka

Obsahuje sadu prostriedkov, ktoré umožňujú spracovávať údaje _ elementárne činnosti, ktoré dokáže procesor vykonávať. Pretože naším cieľom je prechod k programovaniu, ako základ budú pre nás slúžiť elementárne činnosti, ktoré sa používajú pri programovaní. Základnými činnosťami sú príkazy a podmienky.

Príkazy sú vety jazyka, ktoré prikazujú procesoru vykonať isté, presne stanovené činnosti. Pre začiatok vystačíme s príkazmi vstupu, výstupu a priradenia. Tieto príkazy musia spracúvať nejaké objekty. V programovaní sú nimi premenné, konštanty a výrazy.

Premenná je objekt, ktorý obsahuje počas realizácie algoritmu konkrétnu hodnotu7 presne stanoveného typu (napr. celé číslo, reálne číslo, reťazec znakov...).

Konštanta je objekt, ktorý nadobúda počas celej realizácie algoritmu jedinú konkrétnu hodnotu príslušného typu. Je to obdoba konštánt známych z matematiky, napr. p, e, ale aj z fyziky: g, c, k, e, m.

Výraz je predpis, ktorý obsahuje konštanty, premenné a spôsob ich spracovania pomocou operácií a funkcií podobných tým, ktoré poznáme z matematiky. Jeho výsledkom je hodnota príslušného typu, ktorá vznikne po vykonaní vo výraze naznačeného spracovania.

Príkaz priradenia má tvar:

p:= v


kde p je meno premennej, v je výraz. Vykonaním príkazu nadobudne hodnota premennej p hodnotu výrazu umiestneného na pravej strane priradenia. (Často sa tento príkaz pletie s rovnosťou známou z matematiky, tá sa v programovaní využíva v podmienkach.)
Meno premennej budeme zapisovať tak, že musí začínať písmenom (anglickej abecedy "A" až "Z", resp. "a" až "z" - bez "príkras" _ dĺžňov, mäkčeňov...) a môže obsahovať ľubovoľný počet písmen a číslic. Je vhodné voliť také mená premenných, ktoré napovedia čitateľovi, aký má premenná význam. Malé a veľké písmena nerozlišujeme, ale je vhodné, ak si "dôležité" premenné budeme označovať veľkými, pomocné malými písmenami. Takže menami premenných môžu byť A, B, C, podiel, b1, pomoc, alfa... , ale nie 1A, c$, žvacheľ a pod.


Riadiaca zložka

V algoritmickom jazyku musí byť presne stanovené poradie vykonávania jednotlivých činností. Je to potrebné preto, aby realizátor (procesor) nemusel uvažovať, čo má kedy vykonať. Oproti prirodzenému jazyku sa preto do algoritmu vkladajú riadiace príkazy a činnosti, ktoré určujú presnú postupnosť vykonávania jednotlivých činností. Časom sa vyvinuli najefektívnejšie prostriedky pre organizovanie postupnosti vykonávania činností známe ako základné algoritmické konštrukcie. Preto sa im venujme podrobnejšie spolu s uvedením príkladu konkrétneho algoritmického jazyka.



--------------------------------------------------------------------------------
6 Na svete existuje 6528 známych, aj keď niekedy už nepoužívaných jazykov. Najviac ľudí hovorí čínsky _ 726 miliónov, ďalej nasledujú angličtina, španielčina, hinština, arabčina, portugalčina,... , ruština je ôsma, nemčina desiata, francúzština jedenásta. Svetovým dorozumievacím jazykom je angličtina, ktorou sa bude vedieť dohovoriť okolo roku 2000 každý štvrtý človek na svete. (údaje z r. 1997)
7 Premenná v informatike a v matematike majú odlišný význam. V matematike je premenná chápaná ako symbol, t. j. zástupca celej triedy hodnôt určitého typu, napr. celých čísiel, nemusí to byť žiadna konkrétna hodnota. V informatike (presnejšie v programovaní) je premenná pamäťové miesto príslušnej veľkosti, ktoré vždy obsahuje istú hodnotu z určeného typu údajov. Je to teda vždy momentálna hodnota, ktorá je pod menom premennej uložená.

Základné algoritmické konštrukcie
Každý postup sa dá vo všeobecnosti rozložiť na niekoľko za sebou idúcich, prípadne do seba vložených činností. Z hľadiska postupu vykonania môžeme rozložiť riešenie na tieto základné algoritmické konštrukcie:

_ Postupnosť príkazov (činností),

_ Vetvenie v závislosti od splnenia istej podmienky,

_ Cyklus ako viacnásobné opakovanie istej činnosti.


Na ukážku zápisu algoritmov v algoritmickom jazyku použijeme tzv. štruktúrogramy. Nie sú (u nás) veľmi často používané, čo je škoda, pretože ich prepis do pascalu je, narozdiel od anachronicky používaných vývojových diagramov, veľmi jednoduchý.


Sekvencia _ postupnosť príkazov: Vyplní sa v poradí, v akom sú príkazy pod sebou zapísané.

Napr. schéma zobrazuje zápis sekvencie pre postupnosť príkazov 1., 2. ... n.


Vetvenie (alternatíva): V závislosti od splnenia pod-mienky sa postup vetví na rôzne prípady. Ak je podmienka splnená (+), pokračuje sa plnením príkazu (činnosti) 1. , v opačnom prípade (-) sa pokračuje vykonaním príkazu 2.


Ak potrebujeme vetviť postup na viacero rôznych riešení v závislosti od podmienky, vkladáme viacero alternatív "do seba".


Cyklus: Pri opakovaní nejakej činnosti musíme mať vyjasnené dve veci: čo sa má opakovať a dokedy sa to má opakovať. Činnosť, ktorá sa má opakovať, nazývame telom cyklu, podmienku, ktorá určuje dokedy sa bude telo cyklu opakovať, nazývame podmienka cyklu.


Vzťah medzi telom a podmienkou cyklu môže byť rôzny _ podmienka môže predchádzať telu, cyklus sa môže vykonávať dovtedy, kým (ne-)bude splnená podmienka a pod. Najčastejšie sa používajú tieto typy cyklov:


1. Cyklus so známym počtom opakovaní: Telo cyklu sa opakuje vopred známy počet krát. Pre zisťovanie počtu už vykonaných opakovaní cyklu sa zavádza tzv. riadiaca premenná cyklu, ktorá nadobúda hodnoty od danej dolnej hranice po hornú hranicu (po "jednej").


Zápis v prvom riadku naznačuje, že riadiacou premennou cyklu je i a cyklus sa bude opakovať pre i od 1 po N, teda N-krát.

Poznámka: Veľmi často sa používa práve označenie riadiacej premennej i alebo j. Je to tiež "anachronizmus" (niečo, čo sa vžilo v minulosti a dnes sa používa zo zotr-vačnosti) _ prvý vyšší programovací jazyk fortran mal nedeklarované premenné (tie, ktoré neboli popísané na začiatku programu) automaticky celočíselné, ak názov začínal písmenami "I", "J".


2. Cyklus s podmienkou na začiatku: Najčastejšie sa volí cyklus (nazvime ho "opatrný"), kedy sa telo cyklu opakuje, pokiaľ platí podmienka cyklu.


Podmienkou cyklu je tvrdenie, o ktorom dokáže procesor (ten, kto má algoritmus vykonávať) rozhodnúť, či je alebo nie je pravdivé. Tvar cyklu naznačuje, že najskôr sa kontroluje splnenie podmienky. Ak je splnená, vykoná sa telo cyklu, a potom sa znovu kontroluje splnenie podmienky. V momente, keď prvýkrát podmienka cyklu neplatí, telo cyklu sa vynechá a pokračuje sa v plnení príkazov nasledujúcich za cyklom.


3. Cyklus s podmienkou na konci: Je prakticky opačný ako cyklus s podmienkou na začiatku - najskôr sa vykoná telo cyklu. Potom sa zisťuje splnenie podmienky cyklu. Ak je splnená, vykonávanie cyklu sa ukončí, v opačnom prípade sa riadenie procesu znovu vráti na vykonávanie tela cyklu. (Tento cyklus môžeme označiť ako "neopatrný": najskôr sa niečo vykoná, potom sa rozhoduje, či to bolo dobre.)


To sú dostačujúce prostriedky pre zápis ľubovoľného algoritmu _ postupu. Ešte je potrebné okrem tejto riadiacej zložky algoritmického jazyka opísať operačnú zložku, t. j. aké elementárne činnosti (príkazy) vie procesor vykonávať.


Naším cieľom je pripravovať programy pre počítač. Preto budeme za základné činnosti algoritmického jazyka považovať tie, ktoré sú elementárne pre počítač. K nim patria:



Príkaz vstupu: Umožňuje zadať procesoru konkrétne hodnotu údajov, ktoré má spracovávať. Tieto hodnoty sa uložia do premen-ných (môžeme si ich predstaviť ako priehradky (skrine)) s pevne stanovenou veľkosťou. V každom momente vykonávania algoritmu by mala byť v priehradke - premennej nejaká konkrétna hodnota.
Príkaz výstupu: Umožňuje získať od procesora výsledky algoritmu alebo iné oznamy (napr. oznam o tom, že sme zadali nesprávne vstupné údaje). Preto sa pred "šípku von" zapisuje alebo názov premennej, ktorej hodnotu chceme získať, alebo text uzavretý medzi úvodzovky (napr. "nemá riešenie"). Súhrnne tieto rôzne druhy výstupných informácií nazývame položky.


Pôvodne dokázali počítače spracovávať iba čísla (preto sa nazývajú počítače). Neskôr sa ich využitie rozšírilo aj na spracovanie textových informácií (tzv. reťazce znakov), dnes je bežné, že počítač dokáže spracovávať aj grafickú informáciu (aspoň na výstupe).


Priraďovací príkaz: Zmena hodnôt premenných je počas vykonávania algoritmu možná dvomi spôsobmi: príkazom vstupu alebo priradením novej hodnoty. Priraďovací príkaz nariaďuje procesoru, aby vykonal na jeho pravej strane naznačené operácie alebo funkcie a výsledok uložil do premennej, meno ktorej je na ľavej strane.

V štruktúrogramoch ho zapisujeme v tvare , kde na ľavej strane priradenia je názov premennej, ktorej obsah sa má zmeniť, na pravej strane výraz, ktorý môže obsahovať konštanty, operácie alebo funkcie na spracovanie príslušného typu údajov (pozri kapitolu o typoch údajov).

Tieto príkazy sú dostačujúce pre spracovanie numerických a textových informácií, no ešte nám chýba dohovor o tvare podmienky (vo vetvení alebo v cykle).


Podmienka je v programovacích jazykoch chápaná ako logický výraz, t. j. zistenie vzťahov (relácie) medzi výrazmi, prípadne zviazané logickými operáciami (and = "a súčasne", or = "alebo" a not = "neplatí, že").


To už je naozaj všetko, čo potrebujeme k tomu, aby sme si ukázali spôsob zápisu algoritmu na konkrétnych úlohách.

Na začiatok trochu histórie a teórie
Programovací jazyk pascal (nazvaný podľa Blaise Pascala8) vytvoril Niklaus Wirth9 s cieľom zabezpečiť vyučovanie systematického programovania. Rozšíril tak "babylon" programovacích jazykov, ktorých v tej dobe vznikalo neuveriteľné množstvo. Ideou bolo vytvoriť programovací jazyk, ktorý by bol kompromisom medzi abstraktnými štruktúrami algoritmov a konkrétnou reprezentáciou spraco-vávaných údajov v počítači a nutnosťou poznať technické parametre. "Je jedno-duchšie vytvoriť program, v ktorom sa manipuluje s pojmami, ako sú čísla, množi-ny, postupnosti alebo cykly, ako taký, v ktorom sa používajú pojmy bity, slová alebo skoky," znelo jeho motto. Ako sa mu to podarilo, musíte posúdiť sami. Významnou črtou pascalu je jeho štruktúrovanosť, ktorá neumožňuje pri správnom programovaní vytvárať krkolomné monštrá príkazov, v ktorých sa nevyzná od istého momentu ani sám autor programu.

Existuje mnoho programovacích jazykov, niektoré z nich sa pokúšajú o univer-zálnosť, iné sú orientované na špeciálne oblasti. Tabuľka naznačuje krátky prierez vývojom programovacích jazykov, pričom obsahuje len tie známejšie:

obdobie programovanie
40-te roky 20. storočia programovanie v strojovom jazyku počítača
50-te roky 20. storočia programovanie v jazyku symbolických adries
1956 programovací jazyk fortran (FORmula TRANslation)
1958 programovací jazyk algol (ALGOrithmic Language)
1961 programovací jazyk basic (Beginners All-Purpose Symbolic Instruction Code)
okolo 1970 programovací jazyk pascal (systematické, štruktúrované programovanie)
okolo 1980 programovací jazyk C (prechod k objektovo orientovanému programovaniu)
90-te roky 20. storočia vývoj komplexnejších verzií jazykov s cieľom využitia nových možností predovšetkým osobných počítačov (grafika, zvuk, multimédiá), programovanie riadené udalosťami (Visual Basic)
súčasnosť programovacie jazyky pre tvorbu aplikácií v globálnych sieťach (Java)
budúcnosť nechajme sa prekvapiť


Každý programovací jazyk, ktorý sa presadil, má viacero rôznych verzií - jednak orientovaných na konkrétne počítače (napr. GW basic, Quick basic, Turbo basic...), jednak vývojových (napr. Turbo pascal 5.0, 6.0, 7.0 alebo C, C++).

V každom programovacom jazyku však existuje istá množina prostriedkov, ktoré sú rovnaké vo všetkých verziách. Hovorí sa jej štandard programovacieho jazyka.


--------------------------------------------------------------------------------
8 Blaise Pascal (1623-1662) - významný francúzsky matematik, fyzik a filozof. Okrem iného sa zaoberal binomickými koeficientami (Pascalov trojuholník), teóriou pravdepodobnosti, kuželosečkami. R. 1642 zostavil počítací stroj na aritmetické operácie, skúmal hydrostatický tlak, formuloval Pascalov zákon.
9 Niklaus Wirth (nar. 1934) - profesor informatiky na Vysokej škole technickej a Univerzite v Zürichu (Švajčiarsko), popredný informatik, autor publikácií, ktoré sa stali klasickou výbavou programátorov napr.: N. Wirth: Systematické programovanie. Alfa, Bratislava 1979, N. Wirth: Algoritmy a štruktúry údajov. Alfa, Bratislava 1988, 1989.
Na začiatok trochu histórie a teórie
Programovací jazyk pascal (nazvaný podľa Blaise Pascala8) vytvoril Niklaus Wirth9 s cieľom zabezpečiť vyučovanie systematického programovania. Rozšíril tak "babylon" programovacích jazykov, ktorých v tej dobe vznikalo neuveriteľné množstvo. Ideou bolo vytvoriť programovací jazyk, ktorý by bol kompromisom medzi abstraktnými štruktúrami algoritmov a konkrétnou reprezentáciou spraco-vávaných údajov v počítači a nutnosťou poznať technické parametre. "Je jedno-duchšie vytvoriť program, v ktorom sa manipuluje s pojmami, ako sú čísla, množi-ny, postupnosti alebo cykly, ako taký, v ktorom sa používajú pojmy bity, slová alebo skoky," znelo jeho motto. Ako sa mu to podarilo, musíte posúdiť sami. Významnou črtou pascalu je jeho štruktúrovanosť, ktorá neumožňuje pri správnom programovaní vytvárať krkolomné monštrá príkazov, v ktorých sa nevyzná od istého momentu ani sám autor programu.

Existuje mnoho programovacích jazykov, niektoré z nich sa pokúšajú o univer-zálnosť, iné sú orientované na špeciálne oblasti. Tabuľka naznačuje krátky prierez vývojom programovacích jazykov, pričom obsahuje len tie známejšie:

obdobie programovanie
40-te roky 20. storočia programovanie v strojovom jazyku počítača
50-te roky 20. storočia programovanie v jazyku symbolických adries
1956 programovací jazyk fortran (FORmula TRANslation)
1958 programovací jazyk algol (ALGOrithmic Language)
1961 programovací jazyk basic (Beginners All-Purpose Symbolic Instruction Code)
okolo 1970 programovací jazyk pascal (systematické, štruktúrované programovanie)
okolo 1980 programovací jazyk C (prechod k objektovo orientovanému programovaniu)
90-te roky 20. storočia vývoj komplexnejších verzií jazykov s cieľom využitia nových možností predovšetkým osobných počítačov (grafika, zvuk, multimédiá), programovanie riadené udalosťami (Visual Basic)
súčasnosť programovacie jazyky pre tvorbu aplikácií v globálnych sieťach (Java)
budúcnosť nechajme sa prekvapiť


Každý programovací jazyk, ktorý sa presadil, má viacero rôznych verzií - jednak orientovaných na konkrétne počítače (napr. GW basic, Quick basic, Turbo basic...), jednak vývojových (napr. Turbo pascal 5.0, 6.0, 7.0 alebo C, C++).

V každom programovacom jazyku však existuje istá množina prostriedkov, ktoré sú rovnaké vo všetkých verziách. Hovorí sa jej štandard programovacieho jazyka.


--------------------------------------------------------------------------------
8 Blaise Pascal (1623-1662) - významný francúzsky matematik, fyzik a filozof. Okrem iného sa zaoberal binomickými koeficientami (Pascalov trojuholník), teóriou pravdepodobnosti, kuželosečkami. R. 1642 zostavil počítací stroj na aritmetické operácie, skúmal hydrostatický tlak, formuloval Pascalov zákon.
9 Niklaus Wirth (nar. 1934) - profesor informatiky na Vysokej škole technickej a Univerzite v Zürichu (Švajčiarsko), popredný informatik, autor publikácií, ktoré sa stali klasickou výbavou programátorov napr.: N. Wirth: Systematické programovanie. Alfa, Bratislava 1979, N. Wirth: Algoritmy a štruktúry údajov. Alfa, Bratislava 1988, 1989.

Na začiatok trochu histórie a teórie
Programovací jazyk pascal (nazvaný podľa Blaise Pascala8) vytvoril Niklaus Wirth9 s cieľom zabezpečiť vyučovanie systematického programovania. Rozšíril tak "babylon" programovacích jazykov, ktorých v tej dobe vznikalo neuveriteľné množstvo. Ideou bolo vytvoriť programovací jazyk, ktorý by bol kompromisom medzi abstraktnými štruktúrami algoritmov a konkrétnou reprezentáciou spraco-vávaných údajov v počítači a nutnosťou poznať technické parametre. "Je jedno-duchšie vytvoriť program, v ktorom sa manipuluje s pojmami, ako sú čísla, množi-ny, postupnosti alebo cykly, ako taký, v ktorom sa používajú pojmy bity, slová alebo skoky," znelo jeho motto. Ako sa mu to podarilo, musíte posúdiť sami. Významnou črtou pascalu je jeho štruktúrovanosť, ktorá neumožňuje pri správnom programovaní vytvárať krkolomné monštrá príkazov, v ktorých sa nevyzná od istého momentu ani sám autor programu.

Existuje mnoho programovacích jazykov, niektoré z nich sa pokúšajú o univer-zálnosť, iné sú orientované na špeciálne oblasti. Tabuľka naznačuje krátky prierez vývojom programovacích jazykov, pričom obsahuje len tie známejšie:

obdobie programovanie
40-te roky 20. storočia programovanie v strojovom jazyku počítača
50-te roky 20. storočia programovanie v jazyku symbolických adries
1956 programovací jazyk fortran (FORmula TRANslation)
1958 programovací jazyk algol (ALGOrithmic Language)
1961 programovací jazyk basic (Beginners All-Purpose Symbolic Instruction Code)
okolo 1970 programovací jazyk pascal (systematické, štruktúrované programovanie)
okolo 1980 programovací jazyk C (prechod k objektovo orientovanému programovaniu)
90-te roky 20. storočia vývoj komplexnejších verzií jazykov s cieľom využitia nových možností predovšetkým osobných počítačov (grafika, zvuk, multimédiá), programovanie riadené udalosťami (Visual Basic)
súčasnosť programovacie jazyky pre tvorbu aplikácií v globálnych sieťach (Java)
budúcnosť nechajme sa prekvapiť


Každý programovací jazyk, ktorý sa presadil, má viacero rôznych verzií - jednak orientovaných na konkrétne počítače (napr. GW basic, Quick basic, Turbo basic...), jednak vývojových (napr. Turbo pascal 5.0, 6.0, 7.0 alebo C, C++).

V každom programovacom jazyku však existuje istá množina prostriedkov, ktoré sú rovnaké vo všetkých verziách. Hovorí sa jej štandard programovacieho jazyka.


--------------------------------------------------------------------------------
8 Blaise Pascal (1623-1662) - významný francúzsky matematik, fyzik a filozof. Okrem iného sa zaoberal binomickými koeficientami (Pascalov trojuholník), teóriou pravdepodobnosti, kuželosečkami. R. 1642 zostavil počítací stroj na aritmetické operácie, skúmal hydrostatický tlak, formuloval Pascalov zákon.
9 Niklaus Wirth (nar. 1934) - profesor informatiky na Vysokej škole technickej a Univerzite v Zürichu (Švajčiarsko), popredný informatik, autor publikácií, ktoré sa stali klasickou výbavou programátorov napr.: N. Wirth: Systematické programovanie. Alfa, Bratislava 1979, N. Wirth: Algoritmy a štruktúry údajov. Alfa, Bratislava 1988, 1989.
Kedy už budeme programovať?
Na to, aby sme dokázali napísať a spustiť program v pascale, si potrebujeme ešte niečo povedať o tvare programu v pascale a o prostredí, v ktorom ho budeme písať. Zameriame sa na Turbo pascal (TP), bežne realizovateľný na osobných počítačoch IBM PC. Takže do toho.




4. 2. 1. TVAR PROGRAMU V PASCALE

Zápis programu v pascale má svoju konvenciu

(tzv. dobrovoľne povinnú dohodu). Má tvar:



Program meno;

deklarácie a definície objektov;

Begin {začiatok hlavného programu}

vlastný program - algoritmus prepísaný do programovacieho jazyka

End. {koniec hlavného programu}




DOHODA: Kurzívou, teda "šikmým" písmom budeme označovať neterminálne symboly, ktoré budú ešte ďalej špecifikované. Do zátvoriek { } budeme umiestňo-vať komentáre pre lepšie pochopenie programu jeho čitateľom, nie počítačom, ktorý ich ignoruje. Neskôr budeme "príkrasy" vynechávať.

Medzi jednotlivými časťami, ako aj medzi príkazmi programu sú oddeľovačmi bodkočiarky!

Meno programu môže byť ľubovoľná postupnosť znakov (písmen, číslic a znaku podčiarknika "-"); najvhodnejšie je, ak vystihuje problém, ktorý program rieši10. Pritom nie sú rozlišované malé a veľké písmená a meno programu nesmie byť zhodné s nejakým menom objektu v ňom použitým alebo všeobecne definovaným.


--------------------------------------------------------------------------------
10 Čo dokáže najviac potešiť "notorického čitateľa programov"? (Tým môže byť učiteľ, kolega, niekedy aj sám autor po istom čase.) Je to názov, z ktorého nie je zrejmé, čo je úlohou programu (prípadne objektu). Veľmi účinné sú v tomto prípade názvy typu JANO1, JANO2... , ale aj SKUSKA, prípadne P1, P2, POKUS...
Príkazy vstupu a výstupu v pascale
Príkaz výstupu umožňuje zobrazenie spracúvaných údajov - medzivýsledkov, výsledkov, ako aj zobrazenie komentárov pre lepšiu prehľadnosť a zrozumiteľnosť komunikácie s počítačom. Zamerajme sa zatiaľ iba na alfanumerický výstup prostredníctvom obrazovky monitoru - štandardná súčasť pascalu. Môže mať jeden z nasledujúcich tvarov:




Write (zoznam položiek oddelených čiarkami)

WriteLn (zoznam položiek oddelených čiarkami)



Pritom položka môže byť konštanta, premenná alebo výraz príslušného typu. Výsledkom príkazu Write ("píš") je vypísanie konkrétnych hodnôt položiek tesne za sebou a ponechanie kurzora v tom istom riadku. Príkaz WriteLn ("píš a odriad-kuj") má ten istý efekt s rozdielom, že nakoniec sa odriadkuje, t. j. kurzor sa pre-miestni na ďalší riadok a čaká na ďalší príkaz výstupu.



Obrazovka monitoru má v TP v tzv. alfanumerickom móde 25 riadkov po 80 znakov. Program automaticky prenesie ďalšie zobrazované znaky na nový riadok, ak ich počet presiahne 80; ak má byť na obrazovke zobrazených viac ako 24 riadkov, všetky zobrazené riadky sú "rolované" smerom nahor, pričom obsah najhornejších je zabudnutý.




Uvedené poznatky nám stačia na napísanie jednoduchého programu, v ktorom sa predstaví počítač.




Najskôr uveďme program:




Program SLUSNE_POZDRAV_01;

{žiadne objekty nepotrebujeme}

Begin

WriteLn (`Dobry den, som Tvoj oddany pocitac! `);

WriteLn; {prazdny riadok}

WriteLn (` Budem robit iba to, co ma naucis! `)

End.




Výsledok programu je zrejmý: Zobrazí na obrazovke text, ktorý je uvedený v apostrofoch ` ` - tak sa označuje konštantný text, ktorý môže obsahovať ľubovoľné znaky z klávesnice. Pozor! Aj medzera je znak často veľmi dôležitý pre lepšiu prehľadnosť výstupu.


Príkaz vstupu zabezpečuje voľbu vstupných hodnôt premenných užívateľom programu. V pascale môže mať tvar:




Read (zoznam premenných oddelených čiarkami)

resp. ReadLn (zoznam premenných oddelených čiarkami)11




Rozdiel medzi nimi je predovšetkým v tom, že kurzor zobrazujúci miesto komunikácie pri príkaze Read zostáva v tom istom riadku (môže tam byť aj viac údajov), pri ReadLn odriadkuje. Významne sa odlišuje ich funkcia pri práci so súbormi (pozri J. Skalka: Turbo pascal II.).


--------------------------------------------------------------------------------
11 V TP odporúčam vo väčšine prípadov používať príkaz ReadLn, použitie príkazu Read často spôsobuje problémy tým, že považuje za vstupný údaj aj "odklepnutie" klávesu ENTER.
Prepis štruktúrogramov do pascalu
Veľkou prednosťou štruktúrogramov je možnosť priameho prepisu do programovacieho jazyka pascal. Stačí si uvedomiť niekoľko základných konvencií a tieto takmer mechanicky používať.

Samozrejme, že v štruktúrogramoch chýba meno a popis objektov, ktoré algoritmus spracúva, ale inak sa môžeme riadiť nasledujúcou tabuľkou prepisu:

Sekvencia príkazov

Je vhodné, ale nie je to podmienkou, aby jednotlivé príkazy sekvencie boli písané v samostatných riadkoch, a je vhod-né zapisovať ich na rovnakej, od začiatku riadkov vhodne vnorenej pozícii. Oddeľovačom príkazov je bodkočiarka.

begin
príkaz 1
príkaz 2
...
príkaz n
end




Alternatíva

Ani pri zápise alternatívy nie je pevne stanovené, ako ju prehľadne zapisovať. Je jasné, že namiesto príkazov 1 a 2 môžu byť pokojne zapísané iné algoritmické konštrukcie - sekvencia, ďalšia alternatíva, cykly atď. V týchto prípadoch je vhodné, ak si časti za then a else uzatvoríte do zátvoriek begin-end. Pred else však nesmie byť bodkočiarka!


if podmienha
then príkaz 1
else príkaz 2


Cyklus so známym počtom opakovaní

Riadiaca premenná cyklu (v tomto prípade i) sa po vykonaní cyklu zvýši o jedna (resp. na nasledujúcu hodnotu ordinálneho typu; pozri časť o ty-poch údajov). Náhradou kľúčového slova to na downto sa hodnota riadiacej premennej znižuje. Telo cyklu sa nemusí vykonať ani raz.

for i:=1 to N do
begin
telo cyklu
end

Cyklus s neznámym počtom opakovaní s podmienkou na začiatku

Cyklus sa opakuje, pokiaľ je splnená pod-mienka. Nesmieme za-budnúť, že v tele cyklu sa musí niečo meniť tak, aby od určitého okamihu podmienka cyklu prestala platiť. Cyklus nemusí prebehnúť ani jedenkrát.

while podmienka do begin
telo cyklu
end



Cyklus s neznámym počtom opakovaní s podmienkou na konci

V tomto prípade nie je potrebné využívať begin-end, cyklus má vlastné "zátvorky" repeat-until. Cyklus sa uskutoční vždy aspoň raz; ukončí sa, ak bude prvýkrát splnená podmienka cyklu.

repeat
telo cyklu
until podmienka

Príkaz priradenia

Nemali by sme zabudnúť na to, že premenná a výraz musia byť rovnakého typu.

premenná:= výraz

Príkaz vstupu

Ak chceme zabezpečiť vstup viacerých premen-ných pomocou jedného príkazu, mená premenných v zátvorke oddeľujeme čiarkami. (Podrobnejšie ďalej.)


ReadLn(premenná)

Príkaz výstupu

Vystupovať nemusí iba hodnota premennej, ale aj hodnota výrazu, číselná alebo reťazcová konštanta a ich kombinácie. (Podrobnejšie ďalej.)

WriteLn(premenná)
Deklarácie premenných
Na rozdiel od algoritmu musí byť pred začiatkom činnosti programu v pascale určené, s akými objektmi má program pracovať. Slúži to na vytvorenie príslušných pamäťových miest. Zatiaľ budeme pracovať iba s najjednoduchšími typmi údajov (s celými číslami a reťazcami znakov). Typ údajov je predstavovaný množinou prípustných hodnôt, operáciami a funkciami, pomocou ktorých je možné hodnoty spracúvať:

Typ integer - celé čísla - operácie +, -, * (krát), div (celočíselný podiel), mod (celočíselný zvyšok).



Typ string - reťazec znakov - operácia + (zlučovanie reťazcov za seba).

Deklaráciu premenných s určením ich typu uvádzame za hlavičkou programu s tým, že na jej začiatku uvedieme kľúčové slovo var, napr.:

Program DEKLARUJ_1;

var a, b, c: integer;

meno: string;




Begin

Hlavný program;

End.






Teraz už môžeme bez problémov písať jednoduché programy v pascale. Uveďme si niekoľko príkladov.




Zostavte program, ktorý slušne pozdraví a vypýta si meno užívateľa.





Program SLUSNE_POZDRAV_02;

var meno :string;




Begin

WriteLn(`Som super-pocitac a som pripraveny sluzit Ti do strhania obvodov! `);

{1} Write (`Ty si kto? `); ReadLn (meno);

{2} WriteLn; WriteLn;

{3} WriteLn (`Velmi ma tesi, `, meno, `, ideme na to! `);

{4} ReadLn;

End.
V riadku označenom poznámkou {1} sú uvedené dva príkazy: Write vypíše text "Ty si kto?" a kurzor zostane v tom istom riadku, ReadLn čaká na zadanie mena a ukončenie stlačením ENTER. Treba si uvedomiť, že pre užívateľa programu je program vlastne "čiernou skrinkou" - niečím, do čoho nevidí a komunikuje s "vnútrom" iba pomocou toho, čo vidí na obrazovke. {2} vynechá dva riadky, {3} vypíše text "Velmi ma tesi,", za to doplní zadané meno a na koniec text " , ideme na to!". {4} - "prázdny" ReadLn zastaví činnosť programu do stlačenia ENTER. Je vhodné zadávať ho vždy na koniec programu.




Zostavte program, ktorý by N-krát pozdravil "Ahoj!".




Bez zvláštneho komentára si uveďme program s riešením zobrazenia N pozdravov pod sebou:




Program Pozdrav_N_krat;

var i, j, N : integer;




Begin

Write (`Zadaj pocet: `); ReadLn (N);

for i:= 1 to N do

begin

WriteLn (`Ahoj! `);

end;

ReadLn;

End.
Prostredie turbo pascalu
Postup pri vytváraní nového programu | Otváranie, editovanie a spúšťanie hotového programu |
Turbo pascal (TP) je prostriedok, ktorý nám umožňuje efektívne písať pascalovské programy na osobnom počítači. Spúšťa sa z príslušného adresára (podľa nastavenia ciest - PATH) pomocou súboru turbo.exe. Po odštartovaní TP sa nám na obrazovke objaví základné vývojové integrované prostredie (Integrated Development Environment).

Obrazovka TP v stave editovania (písania, opráv a ladenia) programu má tri základné časti:

1. Editovací priestor - najväčšie (modré) okno, v ktorom sa zobrazuje zvolený program v tvare dokumentu - stránky. Po tomto okne sa pohybujeme pomocou šípok alebo myši, môžeme využívať všetky možnosti práce s editovaním textu programu (podobné práci s textovým editorom T602).

2. Hlavné menu - obsahuje zoznam základných činností, ktoré je možné vykonávať v TP. Každá z volieb je tvorená roletovým menu, ktoré otvára ďalšie (pod-)možnosti.



File - prostriedky pre prácu so súbormi a adresármi včítane ukončenia činnosti,

Edit - úpravy práve editovaného dokumentu programu,


Search - nájdenie zvolených častí programu,

Run - spustenie programu v režime interpretera,

Compile - preklad programu do tvaru vykonateľného súboru (prípona exe),

Debug - ladenie programu, odstraňovanie chýb počas jeho behu,

Tools - ďalšie nástroje pre ladenie programu,

Options - nastavenie podmienok pre IDE, využívané technické a programové prostriedky,

Window - spôsob usporiadania a veľkosti okien pracovných plôch,

Help - široko rozvetvená nápoveda (bohužiaľ v angličtine), umožňujúca efek-tívnu orientáciu v prostriedkoch TP.

Okrem možnosti výberu pomocou klávesu F10 a šípok alebo myši je efektívne využívať stlačenie Alt v kombinácii so zvýrazneným písmenom v menu.




3. Okamžitá nápoveda - "horúce klávesy" (z angl. hot keys) - v každom momente činnosti IDE dáva možnosť rýchlej voľby výberu možností pomocou stlačení príslušných klávesov.

Pre toho, kto sa iba učí programovať, je väčšina volieb nepotrebná, zvlášť, ak máme už niekým nastavené prostredie (napr. v učebni). Pre osobné používanie je potrebné preštudovať odporúčanú literatúru.
Príklady algoritmov
Vypočítajte obsah a obvod kruhu.


Nám známe vzorce na výpočet obsahu a obvodu kruhu musíme prepísať do algoritmického jazyka. Ak si uvedomíme, že na začiatku potrebuje procesor poznať konkrétnu hodnotu polomeru r, po vykonaní musí oznámiť hodnoty obsahu S a obvodu o, môžeme okamžite písať algoritmus v tvare štruktúrogramu.

V zápise algoritmu sú použité konvencie (dohovorené označenia) pre násobenie (*) a zápis desatinného čísla (desatinná bodka), ktoré sú bežné v programovacích jazykoch. Namiesto malých písmen r, o bežne používaných v matematike sme v algoritme použili veľké písmená R, O. Je to vecou dohovoru, pretože v algoritmoch (programoch) sa zvyčajne v názvoch premenných nerozlišujú malé a veľké písmená. Odporúčame však použiť veľké písmená pre tie premenné, ktoré sú zadávané zo vstupu, resp. pre tie, ktoré obsahujú výsledky spracovania algoritmu.


Sekvenciu _ postupnosť príkazov poznáme dôverne aj z bežného života. Stačí si spomenúť na "prikázania", ktoré dostávame vo forme písomných odkazov rodičov, čo treba urobiť po príchode zo školy.

Po príchode zo školy sme našli prázdny dom a takýto odkaz:

1. Vynes smeti
2. Urob si úlohy
3. Zjedz jogurt z chladničky
4. Uč sa!!!!
5. Buď dobrý (-á) (-é) !
Prídeme neskôr M+T


Jasné, však? A je to iba iným spôsobom zapísaná sekvencia. V štruktúrogramoch netreba dopĺňať čísla jednotlivých činností, ich poradie je dané tým, ako sú zapisované pod sebou. A do algoritmu sa nepridávajú nijaké iné činnosti ako príkazy.


Napíšte podobný návod na činnosť po príchode zo školy v tvare štruktúrogramu. Vychádzajte z vlastných skúseností.


Rozhodovanie v závislosti od splnenia podmienky

Často sa v živote objavujú situácie, v ktorých sa musíme rozhodovať v závislosti od splnenia istých podmienok. Napr. dostanete ráno od krku rodiny jednoznačné inštrukcie: "Ak bude teplo, môžeš si vziať tričko, inak si musíš zobrať teplú košeľu!" Alebo: "Ak bude po kolená snehu, tak si obuj zimné topánky, inak si zober tenisky!" Môže to byť rôznym spôsobom formulované _ od prosby, vydierania až po tvrdý a jednoznačný príkaz. Smerom k počítačom je úloha zložitejšia. Všetko im musíme prikázať jednoznačne a presne. Relatívne podmienky, ako napr. "Ak bude teplo" nie sú vhodné, najčastejšie sa používajú porovnávania hodnôt a kombinácia logických operácií. Nezaškodí však, ak si najskôr ukážeme rozvetvenie postupu na príklade zo života. Zostavme algoritmus činnosti po zobudení.

Aj keď ráno väčšina z nás nemyslí na iné ako na to, kedy si znovu ľahne, postup by mal byť rôzny podľa toho, o aký deň v týždni ide. Cez pracovný týždeň musíme prekonať posteľnú príťažlivosť, vstať, zamaskovať sa, doplniť kalórie a obsah tašky a vyraziť do školy. Cez víkend sa môžeme spokojne obrátiť na dru-hú stranu a pokračovať v preruše-nej piesni. Na obrázku je jeden z možných postupov zapísaný v tva-re algoritmu.


Je zrejmé, že algoritmus nie je úplne v poriadku. Je totiž veľmi obtiažne opisovať reálne situácie jednoznačne. Pre zjednodušenie sme zapísali ďalšiu postupnosť činností po vynútenom vylezení z postele iba orientačne. Všimnite si, že v alternatíve s otázkou Je čas vstávať? je vložená do jednej jej časti ďalšia alternatíva s otázkou Je škola? Takýmto spôsobom sa riešenie realizuje jednou z troch možných postupností príkazov. Aj keď dve z nich končia rovnako _ spaním.


Mohli by byť takéto pripomienky:

_ Príkaz SPI (rozkazovací spôsob slovesa spať) je nedokonavý, môžeme kľudne spať nekonečne dlho.

_ Škola je večná inštitúcia. Preto otázka Je škola? nie je úplne presná. Ale dá sa jej hovorovo rozumieť.

_ Čo keď nie sú na dohľad jedného oka žiadne hodiny? Čo keď jediné dostupné hodiny stoja?...

_ Ktorá z otázok by mala byť prvá? Ako je to u vás?

Skrátka, všeobecný algoritmus tak zložitej činnosti, akou je vstávanie, je problematické zostaviť.

Upravte algoritmus tak, aby zohľadňoval vyššie uvedené pripomienky. Ako vyriešiť problém nedokonavého SPI?


Zistite maximálnu hodnotu z dvoch zadaných čísel.


Majme zadané dve hodnoty v premenných A, B. Potom algoritmus môžeme zapísať v tvare:

{VSTUP: A, B - čísla}

?

{VÝSTUP: MAX = maximum z hodnôt A, B}


Postup je jasný: Ak platí, že A=B) sa rovná hodnote B. To vedie k riešeniu v tvare algoritmu:






Komentár zrejme nie je potrebný. Ak sa hodnoty A a B rovnajú, MAX je jednou z nich.


Zistite maximum z troch zadaných hodnôt.


Riešeniu každého zložitejšieho algoritmu musí predchádzať rozbor úlohy, ktorý zabezpečí, že nezabudneme na žiadnu činnosť a správne rozvrhneme postup riešenia. Sme vopred nútení dobre si premyslieť štruktúru algoritmu (pre niektorých to asi nie je výhoda?!), čím sa hlavne pri zložitejších algoritmoch vyvarujeme zbytočnému prepisovaniu a učíme sa systematicky pristupovať k riešeniu problémov.

Predpokladajme, že máme tri hodnoty uložené v premenných A, B, C. Môžeme uvažovať všetky možné prípady: A³B³C _ potom MAX nadobudne hodnotu A; B³A³C _ potom MAX nadobudne hodnotu B; alebo C³A³B,...

Takýto prístup by vyžadoval prehodnotiť všetky možné situácie, ktoré medzi premennými môžu nastať. Treba si však uvedomiť, že my nerobíme usporiadanie, ale iba zisťujeme maximálnu hodnotu. A navyše! Môžeme predsa použiť už to, čo sme predtým vymysleli. Bolo by vhodné, keby sme si úlohu rozdelili na dve čiastočné podúlohy:

{VSTUP: A, B, C - čísla}

Nájdenie maxima z čísiel A, B

{VÝSTUP: MAX = maximum z hodnôt A, B}

Nájdenie maxima z čísiel C, MAX

{VÝSTUP: MAX = maximum z hodnôt A, B, C}

Pritom postup pri nájdení maximálnej hodnoty spomedzi hodnôt C a MAX je taký istý ako pri riešení predchádzajúceho príkladu.

Tieto úvahy vedú k algoritmu:


Druhá alternatíva sa nazýva neú-plná _ v jednej z jej vetiev sa ne-musí vykonať nič.

V týchto algoritmoch sa často objavujú programátorské kon-vencie: Znaky „³" a „£" nie sú na klá-vesnici počítača, preto sú nahrádzané zápismi „>=", resp. „
Úvod
Kto vám môže narobiť problémy? Len ten, kto vie, na čo ste citliví a na čo vás "chytí". A mám za to, že tak presne a priamo pod kožu ich vie sformulovať iba informatik. Prečo také odvážne tvrdenie? Ak skutočne, a nie len listovaním, dočítate túto knihu do konca a sem-tam-stále si niečo skúsite vyriešiť, verím, že ďalšie dôkazy uvádzať nie je potrebné.

Ale naspäť k meritu (jadierku) veci. Chrobáka a výzvu menom PROBLÉM, resp. Programovanie v pascale mi nasadil do hlavy pokušiteľ-vydavateľ. Pozná moju minulosť i súčasnosť, a tým aj slabosti. Dal mi lukratívnu ponuku (písomne zvečniť to, čo mažem z tabule na prednáškach už nejaký ten rok. Som mu vďačný za "výzvu na súboj". S jeho "Dvojkou" (Turbo pascal II.) sa však bojuje ťažko. Sú tam použité tie najkrajšie, najťažšie a najúčinnejšie programátorské zbrane. Mne zostali iba nižšie "zbrane krátkeho doletu". Pre niekoho sú to možno primitívne záležitosti a partie. Ale bez základov nie je možné stavať dom. V jednom prípade sa to dá _ ak si postavíte (najlepšie na kľúč) vzdušný zámok. Potom ale pozor, aby nezafúkal silný vietor alebo nepršalo! Pre programovanie _ riešenie problémov na počítači to platí dvojnásobne. Hodiny "relaxu" za počítačom a hľadania chýb zúčastnených strán (človek kontra počítač, či naopak) môžu byť pre okolie signálom hodnotenia osoby okupujúcej počítač:

1. Ticho! Veď ON rieši tak zložitý problém!!

2. Preboha! TENTO by mal radšej vypnúť počítač a ísť od toho preč!


Prajem vám, aby o vás ostatní hovorili iba parafrázy prvého variantu. A keď (zo začiatku) nie, nevadí! Skúste natiahnuť plachty fantázie, chytiť ten správny vietor, nerobiť si z problémov ešte väčšie problémy a mať dosť trpezlivosti, intuície, potrebných znalostí a "strojového" času.


Dostal som striktný pokyn (nie príkaz!), že programovanie by sa nemalo realizovať cez matematiku, ktorá vraj veľa ľudí nebaví. Pokúsim sa ho držať, no niekde mi to nedá, niektoré deformácie sú trvalé. Ale nebojte sa! Bude vám stačiť iba trošku logicky rozmýšľať, aj keď je to niekedy, resp. u niekoho problém, a sem-tam si oprášiť svoje nesmrteľné matematické vedomosti zo základnej školy. Myslím si, že kto sa dobrovoľne rozhodol čítať knihu s takýmto názvom, nebude mať žiadne výhrady.


Ďakujem všetkým, ktorých som využil ako "pokusných králikov" _ mojim bývalým i súčasným študentom; všetkým, ktorí boli a sú pre mňa vzormi _ mojim učiteľom i kolegom, zvlášť docentovi Hvoreckému a profesorovi Kasatkinovi; ako aj tým, ktorí mi zabezpečili pohodu a inšpiráciu pri písaní _ manželke Ľube, synom Martinovi a Ľubošovi.
Problém a riešenie problému
AKO ZAČAŤ?


Chceme sa naučiť riešiť problémy pomocou počítača1, vedieť s ním komunikovať nielen ako bežní používatelia hotových produktov, ale aj ako tvorcovia (autori) "nových" riešení. Je zrejmé, že je málo toho, čo by už nebolo povedané či napísané. Ale nie je isté, či to bolo povedané a napísané tak, ako to dokážeme my. Do programov _ zjednodušene povedané predpisov toho, čo má vykonávať počítač _ vkladá každý programátor kúsok seba, spolu s klasickým postupom riešenia dodáva k nemu aj svoj estetický a podľa neho efektívny pohľad na spracovávanú problematiku. O tom, či je to pre iného používateľa estetické a efek-tívne, by sa dalo meditovať. Ale základom programovania je práve možnosť realizovať riešenie problému podľa svojich predstáv, dať riešeniu svoj vlastný "image" (čítaj "imidž" - preložiť zrejmé pojmy je obtiažne). Je to podobné umeniu i skutočnému životu (nie škole), kde platí, že keď dvaja robia to isté, nikdy to nie je to isté.

Programovanie má oproti mnohým iným činnostiam, ku ktorým nás "dobrovoľne-povinne" vedú v škole, obrovskú výhodu. Často nás núti poriadne naplno roztočiť svoje mozgové závity, rozmýšľať o tom, čo je podstatné a čo nie, čo má byť viditeľné a čo skryté, realizovať svoju vlastnú predstavu použitím známych prostriedkov. Vždy, keď sa človek do niečoho pustí, musí mať správnu motiváciu. Tou môže byť aj skutočnosť, že s počítačmi a informačnými technológiami sa už dnes stretnete prakticky všade. Nechcete dokázať prinútiť stroj _ počítač, aby robil presne to, čo mu zadáte? Je to výzva, ktorej sa ťažko odoláva, ak chcete naozaj niečo dosiahnuť. Skúste to!

Prvé, čo potrebujeme, je zaviesť základné pojmy, vzťahy medzi nimi a metódy _ t. j. spôsoby práce s nimi, skrátka a múdro povedané - terminológiu. Mali sme tu pojmy "problém", "vyriešenie problému", "informatika", "programovanie", "počítač", určite toho však budeme musieť zvládnuť viac.


--------------------------------------------------------------------------------
1 "Osobné počítače, ktoré sa dostali aj do domácností majú oproti ostatným členom domácnosti, kde dnes často hrajú významnú úlohu aj domáce zvieratá, isté prednosti: a) nehryzú, neškriabu, neštekajú, b) nerobia kôpky a mláčky, nepotrebujú venčiť, c) s kýmkoľvek sa ochotne hrajú najrôznejšie hry, d) narozdiel od ostatných členov domácnosti sa dajú hocikedy vypnúť, e) môžeme ich chovať bez akýchkoľvek problémov a sporov so susedmi aj v špecifických podmienkach panelákov, f) v prenosnom vydaní sú vhodné aj na rande do parku, či na dlhé cesty (ak nemáte na lietadlo) za poznaním." (I. Kopeček, J. Kučera: Programátorské poklesky. Mladá fronta, Praha 1989.)
Jazyk, algoritmický jazyk, programovací jazyk
Ak máme s niekým komunikovať, potrebujeme zodpovedajúci prostriedok dorozumievania _ jazyk. Jazyk je podľa J. Mistríka (Jazyk a reč, Mladé letá, Bratislava 1984) "súhrn pravidiel, na základe ktorých vzniká reč". Pôvodne bol jazyk iba prostriedkom komunikácie medzi ľuďmi6, dnes už je aj prostriedkom komunikácie medzi človekom a strojom. Pozrime sa na jazyk tohto typu podrob-nejšie.

Potrebujeme niekoho naučiť postupy _ algoritmy. Pretože algoritmy sú postupy so špecifickými vlastnosťami, bolo by potrebné použiť aj špecifický jazyk. Jazyk určený pre zápis algoritmov nazývame algoritmický jazyk. Jazyky používané pri komunikácii medzi ľuďmi nevyhovujú z viacerých dôvodov:

a) Počet slov je neúmerne vysoký (napr. slovenčina pozná vyše 110.000 slov, angličtina takmer 800.000). Navyše sú tieto jazyky v neustálom vývoji, ročne pribú-dajú desiatky nových slov.

b) V ľudských jazykoch existuje veľa výnimiek spôsobených historickým vývojom, zdanlivo nezmyselné príslovia (napr. "Lož má krátke nohy.", "Kúpil mačku vo vreci."), prirovnania, zaužívané slovné spojenia (napr. "to je babylon", "kocky sú hodené", "medvedia služba").

c) Existencia homoným (slov, ktoré majú viacero významov, napr. "strana", "koruna", "list", "dospievať", "mať"...) a synoným (rôznych slov, ktoré majú rovna-ký význam, napr. "najmä" - "hlavne" - "predovšetkým" - "najskôr") môže spôsobo-vať nejasnosť vysvetlenia. (Obľúbené sú slovné hračky a tzv. dvoj- či en-zmysly.)

d) Niekedy nie je možné ani z kontextu odhadnúť, čo dané slovo vyjadruje. Napr. úryvok z náhodne vypočutého rozhovoru: "Jano išiel do mesta. Mesiac sa neukázal." (cit. z výbornej knižky Hvorecký, Kelemen: Algoritmizácia) Je slovo "Mesiac" príslovkovým určením času alebo podmetom druhej vety? Môžeme iba odhadovať podľa znalosti veci (Jana) alebo hlasovať. Podobné je to s obľúbenou otázkou majora Teraskyho: "Čím je vojak?" (Vyberte si z možností "Obrancom vlasti" či "Lyžicou".)

e) Prirodzený jazyk obsahuje veľa prvkov a konštrukcií, ktoré sú pri formulovaní postupov zbytočné, napr. nič nehovoriace debaty a zdvorilostné otázky ("Už ani to počasie nie je, čo bývalo." alebo "Ako sa máš?" _ aj keď mi je to úplne ukradnuté, čo sa však nehovorí, a pod.)
Tieto dôvody viedli k potrebe vytvoriť formálne jazyky _ umelo vytvorené a špeciálne určené pre zápis algoritmov. Podobne ako sa nepodarilo ľudstvu dohovoriť sa na jednotnom jazyku, ani pri algoritmických jazykoch nedošlo k dohode a vo všeobecnosti sa používa viacero z nich. Najčastejšie sú:

A. Grafické algoritmické jazyky _ napr. vývojové diagramy, rôzne typy štruktúrogramov,

B. Lineárne algoritmické jazyky _ napr. slovný zápis v národnom jazyku, programovací jazyk.


Algoritmický jazyk by mal svojou konštrukciou napomáhať splneniu vlastností algoritmu. Preto v jestvujúcich algoritmických jazykoch sú dve zvýraznené zložky _ operačná a riadiaca.


Operačná zložka

Obsahuje sadu prostriedkov, ktoré umožňujú spracovávať údaje _ elementárne činnosti, ktoré dokáže procesor vykonávať. Pretože naším cieľom je prechod k programovaniu, ako základ budú pre nás slúžiť elementárne činnosti, ktoré sa používajú pri programovaní. Základnými činnosťami sú príkazy a podmienky.

Príkazy sú vety jazyka, ktoré prikazujú procesoru vykonať isté, presne stanovené činnosti. Pre začiatok vystačíme s príkazmi vstupu, výstupu a priradenia. Tieto príkazy musia spracúvať nejaké objekty. V programovaní sú nimi premenné, konštanty a výrazy.

Premenná je objekt, ktorý obsahuje počas realizácie algoritmu konkrétnu hodnotu7 presne stanoveného typu (napr. celé číslo, reálne číslo, reťazec znakov...).

Konštanta je objekt, ktorý nadobúda počas celej realizácie algoritmu jedinú konkrétnu hodnotu príslušného typu. Je to obdoba konštánt známych z matematiky, napr. p, e, ale aj z fyziky: g, c, k, e, m.

Výraz je predpis, ktorý obsahuje konštanty, premenné a spôsob ich spracovania pomocou operácií a funkcií podobných tým, ktoré poznáme z matematiky. Jeho výsledkom je hodnota príslušného typu, ktorá vznikne po vykonaní vo výraze naznačeného spracovania.

Príkaz priradenia má tvar:

p:= v


kde p je meno premennej, v je výraz. Vykonaním príkazu nadobudne hodnota premennej p hodnotu výrazu umiestneného na pravej strane priradenia. (Často sa tento príkaz pletie s rovnosťou známou z matematiky, tá sa v programovaní využíva v podmienkach.)
Meno premennej budeme zapisovať tak, že musí začínať písmenom (anglickej abecedy "A" až "Z", resp. "a" až "z" - bez "príkras" _ dĺžňov, mäkčeňov...) a môže obsahovať ľubovoľný počet písmen a číslic. Je vhodné voliť také mená premenných, ktoré napovedia čitateľovi, aký má premenná význam. Malé a veľké písmena nerozlišujeme, ale je vhodné, ak si "dôležité" premenné budeme označovať veľkými, pomocné malými písmenami. Takže menami premenných môžu byť A, B, C, podiel, b1, pomoc, alfa... , ale nie 1A, c$, žvacheľ a pod.


Riadiaca zložka

V algoritmickom jazyku musí byť presne stanovené poradie vykonávania jednotlivých činností. Je to potrebné preto, aby realizátor (procesor) nemusel uvažovať, čo má kedy vykonať. Oproti prirodzenému jazyku sa preto do algoritmu vkladajú riadiace príkazy a činnosti, ktoré určujú presnú postupnosť vykonávania jednotlivých činností. Časom sa vyvinuli najefektívnejšie prostriedky pre organizovanie postupnosti vykonávania činností známe ako základné algoritmické konštrukcie. Preto sa im venujme podrobnejšie spolu s uvedením príkladu konkrétneho algoritmického jazyka.



--------------------------------------------------------------------------------
6 Na svete existuje 6528 známych, aj keď niekedy už nepoužívaných jazykov. Najviac ľudí hovorí čínsky _ 726 miliónov, ďalej nasledujú angličtina, španielčina, hinština, arabčina, portugalčina,... , ruština je ôsma, nemčina desiata, francúzština jedenásta. Svetovým dorozumievacím jazykom je angličtina, ktorou sa bude vedieť dohovoriť okolo roku 2000 každý štvrtý človek na svete. (údaje z r. 1997)
7 Premenná v informatike a v matematike majú odlišný význam. V matematike je premenná chápaná ako symbol, t. j. zástupca celej triedy hodnôt určitého typu, napr. celých čísiel, nemusí to byť žiadna konkrétna hodnota. V informatike (presnejšie v programovaní) je premenná pamäťové miesto príslušnej veľkosti, ktoré vždy obsahuje istú hodnotu z určeného typu údajov. Je to teda vždy momentálna hodnota, ktorá je pod menom premennej uložená.

Základné algoritmické konštrukcie
Každý postup sa dá vo všeobecnosti rozložiť na niekoľko za sebou idúcich, prípadne do seba vložených činností. Z hľadiska postupu vykonania môžeme rozložiť riešenie na tieto základné algoritmické konštrukcie:

_ Postupnosť príkazov (činností),

_ Vetvenie v závislosti od splnenia istej podmienky,

_ Cyklus ako viacnásobné opakovanie istej činnosti.


Na ukážku zápisu algoritmov v algoritmickom jazyku použijeme tzv. štruktúrogramy. Nie sú (u nás) veľmi často používané, čo je škoda, pretože ich prepis do pascalu je, narozdiel od anachronicky používaných vývojových diagramov, veľmi jednoduchý.


Sekvencia _ postupnosť príkazov: Vyplní sa v poradí, v akom sú príkazy pod sebou zapísané.

Napr. schéma zobrazuje zápis sekvencie pre postupnosť príkazov 1., 2. ... n.


Vetvenie (alternatíva): V závislosti od splnenia pod-mienky sa postup vetví na rôzne prípady. Ak je podmienka splnená (+), pokračuje sa plnením príkazu (činnosti) 1. , v opačnom prípade (-) sa pokračuje vykonaním príkazu 2.


Ak potrebujeme vetviť postup na viacero rôznych riešení v závislosti od podmienky, vkladáme viacero alternatív "do seba".


Cyklus: Pri opakovaní nejakej činnosti musíme mať vyjasnené dve veci: čo sa má opakovať a dokedy sa to má opakovať. Činnosť, ktorá sa má opakovať, nazývame telom cyklu, podmienku, ktorá určuje dokedy sa bude telo cyklu opakovať, nazývame podmienka cyklu.


Vzťah medzi telom a podmienkou cyklu môže byť rôzny _ podmienka môže predchádzať telu, cyklus sa môže vykonávať dovtedy, kým (ne-)bude splnená podmienka a pod. Najčastejšie sa používajú tieto typy cyklov:


1. Cyklus so známym počtom opakovaní: Telo cyklu sa opakuje vopred známy počet krát. Pre zisťovanie počtu už vykonaných opakovaní cyklu sa zavádza tzv. riadiaca premenná cyklu, ktorá nadobúda hodnoty od danej dolnej hranice po hornú hranicu (po "jednej").


Zápis v prvom riadku naznačuje, že riadiacou premennou cyklu je i a cyklus sa bude opakovať pre i od 1 po N, teda N-krát.

Poznámka: Veľmi často sa používa práve označenie riadiacej premennej i alebo j. Je to tiež "anachronizmus" (niečo, čo sa vžilo v minulosti a dnes sa používa zo zotr-vačnosti) _ prvý vyšší programovací jazyk fortran mal nedeklarované premenné (tie, ktoré neboli popísané na začiatku programu) automaticky celočíselné, ak názov začínal písmenami "I", "J".


2. Cyklus s podmienkou na začiatku: Najčastejšie sa volí cyklus (nazvime ho "opatrný"), kedy sa telo cyklu opakuje, pokiaľ platí podmienka cyklu.


Podmienkou cyklu je tvrdenie, o ktorom dokáže procesor (ten, kto má algoritmus vykonávať) rozhodnúť, či je alebo nie je pravdivé. Tvar cyklu naznačuje, že najskôr sa kontroluje splnenie podmienky. Ak je splnená, vykoná sa telo cyklu, a potom sa znovu kontroluje splnenie podmienky. V momente, keď prvýkrát podmienka cyklu neplatí, telo cyklu sa vynechá a pokračuje sa v plnení príkazov nasledujúcich za cyklom.


3. Cyklus s podmienkou na konci: Je prakticky opačný ako cyklus s podmienkou na začiatku - najskôr sa vykoná telo cyklu. Potom sa zisťuje splnenie podmienky cyklu. Ak je splnená, vykonávanie cyklu sa ukončí, v opačnom prípade sa riadenie procesu znovu vráti na vykonávanie tela cyklu. (Tento cyklus môžeme označiť ako "neopatrný": najskôr sa niečo vykoná, potom sa rozhoduje, či to bolo dobre.)


To sú dostačujúce prostriedky pre zápis ľubovoľného algoritmu _ postupu. Ešte je potrebné okrem tejto riadiacej zložky algoritmického jazyka opísať operačnú zložku, t. j. aké elementárne činnosti (príkazy) vie procesor vykonávať.


Naším cieľom je pripravovať programy pre počítač. Preto budeme za základné činnosti algoritmického jazyka považovať tie, ktoré sú elementárne pre počítač. K nim patria:



Príkaz vstupu: Umožňuje zadať procesoru konkrétne hodnotu údajov, ktoré má spracovávať. Tieto hodnoty sa uložia do premen-ných (môžeme si ich predstaviť ako priehradky (skrine)) s pevne stanovenou veľkosťou. V každom momente vykonávania algoritmu by mala byť v priehradke - premennej nejaká konkrétna hodnota.
Príkaz výstupu: Umožňuje získať od procesora výsledky algoritmu alebo iné oznamy (napr. oznam o tom, že sme zadali nesprávne vstupné údaje). Preto sa pred "šípku von" zapisuje alebo názov premennej, ktorej hodnotu chceme získať, alebo text uzavretý medzi úvodzovky (napr. "nemá riešenie"). Súhrnne tieto rôzne druhy výs
2006-09-21 12:31:15
lol
edit: ja som to aj kusek cital, ale ked som videl postuppom casu ze to ma 2. 4 kilometra tak som to radsej nechal tak :D:D:D
(edited)
2006-09-21 12:31:32
Message deleted

serem nato ešte len dojdem zo školy a už tu mam čitat slohy neda sa to napisat v troch vetach ? :D
2006-09-21 14:20:24
tak to skús prepísať do tých troch viet ;-)