kleine übung => kleines prob



  • res ist eine Variable, in der die Zwischenwerte der Berechnung landen sollen - die mußt du schon selber deklarieren (anstelle deines Werte-Arrays).

    als müsst ich vorher eben nur "int res" (wobei res variabel is oO???)
    und dann eben nur die case anweisung und der addiert die einfach auf?
    oder was?



  • chaoz hast du schon mal von der klasse "vector" gehört? falls nein kann ich dir das mal erklären. damit dürfte dein problem gelöst sein.



  • hier ein kleiner ansatz mit aufteilung des ganzen in funktionen:

    #include <iostream>
    using namespace std;
    
    int operation(int nmal, int(*berechne)(int, int), int startwert)
    {
        int ergebnis = startwert;
        int aktuell;
        for(int i = 0; i < nmal; ++i)
        {
            cout << "Operand " << (i+1) << ": " << endl;
            cin >> aktuell;
            ergebnis = berechne(ergebnis, aktuell);
        }
        return ergebnis;
    }
    
    //Operationen
    
    inline int multipliziere(int a, int b) { return a*b; }
    inline int multiplikation(int nmal) { return operation(nmal, multipliziere, 1); }
    
    //noch mehr Operationen selber machen!!!
    
    int main()
    {
        int operationsnr, ergebnis, anzahl=0;
    
        cout << "Please select your mathmatical Operation: \n" <<
            "1 - Addition\n" <<
            "2 - Subtraction\n" <<
            "3 - Multiplication\n" <<
            "4 - Division" << endl;
        cin >> operationsnr;
    
        cout << "Please select your number of operants" << endl;
        cin >> anzahl;
    
        if(anzahl>0)
        {
            switch(operationsnr)
            {
                case 3:
                ergebnis = multiplikation(anzahl);
                cout << "Das Ergebnis der Multiplikation lautet: " << ergebnis << endl;
                break;
    
                default:
                cerr << "Fehler: Operation nicht implementiert!" << endl;
                break;
            }
        }
    }
    


  • warum kompliziert wenn´s auch einfach geht?

    // ich habe es, um zu erklären nur mit Addition gemacht!
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
        vector<int> v_operand;
        int zahl, wert, summe=0;
    
        cout << "Addieren von Zahlen: \nWieviele Operanden wollen sie verwenden?";
        cin >> zahl;
        cout << "Geben Sie nun die zu addierenden Werte ein:\n";
    
        //Werte einlesen
        for(int i=1; i<=zahl; i++)
        {
                cout << i << ".Wert: ";
                cin >> wert;
                v_operand.push_back(wert);
        }
        //Werte zusammenzählen
        for(int i=0; i<v_operand.size(); i++)
        {
                summe = summe + v_operand[i];
        }
        cout << "Das Ergebnis beträgt: " << summe;
    
        system("PAUSE");
        return 0;
    }
    


  • @ schorsch code:
    k, n1....bloß ich versteh das echt voll nich sry 😉
    @ XatriXX:
    nette sache, bloß nu musst mir noch irgendwie erklären was:

    v_operand.push_back(wert);
    v_operand.size();

    ist...so... 😃

    (danke nochma dass ihr euch so ne mühe macht,
    endlich ma ne kompetente community 😃 )



  • @schorch: Warum selber schreiben, wenn man die STL nutzen kann? Hast du schonmal etwas von "accumulate()" gehört?

    @Chaoz: Ich empfehle dir einen Blick ins Magazin (recht weit unten im Forum) - dort steht seit letzter Woche der erste Teil meiner STL-Serie.



  • @CStoll: Schon, aber bei accumulate muss man die Operanden vorher in einem Container zwischenspeichern, oder? Ich meine wozu einen LKW nehmen, wenn man etwas mit einem Fahrrad transportieren kann? Außerdem lernt man manchmal beim Selbermachen grundlegende Dinge, die vllt. nicht nur beim Verstehen von fremdem Code, wie der STL, helfen, sondern gerade durch den Prozess des Selberschreibens evtl. auch bestimmte Muster besser vermitteln.



  • Nein, mußt du nicht. Du kannst auch direkt aus der Eingabe heraus akkumulieren:

    accumulate(istream_iterator<int>(cin),istream_iterator<int>(),0);
    

    (das bricht ab, sobald du etwas nicht-numerisches eingibst)



  • Super! Das ist natürlich praktisch. Jetzt müsste man nur noch nach jeder Eingabe eines Operanden eine Ausgabe machen können, die, so wie Chaoz es wollte, besagt welcher Operand eingegeben werden soll. Aber das geht ja auch, indem man cout dekoriert (siehe Dekorierer). Ich glaube jedoch, all das ist für Anfänger noch verwirrender, als das bißchen erstmal selber zu schreiben.



  • ich schrieb:

    indem man cout dekoriert

    Ich meine natürlich, indem man cin dekoriert.



  • ganz einfach chaoz:

    v_operand.push_back(wert); //Wert anhängen: das was in der variable in der klammer  //                           steht wird an den vector
                               //v_operand angehängt.
    
    v_operand.size()           //die Länge des Vektors -> wieviele Werte sind
                               //enthalten.
    
                               //z.B. in einem vector befinden sich 5 werte: 
    cout << v_operand.size(); 
                               /*bildschirmausgabe: 5 (kann wie eine normale Zahl                      //behandelt werden.)*/
    


  • schorsch code schrieb:

    Super! Das ist natürlich praktisch. Jetzt müsste man nur noch nach jeder Eingabe eines Operanden eine Ausgabe machen können, die, so wie Chaoz es wollte, besagt welcher Operand eingegeben werden soll. Aber das geht ja auch, indem man cout dekoriert (siehe Dekorierer).

    Du kannst accumulate() als vierten Parameter auch die Funktion übergeben, mit der es seine Werte aufsummieren soll (und die Grundrechenarten erreichst du mit plus<int>, minus<int>, multiplies<int> und divides<int>).


Anmelden zum Antworten