Berechnung der n-ten Wurzel mit Iterationsverfahren



  • Also sowas hier wäre mein Ansatz aber dann bin ich echt schon aufgeschmissen... Bitte mal weiterhelfen!

    #include <stdio.h>
    #include <math.h>
    #include <conio.h>

    main ()
    { int n, a, potenz, i, zaehl=0;
    float x1=1, x2=0, absdiff=0, genau=0,00000008;

    printf("Wert für n: ");
    scanf("%i", &n);
    printf("Wert für a: ");
    scanf("%i", &n);

    while (absdiff<=genau)
    {
    x2=1/n((n-1)*x1+(a/(x1 hoch n-1?));
    absdiff=x1-x2;
    }

    printf("x1= ", x1);
    printf("zaehl= ", zaehl);
    }



  • Das sieht doch eigentlich schon mal ganz gut aus. Ich kann auf Anhieb eigentlich nur drei kleine Fehler entdecken.

    1. Die Laufbedingung deiner while-Schleife passt so nicht. Die Schleife soll ja laufen, so lange die Differenz [b}größer[/b] als die angegebene Genauigkeit ist.

    2. Du brauchst eine Funktion zur Berechnung der Potenz. Steht ja auch im Hinweis deiner Aufgabe, dass man das am Besten durch mehrmaliges multiplizieren löst -> Schleife.

    2 1/2. Du solltest das Ergebnis des aktuellen Iterationschrittes so zwischen speichern, dass er im nächsten Schritt wieder als x1 verfügbar ist.

    3. Du musst bei der Ausgabe einen Formatbezeichner (%f) angeben, sonst wird nichts ausgegeben.

    PS: Das hier ist das C#-Forum, einige Leute werden hier zwar auch Ahnung von C haben, aber besser aufgehoben wärst du bei ANSI C. Verwende das nächste Mal bitte die [ code] -Tags, das erleichtert das Lesen des Codes ungemein.



  • Also Punk 1 und 3 hab ich jetzt soweit abgeändert aber wie ich die beiden 2er Punkte angehe ist mir völlig unklar....Außerdem ergibt die Variable zaehl im Moment ja noch gar keinen Sinn und ich weiß auch nicht wozu die gut sein soll...



  • Ich habe gerade gesehen, dass du den Header math.h einbindest, dann kannst du dir umständliche Berechnung von x1^n-1 mit einer Schleife eigentlich auch sparen und die Funktion pow dafür benutzen.

    Wofür die Variable zeahl gut sein soll kann ich mir auch nicht so recht erklären. Entweder soll man damit die benötigten Iterationsschritte zählen oder sie ist wirklich für die Berechnung der Potenz mit einer Schleife gedacht.



  • Ja nee die include Geschichten hab ich nur hingeschrieben, weil die bis jetzt immer dabei waren.... in der Aufgabenstellung steht aber leider dass es mit einer while-schleife erledigt werden soll, weiß ja jetzt immer nochnicht wie ich die mache. anscheinend mit zaehl?



  • So hier der aktuelle Programmcode + Fehlermeldungen, hoffe mich bringt hier bald jemand ans Ziel, die Zeit läuft mir davon...

    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    
    main ()
    {	int		n, a, potenz, i, zaehl=0;
    	float	x1=1, x2=0, absdiff=0, genau=0.00000001;
    
    	printf("Wert für n: ");
    	scanf("%i", &n);
    	printf("Wert für a: ");
    	scanf("%i", &a);
    
    	while (absdiff>genau)
    		{
    			x2=1/n((n-1)*x1+(a/(x1 hoch n-1?)));
    			absdiff=x1-x2;
    		}
    
    	printf("x1= %f", x1);
    	printf("zaehl= %f", zaehl);
    }
    
    1>------ Erstellen gestartet: Projekt: p4_a1, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>p4_a1.c
    1>e:\dokumente und einstellungen\willi\desktop\c testat\p4_a1.c(7) : warning C4305: 'Initialisierung': Verkürzung von 'double' in 'float'
    1>e:\dokumente und einstellungen\willi\desktop\c testat\p4_a1.c(10) : warning C4996: 'scanf' wurde als veraltet deklariert
    1>        f:\programme\microsoft visual studio 8\vc\include\stdio.h(295): Siehe Deklaration von 'scanf'
    1>        Meldung: "This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."
    1>e:\dokumente und einstellungen\willi\desktop\c testat\p4_a1.c(12) : warning C4996: 'scanf' wurde als veraltet deklariert
    1>        f:\programme\microsoft visual studio 8\vc\include\stdio.h(295): Siehe Deklaration von 'scanf'
    1>        Meldung: "This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."
    1>e:\dokumente und einstellungen\willi\desktop\c testat\p4_a1.c(16) : error C2063: 'n': Keine Funktion
    1>e:\dokumente und einstellungen\willi\desktop\c testat\p4_a1.c(16) : error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'hoch'
    1>Das Buildprotokoll wurde unter "file://e:\Dokumente und Einstellungen\Willi\Desktop\C Testat\p4_a1\p4_a1\Debug\BuildLog.htm" gespeichert.
    1>p4_a1 - 2 Fehler, 3 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • #include <stdio.h>
    #include <math.h>

    main()
    {
    int n, i;
    double x=1, a;
    printf("Wert n fuer n-te Wurzel: ");
    scanf("%i",&n);
    printf("Wert von dem die n-te Wurzel gezogen werden soll: ");
    scanf("%lf",&a);
    if(a<0)
    {
    printf("nicht lösbar");
    }
    if(n==0)
    {
    printf("nicht lösbar");
    }

    while((x=(x+1)/x)>=0,00000001)
    x=1/n((n-1)x+(a/x ;
    printf("\n x= %lf \n\n\n",x);
    }

    wie sieht das aus? muss das gleich machen. fehlt nich was in der formel und so aber sonst das gerüst??



  • ich meinte es fehlt noch was in der formel



  • follfosten wer bist du? hast schon richtiges programm zum schreiben oder? woher? brauch das auch mal.



  • Ein kleiner, aber wichtiger Tip für deinen nächsten Thread Follfosten, wähle das Forum sorgfältiger aus.
    Nur weil hier was von C steht, hat das noch lange nichts mit dem C zu tuen.



  • Also ich hab das Programm fertig, hab nämlich die gleiche aufgabenstellung...
    Habs zwar auch nur bekommen aber man kann es dann einfacher verstehn...
    jetzt brauchste es aber auch nicht mehr oder?


Anmelden zum Antworten