Gast
2003-12-12, 09:35:38
Sers, kann mal bitte jemand sagen/machen, wie ich das folg. Prog für beliebige n umschreib? THX!!!
#include <stdio.h>
#include <conio.h>
void main() //void=kein Datentyp, main() soll hier nichts zurückgeben (return)
{
//laut Aufgabenstellung:
const int n=6;
const double eps=1E-6; //eps=Epsilon(Umgebung) 1*10^-6
double a,b,c,d,e,f; //Koeffizienten des Polynoms
double g,h,i,j,k; //Koeffizienten der Ableitung des Polynoms
double x,z,y; //Startwert/Zwischenergebnis der Iteration
int iz=0; //Iterationszähler
//es folgt: Abfrage der Koeffizienten
printf("\n1.: Polynom:\nBitte die Koeffizienten in der Reihenfolge der kleiner werdenden Exponenten eingeben!");
printf("\nx^5*? ");
scanf("%lf",&a);printf(" %lf",a); //%lf ="long float"; gibt es nicht als Datentyp, aber entspricht double
printf("\nx^4*? ");
scanf("%lf",&b);printf(" %lf",b);
printf("\nx^3*? ");
scanf("%lf",&c);printf(" %lf",c);
printf("\nx^2*? ");
scanf("%lf",&d);printf(" %lf",d);
printf("\nx^1*? ");
scanf("%lf",&e);printf(" %lf",e);
printf("\nx^0*? ");
scanf("%lf",&f);printf(" %lf",f);
printf("\n1.: Ableitung:\nBitte die Koeffizienten in der Reihenfolge der kleiner werdenden Exponenten eingeben!");
printf("\nx^4*? ");
scanf("%lf",&g);printf(" %lf",g);
printf("\nx^3*? ");
scanf("%lf",&h);printf(" %lf",h);
printf("\nx^2*? ");
scanf("%lf",&i);printf(" %lf",i);
printf("\nx^1*? ");
scanf("%lf",&j);printf(" %lf",j);
printf("\nx^0*? ");
scanf("%lf",&k);printf(" %lf",k);
//Eingabe des Startwertes
x=1; //damit "if" in der folgenden do-Schleife nicht anspringt
do
{
printf("\n\nBitte den Startwert fuer die Iteration eingeben:");
scanf("%lf",&x);printf(" %lf",x);
if(x==0)
printf("\tBitte geben sie einen anderen Startwert als 0 ein!\n"); //keine geschweiften Klammern nötig wenn nur ein Befehl!
}while(x==0); //soll fragen bis etwas anderes als Null eingegeben wird
//Iterationen, ausgehend vom Startwert
printf("\n\nIteration laeuft...");
do //im Folgenden Auskommentiertes kann dem Nachvollziehen dienen
{
z=(a*x*x*x*x*x)+(b*x*x*x*x)+(c*x*x*x)+(d*x*x)+(e*x)+f; //z=P(x); soll -eps<P(x)<eps sein
//printf("\n\nz%i=%lf",iz,z);
y=z/((g*x*x*x*x)+(h*x*x*x)+(i*x*x)+(j*x)+k); //'^' ist in c nicht zulässig!!!
//printf("\ny%i=%lf",iz,y);
x=x-y;
//printf("\nx%i=%lf",iz,x);
//printf("\nz%i=%lf",iz,z);printf(" -eps%lf eps%lf ",+eps,eps);
printf("\nx%i=%lf",iz,x);
iz++; //zählt die Iterationen
}while(!(-eps<z && z<eps) && iz<50); //P(x) soll -eps<P(x)<eps sein
//x enthält nun die angenäherte Stelle
//Ausgabe
if(iz>=50) //Soll Endlosschleife bei inexistenter Nullstelle verhindern
printf("\n\nEs existiert keine Nullstelle!");
else
printf("\n\nDie Nullstelle liegt bei: %lf\nEs waren %d Iteration(en) noetig.\n\n\tDruecken sie eine Taste zum Beenden.",x,iz);
getch(); //Pause, um das selbständige Schliessen des Fensters hinauszuzögern
}
#include <stdio.h>
#include <conio.h>
void main() //void=kein Datentyp, main() soll hier nichts zurückgeben (return)
{
//laut Aufgabenstellung:
const int n=6;
const double eps=1E-6; //eps=Epsilon(Umgebung) 1*10^-6
double a,b,c,d,e,f; //Koeffizienten des Polynoms
double g,h,i,j,k; //Koeffizienten der Ableitung des Polynoms
double x,z,y; //Startwert/Zwischenergebnis der Iteration
int iz=0; //Iterationszähler
//es folgt: Abfrage der Koeffizienten
printf("\n1.: Polynom:\nBitte die Koeffizienten in der Reihenfolge der kleiner werdenden Exponenten eingeben!");
printf("\nx^5*? ");
scanf("%lf",&a);printf(" %lf",a); //%lf ="long float"; gibt es nicht als Datentyp, aber entspricht double
printf("\nx^4*? ");
scanf("%lf",&b);printf(" %lf",b);
printf("\nx^3*? ");
scanf("%lf",&c);printf(" %lf",c);
printf("\nx^2*? ");
scanf("%lf",&d);printf(" %lf",d);
printf("\nx^1*? ");
scanf("%lf",&e);printf(" %lf",e);
printf("\nx^0*? ");
scanf("%lf",&f);printf(" %lf",f);
printf("\n1.: Ableitung:\nBitte die Koeffizienten in der Reihenfolge der kleiner werdenden Exponenten eingeben!");
printf("\nx^4*? ");
scanf("%lf",&g);printf(" %lf",g);
printf("\nx^3*? ");
scanf("%lf",&h);printf(" %lf",h);
printf("\nx^2*? ");
scanf("%lf",&i);printf(" %lf",i);
printf("\nx^1*? ");
scanf("%lf",&j);printf(" %lf",j);
printf("\nx^0*? ");
scanf("%lf",&k);printf(" %lf",k);
//Eingabe des Startwertes
x=1; //damit "if" in der folgenden do-Schleife nicht anspringt
do
{
printf("\n\nBitte den Startwert fuer die Iteration eingeben:");
scanf("%lf",&x);printf(" %lf",x);
if(x==0)
printf("\tBitte geben sie einen anderen Startwert als 0 ein!\n"); //keine geschweiften Klammern nötig wenn nur ein Befehl!
}while(x==0); //soll fragen bis etwas anderes als Null eingegeben wird
//Iterationen, ausgehend vom Startwert
printf("\n\nIteration laeuft...");
do //im Folgenden Auskommentiertes kann dem Nachvollziehen dienen
{
z=(a*x*x*x*x*x)+(b*x*x*x*x)+(c*x*x*x)+(d*x*x)+(e*x)+f; //z=P(x); soll -eps<P(x)<eps sein
//printf("\n\nz%i=%lf",iz,z);
y=z/((g*x*x*x*x)+(h*x*x*x)+(i*x*x)+(j*x)+k); //'^' ist in c nicht zulässig!!!
//printf("\ny%i=%lf",iz,y);
x=x-y;
//printf("\nx%i=%lf",iz,x);
//printf("\nz%i=%lf",iz,z);printf(" -eps%lf eps%lf ",+eps,eps);
printf("\nx%i=%lf",iz,x);
iz++; //zählt die Iterationen
}while(!(-eps<z && z<eps) && iz<50); //P(x) soll -eps<P(x)<eps sein
//x enthält nun die angenäherte Stelle
//Ausgabe
if(iz>=50) //Soll Endlosschleife bei inexistenter Nullstelle verhindern
printf("\n\nEs existiert keine Nullstelle!");
else
printf("\n\nDie Nullstelle liegt bei: %lf\nEs waren %d Iteration(en) noetig.\n\n\tDruecken sie eine Taste zum Beenden.",x,iz);
getch(); //Pause, um das selbständige Schliessen des Fensters hinauszuzögern
}