Also:
Eingabe: a, b oder c
Eingabe: a, b oder c ( jwtzt ohne den zuvor eingegeben)
Eingabe: a, b oder c ( Der der übrig bleibt)
Nun soll das Programm diese Eingabe sortieren.
Etwa bei "b a c" soll es "a b c" ausgeben. Wie geht dies am einfachsten ?
Alles was ich im Netz über qsort/bubblesort etc. finde ist ellenlang und mir als Afänger unverständlich. Es soll so kurz wie möglich sein.
Bitte um Hilfe
GreeTz Selecta
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Da jedes mal sowieso eine selben Elemente (nur in unterschiedlicher Reihenfolge) eingegeben werden sollen kann man sich den Sortiervorgang schlicht und einfach schenken! Warum lange sortieren wenn man das Ergebnis sowieso schon kennt?
Gruß
Borlander
Hi
So etwa?
// main.C #include <iostream> #include <stdlib.h> #include <string.h> char text[ 256 ] = "qwertzuiopasdfghjklyxcvbnm"; int compare( const void * a, const void * b ) { return ( *( char* )a - *( char* )b ); } int main( int argc, char** argv ) { int cLen = sizeof( char ); int aLen = strlen( text ); std::cout << "Before : " << text << std::endl; qsort( text, aLen, cLen, compare ); std::cout << "After : " << text << std::endl; return 0; } |
---|
dann so:
[]$ g++ main.C
[]$ ./a.out
Before : qwertzuiopasdfghjklyxcvbnm
After : abcdefghijklmnopqrstuvwxyz
[]$
Quelle ->stdlib->qsort
Gruss, d-oli
Ich habe mir angewöhnt, bei qsort den aufruf etwas bequemer zu gestalten:
typedef int (__cdecl *COMPARE )(const void *elem1, const void *elem2);
die vergleichfunktion wird in diesem fall dann zu:
int compare( const char* a, const char* b )
{
return ( *a - *b );
}
und der aufruf zu:
qsort( text, aLen, cLen, (COMPARE)compare );
In diesem fall ist der gewinn nicht hoch, aber wenn die zu vergleichenden elemente öfter angesprochen werden, ist der zwang zum "type casting" ganz schön lästig.
mr.escape
Guter Tipp! Macht das Ganze doch etwas lesbarer. Danke.
Ähm Borlander ? Es geht nicht um den Sinn, sondern darum 3 eigegebene Buchstaben nach dem Alphabet auszugeben. Ich kann doch nicht für Schulaufgaben (die haben wir NICHt auf, sondern ich bin etwas weiter, als die anderen gegangen!)
GreeTz Selecta
Aber dann sollte es doch immer auch darum gehen einen möglichst effizienten Code zu produzieren?
3 eigegebene Buchstaben nach dem Alphabet auszugeben
Also beliebige Buchstaben?
Bei so einem Vorgang würde sich eigentlich insert-Sort anbieten - bei 3 Elementen könnte man aber auch ohne Gewissensbisse BubblesortSort (nur 3 Vergleiche + 0-3 Vertauschungen) verwendet werden (Quick-Sort oder andere "aufwendigere" Sortieralgorithmen bringen bei dieser Anzahl noch keinen Vorteil). Da QuickSort allerdings Bestandteil von ANSI C(++) ist, kann man das natürlich besonders bequemsten nutzen...
Andere Möglichkeit (für nur 3 Elemente wie hier):
Der erste Wert wird gespeichert, nach Eingabe des zweiten wird verglichen und beide die beiden sortiert auf Pos 1 und 3 der Liste abgelegt, bim 3. wird dann anschließend geprüft ob es kleiner(/gleich) [1] ist, kleiner(/gleich) [3] ist und dann an der entsprechenden Position eingefügt wobei ggf. eins der beiden vorhanderenen Elemente vorher noch in ein anderes Feld kopier werden muß (2-3 Vergleiche, 0-1 Kopieren, sowie natürlich 3 Einfügen für die jeweiligen Elemente - das schaut auf den ersten Blick am sparsamsten aus)...
Gruß
Borlander
Mh danke erstmal.
Das Problem besteht eher darin, das auf dem Blatt mit den Aufgaben keine nur einen Pups dem Niveau entsprechen, das du da gerade gepostet hast. Ich verstehe von deinem Code so gut wie Null. Am besten schreibe ich euch mal 2 Aufgaben Wort für Wort hier hin,
DAMIT ihr das Niveau, auf dem ich Anfänger bin, erfasst: Hier eine der VORIGEN:
Gegeben sind 2 Punkte P(x1,y1) und Q (x2,y1). Gesucht ist die Gleich y = m(x) + b der Verbindungsgraden PQ. Berücksichtigen sie alle Möglichkeiten der Lage der Punkte bzw. Gerade. // Die war nicht so schwer lösbar.
Ein solches NIVEAU herscht gerade vor (EDV - C++ - 11. Klasse)
Die SORTIER AUFGABE: // Die will ich wissen.
Drei in beliebiger Reihenfolge eingegebene Zeichen sollen in alphabetischer Reihenfolge wieder ausgegeben werden. Schreiben sie ein entsprechendes Programm.
--- GEHT DAS NICHT GANZ LEICHT ? WIR KÖNNEN DOCH NOCH NIX UND SOWEIT ICH DEN LEHRER KENNE LERNEN WIR, WIE DAS GEHT, SCHON IN DER NÄCHSTEN STUNDE UND KRIEGEN DAS DANN ALS HAUSI. DAS MUSS DEMNACH DOCH GANZ EASY GEHEN, ODER ? ----
GreeTz Selecta
Doch, wenn Du keinen allgemeinen Sortieralgorithmus verwenden willst dann probier es mal so wie ich oben beschrieben habe (das bietet sich aber wirklich nur bei 3 Elementen an)...
Gruß
Borlander