zulällige zahl mit auslassungen

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

  • zulällige zahl mit auslassungen

    wenn ich

    GML-Quellcode

    1. zahl=random(50);
    mache und dann z.B. die zahl 15 kommt dann soll

    GML-Quellcode

    1. global.15+1
    passieren und dann soll aber nie wieder bei random die zahl 15 vorkommen, wie macht man das



    PS: ich war lange nicht mehr on und kenne mich nicht mehr so gut aus also bitte nicht meckern :)
  • global.15+1?
    das ist irgendwie nicht korrekt^^
    ersteinmal kannst du konstanten(und zahlen sind konstante) nicht verändern, zweitens kann der variablenname nicht nur aus zahlen bestehn, drittens muss da eine gleichung sein, also zB a=15
    wenn du die zahl +1 rechnen möchtest, wenn sie 15 ist, dann könnte das etwa so aussehen:

    GML-Quellcode

    1. zahl=random(50); //ceil(random(50)) wäre angebracht, um eine ganze zahl zurückzugeben
    2. if (zahl==15)// wenn zahl gleich 15 ist
    3. {zahl+=1 }//das selbe wie zahl=zahl+1 also zu zahl wird 1 dazugerechnet
    "das war meine letzte flamewar PM an dich ."

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von blubberblub ()

  • Zuerst einmal: Wie Windapple in diesem tollem Artikel schreibt, sollte man floor() benutzen, um bei random() zu runden:

    GML-Quellcode

    1. zahl = floor(random(50))

    Das Ergebnis wäre eine ganze Zahl zwsichen 0 und 49 (einschließlich). Da du das Problem nur so schlecht beschrieben hast ist es schwer, dir zu helfen. Ich nehme einfach mal an, das du z.B. eine Lottoziehung simulieren willst. Ich würde die gezogenen Zahlen in einem Array ablegen.

    GML-Quellcode

    1. var zahl;
    2. var zahlen;
    3. var i;
    4. for (i := 0; i < 6; i += 1) zahlen[i] := 0; // Sicherstellen, das alle Elemente im Array 0 sind
    5. for (i := 0; i < 6; i += 1) {
    6. do {
    7. zahl := floor(random(49)) + 1;
    8. } until (zahl != zahlen[0] && zahl != zahlen[1] && zahl != zahlen[2] &&
    9. zahl != zahlen[3] && zahl != zahlen[4] && zahl != zahlen[5])
    10. zahlen[i] := zahl;
    11. }
    12. // Irgendwas mit den Zahlen machen
    Alles anzeigen


    Die do-Schleife hat hier den Vorteil gegenüber der while-Schleife, das ihr Inhalt mindestens einmal ausgeführt wird, also die Zahl generiert und solange geändert wird bis der Wert keine probleme mehr macht. Dabei habe ich ausgenutzt, das floor(random(49)) + 1 niemals 0 ergibt.
  • Erzeuge einfach ein array mit n feldern, wobei n die Anzahl der möglichen Zahlen ist
    und initialisiere jeden Wert mit false, d.h. ist noch nicht erschienen.
    Dann erzeuge die Zufallszahl. Jedesmal nach dem erzeugen schauen: ist
    array[zahl] noch false? Wenn demnach die Zahl noch nicht vorkam, setze das entsprechende
    Feld auf true und verwende die Zahl. Wenn die Zahl schon vorkam, erneut eine Zahl
    erzeugen.
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • Bin mir jetzt zwar nicht ganz sicher, ob das richtig ist (C++ geschädigt :rolleyes: )
    aber so könnt es gehen (erklärung in meinem letzten Post):

    GML-Quellcode

    1. //array mit 46 feldern füllen
    2. for (i=0;i<46;i+=1)
    3. {
    4. numbers[i]=false;
    5. }
    6. for (out=0;out<6;out+=1)
    7. { //nur begrenzte anzahl zufallszahlen
    8. weitermachen=false;
    9. while (weitermachen==false)
    10. {
    11. //zufallszahl erzeugen und testen
    12. xx=round(random(46));
    13. if (numbers[xx-1]==false)
    14. {//Zufallszahl neu
    15. numbers[xx-1]=true;
    16. weitermachen=true;
    17. zufallsz[out]=xx;
    18. }
    19. }
    20. }
    Alles anzeigen
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____