falsche Berechnung von Werten
-
Ich hab gerade ein Problem mit einem kleinen Programm.
Ich lasse in einem Intervall (Grenzen können eingegeben werden) Sinus und Cosinus berechnen. Es wird dann in einer Tabellenform ausgegeben.// Eingabe Auswertung switch(eingabe) { case 1: do { cout << "Bitte eingeben: "; cin >> anzahl; if (anzahl <= 1) // Fehlerabfrage { cout << "Eingabe muss groesser 1 sein!" << endl; wait(); clrscr(); gotoxy(1, 1); } } while (anzahl <= 1); dx = (x_max - x_min) / anzahl; tabelle(); // Tabellenausgabe break; case 2: do { cout << "Bitte eingeben: "; cin >> dx; if (dx <= 0) // Fehlerabfrage { cout << "Eingabe muss groesser 0 sein!" << endl; wait(); clrscr(); gotoxy(1, 1); } } while (dx <= 0); tabelle(); // Tabellenausgabe break; default: // default cout << "Falsche Eingabe" << endl; }
Soweit die Eingabe.
Die Tabellenberechnung:
void tabelle() { double x_min, x_max; double dx; double x = 0; unsigned short int i; //int komma; //cout << "Anzahl der Nachpunktstellen: "; //cin >> komma; cout.setf(ios :: fixed); cout.precision(3); gotoxy(8, 7); cout << "x"; gotoxy(8, 20); cout << "sin(x)"; gotoxy(8, 34); cout << "cos(x)" << endl; cout << "------------------------------------------" << endl; for (x = x_min, i = 11; x <= x_max; x += dx, i++) { gotoxy(i, 4); cout << x; gotoxy(i, 18); cout << sin(x); gotoxy(i, 32); cout << cos(x) << endl; } }
Ich bekomme immer falsche Tabellenwerte, d.h. die eingegeben Grenzen stimmen nicht.
Auch wird die Schleife nur einmal durchlaufen.
Bei z.B. x_min=1, x_max=4 und Schrittweite dx=1 startet er mit -1.999...
Wenn ich die Tabellenberechnug ins Hauptprogramm einsetze, funktioniert es.
Aber ich wollte, da die Berechnung zweimal erfolgt, ein bisschen Code sparen.
Kann jemand helfen ?
-
Es werden doch gar keine Werte an die Funktion tabelle() übergeben. Du erstellst in der Funktion neue, lokale Variablen, die dann alle einen Wert von 0 haben. Entweder du legst die Variablen global an, oder du übergibts die Werte an die Funktion.
-
Wenn ich globale Variablen anlege, dann so: ?
extern double x_max, x_min
blahblahIch weiß jetzt nicht, was besser ist.
Global oder mit Übergeben.Beispiele würden da echt weiterhelfen.
-
Habs nun selber gelöst.
Bei der ersten Version hab ich ne weitere Schleife gesetzt.
Bei der anderen Version die Werte der Tabelle übergeben "tabelle( double dx, double x_min, double x_max)".Dank an nnoebef.