Zum Forum springen
c++, Sortieren von ...
 
Benachrichtigungen
Alles löschen

[Geschlossen] c++, Sortieren von 3 eingelesenen Zahlen

14 Beiträge
4 Benutzer
0 Reactions
6,209 Ansichten
huty
Beigetreten: 27.11.2008
PokerStrategist

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
Beigetreten: 13.02.2007
Oldschool Grinder

kleiner Tipp: google mal nach Bubblesort


huty Themenstarter
huty
Beigetreten: 27.11.2008
PokerStrategist

arrays ist erst unser nächstes thema. soll auch so funktionieren ohne mit nur maximal 3 if´s
ideas?


adi4you
Beigetreten: 13.02.2007
Oldschool Grinder

Prinzip ist doch dasselbe ;)

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 Themenstarter
huty
Beigetreten: 27.11.2008
PokerStrategist

kannst das mal erkären? Wäre super nett :)


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
Beigetreten: 13.02.2007
Oldschool Grinder

jep und die hilfsvariable brauchste nur als Zwischenspeicher um 2 zahlen zu tauschen


huty Themenstarter
huty
Beigetreten: 27.11.2008
PokerStrategist

danke euch fuer eure Hilfsbereitschaft!


MadCow
Beigetreten: 15.09.2006
Oldschool Grinder

und hier nochmal in C++:

#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/


ist zwar komplizierter aber dafür auch länger


MadCow
Beigetreten: 15.09.2006
Oldschool Grinder

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.


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
Beigetreten: 13.02.2007
Oldschool Grinder

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


MadCow
Beigetreten: 15.09.2006
Oldschool Grinder

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)


Teilen: