C++ Wahlprogramm
-
Habe es nun mal so versucht:
int test = 0;for ( int i = 0; i<5; i++) { test += partei[i].stimmen; cout << "Stimmen insgesamt" << test; }So funktioniert es nicht richtig.
Im Internet finde ich meistens nur Beispiele, die nur den Inhalt eines Arrays addieren.
-
Abendbrot schrieb:
So funktioniert es nicht richtig.
"funktioniert nicht richtig" ist keine Fehlerbeschreibung.
Der (gepostete) Code sieht soweit ganz gut aus, der Fehler dürfte woanders liegen.
-
Abendbrot schrieb:
Im Internet finde ich meistens nur Beispiele, die nur den Inhalt eines Arrays addieren.
Erstens sollst du nicht im Internet abschreiben, zweitens ist das doch genau das, wonach du gefragt hast.
-
Edit: Habe das Problem gefunden. Habe den Array nicht auf "0" gesetzt.
-
Abendbrot schrieb:
Habe es nun mal so versucht:
int test = 0;for ( int i = 0; i<5; i++) { test += partei[i].stimmen; cout << "Stimmen insgesamt" << test; }So funktioniert es nicht richtig.
Im Internet finde ich meistens nur Beispiele, die nur den Inhalt eines Arrays addieren.for ( int i = 0; i<5; i++) { test += partei[i].stimmen; } cout << "Stimmen insgesamt" << test;
-
12345 schrieb:
Abendbrot schrieb:
Habe es nun mal so versucht:
int test = 0;for ( int i = 0; i<5; i++) { test += partei[i].stimmen; cout << "Stimmen insgesamt" << test; }So funktioniert es nicht richtig.
Im Internet finde ich meistens nur Beispiele, die nur den Inhalt eines Arrays addieren.for ( int i = 0; i<5; i++) { test += partei[i].stimmen; } cout << "Stimmen insgesamt" << test;Vielen Dank!
Ich habe noch eine Frage zur Prozentrechnung. Habe es nun mal so versucht:
for ( int i = 0; i<4; i++) { alle_stimmen += partei[i].stimmen; prozent = alle_stimmen / 100 * partei[i].stimmen; cout << partei[i].name << ": "<< prozent << " " << "\n"; }Als Ausgabe erscheint allerdings immer nur "0".
Und wenn ich das "cout" aus der Schleife nehme, ist "i" nicht definiert (logisch). Wie bekommt man die Prozentrechnung hin?
-
Versuchs mal mit richtiger Prozentrechnung

Anteil / Gesamt * 100
-
12345 schrieb:
Versuchs mal mit richtiger Prozentrechnung

Anteil / Gesamt * 100
Da kommt sicher auch 0 raus.
-
Der obige Beitrag ist quatsch

Du mußt das trennen.
for ( int i = 0; i<4; i++) { alle_stimmen += partei[i].stimmen; prozent = alle_stimmen / 100 * partei[i].stimmen; cout << partei[i].name << ": "<< prozent << " " << "\n"; }Setz mal die Werte ein. Was passiert da bei dem Schleifendurchlauf?
for ( int i = 0; i<4; i++) { alle_stimmen += partei[i].stimmen; prozent = alle_stimmen / 100 * partei[i].stimmen; cout << partei[i].name << ": "<< prozent << " " << "\n"; } for ( int i = 0; i<4; i++) { prozent = alle_stimmen / 100 * partei[i].stimmen; cout << partei[i].name << ": "<< prozent << " " << "\n"; }
-
...
-
Du bildest erst die Summer aller Stimmen.
Und dann in einer separaten Schleife bildest du dann die Prozentanteile.
edit: Außerdem ist es int. D.h du es wird bei 0,456 nur die 0 ausgegeben. Und bei der Rechnung wird der Nachkommateil glaube ich auch abgeschnitten. Deshalb wohl immer die 0.
-
Danke!
Ich habe nun "alle_stimmen" und "prozent" den Datentyp "float" zugewiesen.
Hier ist mein Code:
for ( int i = 0; i<4; i++) { alle_stimmen += partei[i].stimmen; } for ( int i = 0; i<4; i++) { prozent = partei[i].stimmen/alle_stimmen * 100; cout << partei[i].name << ": "<< prozent << " " << "\n"; }So wird, wenn ich noch keine Partei ausgewählt habe, und den Menüpunkt "Prozent" öffne, "-1. #IND" bei den jeweiligen Parteien angezeigt.
-
Versuchs mal mit Anteil / Gesamt mal 100 => 1 / 1 * 100 = 100%
Du rechnest1 / 100 => 0,01 * 1 = 0,01
-
So funktioniert es, danke!
Allerdings wird, wenn ich noch keine Partei ausgewählt habe, und den Menüpunkt "Prozent" öffne, "-1. #IND" bei den jeweiligen Parteien angezeigt.
-
Bestimmt ist partei[i].stimmen noch nicht initialisiet. Initialisiere die mal mit 0. Dann sollte überall 0% rauskommen.
-
eddi0815 schrieb:
Bestimmt ist partei[i].stimmen noch nicht initialisiet. Initialisiere die mal mit 0. Dann sollte überall 0% rauskommen.
Doch, initalisiert ist diese:
for ( int i = 0; i < 4; i++ ) { partei[i].stimmen = 0; }Und alle_stimmen sowie prozent auch.
Sobald ich für irgendeine Partei eine Stimme abgegeben habe, funktioniert es.
-
Dann zeig nochmal deinen ganzen Code. So wie du geschrieben hast, stimmt der von Seite 1 wohl nicht mehr.
-
Hier ist der Code:
http://uni----.de/---/cplusplus.txt
-
Setzt bitte deinen Code in Zukunft ins Forum. Dann ist er für alle sichtbar auch dann noch, wenn dein Link irgendwann mal nicht mehr existiert.
#include <iostream> #include <conio.h> #include <limits> using namespace std ; char partei_namen[100][10]; char partei_stimmen[100]; struct partei { char name[10]; int stimmen; }; partei partei[100]; //Parteinformationen. partei[1] wird genutzt void wahl_rueckmeldung(int p) { cout << "Sie haben " << partei[p].name << " gewaehlt\n"; partei[p].stimmen++; } int gewaehlte_operation() { while (true) { int operation; cout << "Waehlen Sie eine Operation aus:" << endl; cout << " [1] Stimme abgeben" << endl; cout << " [2] Stimmen auszaehlen" << endl; cout << " [3] Alle abgegebene Stimmen" << endl; cout << " [4] Prozente" << endl; cout << " [5] Beenden" << endl; cout << "Geben Sie die Zahl fuer die gewuenschte Operation ein: "; cin >> operation; //if (operation == 1 || operation == 2 || operation == 3 || operation == 4 || operation == 5 || operation == 6) //{ int gewaehlte_partei; float alle_stimmen = 0; float prozent = 0; switch(operation) { case 1: cout << "Waehlen Sie eine Partei aus:" << endl; for ( int i = 0; i<4; i++) { cout << "[" << i <<"] Stimme abgeben fuer " << partei[i].name << endl; } cin >> gewaehlte_partei; wahl_rueckmeldung(gewaehlte_partei); break; case 2: for ( int i = 0; i<4; i++) { cout << partei[i].name << ": "<< partei[i].stimmen << " " << "\n"; } break; case 3: for ( int i = 0; i<4; i++) { alle_stimmen += partei[i].stimmen; // alle ausgewählten Stimmen werden berechnet } cout << "Stimmen insgesamt: " << alle_stimmen << " \n"; break; case 4: for ( int i = 0; i<4; i++) { alle_stimmen += partei[i].stimmen; } for ( int i = 0; i<4; i++) { prozent = partei[i].stimmen/alle_stimmen * 100; //aus allen Stimmen wird der prozentuale Anteil berechnet cout << partei[i].name << ": "<< prozent << " " << "\n"; //Ausgabe der jeweiligen Prozentwerte aller Parteien } break; case 5: exit(0); return 0; break; default: cout << "Die Operation " << operation << " ist nicht definiert!" << endl; } //} //else //{ // cout << "Zahl nicht vorhanden! "; //} } return 0; } int main( void ) { int test = 0; strcpy( partei[0].name, "CDU" ); strcpy( partei[1].name, "SPD" ); strcpy( partei[2].name, "Gruene" ); strcpy( partei[3].name, "FDP" ); for ( int i = 0; i < 4; i++ ) { partei[i].stimmen = 0; } gewaehlte_operation(); getch(); return 0 ; }
-
Division durch 0 geht ja bekanntlich nicht.
Du kannst aber den Fehler abfangen.Außerdem empfehle ich dir für Zeichenketten std::string zu benutzen.
case 4: for ( int i = 0; i<4; i++) { alle_stimmen += partei[i].stimmen; } for ( int i = 0; i<4; i++) { if (alle_stimmen == 0) { cout << "Division durch 0. Error\n"; break; } prozent = partei[i].stimmen/alle_stimmen * 100; cout << partei[i].name << ": "<< prozent << " " << "\n"; }