kleine übung => kleines prob



  • Dann mußt du halt per switch() auswählen, wie du "summieren" willst:

    while(i<n)
    {
      cin>>val;
      switch(mch)
      {
      case 1: res+=val;break;
      case 2: res-=val;break;
      case 3: res*=val;break;
      case 4: res/=val;break;
      }
    }
    

    (allerdings mußt du den Startwert für res noch je nach Operation einsetzen)

    PS: Und eventuell solltest du auf double's statt auf int rechnen.



  • hmmm...k...danke auch 😃
    aja...ich hab da so n doofen err0r beim compilen:

    "d:\Pr0gg3n\rechner\rechner.cpp(52): fatal error C1075: Dateiende erreicht, bevor das zugehörige Element für das linke Element Klammer '{' in 'rechner.cpp(3)' gefunden wurde"
    

    ne function muss doch nich zwingend n rückgabewert haben oder?
    is doch fehler diesbezüglich? o_O

    joooar...
    achja... CStoll:

    case 1: res+=val;break;
    

    case is klar...und... "res" denk ich ma is so ne art forlaufende var oder?
    is die vom system schon vordefiniert oder wie funzt die?



  • Chaoz schrieb:

    hmmm...k...danke auch 😃
    aja...ich hab da so n doofen err0r beim compilen:

    "d:\Pr0gg3n\rechner\rechner.cpp(52): fatal error C1075: Dateiende erreicht, bevor das zugehörige Element für das linke Element Klammer '{' in 'rechner.cpp(3)' gefunden wurde"
    

    ne function muss doch nich zwingend n rückgabewert haben oder?
    is doch fehler diesbezüglich? o_O

    Wenn du den Rückgabetyp als "void" angibst, benötigst du kein return.

    (aber der Fehler sieht eher so aus, als ob du irgendeine } Klammer vergessen hast)

    achja... CStoll:

    case 1: res+=val;break;
    

    case is klar...und... "res" denk ich ma is so ne art forlaufende var oder?
    is die vom system schon vordefiniert oder wie funzt die?

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



  • res wie result und val wie value 🙂



  • 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