Einfache % Rechnung falsch?



  • Hallo Leute, ich hoffe Ihr könnt mir helfen.
    Stehe am Anfang meines Informatik Studiums und lerne grade mit Visual Studio umzugehen. Mehrere Aufgaben schon richtig gelöst nur bei dieser verstehe ich nicht warum sie nicht so rechnet wie ich das möchte.
    Also der obere Teil klappt gut aber egal wie ich die unteren Rechnungen formuliere, es kommt angeblich immer 0 dabei raus.
    Hab schon versucht Klammern zu setzen, mit einer neuen Variablen(e=100) oder mit double statt int zu arbeiten aber immer das gleiche Ergebnis. Problem dabei ist ich darf keine erweiterten Methoden benutzen, d.h. nur die aller ersten Funktionen.
    Wäre für eure Hilfe total dankbar .

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int a, b, c, d;
    	    cout << "Bitte geben Sie die Gesamtzahl der abgegebenen gueltigen Stimmen ein: ? ";
    	cin >> a;
    		cout << "Bitte geben Sie die Anzahl der Stimmen des ersten Kandidaten ein: ? ";
    	cin >> b;
    		cout << "Bitte geben Sie die Anzahl der Stimmen des zweiten Kandidaten ein: ? ";
    	cin >> c;
    	d = a - b - c;
    	    cout << "Auf den dritten Kandidaten sind somit " << d << " Stimmen entfallen. " << endl;
    
    int summe = (b / a) * 100, summe1 = (c / a) * 100, summe2 = (d / a) * 100;
    
    		cout << "Kanditat 1 erhielt " << summe << "% der Stimmen \n";
            cout << "Kanditat 2 erhielt " << summe1 << "% der Stimmen \n";
            cout << "Kanditat 3 erhielt " << summe2 << "% der Stimmen \n";
    
    		system("PAUSE");
    	return 0;
    }
    


  • Durch die Ganzzahldivision (b/a) erhältst du immer 0 (da a größer als b ist). Formuliere die Anweisung anders:

    int summe = (b * 100) / a;
    

    Analog für die anderen Summen.



  • 1. Was hat dein Problem mit der MFC zu tun? Oder Visual Studio? MFC verwendest du nicht, und das ist kein Visual-C++-spezifisches Problem - also genau gar nichts. Falsches Subforum.
    2. Vernünftige Einrückung möchtest du auch mal hinzufügen.
    3. std::size_t ?
    4. Ich habe mal mit 100 abgegebenen Stimmen gerechnet, 70 davon auf Nummer 1, 10 auf Nummer 2. Was ist dann summe1 ? (10 / 100) * 100 , oder? Aber da du hier nur Integerwerte verwendest, kommt bei 10 / 100 nicht 0.1 raus, sondern auch ein Integerwert, 0. Und 0 multipliziert mit 100 bleibt 0.

    Multipliziere mit 100 und dividiere dann durch die Anzahl der Stimmen.



  • *facepalm* Da hätte ich auch drauf kommen können.
    Trotzdem vielen Dank für die Hilfe und entschuldigt das falsche Unterforum, habe oben in der Liste nur c++ gelesen und dachte hier wäre ich richtig.
    Wie würden die Einrückungen denn optimal aussehen? Habe es erstmal so gelassen, da ich auf einen Blick erkennen kann was was ist.
    Super schnelle Hilfe trotzdem, top. 👍



  • Faustregel: pro Block einen zusätzlichen Tabstopp.
    Alles in deiner obigen main -Funktion gehört mit einem Tabstopp eingerückt, da nur ein Block (der Funktionsblock) vorhanden ist.


Anmelden zum Antworten