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.


  • Mod

    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


  • Mod

    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 rechnest

    1 / 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"; 
    			}
    

Anmelden zum Antworten