Meherer Eingaben(Zahl) passend zum Gesamtwert ... ?



  • Ja, ich möchte es aber in C bzw. C++ schreiben. das wird doch n bissschen viel code oder ? !
    Dann wäre es ja nur :

    if (zahl[1]+zahl[2]...==gesamtzahl)
    {
    cout << zahl[1] << "+" << zahl[12] << .... << "Ergeben: " << gesamtzahl;
    }
    

    Hätte viell. erwähnen sollen, dass ich es programmieren möchte ... 😉 sry

    clint



  • bau dir ein "(multi)set<int> paket;" für die aktuell ausgewählten Elemente, dann kannst du die Summe berechnen mit "std::accumulate(paket.begin(),paket.end(),0);" (außerdem hast du insert/erase zum Ein- bzw. Auspacken der Zahlen gleich mitgeliefert).



  • bau dir ein "(multi)set<int> paket;" für die aktuell ausgewählten Elemente, dann kannst du die Summe berechnen mit "std::accumulate(paket.begin(),paket.end(),0);" (außerdem hast du insert/erase zum Ein- bzw. Auspacken der Zahlen gleich mitgeliefert).

    Danke für die Antwort, nur leider hab ich das noch nie gehört ! Kannst du mir bitte nähere Infos dazu geben, bzw, bsp. Code ! ?

    mfg



  • Multi-Set und std::accumulate sind Bestandteile der C++ STL - lies dir die Erklärungen mal durch und versuch' dein Programm in Pseudo-Code darzustellen, dann dürfte die Umsetzung in C++ eher einfach sein.



  • ok, werd ich machen.

    Danke erst mal für deine Antwort !

    cu clint



  • hey !

    Ich habs jetzt die ganze Zit versucht ! Das "FAQ" zu accumulate... hab ich
    gelesen, aber irgendwie komm ich nicht weiter ! Ich versteh die Parameter der Funktion nicht, der ich iht übergebem soll ! ? und was sie mir bei meiner Aufgabe helfen soll !

    Ich brauch unbeding hilfe !

    greetz clint



  • die ganzen STL-Algorithmen arbeiten mit sogenannten "Iteratoren" (Pointer-ähnliche Gebilde, die durch einen beliebigen Container laufen können) und benötigen normalerweise eine Bereichsangabe aus Startpunkt und "hinter dem Ende" - accumulate benötigt als dritten Parameter den Startwert der Summierung und als viertes die zu verwendende "Summierungsfunktion" (das ist optional - Default ist Addieren), also bleibt unter dem Strich:

    container elems;
    //füllen mit Werten
    
    //Berechne Summe aller Elemente von 'elems':
    int summe=accumulate(elems.begin()/*Anfang*/,elems.end()/*Ende*/,0/*Startwert*/);
    //Berechne Produkt aller Elemente von 'elems':
    int produkt=accumulate(elems.begin(),elems.end()/*wieder der Bereich*/,1/*Startwert*/,multiplies<int>/*ich multipliziere*/);
    

    PS: Die Container der STL stellen alle die Methoden begin() (Iterator auf Anfang des Inhaltes) und end() (Iterator hinter das Ende des Inhaltes) zur Verfügung - damit kannst du den benötigten Bereich definieren.



  • Ja, danke !

    Aber wie füll ich den "container" den mit meinen Werten ? Also zahl1,zahl2,2 usw.

    mfg clint



  • das ist leider für verschiedene Container unterschiedlich (Vektoren und Listen haben z.B. push_back() (Anhängen am Ende) und insert(pos,val) (einfügen an Stelle pos), Sets haben ein insert(val) (einfügen in Sortierungsreihenfolge). Die meisten Container können aber auch aus einem C-Array heraus initialisiert werden:

    int werte[]={zahl1,zahl2,...,zahln};
    size_t werte_len=sizeof(werte)/sizeof(werte[0]);
    container cont(werte,werte+werte_len);
    

    PS: Von den Möglichkeiten, eigene Containerklassen mit der STL zu kombinieren, fange ich gar nicht erst an 😃



  • jo danke ! Ich habs nun ....

    thx @ cstoll

    mfg clint


Anmelden zum Antworten