Hogyan lehet azt a pascalban megvalósítani, hogy ne generáljon újra azt a számot, amit már kiadott?
program dkdk;
uses crt;
var a:array[1..5] of integer;
q,w,e,i,u,z:integer;
begin
clrscr;
randomize;
for i:=1 to 5 do begin
e:=i-5;
w:=i+5;
if (a[z]<>a[e]) or (a[z]<>a[w]) then begin
a[z]:=random(89)+1;
writeln(a[z]);
end;
end;
end.
Én valami ilyesmivel próbálkoztam.
(ui.:magamtól tanulom.)
Lottó számok ?
Előszöris a számgenerálást ciklusba kellene rakni (addig generálsz számot, amig nem sikerül, mert ha nem sikerül a szám generálás akkor azt ujra kell generálni).
Hogyan tudod eldonteni, hogy a generált szám az volt-e már ?
Hát végigmész az eddig generált számokon és megnézed, hogy azok között megvan-e az éppen generált szám.
Ugy nagyjából a következőket kellene beillesztened a progidba :
Jelző:=True ;
while Jelző do begin
Jelző:=False ;
a[z]:=random(89)+1;
for J:=1 to Z-1 do begin
if a[z]=a[j] then Jelző:=True;
end ;
end ;
Működési magyarázat :
A ciklus elindul, mivel "True" értéket kap, közvetlenűl a ciklusmagban a ciklus "false" értéket kap aminek eredményeként elvileg csak egyszer fut le,
legenerálod a számot,
megnézed, hogy az előző számokban volt-e már a mostani szám (for j ciklussal) ha valamelyik szám már volt akkor a ciklus ujra True azzaz igaz értéket kap és ujra lefut ezzel ujra legenerálva a számot.
Sok sikert.
Üdv.
Szia!
Úgy látszik,hogy jó a program így.
program lotto;
uses crt;
var i,w,j:integer;
a:array[1..5] of integer;
Jelz:boolean;
begin
clrscr;
randomize;
Jelz:=True ;
while Jelz do begin
Jelz:=False ;
a[i]:=random(89)+1;
for J:=1 to i-1 do begin
if a[i]=a[j] then Jelz:=True;
end ;
end ;
for i:=1 to 5 do begin
a[i]:=random(89)+1;
writeln(a[i]);
for w:=1 to i-1 do begin
if a[w]=a[i] then
a[i]:=random(89)+1;
writeln;
end;
end;
end.
Azt gondoltam,hogy ha ez se sikerül(nem sikerül felhasználnom normálisan azt,amit írtál) hagyom az egészet.
Azonban szerintem látszik,hogy nem tanárral tanulom.:(
Emellett jobb,ha maradok az egyszerűbb feladatoknál,meg annál a blogdiagramnál,mert azok kellenek majd a vizsgára.
Köszi mégegyszer.:)
Köszönet a többi válaszolónak is.:)
Remélem,hogy nem maradok ilyen ... pascal-programozásból.
Szia.
Szerintem ennyi (Az elsőben elrontottam a ciklust a repeat - until direkte erre van, hisz neked egyszer biztosan le kell futnia a ciklusnak ) :
program lotto;
uses crt;
var i,j:integer;
a:array[1..5] of integer;
Jelz:boolean;
begin
clrscr;
randomize;
for i:=1 to 5 do begin
jelz:=False ;
repeat
a[i]:=random(90)+1;
for j=1 to i-1
if a[i]=a[j] then Jelz:=True;
until Jelz;
end ;
for i:=1 to 5 do begin
writeln(a[i]);
writeln;
end.
Magyarázat :
Itt a belépési feltétel nem érdekes, mivel hátultesztelős a ciklus. Egyszer mindig le kell futnia (egy szám generálás)
A random(x) szerintem 0 és (x-1) között generál, de ennek nézz utánna (ha igy van akkor 90 kell a randomhoz).
A többi változatlan,
Próbáld ki.
Sok sikert.
Üdv.
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!