Podprogramy

Následující text popisuje látku probíranou na cvičení slovy. Doporučuji vše vyzkoušet.

Hledání v poli

Máme pole délky N. Napište program, který zjistí, jestli je v poli uloženo číslo X.

Procedury a funkce

Programy je často výhodné skládat z podprogramů. Správné používaní podprogramů zvyšuje přehlednost programu, usnadňuje hledání chyb a šetří čas. Na cvičení jsme si ukázali, jak takový podprogram v pascalu může vypadat a jak se používá. V pascalu máme k dispozici dva druhy podprogramů:

  1. procedura představuje pouze seznam příkazů, které se mají vykonat

  2. funkce popisuje výpočet nějaké hodnoty

Předávání parametrů: hodnotou X odkazem

Procedury i funkce mohou mít své parametry. Jsou to vlastně vstupní proměnné, které ovlivňují výpočet prováděný v rámci podprogramu. Pokud explicitně neuvedeme před parametrem klíčové slovo var, pracuje podprogram s kopiemi parametrů, takže proměnné, které podprogramu předáváme zůstanou po jeho ukončení nezměněny.

Terminologie:

  • Parametry před kterými NENÍ klíčové slovo var jsou předávány hodnotou.
  • Parametry před kterými JE klíčové slovo var jsou předávány odkazem.

Kdo vlastně komu co předává? Jde o to, že program je vykonáván po řádcích. Řízení výpočtu je prováděno hlavním tělem programu, dokud nenarazí na volání podprogramu (procedura/funkce). V ten okamžik začne výpočet řídit daný podprogram, který "dostane" od hlavního programu své parametry.

Typ "char" a "string"

Kromě základních typů proměnných, které jsme až doposud používali k uložení čísel existují v pascalu i základní datové typy pro práci s textem. Jsou jimi:

  • char - jde o speciální případ celého čísla, které pascal interpretuje jako jeden z 256 znaků ASCII tabulky.
  • string - řetězec charů. Neřekneme-li jinak, má délku 255 znaků. Znak na pozici 0 přitom nese informaci o délce řetězce.

Pro práci s řetězci a znaky existují v pascalu standartní funkce. Zde je seznam několika z nich, které by se vám mohly hodit:

  • chr(b:byte): char - funkce, která konvertuje celočíselnou hodnotu b na typ char Př.:
    chr(65) < = > 'A' 
    
  • ord(x): longint - funkce, která převede jakýkoliv ordinální typ na celé číslo.Mezi orinální datové typy patří všechny celočíselné typy (integer, shortint, longint, word a byte) dále pak typ char a typ boolean. Př.:
    ord('A') < = > 65
    
  • str(x;var s: string) - procedura, která do proměnné s uloží řetězcovou reprezentaci celého čísla x. Př.:
    str(125,s); // < = > s:='125';
    
  • val(s: string;var x; code: integer) - procedura, která vezme řetězec uložený v proměnné s a uloží jeho číselnou reprezentaci do proměnné x. Když nastane chyba (například když je řetězec neobsahuje správně formátované celé nebo reálné číslo), tak uloží do proměnné code index chybného znaku. Pokud je vše OK, uloží tam nulu. Př.:
    x:=0;
    val('1234',x,code); < = > x:=1234; code:=0; // prevod ok
    x:=0;
    val('12%34',x,code); < = > x:=0; code:=3; // chyba na 3 znaku
    	

Domácí úkol

V CodExu byl zadán domácí úkol za 30 bodů. Úloha má název Hledáme virus.