Neuling



  • erste zahl merken, rest durchgehen und wenn eine zahl kleiner als die gemerkte ist diese merken



  • Am einfachsten wäre natürlich für jede Zahl eine Variable anzulegen und diese dann miteinander vergleichen. Aber dadurch würde denke ich der Code unnötig groß werden, und mit der Schleifenthematik beim Einlesen hat das auch nichts zu tun, oder ????



  • Lies mal genau durch was gesagt wurde! 2 vars genügen

    btw: Aus Interesse: Lernt ihr diesen Stil (printf,scanf,deklaration von main...) bei euch in der Schule? 🙂



  • Ja Fencer, den Stil lernen wir................ Unsere Lehrerin hat sogar den Doktortitel



  • danke. (ist aber trotzdem eher C 😉 )



  • Ja, wir haben auch mit c angefangen.
    Das mit dem Einlesen der Zahlen kann ich aber auch so lassen, oder ?????



  • Achso, ich war etwas verwirrt weil du C++ geschrieben hast.:)

    wenn das in ordnung geht, kannst du es so lassen.

    Ich hätte das aud diese Weise gemachtgemacht:

    #include<iostream>
    using namespace std;
    ....
    int zahl;
    cin>>zahl;//einlesen
    cout<<zahl<<endl;//ausgeben
    


  • Jetzt ist es auch C++.

    Und wie würdest Du dann weitermachen ? Ich steh grad echt voll auf dem Schlauch. Habe den ganzen Mittag gelernt und denke, dass da jetzt irgendwo ne Blokade ist.....



  • okay weil ich heute meinen guten tag hab und obwohl das schon 3 mal (!!!) gesagt wurde.

    Definiere am anfang eine variable max und eine min.
    Schleife 10 mal:
    Zahl einlesen.
    Wenn größer als max /kleiner als min --> max bzw. min ersetzen

    nach der schleife:
    max und min ausgeben.

    fertig. Code ist nicht im preis inbegriffen 😉

    Programmieraufwand: 5-30 minuten



  • Danke Fencer,

    meinst Du mit folgender Zeile:

    Wenn größer als max /kleiner als min --> max bzw. min ersetzen

    das hier:

    Wenn größer als max geteilt durch kleiner als min --> max bzw. min ersetzen ,

    oder wie meinst Du das genau ?????????????



  • Jetzt dachte ich das geht mit nem 4 Zeiler, aber wieso ist int einlesen so umständlich? 😡

    #include<iostream>
    #include<set>
    
    int main()
    {
    	std::set<int> m;
    	for(int i = 0;i<10;i++){
    		int n;
    		std::cin>>n;
    		m.insert(n);//gibts hier eigentlich nix um direkt nen int zu bekommen ohne ihn so umständlich mit >> rauszuholen?
    	}
    	std::cout<<"min"<<*m.begin()<<"max"<<*m.rbegin();
    }
    


  • / ist als "bzw." gemeint



  • Also mit 10 Werten hab ichs auch nicht kürzer hinbekommen...
    Hier braucht man halt STRG+Z um das eof anzugeben... (kA, was man in der Unix-Welt drücken müsste^^)

    #include <algorithm>
    #include <iostream>
    #include <iterator>
    #include <set>
    
    int main()
    {
    	std::set<int> values;
    	values.insert(std::istream_iterator<int>(std::cin), std::istream_iterator<int>());
    	std::cout << "min: " << *values.begin() << "; max: " << *values.rbegin() << std::endl;
    }
    

    Es wäre einfach, wenn es copy_n gäbe - aber aus irgend nem Grund gibts das nicht... Aber hauptsache es gibt 20Milliarden replaces bei string...

    #include <algorithm>
    #include <iostream>
    #include <iterator>
    #include <vector>
    
    int main()
    {
    	std::vector<int> values;
    	std::copy_n(std::istream_iterator<int>(std::cin), std::back_inserter(values), 10); //(src, dest, count)
    	std::sort(values.begin(), values.end());
    	std::cout << "min: " << *values.begin() << "; max: " << *values.rbegin() << std::endl;
    }
    

    PS:
    ist hieran irgendwas falsch?

    #include <iostream>
    #include <iterator>
    #include <set>
    
    int main()
    {
    	std::set<int> values(std::istream_iterator<int>(std::cin), std::istream_iterator<int>());
    }
    

    MSVC 9 schrieb:

    error C2751: 'std::cin' : the name of a function parameter cannot be qualified



  • unskilled schrieb:

    PS:
    ist hieran irgendwas falsch?

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-250511.html ist das selbe Problem.


  • Mod

    @unskilled: Mit std:sort schießt du weit über das Ziel hinaus, da nur Maximum und Minimum gesucht werden. Es gibt ja in algorithm auch Algorithmen dafür.



  • @Ryuzaki: ach ja - hatte ich so gar gelesen, aber schon wieder verdrängt^^
    @SeppJ: stimmt - hatte die aufgabenstellung schon wieder vergessen : D

    also:

    #include <algorithm>
    #include <iostream>
    #include <iterator>
    #include <vector>
    
    int main()
    {
        std::vector<int> values;
        std::copy_n(std::istream_iterator<int>(std::cin), std::back_inserter(values), 10);
        std::cout << "min: " << *std::min_element(values.begin(), values.end())
                << "; max: " << *std::max_element(values.begin(), values.end()) << std::endl;
    }
    

    bb


  • Mod

    Ausgezeichnet, das sollte die Referenzlösung sein, wenn in ein paar Tagen der nächste diese Frage stellt. 👍



  • SeppJ schrieb:

    Ausgezeichnet, das sollte die Referenzlösung sein, wenn in ein paar Tagen der nächste diese Frage stellt. 👍

    jopp - aber wie gesagt: das wäre nur die lösung, wenn es copy_n geben würde - wie in der original SGI STL library...
    für die lösung, die auch funktioniert habe ich ja set genommen^^

    bb



  • danke für eure antworten. bin sehr überrascht, wieviele sich in dieses thema eingeklingt haben. aber leider dürfen wir das nur mit schleifen lösen,


  • Mod

    Der Grund das sich so viele beteiligt haben ist der, dass hier im Forum normalerweise keine Hausaufgaben gemacht werden. Da eine ungelöste Aufgabe aber trotzdem in den Fingern juckt gibt es dann immer einen inoffiziellen Wettbewerb um die eleganteste Lösung. Diese sind dann ganz bewusst mit dermaßen fortgeschrittenen Sprachmitteln geschrieben, dass man sie nicht als Lösung für Hausaufgaben verwenden kann.

    Die gezeigten Lösungen enthalten übrigens alle Schleifen. Diese sind nur sehr gut versteckt - wegen der Eleganz.


Anmelden zum Antworten