PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe (dringend)


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

}

Gast
2003-12-12, 09:51:23
Achja, ich muss das bis halberle 11 haben ;(

Help!

DocEW
2003-12-12, 11:13:56
Ich glaube nicht, daß du erwarten kannst, daß dir noch schnell jemand in einer halben Stunde deine Hausaufgaben macht... sorry, nächstes Mal früher anfangen!

El Fantastico
2003-12-12, 15:25:39
ACK... Dazu möchte ich noch ergänzen, dass Du Dir wenigstens die Mühe hättest machen können, einen sinnvollen Threadtitel zu wählen... So motivierst Du hier bestimmt nimanden Dir zu helfen.

EgonOlsen
2003-12-13, 10:48:51
Kann mir bitte mal jemand 50 Euro vorbeibringen. Aber schnell, ich muss heute noch einkaufen. Und wer kocht mir heute mein Essen? Ich esse immer um 12Uhr. Dringend!!!!!!!!!
THX (und Dolby Digital)!

Trap
2003-12-13, 11:17:35
Ist doch ganz einfach:
Du schreibst den Code für n=2^31-1, dann funktioniert das Programm mit beliebigen n.