C++ Wahlprogramm


  • Mod

    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.


  • 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 ;
    }
    

Anmelden zum Antworten