Berechnung der n-ten Wurzel mit Iterationsverfahren



  • AndreasBo schrieb:

    Das ist bestimmt ein Test, wie hilfsbereit die User
    dieses Forums sind

    bestimmt, und dann noch die unregs. pointercrash und supertux hätten vor wut bestimmt schon längst ins keyboard gebissen *fg*
    🙂



  • Ok, wir sind geduldig...

    Ändere

    for (;;)
    

    in
    [cpp] for (int i = 0; i < 20; i++)

    [cpp]

    dann hast du max 20 Schleifendurchläufe
    und kannst sehen ob die Lösung
    gegen 5. Wurzel aus 1024 (z.B.) konvergiert



  • AndreasBo schrieb:

    for (int i = 0; i < 20; i++)

    ^^ neiiin! wenn er jetzt keinen c99 compiler verwendet, gibts wieder 5 seiten fragen.
    🙂



  • Entschuldigung!

    Also so:

    int i;
    
    .
    .
    .
    .
    
    for (i = 0; i < 20; i++)
    


  • Da ihr ja anscheinend Spaß an meinen "blöden" Fragen gefunden habt, hätt ich noch eine abschließende:

    Das Programm scheint ja jetzt zu laufen allerdings schließt sich das Fenster immer sofort wenns mit dem berechnen fertig ist...ich find hier aber nix zum Einstellen, dass das offen bleibt und man das Ergebnis ablesen kann...?!



  • Das ist auch der Sinn der Sache. Ein Programm das fertig abgearbeitet ist, beendet sich. Wenn du das nicht willst, starte es aus der cmd, was das beste wäre. Oder du machst ans Ende des Codes ein getchar();



  • Nein, wir helfen gern. Ich habe hier selbst
    auch schon Fragen gestellt und mir wurde geholfen.

    Zu deinem Problem:

    Baue der Einfachheit halber am Ende noch eine unnötige scanf Anweisung ein,
    dann schließt sich dein Fenster nicht sofort wieder.



  • Na das Ding ist, dass bei den anderen Programmen, die wir bis jetzt hatten immer automatisch (zumindest hab ich das gefühl) folgendes kam: "Drücken Sie eine beliebige Taste..."

    das mit dem getchar klappt nich (hab ich bestimmt falsch gemacht)

    mit dem scanf klappt, aber dann kommt wieder son fehlerfenster (ist ja auch nich so schön...)



  • Wie genmutant schreibt. Öffne ein DOS-Fenster (das schwarze Ding)
    auch Eingabeaufforderung genannt.

    Wenn du dann dein Prog. aufrufst (richtiges Verzeichnis vorausgesetzt)
    dann erscheint auch die Meldung: Bitte zum Beenden eine Taste drücken...



  • AndreasBo schrieb:

    Nein, wir helfen gern.

    im grunde ja, aber wenn der patient so ungeholfen ist wie 'Follfosten' (woher der name wohl kommt *fg*), nicht mal copy&paste auf die reihe bringt, usw. dann wird's irgendwann frustrierend. naja, hauptsache der hausaufgaben-fertigdienst hat wieder seine schuldigkeit getan.
    🙂



  • Das getchar(); würde funktionieren, wenn du davor den Eingabepuffer lehren würdest. Dazu solltest du mal in die FAQ gucken, dein fflush ist nämlich nicht zu empfehlen.



  • #include<stdio.h> //Bilbliotek mit Standartbegriffen..
    //..einbinden (void, int, main...)
    #include<math.h> //Bilbliotek mit Mathematischen Funktionen..
    //..einbinden (sin, sqrt)
    void main() //Hauptprogramm: Funktion, die keinen..
    //..Rückgabewert liefert
    {
    int n,i,zaehler=0; //ganzzahlige Variablen
    double a,x1=1,x2,pot,diff=1; //rationale Variablen x1=1 damit..
    //..Potenzberechnung definierten Anfangswert hat
    //diff=1 Wileschleife definierter Start
    printf("\t 'n'-TE Wurzel Aus 'A' \n");
    printf("\n\n\n\n");

    printf("Eingabe der Ordnung der Wurzel n ein! ");
    scanf("%i",&n); //Einlesen der Ordnung, speichern in n

    printf("\n\n Zahl A eingeben: "); //Einlesen der Zahl, speichern in a
    scanf("%lf",&a);

    if(n==1) //wenn die Ordnung gleich 1 ist a ist Ergebnis
    {
    printf("\n\n\tDie %d-te Wurzel von %lf = %lf\n\n",n,a,a);
    }

    else
    {
    if(n<0 || (n%2==0 && a<0)) //negative Ordnung ausschließen sonst..
    //..Potenzberechnung Endlosschleife
    //keine geradzahlige Ordnung negativer Zahlen
    {
    printf("\n\n\t Kein Ergebnis, da keine gerade Wurzel aus einer negativen Zahl gezogen werden kann!\n\n\n");

    }
    else //Ende der Eingabeprüfung
    {
    while(diff > 0.00000001) //solange diff kleiner 1*10^(-8) Schleife aus
    {
    //BERECHNUNG der Potenz X^n-1

    pot = x1;

    for(i=0;i<n-2;i++)
    {
    pot = pot * x1;
    }
    //Iteration

    x2 = ((n-1)*x1 + (a/pot))/n;

    diff = fabs(x2-x1); //Betrag von x2-x1 bilden
    x1 = x2; //x2 wird neuer Startwert x1
    zaehler=zaehler+1; //Iterationschritte zählen
    }
    printf("\n\n\n\tDie %d-te Wurzel von %lf = %lf",n,a,x2);
    printf("\n\n\n\nDie Iteration wurde %i mal durchgefuerht\n\n",zähler);
    }
    }
    }

    Die Kommentare sind immer dahinter mit // geschrieben

    viel spaß damit...



  • Damit sind doch alle sinnlosen Diskussionen beseitigt...


Anmelden zum Antworten