Zwei for-Schleifen hintereinander ...?!?!



  • Im grunde genommen eigentlich nur den verflixten Wert für x rausbekommen, der rauskommt, wenn die zweite schleife bei y >5 abbricht. Das würde mir bei meiner eigentlichen Aufgabe weiterhelfen, weil ich dann offensichtlich mal das System verstanden hätte.

    Sinn der ersten Schleife:

    for (i=0; q>= 344; i=i+0.01)
    

    Das heißt also, die Gleichungen im Schleifenkörper tasten sich langsam an ein 'q' bis es dann kleiner 344 wird.
    In der der zweiten Schleife soll dann folgendes passieren:

    for(x=360; r>= 344; x=x-0.01)
    

    Das heißt also, hier wird sich wieder an die 344 rangetastet, bis r dann mal kleiner wird. Die Funktionen u Gleichungen in den beiden Schleifenkörpern sind jedesmal die selben.

    Das zweimal Werte für 'q' und 'r' rauskommen können, die jeweils >344 sind liegt an den Sinus- und Kosinusfunktionen, die verwendet werden.
    Am Ende soll mit den 'x' bzw. 'i'-Werten, bei denen abgebrochen wurde weitergerechnet werden und jeweils ganzs am des Programms die jeweiligen Ergebnisse verglichen werden.

    Ist recht umfangreich, weshalb ich das jetzt hier auch nciht reinsetze. Aber vielleicht hast du ja einen Tip wegen dem im letzten Threat platzierten Schleifenproblem.

    Merci



  • Wenn du nur den Schleifenkopf reinsetzt, hilft das bei der Analyse nicht wirklich weiter (und deine Erklärung ist auch reichlich ..hm.. kryptisch).

    *versucht, etwas zu raten*

    for(i=0;q<=val;i+=0.01)
      q = irgendeine_funktion(i);
    

    Damit berechnest du die Funktion nacheinander für verschiedene Werte - am Ende hast du in i den ersten Wert, der größer als val wurde.

    Analog dazu:

    for(i=360;q<=val;i-=0.01)
      q = irgendeine_funktion(i);
    

    Das tastet den Wertebereich von hinten her ab - du erhältst also den letzten Wert, der größer als val wurde.

    Welche Beziehung soll zwischen diesen Werten bestehen? Was genau hast du (inhaltlich!!) vor? Passt meine Interpretation ungefähr auf dein Problem?



  • Was du meinst ist vollkommen verständlich (im Gegensatz zu meinen Erklärungen 😋). Aber das Problem ist immernoch dass ich irgendwas falsch mache.

    Guck dir mal das klein (sinnloses) Programm an (hat jetzt nichts mit dem eigentlichen zu tun) und lass das mal laufen. Ich find den Fehler nicht und versteh deshalb auch mein Problem nicht....

    #include<stdio.h>
    #include<math.h>
    int main (void) 
    { 
    int z=10; 
    int b= 2; 
    double a, c, i , y, x; 
    
    for (i=0; c<=z; i+=0.01) 
    {a= i+b; 
    c= a+b; } 
    printf ("i: %f\na: %f\nc: %f\n\n", i, a, c); 
    
    for (x=i; y<=5; x-=1) 
    {y=10-x;} 
    printf ("x: %f\ny: %.f\n\n\n", x, y); 
    return 0; 
    }
    

    Wieso haut´n das z.B. nicht hin?!?!
    Danke nochmal wegen dem Hinweis für die Farben - sieht echt übersichticher aus...



  • Jannek schrieb:

    Guck dir mal das klein (sinnloses) Programm an (hat jetzt nichts mit dem eigentlichen zu tun) und lass das mal laufen. Ich find den Fehler nicht und versteh deshalb auch mein Problem nicht....

    Dann solltest du wenigstens einschränken können, was an diesem Programm nicht stimmt (und was es eigentlich machen sollte). Ich kann hier nur erkennen, was es macht.

    Die erste Schleife addiert zu allen Zahlen von 0 (in 0.01-Schritten) zweimal hintereinander den Wert 2 (b) auf, bis es über 10 kommt, danach werden die Endwerte dieser Rechnung ausgegeben (i=6.01*, a=8.01, c=10.01).
    Die zweite Schleife läuft vom Endpunkt der ersten Schleife in Einerschritten abwärts, bis y größer als 5 wird (was gleichbedeutend ist mit x<5), und gibt wieder die Endwerte aus (x=4.01, y=5.99).

    Stimmt das ungefähr mit dem überein, was du vorhattest?

    * könnte auch sein, daß hier 6.02 drinsteht - bei der Arbeitsreihenfolge der for()-Schleife bin ich etwas unsicher



  • Ja genau, so sollte es sein. Aber bei mir gibt er nur die Werte für die erste Schleife aus und dann noch für die zweite Schleife
    x = 6.02 und für y irgendeine ewiglange Zahl. Keine Ahnung wo er die herhat.
    Und wie gesagt, springt das Programm auch gleich danach raus aus der Schleife.

    Hach, ich glaub ich gebs langsam auf.... 😞
    Werd es wohl nie kappieren. So macht das echt keine Spaß.....
    Kann doch nicht so schwer sein...



  • Da könnte es auch sein, daß du vergessen hast, die Werte zu initialisieren (wenn du einfach nur double x; angibst, wird die Variable mit einem willkürlichen Wert aufgefüllt - um einen definierten Startwert zu haben, mußt du double x=0; angeben).



  • Haha, es funktioniert!!!!!!!!!!

    Es lag nicht direkt an der Initialisierung. Ich habe doch x und den anderen Werten 'double' zu gewiesen.
    Jetzt hab ich das mal als Akt der letzten Hoffnung in ein 'float' umgewandelt und siehe da... es funktioniert!!!!

    Bleibt nur noch die Frage: was genau ist denn den Unterschied zw. double und float. Ich dacht immer die nehmen sich nicht so viel.



  • Purer Zufall.

    Initialisiere sie, dann wird's mit double auch gehen. Oder anders:

    double x;
    for ( ... ; x >= 10 ; ... ) {
    }
    

    Welchen Wert hat x vor der Schleife bzw. im ersten Durchlauf? Egal, wie Du antworten wirst, es stimmt nicht. Du gehst in Deinen Schleifen offenbar von irgendeiner Voraussetzung aus, die die Sprache C Dir aber nicht gibt!



  • Wenn ich x so wie du vorgeschlagen hast initaliseren funktioniert es auch, aber ich möchte ja y als Bedingung haben. D.h. y sollte in der for-Klammer stehen (irgendwie).....

    Du siehst mich langsam ratlos.



  • Was LordJaxom dort oben für x gesagt hat, gilt natürlich auch analog für JEDE Variable, die in deinem Programm vorkommt - solange du ihr keinen Wert zugewiesen hast, ist ihr Inhalt "undefiniert" (das ist die exakte Bezeichnung für "willkürlich").



  • Okay, jetzt hab ich´s endlich verstanden.
    Hab den Wert 'y' vor der Schleife =Null gesetzt und jetzt funktioniert es einwandfrei.
    Konnte das dann auch gleich bei meinem eigentlichen Programm so machen.

    Danke nochmal für Eure Hilfe und Geduld.


Anmelden zum Antworten