Neuling



  • 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.



  • andy135 schrieb:

    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,

    na dann bist du ja jetzt fast fertig:

    #include <algorithm>
    #include <iostream>
    
    int main()
    {
      int min, max;
      int tmp;
      std::cin >> tmp;
      min = max = tmp;
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
    
      std::cout << "min: " << min << "; max: " << max << std::endl;
    }
    

    bb



  • unskilled schrieb:

    na dann bist du ja jetzt fast fertig:

    #include <algorithm>
    #include <iostream>
    
    int main()
    {
      //...
      max = std::max(min, tmp);  :warning:  :warning: 
      //...
    }
    

    Aber auch nur fast :p

    Felix



  • Hallo nochmals zusammen,

    ich bin immer noch nicht weiter gekommen. Wie schaut denn diese Befehlsfolge in reinem C-Code aus ???????Also kein c++ oder sonstiges, sondern reiner C-Code........... Habe mal folgendermassen angefangen:

    int zahl=0,zahl1=0;
    int zahlmax=0,zahlmin=0;
    int count;

    for (count=1; count<=9; count++)//Schleife leuft 9 mal + 1 die Erste Auffeorderung
    {
    printf("\n\tBitte geben Sie eine Zahl ein\t");
    scanf ("%d",&zahl);
    fflush(stdin);
    if (zahlmin>=zahl);//zahlmin wird ausgeweartet
    zahlmin=zahl;
    else if (zahlmax<=zahl);//zahlmax wird ausgeweartet
    zahlmax=zahl;

    } //Ausgabe min und max Werte

    printf("\n\n");
    printf ("\tSie haben die kleinste Zahl: %.0lf \n\n" ,zahlmin);
    printf ("\tund die groeste Zahl: %.0lf eingetippt\n" ,zahlmax);

    Irgendwas ist da noch falsch, nur weiß ich nicht was......



  • Ja, da fehlen noch C++ Tags (unter den Smilies)
    Außerdem sollte nach nem if kein Semikolon kommen
    fflush(stdin); ist glaube ich nicht so ne dolle Idee...
    Und dann solltest du es vermeiden, min/max mit "eigenen" Werten zu initialisieren(erst mal hast du ja max nur deklariert und min 0 zugewiesen - max kann also auch 9999 sein - und dein Ergebnis ist falsch. und/oder du gibst nur zahlen > 0 ein und das Minimum ist trotzdem 0)
    deshalb nehm doch die erste eingabe für das initialisieren der werte

    ich hab kein plan von dem ganzen scanf/printf zeugs und falls du die HA wirklich in C machen willst, bist du hier eindeutig im falschen Forum, deshalb hab ich mal die C++ Varianten genommen
    Falls du was nicht verstehst, kannste ja nachfragen:

    #include <iostream>
    
    int main()
    {
      int wert;
      int max, min;
    
      std::cout << "Bitte geben Sei eine Zahl ein!\t";
      std::cin >> wert;
      max = min = wert;
    
      for(int count=1; count < 9; count++)
      { 
        std::cout << "Bitte geben Sei eine Zahl ein!\t";
        std::cin >> wert;
        if(wert < min)
          min = wert;
        if(wert > max)
          max = wert; 
      }
    
      std::cout << std::endl;
    
      std::cout << "Min.: " << min << std::endl
        << "Max.: " << max << std::endl;
    
      //ggf. Konsole offen halten
    }
    

    bb

    PS: Schleife leuft 9 mal (ich will nen Smilie, was sich die Augen zu hält :D)


Anmelden zum Antworten