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.
Miért lenne jobb választás?
Kizárólag az elsőben oldottam meg logikai tömbben, másodikban számtömböt használtam.
Én úgy tudom, hogy a halmaz típus csak 0 és 255 közti értékekkel működik.
program Halmaz_proba;
var
h : Set of Integer;
begin
end.
Nincs sikerem vele úgy tűnik.
Utána tudok olvasni, hogy mit írjak kis és mit nagybetűvel?
Az elgondolásom (szerinted) mennyire jó a programmal kapcsolatban, van amit lehetne rövidebben, vagy egyszerűsíteni?
Bocsi, kicsit le vagyok lassulva, az egyik unokám keresztelőjéről jövök :)
Tehát ha szép kódot akarsz írni Pascal-ban akkor minden foglalt szót kisbetűvel írsz. Nem sok van belőlük var, for, to, begin, end, while, repeat, until, if, and, or, do, not, uses, program... van még jó pár utána kell olvasni. Nem azért tépem a szám, hogy nem olvasható a kód - bár ronda - hanem azt szeretném, hogy ne essetek abba a hibába a C alapú nyelveknél, hogy szerinted jó a kód csak az éppen egyiket nagy betűvel írtam.
Én is megettem annak idején ezzel a húgyos körtét ezért próbálom beleverni a 'fiatalok' fejébe.
A kódot mindjárt megnézem ha tisztul a fejem :)
Itt van hibakezeléssel mind két program, a számbevitel ellenőrzését és a másodiknál a szám ellenőrzését - szerepelt-e - is kiszerveztem egy-egy függvénybe.
Na, megint fölöslegesen törtem magam. Az én változatom:
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!