Punkt vor Strich Rechnungs-Programm



  • Guten Tag Allerseits,
    ich hab ein paar Probleme mit einem Programm das ich eigentlich als einfache Übung schreiben wollte. Es geht um ein Konsolen-Programm das (unter Linux) einfache und immer variierende Aufgaen stellen soll und die Lösungen am Ende mit den eingegebenen Lösungen vergleicht.
    Ich poste mal den Quelltext bevor ich zu meinem Problem komme:

    #include <iostream>
    using namespace std;
    
    int main()
    {   char names[30];
    	cout << " Gib deinen Namen ein:";
    	cin >> names;
    	cout << " Hallo " << names << ", du bekommst hier eine Reihe von Aufgaben \n"<< 
    	                    " die du unter Beachtung der Punkt-vor-Strich Regel lösen musst \n";
    	cout << " viel Spaß, hier sind die 10 Aufgaben:\n";
    	int zahl,z,ergebniss[9],reihe=0;
    	while (reihe < 10)
    	{   
    		for (int i = 0; i < 5 ; i++)
    		{
    			zahl = random()%21;
    		    if (i==4)
    		    {
    		      z=4;	
    		    }
    		    else
    		      z = 1+random()%3;
    		    cout << zahl;
    		    switch (z)
    		    { 
    		    	case 1 :{
    		    		 cout << "+";
    
    		    		break;}
    		    	case 2 :{
    		    		cout << "-"; 
    		    		break;}
    		    	case 3 :{
    		    		cout << "*";
    		    		break;}
    		    	case 4 :{
    		    		cout<<"=";
    		    		break;}	
    		    	default:{} 
    		    }
    
    		}
    	   cin >> ergebniss[reihe];
    	   reihe++;
    	   cout << "\n";    
    	}	 
    
    	return 0;
    }
    

    Ich weiß, es ist winzig.
    Folgendes: wenn die erste Aufgabe gestellt wird und man die Lösung eingibt rast es die restlichen Aufgaben durch ohne die Antwort abzuwarten obwohl sich eigentlich nichts ändert. Wieso verhält es sich im ersten Schleifendurchlauf korrekt und bei den folgenden zieht es einfach sein Ding durch ohne auf die Eigabe abzuwarten?

    Und: wie kriege ich es hin das die Aufgabe auch vom Computer gerechnet wird?
    Sie wird bei mir ja nur Stück für Stück ausgegeben, muss ichs wieder einlesen und in Integer umwandeln oder gibt es da einen Trick?

    Danke im voraus..



  • Zum 'Folgendes': Ich glaube du musst vor cin noch ein cin.ignore(...) oder so einbauen 🙂



  • Mit If-Abfragen würde es gehen.

    if(loesung == richtig)
    {
    // Weiter zur Nächsten
    } else {
    //.. Fehlermeldung od. nochmal solange bis der Benutzer das richtige eingibt
    

    Ich hab deinen Code nur ein bisschen verändert:

    #include <iostream> 
    #include <time.h>
    
    using namespace std; 
    
    int main() 
    {   
    	srand( (unsigned)time( NULL ) ); 
    	char names[30]; 
        cout << " Gib deinen Namen ein:"; 
        cin >> names; 
        cout << " Hallo " << names << ", du bekommst hier eine Reihe von Aufgaben \n"<< 
                            " die du unter Beachtung der Punkt-vor-Strich Regel lösen musst \n"; 
        cout << " viel Spaß, hier sind die 10 Aufgaben:\n"; 
        int zahl,z,ergebniss[9],reihe=0; 
        while (reihe < 10) 
        {   
            for (int i = 0; i < 5 ; i++) 
            { 
                zahl = rand()%21; 
                if (i==4) 
                { 
                  z=4;    
                } 
                else 
                  z = 1+rand()%3; 
                cout << zahl; 
                switch (z) 
                { 
                    case 1 :{ 
                         cout << "+"; 
    
                        break;} 
                    case 2 :{ 
                        cout << "-"; 
                        break;} 
                    case 3 :{ 
                        cout << "*"; 
                        break;} 
                    case 4 :{ 
                        cout<<"="; 
                        break;}    
                    default:{} 
                } 
    
            } 
           cin >> ergebniss[reihe]; 
           reihe++; 
           cout << "\n";     
        }      
        cin.get();
        return 0; 
    }
    

    Vllt. baust du zuerst die If Abfragen ein 😉

    Mit freundlichen Grüßen,
    Daniel

    EDIT: ich hab noch vergessen zu sagen, dass du da auch sowas brauchst, wie eine Variable "SUMME VOM ERGEBNIS", die du dann bei einer IF-Abfrage benutzt, um zu schauen ob deine Lösung, die der richtigen Summe des Ergebnisses gleich ist.



  • std::string (<string>)
    std::time (<ctime>)
    std::srand (<cstdlib>)
    std::rand (<cstdlib>) ...



  • Man könnte auch den ersten bis zum Letzten Wert in ein Array speichern und dann in einer If Anweisung abfragen, ob es gleich dem Ergebnis ist.

    for(int i = 0; i != ..; ++i)
    {
    cin >> werte[i]; 
    }
    

    Daniel


Anmelden zum Antworten