program testik;
{ Testík na 7. hodině (15.11.2012).
Vaším úkolem bylo napsat funkci Str2Int, která dostane číslo jako řetězec cifer a převede ho na číslo jako
integer. Tedy například řetězec '1234' převede na integer s hodnotou 1234. Pokud zadaný řetězec nejde převést
na integer (například obsahuje znak, který není cifra), tak jste měli vrátit -1. Neměli jste k tomu používat
funkce Pascalu, které to umí přímo, jako například StrToInt, či val.
Toto řešení používá Hornerovo schéma. }
function Str2Int( s:string ):integer;
var i:integer;
begin
Str2Int:=0;
for i:=1 to length(s) do { Pro všechny znaky řetězce... }
begin
if (s[i] >= '0') and (s[i] <= '9') then { Je-li další znak cifra... }
Str2Int:=Str2Int*10 + ord(s[i]) - ord('0') { Tak ji přidáme do výsledku. }
else { Není-li další znak cifra... }
begin
Str2Int:=-1; { Tak nastavíme návratovou hodnotu na -1. }
break; { A vyskočíme z cyklu. }
end;
end;
end;
{ Velmi jednoduché ozkoušení, zda to funguje. }
begin
writeln(Str2Int('111') + Str2Int('1234')); { Mělo by vypsat 1345. }
writeln(Str2Int('11a2')); { Mělo by vypsat -1. }
writeln(Str2Int('b2')); { Mělo by vypsat -1. }
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ů). ;)