Kezdőoldal » Számítástechnika » Programozás » Pascal: van hiba ebben a...

Pascal: van hiba ebben a programban, ha igen, mi? Egyszerűbben is meg lehetne írni? (bővebben lent)

Figyelt kérdés

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.



2015. aug. 23. 16:13
1 2 3
 11/21 A kérdező kommentje:

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.

2015. aug. 24. 15:29
 12/21 anonim ***** válasza:
Elég csúnya lenne, ha az integer típus 2 byte-on lenne alapból ábrázolva.
2015. aug. 24. 15:53
Hasznos számodra ez a válasz?
 13/21 A kérdező kommentje:

Pascal manual szerint az integer lehet smallint meg longint is, ezt nem tudom hogy gondolja.

Integer, smallint or longint, 2 or 4

[link]

2015. aug. 24. 16:03
 14/21 tabaki ***** válasza:

Igazad van, ez kimaradt:

{$mode objfpc}{$H+}


Vagy használj longintet, ha ragaszkodol a hasraütéssel beírt ötvenezerhez...

2015. aug. 24. 16:51
Hasznos számodra ez a válasz?
 15/21 SimkoL ***** válasza:
Az integer 'mérete' fordító, fordító beállítás függő. TP/FPC módban 2 byte-on ábrázolja, DELPHI/OBJFPC módban 4 byte-on. A TP6, mivel csak 16 bites volt, 2 byte-on 'értelmezte' a mezei integer típust.
2015. aug. 24. 16:58
Hasznos számodra ez a válasz?
 16/21 SimkoL ***** válasza:
Még annyit tennék hozzá, ha Lazarusban console application-t írsz, az {$mode objfpc}{$H+} alapértelmezett fordításkor. Ezért marad ki sokszor a kódokból.
2015. aug. 24. 17:16
Hasznos számodra ez a válasz?
 17/21 tabaki ***** válasza:
Köszi, SimkoL. Na ugye, nyilvánvaló, hogy magától értetődik, hogy természetesen csakis emiatt csúsztam bele ebbe a csúfos kudarcba... Igaz, ami igaz, tényleg többet használom a Lazarust, mint a pucér pascalt, mi tagadás, elpuhultam.
2015. aug. 24. 17:42
Hasznos számodra ez a válasz?
 18/21 SimkoL ***** válasza:
Az úgymond 'szép' Pascal kód írásához írtam egy kis összefoglalót: [link] Nagyon alap, általános dolgok vannak benne, a TP 6.0 helpjének felhasználásával. Természetesen ahogy 'nőtt' a Pascal úgy bővült a foglalt szavak listája is, de szerintem most ez kezdetnek elég.
2015. aug. 24. 19:36
Hasznos számodra ez a válasz?
 19/21 SimkoL ***** válasza:
tabaki kollégának belejavítottam a kódjába: [link] , no nem azért, hogy a WriteLn-ekkel spóroljak vagy beszúrjam a fordítási direktívát, hanem ?
2015. aug. 24. 22:11
Hasznos számodra ez a válasz?
 20/21 tabaki ***** válasza:
Hm. Az a probléma, hogy én két napja falkámbéliek közt vagyok, és a folyamatos welcomedrinkelés is fölér egy keresztelővel... Első blikkre az index- és tömbnövelés szerencsésebb kapcsolata tűnik föl, meg persze a sikerültebb indentálás (én csak hagytam, hogy a pastie.org kezdjen a tabokkal, amit akar). Az else-sorok is jobban érthetők, mint az általam alkalmazott gyötrelmesen hivatalnoki tagolással. Egyébként viszont szabad a gazda, lehet, hogy pont a lényeg esett ki a most nehezen fókuszáló figyelmem látóköréből.
2015. aug. 26. 00:58
Hasznos számodra ez a válasz?
1 2 3

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!