Kezdőoldal » Számítástechnika » Programozás » Pascalban hogy kell ilyen...

Pascalban hogy kell ilyen hibakódot írni?

Figyelt kérdés

program kitalalos;


uses

crt, sysutils;

var

x,y,p:integer;


begin

randomize;


y:=random(1000)+1;


write('Gondoltam egy számra 0 és 1000 között. Melyik az a szám?');


repeat


read(x);


if x<0 then writeln('A szám 0 és 1000 között van')

else if x>1000 then writeln('A szám 0 és 1000 között van')


else if x<y then writeln('A szám amire gondoltam nagyobb.')

else if x>y then writeln('A szám amire gondoltam kisebb.');


inc(p);

until x=y;


writeln('Gratulálok, ',p,'. próbálkozásra sikerült kitalálnod!');


readkey;


end.


H elindítom és beírok egy betűt akkor crashel. Hogy kell rá írni valamilyen hibaüzenetet? Próbálkoztam már a string átalakítással azért van benne a sysutils de nem jutottam messze. A lényeg az lenne ha stringet érzékel a program akkor írja ki hogy szám kell nem betű.



2014. dec. 30. 11:46
1 2
 1/11 anonim ***** válasza:

Például:

Olvass be String-be, vizsgáld meg, hogy csak számból áll-e. Ha nem, akkor hibaüzi.


(Biztos van ennél szebb megoldás is, rég Pasvaloztam.)

2014. dec. 30. 11:48
Hasznos számodra ez a válasz?
 2/11 anonim ***** válasza:

Használj try-except blokkot.


program kitalalos;

{$mode objfpc}

uses sysutils;

var

s : string;

i : integer;

begin

write('input: ');

readln(s);

try

i := StrToInt(s);

except

on E : EConvertError do HIBA ESETEN FUTTATANDO PARANCSOK;

end;

end.

2014. dec. 30. 12:01
Hasznos számodra ez a válasz?
 3/11 anonim ***** válasza:
Egy jótanács: "p" változót a repeat blokk előtt érdemes lenne nullázni..
2014. dec. 30. 12:09
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:
..ja és még valami.. szerintem "y" értéke 1..1000 között lesz..
2014. dec. 30. 12:11
Hasznos számodra ez a válasz?
 5/11 SimkoL ***** válasza:

Szerintem röviden ennyi:


uses Crt;

var x, y, p, hiba:integer;

s : string;


begin

Randomize;

y := Random(1001);

p := 1;

ClrScr;

Write('Gondoltam egy számra 0 és 1000 között. Melyik az a szám?', #10#13);

repeat

hiba := 1;

while hiba <> 0 do

begin

Write('Kérem a(z)', p, '.számot: ');

ReadLn(s);

Val(s, x, hiba);

if hiba <> 0 then WriteLn('Hibas szám !');

end;

if x < 0 then WriteLn('A szám 0 és 1000 között van')

else if x > 1000 then WriteLn('A szám 0 és 1000 között van')

else if x<y then writeln('A szám amire gondoltam nagyobb.')

else if x>y then writeln('A szám amire gondoltam kisebb.');

Inc(p);

until x = y;

WriteLn('Gratulálok, ',p - 1,'. próbálkozásra sikerült kitalálnod!');

ReadKey;

end.

2014. dec. 30. 12:30
Hasznos számodra ez a válasz?
 6/11 SimkoL ***** válasza:

...és ezt:

if x < 0 then WriteLn('A szám 0 és 1000 között van')

else if x > 1000 then WriteLn('A szám 0 és 1000 között van')

cseréld ki erre:

if (x < 0) or (x > 1000) then WriteLn('A szám 0 és 1000 között van')

valamint tanulj meg 'szép' kódot írni. Bár a Pascal nem érzékeny a kis és nagybetűkre, de szerintem az én kódom szebb :) - igaz én még az 5.5-ös Turbo Pascal-t tanultam anno, betűről betűre, ha érted -.

2014. dec. 30. 12:54
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:

Ilyen hibakezelést lehet az "ioresult" figyelésével is csinálni, tehát readln előtt a {$i-} direktíva beírása, utána pedig ha ioresult=0 akkor engedi tovább a repeat-until ciklus, egyébként azt írja ki, hogy "számot írj be!"

Ez csak egy tipp, hogy így is lehet.

Régen így csináltam.

2014. dec. 30. 13:44
Hasznos számodra ez a válasz?
 8/11 anonim ***** válasza:

Hát, úgy tűnik, a fentebb vázolt SimkoL általi megoldás a nyerő, megpróbáltam megírni az "IOResult"-os megoldással, nem működik, pedig tényleg rémlik, hogy 15 éve egyszer ezzel oldottam meg egy ilyen problematikát. :-)


Az elágazásokat viszont leegyszerűsítettem egy case elágazásra, nem tudom mennyire elegáns megoldás.


uses Crt;

var x, y, p, hiba:integer;

s : string;


begin

Randomize;

y := Random(1001);

p := 1;

ClrScr;

Write('Gondoltam egy számra 0 és 1000 között. Melyik az a szám?', #10#13);

repeat

repeat

Write('Kérem a(z)', p, '.számot: ');

{$I-}

ReadLn(x);

{$I+}

if IOResult <> 0 then

WriteLn('Hibas szám !');

until(IOResult=0);

case x of

0..1000: WriteLn('A szám 0 és 1000 között van');

1001..32767: WriteLn('A szám 1001 és 32767 között van');

end;

If x<y then writeln('A szám amire gondoltam nagyobb.');

if x>y then writeln('A szám amire gondoltam kisebb.');

Inc(p);

until x = y;

WriteLn('Gratulálok, ',p - 1,'. próbálkozásra sikerült kitalálnod!');

ReadKey;

end.

2014. dec. 30. 14:30
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:

Úgy tűnik, mégis megtaláltam a megoldást. :-)

uses Crt;

var x, y, p, hiba:integer;

s : string;


begin

Randomize;

y := Random(1001);

p := 1;

ClrScr;

Write('Gondoltam egy számra 0 és 1000 között. Melyik az a szám?', #10#13);

repeat

repeat

Write('Kérem a(z)', p, '.számot: ');

hiba:=1;

{$I-}

ReadLn(x);

{$I+}

if IOResult <> 0 then

WriteLn('Hibas szám !')

Else hiba:=0;

Until(hiba=0);

Case x of

0..1000: WriteLn('A szám 0 és 1000 között van');

1001..32767: WriteLn('A szám 0 és 1000 között van');

end;

If x<y then writeln('A szám amire gondoltam nagyobb.');

if x>y then writeln('A szám amire gondoltam kisebb.');

Inc(p);

until x = y;

WriteLn('Gratulálok, ',p - 1,'. próbálkozásra sikerült kitalálnod!');

ReadKey;

end.

2014. dec. 30. 14:44
Hasznos számodra ez a válasz?
 10/11 SimkoL ***** válasza:
Gyerekek, ez a Pascal, a programozási logika megcsúfolása minden szempontból :( már elnézést.
2014. dec. 30. 17:37
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!