Pascal: van hiba ebben a programban, ha igen, mi? Egyszerűbben is meg lehetne írni? (bővebben lent)
Kétféleképpen írtam meg, tulajdonképpenn csak abban van eltérés, ahogy ellenőrzi a program ha olyan számot adtak meg, ami már szerepelt egyszer.
Egyedül a hibakezelést hagytam ki belőle, mármint amikor ha nem számot ír a felhasználó, ne akadjon ki, hanem kényszerítse ki amíg számot nem ír be.
Első példa:
Program Szamkitalalo;
Uses CRT;
Var
tippek : Array Of Boolean;
i, szam, gszam, n : Integer;
ch : Char;
Begin
Randomize;
Repeat
i := 1;
Repeat
WriteLn('Számkitalálós játék');
WriteLn;
Write('Add meg a felső határt, hogy 0 és az általad megadott szám közt a gép gondoljon egy számra : ');
ReadLn (n);
SetLength (tippek, n);
For i := 1 To n Do
tippek [i] := False;
gszam := Random (n) +1;
writeln;
Write ('Gondoltam egy számot 1 és ',n,' közt. Találgass!');
Repeat
WriteLn;
Write ('Kérem a tippet : ');
ReadLn (szam);
If tippek [szam ] = True Then WriteLn('Ezt a számot már írtad egyszer!')
Else
tippek [szam] := True;
If ( szam > n ) Or (szam < 0) Then
WriteLn('0 és ',n,' intervallumban lehet csak tippelni!');
If (szam < gszam) Then
WriteLn('Nagyobbra gondoltam!');
If (szam > gszam) Then
WriteLn('Kisebbre gondoltam!');
If (szam = gszam) Then
Begin
WriteLn('eltaláltad, gratulálok! (nyomj entert)');
ReadLn;
End;
Until (szam = gszam);
WriteLn;
Write ('Szeretnél mégegyszer játszani ? ');
ch := ( UpCase (ReadKey ) );
Until (ch <> 'I') Or (ch <> 'N');
Until (ch = 'N');
End.
Második példa:
Program Szamkitalalo;
Uses CRT;
Var
tippek : Array [1 ..500] Of Integer;
i, j, szam, gszam, n : Integer;
ch : Char;
van : Boolean;
Begin
Randomize;
Repeat
For i := 1 To 500 Do
tippek [i] := 0;
i := 1;
Repeat
WriteLn('Számkitalálós játék');
WriteLn;
Write('Add meg a felső határt, hogy 0 és az általad megadott szám közt a gép gondoljon egy számra : ');
ReadLn (n);
gszam := Random (n) +1;
writeln;
Write ('Gondoltam egy számot 1 és ',n,' közt. Találgass!');
Repeat
WriteLn;
Write ('Kérem a tippet : ');
ReadLn (szam);
tippek [i] := szam;
inc (i);
van := False;
j := 1;
While (j < i - 1 ) And (Not van) Do
Begin
If tippek [j] = szam Then
van := True;
inc (j);
End;
If van Then
WriteLn('Ezt a tippet már írtad!');
If ( szam > n ) Or (szam < 0) Then
WriteLn('0 és ',n,' intervallumban lehet csak tippelni!');
If (szam < gszam) Then
WriteLn('Nagyobbra gondoltam!');
If (szam > gszam) Then
WriteLn('Kisebbre gondoltam!');
If (szam = gszam) Then
Begin
WriteLn('eltaláltad, gratulálok! (nyomj entert)');
ReadLn;
End;
Until (szam = gszam);
WriteLn;
Write ('Szeretnél mégegyszer játszani ? ');
ch := ( UpCase (ReadKey ) );
Until (ch <> 'I') Or (ch <> 'N');
Until (ch = 'N');
End.
Tabaki, csak az a hiba, hogy az integer típus csak -32768 és +32768 közt vehet fel értékeket.
Az is lehet hogy csak 32767 de most fejlből írtam.
Pascal manual szerint az integer lehet smallint meg longint is, ezt nem tudom hogy gondolja.
Integer, smallint or longint, 2 or 4
Igazad van, ez kimaradt:
{$mode objfpc}{$H+}
Vagy használj longintet, ha ragaszkodol a hasraütéssel beírt ötvenezerhez...
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!