Kezdőoldal » Számítástechnika » Programozás » Mi a hiba ezzel a Pascal...

Mi a hiba ezzel a Pascal lottó-programmal?

Figyelt kérdés

program lottozo;

uses crt;

var a,b,c,d,e:byte;

label lotto;

begin

clrscr;

randomize;

a:=random(90)+1;

b:=random(90)+1;

c:=random(90)+1;

d:=random(90)+1;

e:=random(90)+1;

if ((a=b) or (a=c) or (a=d) or (a=e) or (b=c) or (b=d) or (b=e) or (c=d) or (c=e) or (d=e)) then

goto lotto

else writeln(a,b,c,d,e);

end;

readkey;

end.



(Nyugodtan megkövezhettek érte, még kezdő vagyok:D )


2011. okt. 5. 18:37
 1/7 anonim ***** válasza:
Nem használunk goto-t. A randomoknak csinálj külön függvényt, amit ha meghívsz nem csinál már meglévő számot. pl. elmenti a kivett számokat egy globális tömbbe, és ciklusban randomizál amig az aktuális random szám nincs benne a tömbben. Ha megvan, tegye bele ezt a számot is a tömbbe. Mindezt egy függvényen belül.
2011. okt. 5. 18:51
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:
De, sajnos még nem tanultunk tömbökről. :S
2011. okt. 5. 19:23
 3/7 _Jessy_ ***** válasza:
próbáld meg úgy, hogy ha van két egyforma szám, akkor csak az egyiket generálja újra, mert így ha van minden "ciklusmagban" két egyforma akkor végtelenné válik :)
2011. okt. 5. 19:39
Hasznos számodra ez a válasz?
 4/7 tabaki ***** válasza:
Te, nincs ebben egy fölösleges END;? Asszem, a program nagy egésze is egy BEGIN-nel indul, és az egypontos END-del ér véget, és a közte levők is értelemszerűen párosával vannak. Amúgy meg nem csak nem elegáns a GOTO használata, hanem számomra érthetetlen, hogy mit ugrálsz ki a kezdő BEGIN elé, ahol csak a változók,stb. szoktak lenni. Ha azért tetted föl a kérdést, mert nem fut a progid, sztem errefélé keresd az okát.
2011. okt. 6. 00:29
Hasznos számodra ez a válasz?
 5/7 _Jessy_ ***** válasza:
A szintaxist/szemantikát nem is néztem :) if-goto helyett pedig egy repeat until elegánsabb :D
2011. okt. 6. 06:54
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

"Nyugodtan megkövezhettek érte, még kezdő vagyok:D"

Kedves kezdő kérdező én inkább a válaszírók egy részét kövezném meg, ha ír valami olyat akkor azt legalább pontosan legyen tisztába a dolgokkal.

A gondolatmeneted egyébként helyes, szintaktikailag nem.

Meg annyi hogy így írd hogy a számok ne olvadjanak egybe:

writeln(a,' ',b,' ',c,' ',d,' ',e)

A goto helyett repeat until-t használj.


"Amúgy meg nem csak nem elegáns a GOTO használata, hanem számomra érthetetlen, hogy mit ugrálsz ki a kezdő BEGIN elé, ahol csak a változók,stb. szoktak lenni."

Kell dekralálni a label-t, deklarálni kell akár a változókat. Nem ugrik ki a kezdő begin elé csak deklarálva van, nincs berakva a deklarált címke a kódba vagyis szintaktikailag hibának számít mert a goto lotto létező de definiálatlan címkére hivatkozik. Inkább nem mutatom meg hogy hogy kell használni a goto-t, nem kell használni.


"próbáld meg úgy, hogy ha van két egyforma szám, akkor csak az egyiket generálja újra, mert így ha van minden "ciklusmagban" két egyforma akkor végtelenné válik :)"

Ez nem igaz ebben a formában. Nagy valószínűséggel nem lesz 2 egyforma már előszörre, ha mégis lesz akkor még ritkábban fordul elő hogy a 2. ciklusban is legyen, még ritkábban hogy 3.-ikban ... hogy a 100.-ik ciklusban is legyen ez olyan ritka hogy a naprendszer ideje nem lenne elég hogy várhatóan előforduljon ha minden 10 másodpercbe lefuttatnánk a programot.

Persze szigorúan matematikailag az elvi lehetőség megvan hogy nagyon sokáig fusson a program mert sokszor lenne hogy legalább 2 szám megegyezik, de nem végtelen ideig mert 1 valószínűséggel véges időn belül nem lenne 2 egyforma szám ez matematikailag bizonyítható, de ugyan ez a helyzet a te általad javasolt módszerrel is, a konstans szorzók másak ugyan, de az elvi lehetőség ott is megvan hogy mondjuk 10-et dob a random aztán 10 10 10 10 10 10 10 10 10 10 ...


Szőnyeg alá sepertem hogy nem valódi random generátorunk van, hanem egy 32 bites véges állapotú determinisztikus generátorunk, így még matematikailag sem lehetséges hogy nagyon sokáig ne legyen minden szám különböző.

2011. okt. 6. 15:58
Hasznos számodra ez a válasz?
 7/7 tabaki ***** válasza:
Hm, igaz, igaz. Deklarációként tényleg ott a helye a címkének... Szóval, akkor csak egyszerűen a programtörzsből hiányzik. Oda is _lehetne_ tenni, de remélem, sikerült elriasztani a kérdezőt a GOTOzástól.
2011. okt. 6. 16:10
Hasznos számodra ez a válasz?

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!