program jeZnak;
{ Testík na 6. hodině (8.11.2012).
Za úkol jste měli napsat funkci s jedním parametrem typu char, která rozhodne,
zda to je písmeno malé anglické abecedy.
Mezi nejčastější chyby patřilo:
1) Je-li c parametr funkce, pak rozhodně na začátku funkce nevolejte read(c)!
Tím si přepíšete původní hodnotu c. Hodnotu c vám zadá ten, kdo funkci volá. Proto tam ten parametr je.
Kdyby volající chtěl, abyste si hodnotu znaku přečetli ze vstupu, tak by vám znak nepředával jako parametr.
2) Výsledek jste měli vrátit jako návratovou hodnotu funkce. Rozhodně jste neměli nic ve funkci vypisovat
na výstup, tedy tam nemělo být žádné write, ani writeln.
3) Některým se plete, co dělá ord a co dělá chr. (Já je chápu. ;)) Ale je to snadné:
- ord vrací ORDinální hodnotu znaku, tedy dostane znak a vrátí integer.
- chr vrací CHAR, tedy dostane integer a vrátí znak, jehož kódem je zadaný integer.
Zde je kromě samotné funkce i jednoduchý program na otestování, zda ta funkce funguje.
Rovnou si můžete prohlédnout stejnou funkci ve dvou (ekvivalentních) variantách. }
var znak : char;
{ Funkce dostane znak a vrátí TRUE <==> znak je malé písmeno anglické abecedy
(tzn. nějaký z 'a', 'b', ... 'z'), jinak vypíše FALSE.
Krátké řešení. }
function jeZnak( c : char ):boolean;
begin
jeZnak := (c >= 'a') and (c <= 'z');
{ Stejně tak můžeme napsat (ord(c) >= ord('0')) and (ord(c) <= ord('9')) apod. }
end;
{ Funkce dostane znak a vrátí TRUE <==> znak je malé písmeno anglické abecedy
(tzn. nějaký z 'a', 'b', ... 'z'), jinak vypíše FALSE.
O něco delší, ale stejně dobré řešení. }
function jeZnak2( c : char ):boolean;
begin
if (ord(c) >= ord('a')) and (ord(c) <= ord('z')) then
jeZnak2 := TRUE
else
jeZnak2 := FALSE;
end;
begin
read(znak);
writeln(jeZnak(znak));
end.
Kdo byste našel v nějakém z těchto programů chybu, dejte mi to vědět - můžete tak získat bonusové body (1 chyba ≈ 5 bodů). ;)