Mi a hiba ezzel a Pascal lottó-programmal?
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 )
"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ő.
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!