Globale Variablen durch Zeiger ersetzen?
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;
}