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ů:
- procedura představuje pouze seznam příkazů, které se mají vykonat
- 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 hodnotub
na typchar
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
abyte
) dále pak typchar
a typboolean
. Př.:ord('A') < = > 65
str(x;var s: string)
- procedura, která do proměnnés
uloží řetězcovou reprezentaci celého číslax
. 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.