Wie vorzeitig Schleife beenden?



  • Hallo, ich hab mal wieder eine Frage (weiß garnicht, wie ich bis vor kurzem noch ohne das Forum leben konnte...)!

    Ich habe mir eine schöne for-Schleife gebaut, die im Verlauf ein paar Kosinus und Arkuskosinus berechnet und mir am Ende einen bestimmten Wert für y ausgibt.
    Also etwa so:
    for (i=0; y!=50; i++) {
    a=b+i;
    x=cos(a);
    d=acos(x); ...

    Das Problem ist nun folgendes:
    Ab und an wird der Arkuskosinus nicht definiert (für 0> x >1) und er bricht quasi die ganze Schleife ab und springt raus. Die Schleife soll dennoch weiter durchlaufen werden, da ich weiss, dass irgendwann wieder Werte x kommen, für die der Arkuskosinus definiert ist.
    Frage nun:
    Was kann ich machen, damit bei einem Wert x> 1 die Schleife zwar sofort beendet wird, aber wieder von vorn anfängt mit dem nächsthöheren i, quasi solange bis meine Bedingung y!= 50 erfüllt ist?

    Schon mal danke im Voraus
    Jannek



  • continue; springt zurück an den Schleifenanfang (und der Vollständigkeit halber: break; springt aus der Schleife raus).

    PS: Wie kann x eigentlich aus dem Definitionsbereich der acos()-Funktion herausfallen? x=cos(a; liefert doch nur Werte im Bereich von -1 bis 1.



  • sollte das dann ungefähr so aussehen?

    ....
    x=cos(a);
    if (x>1)
    break;
    continue;
    else d=acos(x); ...

    das Programm ich natürlich anders, als das was ich hier aufgeschrieben hab. Wollte damit nur verdeutlichen wie ich das mit den Funktionen innerhalb der Schleife meine. Meine Funktionen sind so arg komplex, dass ich sie hier nicht hinschreiben woll.
    Ich versuchs erstmal wie du vorschlägst.



  • Jannek schrieb:

    sollte das dann ungefähr so aussehen?

    Nein, du brauchst an einer bestimmten Stelle normalerweise nur eins von beidem (und in deinem Fall nur continue):

    for(...)
    {
      ...
      x=whatever();
      if(fabs(x)>1) continue;//Bei Fehler - zurück an anfang und nächsten Durchlauf berechnen
      d=acos(x);
      ...
    }
    


  • MERCi!!!!

    Es hat geklappt!!!


Anmelden zum Antworten