C++ Wahlprogramm
-
Abendbrot schrieb:
Leider komme ich mithilfe dieser Angaben nicht weiter.
Könnt ihr es vielleicht etwas einfacher ausdrücken?Ignorier mal das, was Sone sagt.
Hier dein Programm mal im Forum gepostet, damit jeder mitlesen kann:
#include <iostream> #include <conio.h> #include <limits> using namespace std ; int cdu; int spd; int piraten; char partei_namen[100][10]; char partei_stimmen[100]; struct partei { char name[10]; int stimmen; }; partei partei[100]; partei[1].name = "CDU"; partei[2].name = "SPD"; partei[3].name = "Piraten"; partei[4].name = "Grüne"; for ( int i = 0; i < 4; i++ ) { partei[i].stimmen = 0; } void wahl_rueckmeldung(int p) { cout << "Sie haben " << partei[p].name << " gewaehlt"; 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] Statistik anzeigen" << endl; cout << " [4] blabla" << endl; cout << " [5] blabla" << endl; cout << " [6] Beenden" << endl; cout << "Geben Sie die Zahl fuer die gewuenschte Operation ein: "; cin >> operation; int partei; switch(operation) { case 1: cout << "Waehlen Sie eine Partei aus:" << endl; for ( int i = 1; i<4; i++) { cout << "[" << i <<"] Stimme abgeben fuer " << partei[i].name << endl; } cin >> partei; wahl_rueckmeldung(partei); break; case 2: break; default: cout << "Die Operation " << operation << " ist nicht definiert!" << endl; } } return 0; } int main( void ) { gewaehlte_operation(); getch(); return 0 ; }Deine Zeilen 21-30 sind das Problem (oder genauer: eines der Probleme). Wann sollen die deiner Meinung nach ausgeführt werden? Programme dürfen keinen Code außerhalb von Funktionen haben.
-
Bei "case 1" wird eine Partei ausgewählt. Wenn z. B. die Zahl "1" gedrückt wird, wird diese Zahl in die Variabel "partei" geschrieben und dann zur Funktion "wahl_rueckmeldung" verwiesen. Diese soll dann aus den oberen Zeilen durch die Zahl den Namen auslesen (partei[1].name = "CDU"; ) und eine Stimme addieren.
Ich vermute, die "for-Schleife", beginnent in Zeile 26, dient nur um die Stimmen aller Parteien auf "0" zu setzen.
In Zeile 61 soll auch, nachdem man eine Zahl eingegeben hat, von oben die passende Partei gewählt werden.partei[i].name --> nach Eingabe von 1 --> partei[1].name --> CDU
...aber es scheint durch Zeile 21-24 nicht so einfach zu funktionieren.
-
Abendbrot schrieb:
Ich vermute, die "for-Schleife", beginnent in Zeile 26, dient nur um die Stimmen aller Parteien auf "0" zu setzen.
In Zeile 61 soll auch, nachdem man eine Zahl eingegeben hat, von oben die passende Partei gewählt werden.Ach, der Teil ist gar nicht von dir? Dann schick den Code deinem Bekannten zurück.
-
Mir wurden da nur etwas "geholfen".
-
Kannst du dich mal klar ausdrücken?
So wie ich das momentan verstehe, hast du irgendeine Aufgabe bekommen, mit der du überhaupt nicht zurecht kamst. Du hast dir von einem Kollegen helfen lassen (oder sogar abgeschrieben?) hast dessen Hilfestellung aber gar nicht verstanden und weißt nicht recht, was du mit dieser anfangen sollst. Trifft es das so ungefähr?
Das ist nichts schlimmes, nichts zu können. Aber erweck nicht den falschen Eindruck, etwas zu können, was du nicht kannst. Sonst ergeht es dir wie hier und du bekommst lauter Antworten, die du gar nicht verstehst.
-
Ich weiß was der Quelltext bzw. das Programm bewirken soll, aber habe nicht viel Programmiererfahrung und möchte, dass das Programm funktioniert und durch die im ersten Beitrag erwähnten Funktionen erweitert wird. Verstehen will ich den Ablauf natürlich auch.
-
Abendbrot schrieb:
[...]
Weiterhin frage ich mich, wie man wieder ins "Hauptmenü" kommt, wenn man eine Partei gewählt hat.
Und ich würde gerne eine Statistik anzeigen lassen. Also eine Art Balkendiagramm, bei der jede Partei mit Prozentzahlen und Sternchen (z. B. ******57,3%) dargestellt wird.
[...]Fang am Besten nochmal neu an und versuch dein Programm in Funktionen zu gliedern.
So in der Art: Hauptmenu -> Eingabe -> Berechnung -> Ausgabe.
-
Habe es etwas umgeschrieben, bin nun vor einem kleinen Problem.
Ich habe einen Menüpunkt, der einfach alle Stimmen anzeigen lassen soll.Folgendermaßen habe ich es versucht:
for ( int i = 1; i<5; i++) { cout << "Stimmen insgesamt: " << partei[i].stimmen; }Damit werden dann aber viermal der Text + korrekte Stimmwerte der Parteien angezeigt.
Wie kann ich alle Werte zusammenaddieren?
Quasi partei[1].stimmen + partei[2].stimmen,...
ohne jedoch das so explizit hinzuschreiben?Vielen Dank für Hilfe!
-
Arrays beginnen bei 0.
Zusammenzählen kannst du, indem du in der Schleife den Wert zu einer Variable addierst, die außerhalb der Schleife lebt (und vorher mit 0 initialisiert wurde). Nach dem Abarbeiten der Schleife steht in dieser Variable die Summe. gibt's auch schon in fertig in der Standardbibliothek, aber versuch es lieber erst einmal alleine, damit du ein Gefühl für die Grundmuster der Programmierung bekommst.
-
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.