Überprüfung, ob eine Zahl in einem Array doppelt vorkommt geschlossen 

Status
Für weitere Antworten geschlossen.

Marcellus

Registered +
Registriert
Jan. 2007
Beiträge
41
Hallo Leute,

seit ein paar Wochen programmieren wir in der Schule mit Delphi und da habe ich jetzt ein Problem (bin zwar kein Noob in Sachen Programmierung, aber da habe ich jetzt ein Problem). Im Rahmen eines "Würfelprogramms" will ich herausfinden, ob eine variable Anzahl von Zahlen in einem Array mehrmals vorkommt und, wenn ja, dann nochmal eine neue Zahl würfelt. Dies soll so lang weitergemacht werden, bis alle Zahlen unterschiedlich sind. Ich kann euch ja mal meinen ersten Versuch zeigen (bei dem ich fast selber nicht mehr durchsteige...) und würde mich wirklich über Hilfe freuen:

Code:
while wahr = true do
begin
while loop3 < arr do // arr ist die Größe (Länge) des Arrays
begin
for loop4 := 0 to arr do
begin
wahr:=true;
if loop3 <> loop4 then
begin
if Zahlen[loop3] = Zahlen[loop4] then
Zahlen[loop3]:= random(40)+1
else
wahr := false;
end;
end;
loop4:= 0;
loop3 := loop3 +1;
end;
loop3:= 0;
end;

Funktionieren tut der Code leider nicht, es scheint mir fast so, als ob das bei der Routine einfach übergangen wird, es passiert einfach nichts als ohne diesen Code...
Freue mich über jede Antwort!

MfG

Marcellus
 
Ich kann leider kein Delphi, aber hier etwas PHP-Mischmasch-Pseudo-Code:
Code:
// Funktion prüft, ob Zufallszahl $zahl schon im Array $array ist
function exisitiert_lottozahl($array, $zahl) {
for($i = 0; $i < maxindex($array); $i++) {
if($array[$i] == $zahl) return true;
}
return false;
}

// Container-Array für Zufallszahlen.
$lottozahlen = array();

// 6 Durchläufe für die Lottozahlen.
for($i = 1; $i  // Endlosschleife, die erst dann verlassen wird, wenn
// eine noch nicht gewählte Zahl gefunden wurde.
while(true) {
// Zufallszahl erzeugen (zwischen 1 - 49).
$zufallszahl = rand(1, 49); 
// Existiert die Zufallszahl schon im Ergebnis-Array?
if(exisitiert_lottozahl($lottozahlen, $zufallszahl) == false) {
// Lottozahl exisitert nicht, also hinzufügen
$lottozahlen[] = $zufallszahl;
// Schleife beenden
break;
}
}
}
Am Ende befinden sich im Array $lottozahlen sechs unterschiedliche Zufallszahlen zwischen 1-49. Zumindest glaube ich das ;)

HTH
 
Hi,

vielen Dank erstmal für die Antwort und den Ansatz. Heute hatten wir wieder Informatik und unser Lehrer hat uns einen Code gezeigt, werde ihn später vllt. mal hier posten.

Marcellus
 
Hi Marcellus,

hiermit kannst du würfeln

Code:
Var
Zahlen: Array[0..10] Of Integer;
i: Integer;
j: Integer;
Cnt: Integer;
z: Integer;
found: Boolean;

Begin
Cnt := 0; // keine Zahlen im Array
For i := low(Zahlen) To high(Zahlen) Do
Zahlen[i] := 0; // erst mal initialisieren
randomize; // Zufallszahlen initialisieren;
Repeat
z := random(40) + 1; // Zahlen 0..6
found := False;
For j := low(Zahlen) To high(Zahlen) Do
If z = Zahlen[j] Then
Begin
found := True;
break; // Schleife verlassen
End;
If Not found Then // bei neuer Zahl, diese eintragen
Begin
Zahlen[Cnt] := z; // Zahl im Array speichern
inc(Cnt); // Zähler erhöhen
End;
Until Cnt = high(Zahlen) + 1; //alle füllen
Label1.Caption := ''; // Ausgabe zusammenbauen
For i := low(Zahlen) To high(Zahlen) Do
Label1.Caption := Format('%s %d', [Label1.Caption, Zahlen[i]]);
End;

ist alles nicht so schwer wie es aussieht :read:


Gruß
MrOuzo
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten