Pascal pro ukončeeni stiskněte (znak)
Zdravíčko,
Mám zde problém ve Free Pascalu. Potřebuji nahrávat cyklem čísla a po zmáčknutí třeba k, se cyklus ukončí a vypíše nejmenší číslo.
program nejmensi_cislo;
uses CRT;
var zadane, nejmensi: integer;
begin
nejmensi:=2;
clrscr;
writeln('Zadejte cislo. Pro ukonceni a zobrazeni stisknete k :');
readln(zadane);
repeat
begin
writeln('Zadej cislo: ');
readln(zadane);
if zadane < nejmensi then nejmensi:=zadane;
end;
until zadane = 'k';
clrscr;
writeln('Nejmensi cislo je ' ,nejmensi, '.');
readln;
end.
Tento kód mě nefunguje píše mě to chybu datového chybu. Kdysi jsem to dělal ale už si napamatuji jak se to dělá. Díky
Příkaz readln načítá znak (char), v podmínce porovnáváš jestli je menší než proměnná nejmensi. Nemůžeš porovnávat znak s číslem. Je nutno nejdřív proměnnou přetypovat.
a navíc správně neincializoval proměnnou "nejmensi", což je prasárna a potenciální problém jako prase.
např.
edit: readln načítá proměnnou takovou, jakou mu napíšeš. Tj. pokud dáš readln (integer), bude ošetřovat vstup na integer a při zadání "k" samozřejmě havaruje. Takže načítat string a ten je nutno přetypovat.
Ne pretypovat ale skonvertovat. to je trochu rozdiel ;)
Máš pravdu, přetypování by z "k" udělalo číslo rovné jeho ASCII hodnotě.
edit: za to může host! Já to jen opsal!
A premenna nejmensi sa inicializuje na prvu polozku, k tomu sa urobi nejaka ina premenna ze ci vobec uz bola zadana nejaka polozka.
Aby ked zadas rovno 'k' nevypisal program gebuzinu typu nejmensi zadane cislo bolo 4234523524312 ale aby vypisal ze si nezaadl ziadne cislo. Navyse tam nema osetrene to ze ci hned nezadal k. Cely ten program je nezmysel. Ano ludia vobec nerozmyslaju len cosi lepia bez mozgu a nezvladaju ani taketo triviality, preto dnesny SW je tak na p* :)
samozřejmě je třeba otestovat, zda bylo zadáno alespoň jedno číslo, ale to je pro takové prográmky už jen malé finále