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; 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
Narses: 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
Jeszy hat folgendes geschrieben : |
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.
Jeszy hat folgendes geschrieben : |
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
Jeszy hat folgendes geschrieben : |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!