(Pascal) Hogy lehet megoldani, hogy egy tömbben ne lehessen két ugyanolyan elem?
Mondjuk egy másik ciklussal ellenőrid vissza, hogy van e már benne az adott szám. Például:
program veleteln;
var t : array [1..10] of integer;
i, j : byte;
sz : integer;
begin
randomize;
j:=1;
for i:=1 to 10 do
t[i]:=0;
i:=1;
repeat
sz:=random(50)+1;
for j:=1 to i do
if t[j]<>sz then
begin
if t[j]=0 then
begin
t[i]:=sz;
inc(i);
end;
end else break;
until i>10;
for i:=1 to 10 do
writeln(t[i]);
end.
A mellékelt kód nem biztos, hogy tökéletes, de valami ilyesmi elven próbáld.
Csináld így:
Töltsd föl a tömböt növekvő számokkal pl:
t[0]:=1;
t[1]:=2;
t[2]:=3;
...
t[max-1]:=max;
(a max a tömb mérete, és egyben a legnagyobb elem is)
(for ciklussal töltsd föl természetesen.)
Ezek után a már csak össze kell kavarni az értékeket, amit úgy tehetsz meg, hogy
kisorsolsz egy indexet:
i:=Random(max);
és a tömb i-edik indexén lévő értéket felcseréled az utolsóval:
elméletben: CSERE(t[i],t[max]);
pascalban a csere vhogy így néz ki:
temp:=t[max];
t[max]:=t[i];
t[i]:=temp;
ezek után már Random(max-1)-re teszed meg ugyanezt, majd Random(max-2)-re addig, míg max-j>0, (j az a ciklusváltozó a második for ciklusban)
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!