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
    blahblah

    Ich 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.


Anmelden zum Antworten