Dezimalzahl erkennen [c++ Konsolenanwendung]



  • @Unskilled

    Danke die Warnung ist weg aber trozdem erkennt die Konsole keine Dezimalzahlen wie z.B. 0.3 😕


  • Mod

    Du liest aber Ganzzahlen ein. Daher funktioniert das nicht so wie erwartet.

    edit: Missverständlich formuliert. So ist klarer.



  • @SeppJ

    Okay und was muss ich am Code ändern damit sie Dezimalzahlen einliest ??


  • Mod

    Tipp:

    Integer: (englisch) Ganzzahl.



  • Aha also double oder nicht 😉 habs probiert. Es erkennt die Dezimalzahl aber es kommen neue warnings... werde sie versuchen zu beheben. Ich editiere diese Antwort dann ob ichs geschafft hab oder nicht 😛


  • Mod

    Die Warnungen kommen, weil der Rest des Programmes nicht zu den doubles im Hauptprogramm passt.



  • Ich gebs auf ich kriegs nicht auf die Reihe mit den Warning... Ich muss mir nochmal den Teil mit den Doubles ansehen 😉

    hier der aktuelle code:

    #include <iostream>
    #include "math.h"
    const double PI = 3.1415926535897932384626433832795;
    using namespace std;
    
    	int add (int a, int b)
    	{
    		int c = a+b;
    		return c;
    	}
    	int sub (int a, int b)
    	{
    		int c = a-b;
    		return c;
    	}
    	int mul (int a, int b)
    	{
    		int c = a*b;
    		return c;
    	}
    	int divi (int a, int b)
    	{
    		int c = a/b;
    		return c;
    	}
    	double sinus (int a)
        {
             double param, c;
             param = a;
             c = asin (param) * 180.0 / PI;
             return c;
        } 
    
    int main()
    {
    	double ersteZahl;
    	double zweiteZahl;
    	int modus;
    
    	cout << "       -----Willkommen beim Rechner von *****!----- ";
    	cout << endl;
    
    	cout << "        ~*Geben sie Ihren Modus ein*~ " << endl;
    	cout << "               Addition: 1" << endl;
    	cout << "               Subtraktion: 2 " << endl;
    	cout << "               Multiplikation: 3 " << endl;
    	cout << "               Division: 4 " << endl;
    	cout << "               Sinus [Winkel]: 5 " << endl;
    	cout << "          Welchen Modus waehlen sie? " << endl;
    	cout << " >> ";
    	cin >> modus;
    
    	cout << "Sie waehlten Modus " << " " << modus << " . " << endl;
    
    	cout << endl;
    	cout << " Geben Sie nun die erste Zahl ein: ";
    	cin >> ersteZahl;
    
    	cout << endl;
    	cout << " Geben Sie die zweite Zahl ein (bei sinus egal): ";
    	cin >> zweiteZahl;
    
    	if (modus == 1 )
    	{
    		cout << " " << ersteZahl << " + " <<  " " << zweiteZahl << " = ";
    		cout << add(ersteZahl,zweiteZahl);
    		cout << endl;
    	}
    	else if (modus == 2 )
    	{
    		cout << " " << ersteZahl << " - " << " " << zweiteZahl << " = ";
    		cout << sub(ersteZahl,zweiteZahl);
    		cout << endl;
    	}
    	else if (modus == 3 )
    	{
    		cout << " " << ersteZahl << " * " << " " << zweiteZahl << " = ";
    		cout << mul(ersteZahl,zweiteZahl);
    		cout << endl;
    	}
    	else if (modus == 4 )
    	{
    		cout << " " << ersteZahl << " : " <<  " " << zweiteZahl << " = ";
    		cout << divi(ersteZahl,zweiteZahl);
    		cout << endl;
    	}
    	else if (modus == 5 )
    	{
    		cout << " Der Sinus von " << ersteZahl << " entspricht " <<  " ";
    		cout << sinus(ersteZahl);
    		cout << " Grad" << endl;
    		cout << endl;
    		cout << endl;
    	}
    	return 0;
    }
    

    Warnings:

    (68) : warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust
    (68) : warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust
    (74) : warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust
    (74) : warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust
    (80) : warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust
    (80) : warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust
    (86) : warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust
    (86) : warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust
    (92) : warning C4244: 'Argument': Konvertierung von 'double' in 'int', möglicher Datenverlust



  • die Warnungen geben dir die Zeilennummern aus. In Zeile 68 passiert also eine solche Konvertierung.

    cout << add(ersteZahl,zweiteZahl);
    

    Schau die doch mal die Typen von "ersteZahl" und "zweiteZahl" an. Welche Typen haben die Argumente von "add"?

    Felix



  • und in welchem Typ erwartest du die Ergebnisse 😕

    Versuche mal statt:

    #include "math.h"
    

    die C++ Version:

    #include <cmath>
    


  • @Up Ja als Zahl also Dezimalzahl.

    So keine Warnings mehr. Aber auch kein Ergebnis also Ergebnis = 0


  • Mod

    xGriimReapeeRx schrieb:

    @Up Ja als Zahl also Dezimalzahl.

    Eben nicht.

    So keine Warnings mehr. Aber auch kein Ergebnis also Ergebnis = 0

    Ojeh, jetzt hast du irgendwas kaputt repariert, was vorher eigentlich schon fast richtig war.



  • Guten Abend,

    bei deinem Source-Code ist mir diese Zeile ins Auge gesprungen:

    const double PI = 3.1415926535897932384626433832795;
    

    Wenn ich Pi in einem Programm brauche, benutze ich meistens

    M_PI;
    

    Gibt dir 3.14159 aus (sollte meistens reichen).
    Nur nebenbei bemerkt : )
    Und die C++ Bib. benutzen: <cmath>

    MfG


  • Mod

    Klugscheiß: M_PI ist kein Standard-C++, sondern nur weit verbreitet. (Ich benutze es auch)

    Wichtiger ist jedoch: Der Wert ist, wenn es existiert, natürlich schon so exakt wie ein double das hergibt, du hast dir bloß bei der Ausgabe nicht alle Stellen zeigen lassen.



  • SeppJ schrieb:

    Klugscheiß: M_PI ist kein Standard-C++, sondern nur weit verbreitet. (Ich benutze es auch)

    okay, das wusste ich nicht. Mir wurde das so gelehrt.

    Wichtiger ist jedoch: Der Wert ist, wenn es existiert, natürlich schon so exakt wie ein double das hergibt, du hast dir bloß bei der Ausgabe nicht alle Stellen zeigen lassen.
    

    Jop, eindeutig Noob-Fehler. Danke für den Hinweis : )


Anmelden zum Antworten