Variablen zählen mit "if"



  • Hallo zusammen,

    nachdem ich auch nach ewigem Gesuche nichts zu meinem Problem gefunden habe, dachte ich mir, ihr könnt mir weiterhelfen.

    Ich hänge gerade bei einer Übungsaufgabe aus dem Buch "C++ Primer" fest (nein, es gibt keine gedruckte Lösung dazu):

    Schreiben Sie ein Programm, das den Benutzer auffordert, eine Folge von Zahlen einzugeben. Geben sie eine Meldung aus, die besagt, wie viele von den Zahlen negativ sind.

    Das Buch hat bis zu dieser Aufgabe nur die "while-" , "for-", und "if-Anweisung" behandelt. Es soll also nur mit diesen Befehlen laufen.

    Mein Code dazu sieht bisher etwas dünn aus, aber da ich blutiger Anfänger bin, weiß ich nicht, wie ich die Anzahl der Variablen addieren soll (die Summe der eingegeben Zahlen zu bilden wäre ja kein Problem, aber gerade das solls ja nicht sein)

    #include "main.h"
    using namespace std;
    int main()
    {
    	cout<<"Gib 2 Zahlen ein:"<<endl;
    	int v1,v2;
    		cin>>v1>>v2;
    		int lower=0,upper=0;
    		if (v1 < 0) 
    		{
    			lower=v1;
    		   }
    		else 
    		{
    			upper=v1;
    		   }
    		if (v2 < 0)
    		{
    			lower=v2;
    		   }
    		else
    		{
    			upper=v2;
    		   }
    		if (v1=lower)
    		{
    			cout<<lower<<" Zahlen sind negativ."<<endl; // hier soll lediglich die Anzahl von "lower" erscheinen...
    		}
    
    	// next 3 lines are just for keepin' the console-window open!
    	int stop; 
    	cin>> stop;
    	cout<< stop;
    	return 0;
    }
    

    Bin für jeden Hinweis dankbar und bitte nicht gleich schlagen, wenn oben gravierende Fehler drinstehen 😉

    tool

    P.S. Falls jemand eine elegantere Lösung hat um das Konsolenfenster am Ende offen zu lassen, immer her damit 🙂



  • Du solltest die einzulesenden Werte besser in einem Array speichern. Dann kannst du im Anschluss nämlich mit einer Schleife (for) alle Elemente des Arrays mit wenigen Zeilen abklappern. Und zu dem Zweck solltest du einfach eine Zählvariable anlegen, die du immer um eins hochzählst, wenn ein Element des Arrays negativ ist.



  • Naja ich verbesser jetzt mal deine Lösung. Da du Array's jetzt nicht genannt hast, also das du sie schon hattest, lass die Lösung mal so stehen. Wenn du Arrays schon hattest, kannst du es eleganter mit for-Schleifen lösen und fast beliebig viele Zahlen eingeben (Vector wäre besser).

    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    int main()
    {
        cout<<"Gib 2 Zahlen ein:"<<endl;
    
        int v1;
        int v2;
        cin >> v1;
        cin >> v2;
    
        int counter = 0;
    
        if(v1 < 0)
            counter++;
        if(v2 < 0)
            counter++;
    
        cout << counter << " Zahlen sind negativ.";
        getch();
    }
    


  • Mist, die anderen waren schon wieder schneller. Naja, egal. Du kannst das ganze etwas flexibler machen:

    #include <iostream> 
    #include <vector>
    #include <string>
    #include <conio.h>
    
    int main() 
    {
    	std::vector<int> buffer;
    	bool loop = false;
    
    	while( !loop )
    	{
    		std::string nBuffer;
    
    		std::cout<<"Bitte Zahl eingeben, zum bestaetigen 'end' eingeben und mit der";
    		std::cout<<"Eingabe-Taste bestaetigen: ";
    
    		std::cin>> nBuffer;
    
    		if( !nBuffer.compare( "end" ) )
    			loop = true;
    		else
    		{
    			int zahl = ::atoi( nBuffer.c_str( ) );
    			buffer.push_back( zahl );
    		}
    	}
    
    	for( std::vector<int>::iterator i = buffer.begin( ); i != buffer.end( ); ++i )
    	{
    		if( *i >= 0 )
    			std::cout<< *i <<" ist positiv!"<<std::endl;
    		else
    			std::cout<< *i <<" ist negativ!"<<std::endl;
    	}
    
    	getch( );
    }
    

    Setzt allerdings etwas weitgehenderes Wissen voraus...



  • Kóyaánasqatsi schrieb:

    ...

    So wie du das geschrieben hast, hab ich auch angefangen. Aber man muss bedenken das er gerade Mal die for-Schleife durchgekaut hat. Ich hoffe für ihn, dass es ihn nicht unnötig verwirrt, aber eig. ganz spannend für ihn sich das Mal anzuschauen.



  • tool schrieb:

    Schreiben Sie ein Programm, das den Benutzer auffordert, eine Folge von Zahlen einzugeben. Geben sie eine Meldung aus, die besagt, wie viele von den Zahlen negativ sind.

    Das Buch hat bis zu dieser Aufgabe nur die "while-" , "for-", und "if-Anweisung" behandelt. Es soll also nur mit diesen Befehlen laufen.

    #include <iostream>
    using namespace std;
    
    int main()
    {
        // Wir zählen mit wieviele Zahlen eingegeben wurden und wieviele davon negativ waren
        int anzahl_gesamt = 0;
        int anzahl_negativ = 0;
    
        // Wir lassen eine Schleife solange laufen bis die Variable nochmal den Wert false hat
        bool nochmal = true;
        while(nochmal)
        {
            // In jedem Schleifendurchlauf muss der Benutzer eine Zahl eingeben
            std::cout << "Geben Sie eine Zahl ein: ";
            int zahl = 0;
            std::cin >> zahl;
    
            // Erstmal erhöhen wir die Anzahl der eingegebenen Zahlen um 1
            ++anzahl_gesamt;
    
            // Dann schauen wir ob die Zahl negativ war und erhöhen in diesem Fall die
            // Anzahl der negativen Zahlen um 1
            if(zahl < 0)
            {
                ++anzahl_negativ;
            }
    
            // Dann informieren wir den Benutzer wieviele Zahlen bisher negativ waren
            std::cout << "Von den " << anzahl_gesamt << " eingegebenen Zahlen waren "
                << anzahl_negativ << " Zahlen negativ." << std::endl;
    
            // Jetzt fragen wir ob noch eine Zahl eingegeben werden soll
            std::cout << "Wollen Sie noch eine Zahl eingegeben (j/n)? ";
            char eingabe = 0;
            cin >> eingabe;
    
            // Wenn kein 'j' (für ja) eingegeben wurde, dann setzen wir die Variable nochmal
            // auf false, wodurch die Schleife endet und damit auch das Programm
            if(eingabe != 'j')
            {
                nochmal = false;
            }
        }
    }
    

    P.S. Falls jemand eine elegantere Lösung hat um das Konsolenfenster am Ende offen zu lassen, immer her damit 🙂

    Brauchst du in diesem Fall gar nicht.



  • tool schrieb:

    P.S. Falls jemand eine elegantere Lösung hat um das Konsolenfenster am Ende offen zu lassen, immer her damit 🙂

    Klar:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html



  • tool schrieb:

    P.S. Falls jemand eine elegantere Lösung hat um das Konsolenfenster am Ende offen zu lassen, immer her damit 🙂

    Klar doch: Öffne vorher ein Konsolenfenster und starte das Programm darin 😃



  • Moin!

    Also erstmal Danke für die zahlreichen und auch gut erklärten Antworten. Hier lern ich ja mehr als aus meinem Buch 🙂 !!!

    An "bool" und "inkrementieren" hab ich auch schon gedacht, aber da das Buch bis zur Stelle mit der Aufgabe eben diese Befehle noch nicht behandelt hat, muss ich davon ausgehen, dass es auch ohne solche Anweisungen funktionieren muss. Vielleicht ist es ja auch ein Übersetzungsfehler im Buch.

    Jedenfalls nochmals Danke, ich werde mir die Vorschläge heute nach der Arbeit in Ruhe angucken und für die Zukunft merken. Sobald ich an der nächsten Aufgabe scheiter, melde ich mich wieder 😉 .

    bis denn
    tool



  • LordJaxom schrieb:

    tool schrieb:

    P.S. Falls jemand eine elegantere Lösung hat um das Konsolenfenster am Ende offen zu lassen, immer her damit 🙂

    Klar doch: Öffne vorher ein Konsolenfenster und starte das Programm darin 😃

    Endlich mal eine vernünftige Antwort auf diese immer wiederkehrende Frage! Ein Konsolenprogramm sollte man in bzw. aus einer Konsole starten!



  • tool schrieb:

    An "bool" und "inkrementieren" hab ich auch schon gedacht, aber da das Buch bis zur Stelle mit der Aufgabe eben diese Befehle noch nicht behandelt hat, muss ich davon ausgehen, dass es auch ohne solche Anweisungen funktionieren muss. Vielleicht ist es ja auch ein Übersetzungsfehler im Buch.

    Du kannst "inkrementieren" auch durch "eins addieren" darstellen. Da Du "zuweisen" offenbar schon hattest, solltest Du den adäquaten Ersatz herleiten können.


Anmelden zum Antworten