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

  • geschlossen
  • Delphi

  • Marcellus
  • 1625 Aufrufe 3 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

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

    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:

    Quellcode

    1. while wahr = true do
    2. begin
    3. while loop3 < arr do // arr ist die Größe (Länge) des Arrays
    4. begin
    5. for loop4 := 0 to arr do
    6. begin
    7. wahr:=true;
    8. if loop3 <> loop4 then
    9. begin
    10. if Zahlen[loop3] = Zahlen[loop4] then
    11. Zahlen[loop3]:= random(40)+1
    12. else
    13. wahr := false;
    14. end;
    15. end;
    16. loop4:= 0;
    17. loop3 := loop3 +1;
    18. end;
    19. loop3:= 0;
    20. end;
    Alles anzeigen


    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:

    Quellcode

    1. // Funktion prüft, ob Zufallszahl $zahl schon im Array $array ist
    2. function exisitiert_lottozahl($array, $zahl) {
    3. for($i = 0; $i < maxindex($array); $i++) {
    4. if($array[$i] == $zahl) return true;
    5. }
    6. return false;
    7. }
    8. // Container-Array für Zufallszahlen.
    9. $lottozahlen = array();
    10. // 6 Durchläufe für die Lottozahlen.
    11. for($i = 1; $i <= 6; $i++) {
    12. // Endlosschleife, die erst dann verlassen wird, wenn
    13. // eine noch nicht gewählte Zahl gefunden wurde.
    14. while(true) {
    15. // Zufallszahl erzeugen (zwischen 1 - 49).
    16. $zufallszahl = rand(1, 49);
    17. // Existiert die Zufallszahl schon im Ergebnis-Array?
    18. if(exisitiert_lottozahl($lottozahlen, $zufallszahl) == false) {
    19. // Lottozahl exisitert nicht, also hinzufügen
    20. $lottozahlen[] = $zufallszahl;
    21. // Schleife beenden
    22. break;
    23. }
    24. }
    25. }
    Alles anzeigen

    Am Ende befinden sich im Array $lottozahlen sechs unterschiedliche Zufallszahlen zwischen 1-49. Zumindest glaube ich das ;)

    HTH
    "Ich habe ein einfaches Rezept, um fit zu bleiben - Ich laufe jeden Tag Amok."
    [SIZE="1"]Hildegard Knef (1925-2002), dt. Schauspielerin, Chansonsängerin und Autorin [/SIZE]
  • Hi Marcellus,

    hiermit kannst du würfeln

    Quellcode

    1. Var
    2. Zahlen: Array[0..10] Of Integer;
    3. i: Integer;
    4. j: Integer;
    5. Cnt: Integer;
    6. z: Integer;
    7. found: Boolean;
    8. Begin
    9. Cnt := 0; // keine Zahlen im Array
    10. For i := low(Zahlen) To high(Zahlen) Do
    11. Zahlen[i] := 0; // erst mal initialisieren
    12. randomize; // Zufallszahlen initialisieren;
    13. Repeat
    14. z := random(40) + 1; // Zahlen 0..6
    15. found := False;
    16. For j := low(Zahlen) To high(Zahlen) Do
    17. If z = Zahlen[j] Then
    18. Begin
    19. found := True;
    20. break; // Schleife verlassen
    21. End;
    22. If Not found Then // bei neuer Zahl, diese eintragen
    23. Begin
    24. Zahlen[Cnt] := z; // Zahl im Array speichern
    25. inc(Cnt); // Zähler erhöhen
    26. End;
    27. Until Cnt = high(Zahlen) + 1; //alle füllen
    28. Label1.Caption := ''; // Ausgabe zusammenbauen
    29. For i := low(Zahlen) To high(Zahlen) Do
    30. Label1.Caption := Format('%s %d', [Label1.Caption, Zahlen[i]]);
    31. End;
    Alles anzeigen


    ist alles nicht so schwer wie es aussieht :read:


    Gruß
    MrOuzo