Hallo,
habe ein Problem mit meinem C-Code. Das Programm das ich geschrieben habe berechnet mir nicht die richtigen Nullstellen aus und ich weiss jetzt nicht wo das Problem liegen könnte.
z. B.: für bei den Eingaben:
- Auswahl der Funktion: 5
- Intervallgrenze a: 0
- Intervallgrenze b: 2
- Genauigkeit: 0.001
erscheint als Ausgabe folgendes:
- Ergebnis d. ausgwaehten Funktion ist: 1.#QNAN0
- f(x0)=-2.000000
- Interationsschritte: 2293580
Würd mich freuen, falls mir mal jemand da helfen könnte.
Gruß
wodka_cheery
Hier mal den Code:
Code:# include <stdio.h> # include <stdlib.h> # include <math.h> // TA a) int fn; //globale Variable double f(double x) //Funktion f mit reellen Parameter x { double ergebnis; switch (fn) { case 1: ergebnis = sin(x); break; case 2: ergebnis = ((double)exp(x))-(5*x)+1; break; case 3: ergebnis = (x*x)-2; break; case 4: ergebnis = (1/7)+(1/x); break; case 5: ergebnis = (2*x)-2; break; default: printf("Fehler bei der Eingabe.\n"); break; } return ergebnis; } // TA b) double nullstelle(double a, double b, double g) { //Rueckgabeparameter int anzit=0; //anzit steht für die Ausgabe der Iterationschritte int ok=1; //Variable für Wahrheitswerte true and false double x0; //später zur Berechnung von f(x0) falls ok = 1 ist double c=0; double ergebnis; do { c=(a+b)/2; if((f(a)<0 && f(b)>0) || (f(a)>0 && f(b)<0)) { if(f(c)>0) { //a=a; c=b; } if(f(c)<0) { //b=b; c=a; } if(f(a)==0) { c=b=a; //x0=a ok==1; } if(f(b)==0) { c=a=b; //x0=b ok==1; } } } while(((f(a)-f(b))>(g)) && (ok!=1)); anzit++; x0=c; } // TA c) int main (void) { double x0, x; double a, b, g; int anzit; //Anzahl der Iterationsschritte printf("Zur Auswahl einer Funktion f, geben Sie bitte eine Zahl zwischen 1 und 5 ein.\n"); scanf("%d", &fn); printf("Geben Sie die Intervallgrenze a ein: "); scanf("%lf", &a); printf("Geben Sie die Intervallgrenze b ein: "); scanf("%lf", &b); printf("Geben Sie die Genauigkeit an: "); scanf("%lf", &g); // Ergebnis: x=nullstelle(a, b, g); //Funktionsaufruf printf("Ergebnis der ausgewaehlten Funktion ist: %lf\n", f(x)); printf("f(x0) = %lf\n", f(x0)); printf("Anzahl der Iterationsschritte: %d\n", &anzit); system ("pause"); return 0; }







Zitieren

Lesezeichen