Algoritmy
Skôr než budeme programovať musíme si povedať, čo to vlastne programovanie je. Obyčajnú odpoveď vie dať každý: Programovanie je predsa umenie písať programy pre počítač. Takáto odpoveď je pravdivá len sčasti, pretože ponecháva všetky podstatné otázky bokom. Nehovorí totiž vôbec nič o tom, prečo je treba programy písať, aké úlohy možno pomocou nich riešiť, s akými problémami sa pritom stretávame.
Musíme teda začať inak. Skúsme si povedať, čo je program. Asi najlepšou odpoveďou, ktorú sme momentálne schopní dať je táto: Program je predpis, podľa ktorého je počítač schopní prevádzať výpočty nejakého algoritmu. Pojem program, ktorý každý pozná sme nahradili ne-zrozumiteľným slovom algoritmus.
2.1 Čo je algoritmus?
Všetci máme aj keď si to možno neuvedomujeme, s konkrétnymi algoritmami bohaté skúsenosti. Denne totiž prevádzame celý rad činností, ktoré sme sa kedysi naučili. Algoritmus nie jen nič iné ako návod, ktorým sa riadime, aby sme vyriešili nejaký problém.
2.2 Overovanie správnosti algoritmu
Či sa nám to už páči alebo nie, počítače prenikajú stále viac do širších sfér života spoločnosti. Tak sa postupne stále viac vecí stáva závislých od správnej funkcii mnohých algoritmov. Preto je dnes problematika overovania správnosti algoritmov tak dôležitá, niekedy doslova životne. Spomeňme si napríklad, koľkokrát sme v novinách či v televízii stretli so správou o poruche dopravnej, kozmickej či vojenskej techniky vinou chyby v riadiacom programe.
Pre dokazovanie správnosti algoritmu neexistuje a asi ani nemôže existovať žiadna univerzálna metóda zaručujúca úspech. Teoreticky bolo rozpracovaných množstvo metód. Väčšinu z nich však nemá zmysel detailne vykladať. Preto sa zameriame na niektoré hlavné myšlienky z tejto problematiky. Prvé rozdelenie vzniklo z nasledujúcej úvahy: Algoritmus je nesprávny, pokiaľ jeho výpočet na niektorých dátach vôbec neskončí alebo skončí, ale s nesprávnym výsledkom. K dôkazu správnosti teda stačí dokázať, že nemôže nastať ani jeden z týchto prípadov. To nás vedie k zavedeniu dvoch pojmov. Budeme hovoriť, že algoritmus má vlastnosť konečnosti, keďže jeho výpočet pre všetky vstupní dáta skončí. Potom budeme hovoriť, že algoritmus je čiastočne správny, keďže sa nemôže stať, že by jeho výpočet na niektorých prípustných vstupných dátach skončil nesprávne. Inými slovami, ak výpočet skončí, potom musí skončiť správne. Ak ma algoritmus súčasne obidve tieto vlastnosti. Potom naozaj musí byť správny.
2.3 Od algoritmu k programu
Teraz si povieme nejaké základné pojmy z oblasti počítačov a programovacích jazykov, ktorým budeme pri písaní programov potrebovať rozumieť. Vráťme sa teraz k otázke, ktorú sme si položili na začiatku: Čo je to programovanie? Teraz už na §u môžeme dať lepšiu odpoveď. Budeme programovanie chápať ako riešenie úloh pomocou počítača. Práca programátora začína teda tým, že sa musí v dostatočnej miere zoznámiť s oblasťou, z ktorej je úloha, ktorú má riešiť. Ďalšou fázou je presná formulácia úlohy. Programátor pritom musí veľmi úzko spolupracovať s tým kto úlohu zadáva. Ak už je úloha dostatočne presne formulovaná, hľadá programátor vhodný algoritmus pre jej riešenie. Po jeho nájdení by sa mal pokúsiť o verifikáciu algoritmu. Tieto prípravné fázy sú pre konečný úspech veľmi podstatné a chyby, ktorých sa v nich dopustíme sa v ďalších fázach len ťažko napravujú.
Pre zápis algoritmu môže veľmi dobre poslúžiť aj prirodzený jazyk, prípadne doplnený o vhodnú matematickú symboliku. Zápis algoritmu nemá väčšinou takú formu, ktorú možno „predložiť počítaču“. Naviac sa zápisy algoritmov pre riešenie rôznych úloh značne líšia. Práca programátora preto nemôže končiť nájdením správneho algoritmu, ale je potrebné nájsť takú formu jeho zápisu, ktorá by bola „zrozumiteľná pre počítač“. Takémuto zápisu sa hovorí program. Pri písaní programu je treba ešte vyriešiť celý rad detailov, ktorými sa nie je možnosť zaoberať počas návrhu algoritmu. Niekedy sa môže stať, že si tieto detaily vynútia úpravu algoritmu. Pre zápis algoritmu sa nepoužíva prirodzený jazyk, ale špeciálne „programova-cie jazyky“ vytvorené pre tieto účely.
2.4 Programovacie jazyky
Počas vývoja programovania bol vyvinutý celý rad programovacích jazykov, takže nie je jednoduché ani pre odborníka sa v tejto oblasti vyznať. Nemá preto žiadnu cenu, aby sme si zaťažovali hlavu konkrétnymi znalosťami mnohých z nich. Aj pre laika, ktorý sa programovaním nechce zaoberať, ale chce o ňom získať seriózne vedomosti, je však dôležité vyznať sa v najrôznejších programovacích jazykoch. Programovací jazyk je totiž len nástroj, nič viac a nič menej.
BASIC vznikol vlastne obalením kalkulačkových príkazov a prípadne aj prostriedky pre (grafický) vstup a výstup. Nejde vlastne o jeden programovací jazyk, ale o celú rodinu jazykov veľmi rozdielnej úrovne. Na mnohých mikropočítačoch je basic jediným programovacím jazykom a niekedy na nich nahradzujú aj operačný systém. Hlavné oblasti použitia basicu sú jednoduché programy s prevažujúcimi numerickými výpočtami.
V Amerike sa hlavne pre vyučovanie malých detí používa jazyk LOGO. Ide opäť o celú rodinu jazykov rôznej výrazovej sily. Najrozšírenejšia a najznámejšia časť jazyka je tzv. korytnačia grafika, ktorá slúži ku kresleniu obrázkov.
FORTRAN je vlastne prvým skutočným programovacím jazykom. Napriek mnohým nedostatkom je stále živý a stále sa vyvíja. Používa sa prevažne pre numerické vedecko-technické výpočty a dnes v ňom pre túto oblasť existujú veľmi rozsiahle archívy podprogramov.
COBOL bol vytvorený pre aplikácie v mechanizácii administratívy, má preto značne rozvinuté prostriedky pre prácu s dátami na úkor riadiacich prostriedkov. V oblasti, pre ktorú bol navrhnutý sa stále používa, ale mimo nej nemá prakticky význam.
Na Fortran bezprostredne naviazal jazyk PL/1, podporovaný a rozširovaný predovšetkým firmou IBM. Veľmi dobrá väzba na ostatné programové vybavenia počítačov IBM je tiež jeho najväčšou výhodou. Napriek podpore veľkej firmy sa však jazyk príliš neujal.
Programovací jazyk ALGOL 60 bol prvým systematicky navrhnutým programovacím jazykom. Jeho prednosti a nedostatky sú odrazom toho, že jeho tvorcovia boli predovšetkým matematici. Algol 60, aj keď sa dnes už prakticky nepoužíva, na dlhú dobu podstatne ovplyvnil hlavný prúd vývoja programovacích jazykov.
Na Algol 60 bezprostredne naviazal programovací jazyk PASCAL, ktorý bol navrhnutý profesorom N. Wirthem pre potreby výučby programovania. Oproti Algolu je Pascal obohatení o prostriedky pre prácu so štruktúrovanými dátami, je však zbavený niektorých nebezpečných konštrukcií. Autor kládol na nový jazyk predovšetkým dve základné požiadavky:
-aby umožnil vysvetliť programovanie ako samostatnú disciplínu s vlastnou logikou a nie ako zoznam príkazov, -aby sa dal ľahko implementovať na všetkých dostupných počítačoch
Tieto ciele sa mu podarilo dosiahnuť do tej miery, že dnes má Pascal dominantné postavenie pri základnej výučbe programovania na univerzitách, ale používa sa vo veľkej miere aj pre bežné programovanie. Vďaka výbornej implementovateľnosti jazyka sa stal Pascal prvým programovacím jazykom dostupným takmer na všetkých druhoch počítačoch.2.5 Začíname s Pascalom
Existuje celkom päť typov symbolov, ktoré sa môžu vyskytovať v programe: kľúčové slová, identifikátory, zápisy čísiel, špeciálne symboly a znakové reťazce. Kľúčové slová sú v programe najnápadnejšie. Už len preto, že väčšinou sa tlačia tučné. Tvoria akúsi kostru programu. Sú to väčšinou anglické slová alebo ich začiatky. Napr. begin (začiatok), if (keď, ak), atď.
Ďalším typom symbolov sú identifikátory. Ide o slová zostavené len z alfanumerických znakov (tj., ako už vieme, z anglických slov a číslic), začínajúcich písmenom. Naviac sa iden-tifikátor nesmie zhodovať so žiadnym kľúčovým slovom. Preto sú
SUCET, PODIEL, ALFA 1, N, N1
správne vytvorené identifikátory, ale nasledujúce identifikátory nie sú:
A+B (pretože obsahuje špeciálny znak +), 3XYZ(nezačína písmenom), SUČET(obsahuje špeciálny znak Č).
Identifikátory sa používajú na pomenovanie najrôznejších objektov v programe.
2.5.1 Elementárne príkazy Pascalu
Medzi elementárne príkazy Pascalu patria priraďovací príkaz, príkaz pre vstup a výstup.
Priraďovací príkaz je na prvý pohľad ten najjednoduchší. Napriek tomu však väčšina chýb začiatočníkov, ale aj mnoho chýb skúsených programátorov má pôvod práve v nezvládnutí tohto príkazu. Priraďovací príkaz má v Pascale tvar X : = V, kde x je premenná, : = špeciálny symbol a V je výraz. Napríklad DISKRIMINANT : = B*B-4*A*C.
Pri každom výraze nás bude zaujímať len jeho hodnota. Najjednoduchším prípadom výrazu je číslo. Ďalším prípadom výrazu je premenná – jej hodnota je uložená v pamäti a odtiaľ ju program môže získať. Obecný výraz môže obsahovať aritmetické operácie a jeho hodnota nie je uložená nikde – program ju musí vypočítať. Príkaz pre vstup slúži na to, aby sa do programu mohli zvonka dostať vstupné údaje. V Pascale má tvar read (X), kde X je premenná. Prevedenie tohto príkazu spôsobí, že sa zo vstupu načíta jedna hodnota a priradí sa X.
Príkaz pre výstup slúži pre výstup hodnôt z programu. Má tvar write (V), kde V je výraz. Previesť tento príkaz znamená vyhodnotiť výraz. K výstupu hodnôt slúži aj výraz writeln (V), ktorý vykoná o jednu akciu navyše. Po vypísaní hodnoty výrazu prejde na začiatok nového riadku.
Hlavička programu začína kľúčovým slovom program, za ktorým nasleduje identifikátor, ktorý dáva programu meno a za ním nasleduje v zátvorkách zoznam parametrov programu. Meno programu nemá v programe samotnom žiadny význam, môže ho však využívať prekla-dač alebo operačný systém počítača. Parametre programu sú mená vnútorných súborov, s kto-rými program pracuje.
Blok programu má dve časti: deklaračnú a príkazovú.
Deklaračná časť programu obsahuje jeho deklarácie. Pre deklarácie v Pascale platí jedno dôležité pravidlo: Význam každého identifikátora musí byť v texte programu definovaný pred prvým miestom, kde je v programe tento identifikátor použitý.
Úsek deklarácií premenných je uvedený kľúčovým slovom var. V tomto úseku môže byť uvedených niekoľko deklarácií premenných, oddelených ;. Každá z nich je tvorená zozna-mom identifikátorov premenných a špecifikáciou ich typu oddelených :.
Príkazová časť programu je vlastne zloženým príkazom popisujúcim akciu, ktorú má program vykonať. Začína teda kľúčovým slovom begin a končí end.
2.5.2 Cykly
Cykly sú typom štruktúrovaných príkazov. Umožňujú, aby sa niektoré príkazy programu mohli vykonávať viackrát. Cyklus má
•telo cyklu, tj. Príkazy, ktoré sa budú opakovať a •podmienku cyklu, ktorá rozhoduje, či sa má v prevádzaní cyklu pokračovať alebo už skončiť.
Zoznámime sa s dvomi typmi cyklov. Líšia sa tým, kedy sa v nich testuje podmienka cyklu – pred prevedením tela cyklu alebo až po ňom.
Cyklus s testom pred prvý prevedením tela (tzv. while-cyklus) má v Pascale tvar while B do S, kde B je podmienka cyklu a S je príkaz, ktorý je jeho telom. Kľúčové slová znamenajú: while-pokiaľ, ak a do-vykonaj.
Cyklus s testom podmienky až po vykonaní tela cyklu (tzv. repeat-cyklus), má v Pascale tvar repeat S1; S2;...; Sn until B, kde S1; S2;...; Sn je postupnosť príkazov a B je podmienka cyklu.
2.5.3 Pravidlá používania a viditeľnosti identifikátorov
Keďže program v Pascale má blokovú štruktúru, z toho vyplýva, že každá definícia iden-tifikátora je súčasťou nejakého bloku. Tento blok je buď blokom podprogramu alebo blokom hlavného programu. O každom identifikátore môžeme teda povedať, že je definovaný buď v nejakom konkrétnom podprograme alebo hlavnom programe. Program alebo každý jeho podprogram budeme teda označovať spoločným termínom rámec. Platnosť deklarácií a pou-žívania identifikátorov v programoch Pascalu sa riadi štyrmi jednoduchými pravidlami.
1.Definícia objektu musí predchádzať jeho použitiu – toto pravidlo je diktované požiadav-kou, aby prekladaču stačilo prečítať tento program len jeden krát a nikde nenarazil na do-posiaľ nedefinovaný objekt. 2.Viditeľnosť objektu je určená hierarchickou štruktúrou programu – objekt môže byť pou-žitý len v vo vnútri rámca, v ktorom je definovaný. Tým je obmedzená platnosť lokál-nych objektov. 3.Jednoznačný význam identifikátora v rámci – v jednom rámci nie je možné uviesť dve definície toho istého identifikátora. 4.Zatienenie globálnej definície lokálnou definíciou – pokiaľ na jednom mieste programu platia dve definície toho istého identifikátora zavedené vo dvoch rámcoch, z ktorých je-den je obsiahnutý v druhom, potom má prednosť definícia z vnútorného rámca.
Toľko o programovaní, algoritmoch, programovacom jazyku Pascal, dúfam, že po prečí-taní, mnohý dostanú chuť stať sa programátormi.
Zdroje:
Drózd, J., Kryl, R.: Začínáme s programovaním, 1.vyd. Praha: Grada, 1992, 312 s. - Wirth, N.: Systematické programovanie, Bratislava, Alfa/SNTL, 1981 - Jinoch, J., Müller, K., Vogel, J.: Programování v jazyku Pascal, Praha: SNTL, 1985 -
|