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.
Igen, a tömbnövelés. Majdnem mint a halmaz, csak akkor rakunk bele új értéket, ha az még nem szerepel benne.
Off: hát veszélyes dolog is tud lenni a rokonlátogatás :)
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!