Zahlen einer Menge hinzufügen



  • Hallo, dieses Programm soll einer Menge Zahlen hinzufügen.
    Falls die Zahl schon in der Menge enthalten ist, soll die Ausgabe:
    "Die Zahl ist bereits in der Menge enthalten." erfolgen.
    Aber die Meldung wird nach jeder Zahl die ich eingebe ausgegeben.

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    void hinzufuegen();
    bool pruefen(int z);
    vector<int> vec;
    
    int main()
    {
    
        for (;;) {
        hinzufuegen();
        }
    
        return 0;
    }
    
    void hinzufuegen(){
        cout<<"Zahl eingeben: ";
        int Zahl;
        cin>>Zahl;
        bool b = pruefen(Zahl);
        if (b == 1){
            vec.push_back(Zahl);
        }
        else
            cout<<"Die Zahl ist bereits in der Menge enthalten."<<endl;
    }
    
    bool pruefen(int z){
        for(int i=0; i<vec.size(); i++){
            if(vec[i]==z)
                return 0;
            else
                return 1;
        }
    }
    


  • Lass als allererstes mal globale Variablen sein.

    bool pruefen(int z) { // ...
    

    std::find()

    Ähm. Und warum vergleichst Du booleans mit Integern und gibst Integer zurück wenn's eigentlich bools sein sollten?

        for(int i=0; i<vec.size(); i++){
            if(vec[i]==z)
               return 0;
            else
                return 1;
        }
    

    Your logic is flawed.

    for (std::size_t i = 0; i < vec.size(); ++i) {
        if(vec[i] == z)
            return true;
    }
    return false;


  • 1 = true und 0 = false. Ich dachte dass das automatisch umgewandelt wird.



  • Ja, schon. Trotzdem ist es strange, Baby.

    Ohne Scheiß:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main()
    {
    	std::vector<int> values;
    
    	for (int value; std::cin >> value;)
    		if (std::find(values.begin(), values.end(), value) == values.end())
    			values.push_back(value);
    		else std::cout << "Die Zahl ist bereits in der Menge enthalten.\n";
    
    	std::cout << "\nValues:\n";
    	for (auto v : values)
    		std::cout << v << '\n';
    }
    


  • Hey, vielen Dank!
    Das ist eine super saubere Lösung 👍



  • Ich möchte nur mal einwerfen, dass Menge auf Englisch "set" heißt. Könnte ja vielleicht sein, dass es da einen entsprechenden Datentyp gibt 😉



  • @wob Maybe Baby 🙂
    Aber ich kenn' mich mit sets nicht aus. Die habe ich bei meinen "Hello, World!"s noch nie gebraucht.


Anmelden zum Antworten