c++, Sortieren von 3 eingelesenen Zahlen

    • huty
      huty
      Bronze
      Dabei seit: 27.11.2008 Beiträge: 342
      Sortierung von drei Zahlen

      Schreiben Sie ein Programm, das drei Zahlen einliest und in aufsteigender Reihenfolge wieder ausgibt.

      Lösung:

      #include <iostream>
      using namespace std;
      main()
      {
      double a,b,c,h; //h als Hilfsparameter

      cout << "Dieses Programm sortiert drei Zahlen “
      << „nach Ihrer Groesse." << endl << endl;

      cout << "Geben Sie bitte drei Zahlen ein!" << endl;
      cin >> a >> b >> c

      Soll irgendwie mit ner Hilfsvariablen funktionieren, aber wie?

      pls help!
  • 13 Antworten
    • adi4you
      adi4you
      Bronze
      Dabei seit: 13.02.2007 Beiträge: 197
      kleiner Tipp: google mal nach Bubblesort
    • huty
      huty
      Bronze
      Dabei seit: 27.11.2008 Beiträge: 342
      arrays ist erst unser nächstes thema. soll auch so funktionieren ohne mit nur maximal 3 if´s
      ideas?
    • adi4you
      adi4you
      Bronze
      Dabei seit: 13.02.2007 Beiträge: 197
      Prinzip ist doch dasselbe ;)

      code:
      if(c<b) {
        h=c;
        c=b;
        b=h;
      }
      
      if(c<a) {
       h=c;
       c=a;
       a=h;
      }
      
      if(b<a) {
       h=b;
       b=a;
       a=h;
      }
      
      cout << "sortiert: " << a << " " << b << " " << c <<endl;
    • huty
      huty
      Bronze
      Dabei seit: 27.11.2008 Beiträge: 342
      kannst das mal erkären? Wäre super nett :)
    • deuspluto
      deuspluto
      Bronze
      Dabei seit: 08.01.2007 Beiträge: 423
      ist doch eigentlich selbserklärend. c muss am ende die größte zahl sein, b die mittlere und a die kleinste. also vergleichst du b mit c, wenn b größer ist tauschst du die bezeichnungen. dann vergleichst du a mit c, wenn a größer ist vertauschst du die bezeichnungen. bleiben noch b und a, a muss am ende die kleinste zahl sein, wenn a also größer ist als b tauschst du beide wieder.
    • adi4you
      adi4you
      Bronze
      Dabei seit: 13.02.2007 Beiträge: 197
      jep und die hilfsvariable brauchste nur als Zwischenspeicher um 2 zahlen zu tauschen
    • huty
      huty
      Bronze
      Dabei seit: 27.11.2008 Beiträge: 342
      danke euch fuer eure Hilfsbereitschaft!
    • MadCow
      MadCow
      Bronze
      Dabei seit: 15.09.2006 Beiträge: 1.151
      und hier nochmal in C++:
      code:
      #include <iostream>
      #include <iterator>
      #include <vector>
      #include <algorithm>
      using namespace std;
      
      int main (int argc, char *argv[])
      {
        //variablen
        vector<int> nums;
        istream_iterator<double> eos;
        istream_iterator<double> it(cin);
        ostream_iterator<int> out_it (cout,", ");
        
        // einlesen
        copy(it,eos,back_inserter(nums));
      
        // ausgabe unsortiert
        copy(nums.begin(), nums.end(), out_it);
        cout << endl;
      
        // sortieren
        sort(nums.begin(),nums.end());
      
        //ausgabe sortiert
        copy(nums.begin(), nums.end(), out_it);
        cout << endl;
        return 0;
      }

      erklärungen gibts mit google und auf http://www.cplusplus.com/reference/
    • deuspluto
      deuspluto
      Bronze
      Dabei seit: 08.01.2007 Beiträge: 423
      ist zwar komplizierter aber dafür auch länger
    • MadCow
      MadCow
      Bronze
      Dabei seit: 15.09.2006 Beiträge: 1.151
      komplizierter ist es nicht wenn man die Sprache beherrscht, länger ist es auch nicht, der gefragte teil ist eine zeile.

      op fragte nach C++ nicht nach C, also ist eine C++ antwort schon sinnvoll.
    • deuspluto
      deuspluto
      Bronze
      Dabei seit: 08.01.2007 Beiträge: 423
      offensichtlich soll op lernen das sortieren selber zu programmieren, da ist es alles andere als sinnvoll ihm einen algorithmus aus ner bibliothek zu geben. zudem war die vorherige lösung auch in c++.
    • adi4you
      adi4you
      Bronze
      Dabei seit: 13.02.2007 Beiträge: 197
      jep sinn solcher übungen ist es grundlegende algorithmen zu verstehen und anzuwenden und nicht massig bibliotheken einzubinden, die mit über 100 unterfunktionen und sinnlosen speicherverbrauch 3 Zahlen sortieren :f_biggrin:

      wobei lösung 2 abzugeben sicher gut ankommt :D
    • MadCow
      MadCow
      Bronze
      Dabei seit: 15.09.2006 Beiträge: 1.151
      ihr habt natürlich recht Grundlagen sind wichtig und ich hätte die absicht meines posts besser kommentieren sollen. Es war mehr als ergänzung gedacht.
      Aber die Standardbibliotheken kennen, verstehen und anwenden koennen ist mindestens genauso wichtig wie die Grundlagen.

      Vorallem C++ ist eine unglaublich mächtige Sprache aber wird viel zu oft nur als C mit objekt orientiertem Syntax verwendet.
      So kommen mir desoeftern die wildesten Algorithmen mit zig Speicherlücken und sonstigem low level Fehlern unter welche mit einigen wenigen STL algorithmen fehlerfrei, generischer und fast immer effizienter zu loesen sind.

      sort auf 3 Zahlen anwenden ist auch nicht besonders viel langsamer als es manuell zumachen. sort verwendet meistens quicksort für große mengen und insertionsort welcher kaum overhead hat für kleine.

      hiers übrigens noch ne kürzere variante vom obigem code mit dem swap algorithmus (d.h. generisch):
      if (b < a) swap(b, a);
      if (c < b) swap(c, b);
      if (b < a) swap(b, a);
      ist aber genauso teuer, 3 vergleiche 6 assignments 3 kopien.
      im c++0x standard wäre das allerdings schneller für komplexe objekte statt nummern da der standard rvalue referenzen unterstützt (ermoeglicht swap ohne temporäre objekte)