Hallo Leute,
bin hier ganz neu, und bin ein C-Anfänger, ich denke mal dass es hier ein paar kompetente und nette Leute gibt, die sich mit C auskennen, also ich habe folgendes Problem, ich habe ein Programm geschrieben dass die Nullstellen einer Funktion ausrechnet, also nur Näherungswerte, jetzt kann man in meinem Programm nur Funktionen des 3.Grades benützten, da ich nicht weiß wie ich das anders machen soll, gibt es irgendeine Möglichkeit, dass man eingeben kann wie hoch der Grad sein soll, und dann die Funktion gebildet wird? Ich weiß nur dass man mit der Funktion pow(x,3) z.B. das x³ machen kann, aber ich weiß nicht wie ich das mit dem Grad n hinbekommen soll , kann man das irgendwie mit einer for-Schleife lösen, so z.B. oder ist das nicht möglich?
for (n=0;n<=4;n++) { Und hier irgendwie einen Code der dann immer
die Grade aneinanderhängt z.b. a x ^n und dann in der nächsten for Schleife b*x^n-1 oder sowas
}
Ich weiß nicht, jemanden den ich kenne hatte mal was von Speicher alokieren oder soetwas gesagt, ich weiß aber nicht mehr genau, ich hoffe ich habe mich verständlich ausgedrückt, und hier zuguterletzt mal mein Quellcode, damit ihr mal meinen kleinen Algorithmus seht:
bin hier ganz neu, und bin ein C-Anfänger, ich denke mal dass es hier ein paar kompetente und nette Leute gibt, die sich mit C auskennen, also ich habe folgendes Problem, ich habe ein Programm geschrieben dass die Nullstellen einer Funktion ausrechnet, also nur Näherungswerte, jetzt kann man in meinem Programm nur Funktionen des 3.Grades benützten, da ich nicht weiß wie ich das anders machen soll, gibt es irgendeine Möglichkeit, dass man eingeben kann wie hoch der Grad sein soll, und dann die Funktion gebildet wird? Ich weiß nur dass man mit der Funktion pow(x,3) z.B. das x³ machen kann, aber ich weiß nicht wie ich das mit dem Grad n hinbekommen soll , kann man das irgendwie mit einer for-Schleife lösen, so z.B. oder ist das nicht möglich?
for (n=0;n<=4;n++) { Und hier irgendwie einen Code der dann immer
die Grade aneinanderhängt z.b. a x ^n und dann in der nächsten for Schleife b*x^n-1 oder sowas
}
Ich weiß nicht, jemanden den ich kenne hatte mal was von Speicher alokieren oder soetwas gesagt, ich weiß aber nicht mehr genau, ich hoffe ich habe mich verständlich ausgedrückt, und hier zuguterletzt mal mein Quellcode, damit ihr mal meinen kleinen Algorithmus seht:
Code:
#include <stdio.h>
#include <math.h>
//Koeffizienten
struct funktion {
double a;
double b;
double c;
double d;
} f1;
//Funktion selbst:
//----->
double f(double x) {
return f1.a*x*x*x+f1.b*x*x+f1.c*x+f1.d;
}
//Nullstellenfunktion, findet raus, was linke und rechte Grenze ist, und übergibt dann den neuen Mittelwert.
double NS(double LG ,double RG) {
double MW=(LG+RG)/2;
if( round( f(MW)*1000000 ) /1000000 == 0.0) return MW;
if (f(LG) > 0.0 && f(RG) < 0.0) {
if( f(MW) > 0.0) return NS(MW,RG);
if( f(MW) < 0.0) return NS(LG,MW);
}
if (f(LG) < 0.0 && f(RG) > 0.0) {
if( f(MW) > 0.0) return NS(LG,MW);
if( f(MW) < 0.0) return NS(MW,RG);
}
return MW;
}
int main() {
int ia,ie;
//Hier werden a,b,c und d ermittelt.
printf("Algorithmus zum Ermitteln von Nullstellen einer Funktion (max. Grad3) zwischen zwei Grenzen");
printf("\n\nFunktionsaufbau : ax^3 + bx^2 + cx + d !");
printf("\na > ");
scanf("%lf",&f1.a);
printf("\nb > ");
scanf("%lf",&f1.b);
printf("\nc > ");
scanf("%lf",&f1.c);
printf("\nd > ");
scanf("%lf",&f1.d);
printf("Linke Grenze > ");
scanf("%i",&ia);
printf("Rechte Grenze > ");
scanf("%i",&ie);
printf("Nullstelle von f(x) zwischen %i und %i ist %.16lf\n", ia,ie,NS(ia,ie));
printf("Ende.");
return 0;
}