(While-Schleife) Anzeigen der Umsätze



  • Schönen Guten Tag! Ich bin total verzweifelt! Kann mir bitte jemand weiterhelfen?

    Meine Aufgabenstellung lautet, In jedem Quartal für Unternehmen A, B und C jeweils in jedem der 3 inbegriffenen Monate einen Umsatz eingeben zu können. Das funktioniert auch. Ich hab hierzu eine while Schleife in eine while Schleife in eine while Schleife verpackt.
    Nun soll das Programm aber beendet werden, wenn der Benutzer eine 0 eingibt.
    Des klappt mitlerweile auch.

    Bloß soll das Programm bei der Eingabe von 0 die restlichen beiden Monatsumsätze noch anzeigen.

    Hier erst einmal der Quellcode

    #include<iostream.h>
    
    void main()
    
    {
    	int monat;
    	int quart;
    
    	float umsatz;
    	float gesamt;
    
    	char unter;
    
    	const char ENDE[] = "( Bei Eingabe von 0.0 wird das Programm beendet )";
    
    quart = 0;
    	while ( quart < 4 )
    
    	{
    		quart = quart + 1;
    
    		cout << quart << ". " << "Quartal" << endl;
    
    	unter = '@';
    		while ( unter < 'C' )
    
    		{ 
    			unter = unter + 1 ;
    
    			cout << "Unternehmen " << unter << endl;
    
    		monat = 0;
    			while ( monat < 3 )
    
    			{
    				monat = monat + 1;
    
    				cout << "Umsatz Monat " << monat << ":" << endl;
    
    				cout << ENDE << endl;
    
    					cin >> umsatz;
    
    						if ( umsatz == 0 )	break;
    
    						cout << endl;
    
    			}
    
    if ( umsatz == 0 )	break;
    
    gesamt = umsatz + umsatz + umsatz;
    
    	cout << "Gesamtumsatz Unternehmen " << unter << ": " << gesamt;
    
    		cout << endl << endl << endl << endl << endl;
    
    		}
    
    if ( umsatz == 0 )	break;
    
    		cout << endl;
    	}
    
    		cout << endl;
    
    	//Hier versuche ich die restlichen beiden Monatsumsätze auszugeben
    
    	cout << "Gesamtumsatz Unternehmen " << unter << ": " << gesamt;
    
    		cout << endl << endl;
    
    }
    

    Ich bin total verwirrt 😞

    Bitte helft mir.

    MFG Tray



  • Tray schrieb:

    Ich bin total verwirrt 😞

    Geshcieht dir ganz recht 😃 Ich würde vorschlagen, du überdenkst deine Programmstruktur nochmal etwas. 'break' verlässt die aktuelle Schleife komplett und sofort - wenn du vor dem Ausstieg noch etwas anderes machen willst, muß das vor dem break geschehen.

    Ansonsten fällt noch aus, daß du die Quartalsumsätze besser in der innersten Schleife aufsummieren solltest (im zweiten Durchlauf der 'while(monat<3)'-Schleife überschreibst du die Eingabe aus dem ersten Durchlauf. Und für gezählte Schleifen ist for() geeigneter (übersichtlicher) als while() zu verwenden.

    PS: Kann es sein, daß du das Programm schonmal hier vorgestellt hast?



  • Jupp, ich hab das Programm schon mal vorgestellt und bekam auch Hilfe von dir!
    Du hast mit den Tip gegeben, if ( umsatz == 0 ) geschickt zu integrieren. Was ich ja auch tat und es zu einem Ergebnis führte.

    Bloß hab ich etwas überlesen, und das schiebt mich wieder in den Abgrund!



  • Nun ja, jetzt hab ich die Umsatzberechnung zwischen if und break gesetzt:

    if ( umsatz == 0 )	break;
    
    gesamt = umsatz + umsatz + umsatz;
    
    	cout << "Gesamtumsatz Unternehmen " << unter << ": " << gesamt;
    
    		cout << endl << endl << endl << endl << endl;
    
    		}
    
    if ( umsatz == 0 )	
    
    		cout << endl;
    
    			cout << "Gesamtumsatz Unternehmen " << unter << ": " << gesamt;
    
    		cout << endl << endl;
    
    break;
    
    		cout << endl;
    	}
    
    /*		cout << endl;
    
    			cout << "Gesamtumsatz Unternehmen " << unter << ": " << gesamt;
    
    		cout << endl << endl;
    */
    }
    

    Warum werden die vorherigen Eingaben und Ergebnisse der Berechnungen nicht in der Variablen "gesamt" gespeichert?



  • Erstens: Du hast immer noch das 'if(umsatz==0) break;' drin.

    Zweitens: Wenn du mehrere Anweisungen hinter einem if() ausführen willst, mußt du sie mit {...} klammern.

    Drittens:

    Tray schrieb:

    Warum werden die vorherigen Eingaben und Ergebnisse der Berechnungen nicht in der Variablen "gesamt" gespeichert?

    Warum sollten sie? Du hast EINE Variable umsatz und die wird in jedem Schleifendurchlauf durch die Anweisung 'cin>>umsatz;' überschrieben.



  • Sorry, ich bekomm' das nicht auf die Reihe!
    Kannst du mir nicht noch nen Tip geben? 😃



  • Ja, kann ich: Befass dich mit den Grundlagen von C++ 😃

    Nur mal als Ansatz kann ich dir die innerste Schleife korrigieren. Den Rest darfst du dann machen:

    gesamt = 0;
    //wie gesagt - for() ist hier passender
    for(monat=1;monat<=3;++monat)
    {
      cout << "Umsatz Monat " << monat << ":" << endl << ENDE << endl;
    
      cin >> umsatz;
      gesamt+=umsatz;
      if ( umsatz == 0 ) break;
      cout << endl;
    }
    


  • ... in der Aufgabenstellung ist vermerkt, dass ausschließlich die WHILE-Schleife anzuwenden ist. Hätte ich vielleicht früher erwähnen sollen!!!

    Und bis auf weiteres funktioniert es auch ohne FOR-Schleife, bloß sieht es nun so aus, dass er bei Eingabe in Unternehmen B:

    Monat 1
    10
    Monat 2
    10
    Monat 3
    0

    Das Programm beendet, und die Umsätze von Unternehmen A hinzuaddiert!

    Außerdem, zu meiner Verteidung bezüglich der Grundlagen in C, dies ist der Grundkurs!!!!!!!



  • Wo addiert er denn etwas auf? Die Variablen behalten immer den letzten Wert, der ihnen zugewiesen wurde. Das heißt, wenn du per break aus allen Schleifen rausspringst, bleiben die Werte unter='B' und gesamt=20 aus den letzten Schleifendurchläufen stehen.

    PS: Und wieviele Stunden des Kurses hast du ausfallen lassen?

    PPS: Ist das ein C- oder C++-Kurs?



  • Hey, ich habs!

    Wiederrum vielen Dank für deine, mir gewidmete Zeit 😃

    Merci

    Cu Tray



  • Es ist ein C++ Kurs und ich bin in der Ausbildung als InKa und habe keine Sekunde verpasst



  • // Etwas für C++-Forum.cpp
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    //Main hat ihn C++ ein int als Rückgabewert(Wenn ich mich richtig erinnere hab ich mal gelesen, 
    //dass das noch aus C Zeiten stamm?!
    
    int main()
    {
        int monat;
        int quart;
    
        float umsatz[3];  // Ein Array
        float gesamt;
    
        char unter;
    
        const char ENDE[] = "( Bei Eingabe von 0.0 wird das Programm beendet )";
    
        for(quart = 1; quart <= 4; ++quart)
    	{
    		cout << quart << ". " << "Quartal" << endl;
    
            for(unter = 'A'; unter <= 'C';unter++)
             {
                cout << "Unternehmen " << unter << endl;
    
                for(monat = 1; monat <= 3;monat++)
                {
                    cout << "Umsatz Monat " << monat << ":" << endl;
    
                    cout << ENDE << endl;
    
                    cin >> umsatz[monat-1];
    
                    if ( umsatz[monat-1] == 0 )  
    				{
    				   break;
    				}
    
                    cout << endl;
    			}
    
    			if(umsatz[1-1] == 0)
    				{
    		  		gesamt = 0;
    				cout << "Gesamtumsatz Unternehmen " << unter << ": " << gesamt;
    				}
    			else if(umsatz[2-1] == 0)
    			{
    				gesamt = umsatz[1-1];
    				cout << "Gesamtumsatz Unternehmen " << unter << ": " << gesamt;
    			}
    			else if(umsatz[3-1] == 0)
    			{
    				gesamt = umsatz[2-1] + umsatz[1-1];
    				cout << "Gesamtumsatz Unternehmen " << unter << ": " << gesamt;
    			}
    			else
    			{
    				gesamt = umsatz[0] + umsatz[1] + umsatz[2];
    				cout << "Gesamtumsatz Unternehmen " << unter << ": " << gesamt;
    			}
         	cout << endl << endl << endl << endl << endl;
            }
    	}
    return 0; //Das return 0 muss nicht stehen, sollte aber
    }
    

    Auch wenns eine For-Schleife ist 🙄


Anmelden zum Antworten