For- Schleifen Fehler

  • For- Schleifen Fehler

    Hallo,
    ich habe einen Script geschrieben, der die Primzahlen von... bis... auflistet:

    Spoiler anzeigen

    GML-Quellcode

    1. // =Primzahlauflistung=
    2. auswahl = show_menu('Primzahlen von x bis y|Primzahlen von 0 bis x',1);
    3. zahl_von=0
    4. if (auswahl==0)
    5. {
    6. zahl_von=get_integer('Primzahl von',0) //Anfang der Primzahlliste
    7. }
    8. zahl_bis=get_integer('Primzahl bis',100) //Ende der Primzahlliste
    9. text = 'Primzahlen von' + string(zahl_von) + 'bis' string(zahl_bis) + ':#'
    10. //Anfsngstext
    11. //Äussere Schleife Zahlen
    12. for (i=zahl_von ; (i<=zahl_bis) ; i+=1)
    13. {
    14. primzahl=true
    15. if (i!=2)
    16. //innere Schleife: wird getestet ob es eine Primzahl ist. (bei zwei wird es gleich als falsch gewertet))
    17. {
    18. for (j=2; j<=i/2; j+=1)
    19. {
    20. if ((i mod j)==0)
    21. primzahl=false;
    22. break;
    23. }
    24. }
    25. if (primzahl)
    26. {
    27. text += string(i) + '#'
    28. }
    29. }
    30. show_message(text)
    Alles anzeigen




    Nur kommt dann immer diese Fehlermeldung:
    Spoiler anzeigen
    COMPILATION ERROR in Script: scr_primzahlen
    Error in code at line 17:
    for (i=zahl_von ; (i<=zahl_bis) ; i+=1)

    at position 2: Variable name expected.



    Ich kann den Fehler nicht finden!!
    Ich bitte um Hilfe,
    maxda
  • Jo, hab den Script mal getestet.
    Der Fehler liegt in Zeile 13.
    text = 'Primzahlen von' + string(zahl_von) + 'bis' string(zahl_bis) + ':#'
    Ich nehm mal an, da fehlt ein '+':
    text = 'Primzahlen von' + string(zahl_von) + 'bis' + string(zahl_bis) + ':#'
  • Schonmal daran gedacht, generell einen anderen Algorithmus zu verwenden? Dieses Durchlaufen aller Vorgänger bis i/2 kann bei hinreichend großen Zahlen schon sehr viel Zeit fressen. Für sowas gibt es das "Sieb des Eratosthenes", bei dem du zunächst alle Zahlen bis zu der Zahl, bis zu der du alle Primzahlen wissen willst, aufschreibst, dann bei der 2 anfägst, und für jede noch verblienebe Zahl alle Vielfachen rausstreichst. Nun weiß ich nicht, wie teuer Zugriffe auf Datenstrukturen , aber falls diese genausoviel kosten, wie ein Zugriff auf ein Array, kannst du im GM diese Implementierung verwenden, andernfalls schreib einfach den Code von der Wikipedia in GML um.

    Spoiler anzeigen

    GML-Quellcode

    1. /* Sieb des Eratosthenes
    2. * argument0 - Ende
    3. */
    4. var i,j,lst,erg;
    5. lst:=ds_list_create();
    6. erg:="";
    7. for(i:=2;i<=argument0;i+=1){
    8. ds_list_add(lst,i);
    9. }
    10. for(i:=0;i<ds_list_size(lst);i+=1){
    11. for(j:=i+1;j<ds_list_size(lst);{}){
    12. if(ds_list_find_value(lst,j) mod ds_list_find_value(lst,i) == 0){
    13. ds_list_delete(lst,j);
    14. } else {
    15. j+=1;
    16. }
    17. }
    18. erg+=string(ds_list_find_value(lst,i))+" ";
    19. }
    20. return erg;
    Alles anzeigen
  • Benutzer online 1

    1 Besucher