[C/C++] Borland: Randomize(); [Fragen mischen]

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Flyde, 14. September 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 14. September 2008
    Borland: Randomize(); [Fragen mischen]

    Hi,

    ich mach zur Zeit für die Schule ein Wer wird Millionär Projekt (bzw. wir haben es in der Schule angefangen und mir lässt das keine Ruhe).
    Mein jetziges Ziel:
    - Man hat 4 Fragen in einem Array -- Antwort[0] -> Antwort[3]
    - In einem Array "Save[4]" werden durch eine Schleife mithilfe von "random(4)" [0-3] die Fragen gemischt

    Fehler: Mindestens eine Zahl ist immer doppelt.
    Ansonsten funktioniert alles

    Code:
    void __fastcall TForm1::BtnVerteilerClick(TObject *Sender)
    {
     Randomize(); 
    
     char *Antwort[4]; // Hier werden die 4 Antwortmöglichkeiten gespeichert
    
     int Zufallszahl; // Random(4) wird gespeichert
     int Save[4]= {0}; // Speichern der Random(4) ergebnisse
     int count = 0; // Zähler für die while-schleife
    
     bool bestaetigung = false; // Eine Bestätigung für Count, komischerweise hat count <=4 nicht funktioniert... Wer hier für einen besseren Weg weiß, nur ansagen ^^ 
    
    
     Antwort[0] = "ARRAY[0]"; // Pure Testantworten, brauchen nicht weiter beachtet zu werden
     Antwort[1] = "ARRAY[1]";
     Antwort[2] = "ARRAY[2]";
     Antwort[3] = "ARRAY[3]";
    
     while(count <= 3 && bestaetigung != true) // Solange Count kleiner/gleich 3 ist UND bestaetigung != true...
     {
     Zufallszahl = random(4); // Speichere random(4) in Variable
    
     for(int i=0; i<=3; i++) // Laufvariable 0-3
     {
     if(count != i) // Wenn Count ungleich i ist, dann.. [Damit sorge ich dafür, das die jetzige gesetzte Zufallszahl nicht geprüft wird, denn die wird ja definitiv gleich sein]
     {
     while(Save[i] == Zufallszahl) // So lange Save[i] der eben gesetzten Zufallszahl entspricht...
     {
     Zufallszahl = random(4); // Mische erneut
     }
     }
     }
     Save[count] = Zufallszahl; // Speichere in Save[count] die Zahl.
     count++; // Count = Count + 1
    
     if(count == 4) { bestaetigung = true; } // Wenn Count = 4, Bestaetigung = true
     }
    
    
     antwort_1->Caption = Antwort[Save[0]]; // Hier werden die zufälligen Antworten nur auf die einzelnen Buttons verteilt
     antwort_2->Caption = Antwort[Save[1]];
     antwort_3->Caption = Antwort[Save[2]];
     antwort_4->Caption = Antwort[Save[3]];
    
    }
    Hoffe der Code ist schlüssig genug.
     
  2. 14. September 2008
    AW: Borland: Randomize(); [Fragen mischen]

    Sers,

    am einfachsten ist dieses Prblem wohl zu lösen, wenn man das Array schon
    mit den Werten 0-3 in Folge füllt und dann einfach mehrmals per Zufall
    vertauscht, so kann man siecherstellen das keine Zahl doppelt vorkommt.

    Hier im Spoiler ein Beispielcode:
    Spoiler
    Code:
     int Save[4] = {0, 1, 2, 3};
    
     Randomize();
    
     for (int i=0; i < random(20); i++) //Zufällig mehrmals "Schütteln"
     {
     int a = random(4);
     int b = random(4);
     while (a==b) b = random(4); // Sicherstellen das nicht mit dem selben Element vertauscht wird
    
     int Swap = Save[a]; //Vertauschen
     Save[a] = Save[b];
     Save[b] = Swap;
     }
    Mfg Rushh0ur
     
  3. 14. September 2008
    AW: Borland: Randomize(); [Fragen mischen]

    Oh mein gott oO
    1. Es funzt
    2. Wär ich nieeeeeeemals auf diese idee gekommen ...

    Danke, aber eins wüsste ich gerne noch...

    Code:
    for (int i=0; i < random(20); i++)
    Rein logisch... i = 0, wenn i kleiner als random(20) ist.. wird quasi unterschiedlich oft "geschüttelt"?
    i=0 - Random=15, i+1 ...... i = 16 -> Random = 15 und dann ist die for schleife beendet?
     
  4. 14. September 2008
    AW: Borland: Randomize(); [Fragen mischen]

    In dem Fall, erreicht i nicht die 16, sondern wird sobald i den Wert von 15 enthällt nicht mehr ausgeführt; wenn der Vergleichsoperator <= wäre dann würde auch der 15 Durchlauf durchgeführt.

    Außerdem wird die Funktion random im Schleifen Header immer wieder Neu ausgewehrtet,
    dh. es wird jedes mal eine neuer Zufallswert berechnet mit dem geprüfft wird ob die Schleife
    nochmals ausgeführt wird.

    Mfg Rushh0ur
     
  5. 14. September 2008
    AW: Borland: Randomize(); [Fragen mischen]

    Okay Danke dir, hab ich wieder was gelernt
    Werd mal in 1-2 Wochen mein Wer wird Millionär im Showcase vorstellen

    Aber bis dahin -> Close
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.