Bilder mist mit rekursion

Dieses Programm sollte mir eigentlich 6 zufallszahlen von 1-49 liefern . Es dürfen keine zahlen doppelt vorkommen…kommen aber eben doch :—( siehts einer?ichfind den fehler nicht :-------( need help
procedure TForm1.zufall(VAR rzahlen :ARRAY OF INTEGER);
VAR i,j,nrzahl :INTEGER;

BEGIN
FOR i:= 0 to 5 DO
BEGIN

FOR j:= 0 to LENGTH(rzahlen)-1 do
BEGIN
nrzahl:=(Random(48)+1);
if(nrzahl=rzahlen[j]) then
zufall(rzahlen)
ELSE
rzahlen[i]:=nrzahl;
END;
LABEL3.caption:=LABEL3.caption + ’ ’ + inttostr(rzahlen[i])+’ ';
END
end;

Hi Peter,

Dieses Programm sollte mir eigentlich 6 zufallszahlen von 1-49
liefern . Es dürfen keine zahlen doppelt vorkommen.

zunächst mal hat die Zeile „nrzahl:=(Random(48)+1)“ nix in der j-Schleife verloren –> „rausschieben“ (in der i-Schleife muß sie natürlich bleiben).

Ob Du mit der Rekursion das gewünschte Ergebnis erhälst, vermag ich nicht zu beurteilen. Ich würde allerdings bei jedem Problem, das eine einfache iterative Lösung ermöglicht, tunlichst immer diese vorziehen, statt mit Rekursion zu arbeiten (wegen Stackbelastung und Aufwand bei der Fehlersuche im Fall des Nichtfunktionierens).

Mit freundlichem Gruß
Martin

PS: Bitte größere Codefragmente in

-

einschließen, damit die Einrückungen erhalten bleiben. Dann hat’s der Leser leichter.

ich probiers mal iterativ:

var
 a : array [0..5] of integer;
 ok : boolean;
randomize;
for i := 0 to 5 do
 repeat 
 r := random(49) + 1; o.ä.
 ok := true; 
 if i \> 0 then
 for j := 0 to i-1 do 
 if a[i] = r then 
 ok:= false;
 until ok;
 a[i] := r;

geht das (unter berücksichtigung der uhrzeit)?
chris