Hallo,
bei der folgenden Programmieraufgabe würde ich gerne die globalen variablen durch Zeiger ersetzten, da man mit den globalen Variablen ja etwas vorsichtig sein sollte.
include include includedouble x0; //globale variablen int ok, anzit;
double fct (int fn, double x){ // Funktion fct mit 2 Parametern
double y;
switch (fn) { // switch case funktion zum Auswählen der Funktion
case 1: y = sin(x); break;
case 2: y = exp (x) - 5.0 * x + 1.0; break;
case 3: y = x * x - 2.0; break;
case 4: y = (1.0 / 7.0) + (1.0/x); break;
case 5: y = 2.0 * x - 2.0; break;
default: y = 0.0; break;
}
return y;
}
void nullstelle (int fn, double a, double b, double g) { // Prozedur Nullstelle
double fa, fb, fm, m;
// Verarbeitung der Parameter und Variablen
fa = fct (fn, a);
fb = fct (fn, b);
while ((b-a) > g) {
m = (a+b) / 2.0;
fm = fct (fn, m);
if ((fa*fm) < 0) {
b = m; fb = fm;
}
else {
a = m; fa = fm;
}
anzit++;
}
x0 = m;
ok = 1;
}
int main(){ // Hauptprogramm // Fordert den Benutzer auf Befehle einzugeben int fn; double a, b, g;
printf ("1) f(x) = sin (x) \n");
printf ("2) f(x) = e^x - 5x + 1 \n");
printf ("3) f(x) = x^2 - 2 \n");
printf ("4) f(x) = (1/7) + (1/x) \n");
printf ("5) f(x) = 2x - 2 \n");
while (1) {
printf ("\nWaehlen Sie eine Funktion aus: ");
scanf ("%d", &fn);
printf ("Linker Grenzwert: ");
scanf ("%lf", &a);
printf ("Rechter Grenzwert: ");
scanf ("%lf", &b);
while (fct (fn, a) * fct (fn, b) > 0.0){
printf ("\nf(a) und f(b) haben gleiches Vorzeichen, bitte andere Grenzen eingeben!");
printf ("\nLinker Grenzwert: ");
scanf ("%lf", &a);
printf ("\nRechter Grenzwert: ");
scanf ("%lf", &b);
}
printf ("Genauigkeit: ");
scanf ("%lf", &g);
nullstelle (fn, a, b, g);
if (ok == 1)
printf ("x0 \t = %.15f\n", x0);
printf("f(x0) \t = %.15f\n", fct(fn, x0));
printf("%d Iteration\n", anzit);
}
return 0;
}