Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Wie kann ich vermeiden, dass eine Zahl doppelt vorkommt ?


Jeszy - Di 21.02.12 11:08
Titel: Wie kann ich vermeiden, dass eine Zahl doppelt vorkommt ?
Ich bin grade dabei Mastermind zu programmieren, also ein Spiel bei dem man einen Zahlencode erraten muss.

der Zahlencode besteht aus 4 Zahlen zwischen 1 und 6. Das Problem besteht nun darin, dass mir nichts einfällt, wie ich verhindern kann, dass eine der Zahlen doppelt vorkommt in dem Code. Könnt ihr mir eine Lösung verraten ?

Die Schleifen mit while und repeat until wollten bei mir nicht wirklich funktionieren, ich denke ich habe was falsch gemacht.

hier könnt ihr sehen wie der code bislang erstellt wird :
:D


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
randomize;  //Code wird festgelegt

c1:=random(6}+1;
c2:=random(6}+1;
c3:=random(6)+1;
c4:=random(6)+1;

code1.Caption:=inttostr(c1);
code2.Caption:=inttostr(c2);
code3.Caption:=inttostr(c3);
code4.Caption:=inttostr(c4);


Moderiert von user profile iconNarses: Code in Delphi-Tags hinzugefügt, Anhang gelöscht.


jaenicke - Di 21.02.12 11:30

Es wäre sinnvoller den Code direkt in den passenden Tags zu posten:

Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG4e012be8e1f8a417ef25d2a2f99a41ff}</span></span>                    


Ja, für dein Problem gibt es eine einfache Lösung:
Nicht würfeln, sondern alle 6 möglichen Zahlen mischen und die ersten 4 Zahlen nehmen. ;-)
http://www.delphi-library.de/viewtopic.php?t=71713


Delphi-Laie - Di 21.02.12 13:37

user profile iconJeszy hat folgendes geschrieben Zum zitierten Posting springen:
wie ich verhindern kann, dass eine der Zahlen doppelt vorkommt in dem Code.
Könnt ihr mir eine Lösung verraten ?


Ja!

Mit einer Zufallspermutation aller Zahlen von 1 bis 6. Damit auch bei der Permutation nicht zufällig falschgewählt wird, empfiehlt sich der Permutationsgenerationsalgorithmus nach Fisher-Yates.

user profile iconJeszy hat folgendes geschrieben Zum zitierten Posting springen:
Die Schleifen mit while und repeat until wollten bei mir nicht wirklich funktionieren,


Nich wirklich? Also unwirklich?

repeat-until-Schleifen funktionieren immer, bestenfalls führen die Anweisungen innerhalb der Schleife nicht das aus, was bezweckt ist.


Fiete - Di 21.02.12 19:40

Moin Jeszy.
eine einfache Lösung könnte so aussehen
Variablennamen und Wertebereich mußt Du anpassen :?

Delphi-Quelltext
1:
2:
3:
4:
z1:=random(5)+1;
repeat z2:=random(5)+1 until z1<>z2;
repeat z3:=random(5)+1 until (z1<>z3) and (z2<>z3);
repeat z4:=random(5)+1 until (z1<>z4) and (z2<>z4) and (z3<>z4);


Gruß Fiete


Delete - Fr 24.02.12 11:36

user profile iconJeszy hat folgendes geschrieben Zum zitierten Posting springen:
Mastermind - wie ich verhindern kann, dass eine der Zahlen doppelt vorkommt


Wieso willst du das überhaupt verhindern? Im "echten" Mastermind kann man Farben auch doppelt verwenden ...


jaenicke - Fr 24.02.12 11:40

Vielleicht um eine einfachere Stufe anzubieten? Ich kenne auch einen solchen Modus.