|
You last visited: Today at 22:40
Advertisement
Zahlen sortieren in C
Discussion on Zahlen sortieren in C within the General Coding forum part of the Coders Den category.
12/04/2006, 13:15
|
#1
|
elite*gold: 0
Join Date: May 2005
Posts: 407
Received Thanks: 11
|
Bräuchte nochmal ein klein bisschen hilfe bei einer C aufgabe.
Ich muss eine zahlenfolge eingeben maximal 20zahlen und diese sortiert ausgeben, aber jeder durchlauf soll angezeigt werden, soweit so gut das programm läuft auch, jedoch hab ich 2 sachen die mich sehr stören
1. Man muss jetzt -1 eingeben wenn man keine zahlen mehr eingeben möchte, bekomme es aber irgendwie nur so hin, fände es besser wenn man am ende enter drückt und fertig 
2. Fänd ich es schöner wenn man nicht nach jeder zahl Enter eingeben muss, sondern das ganze einfach mit einem lerrzeichen gelöst wird, jedoch habe ich dann das problem das es nur bei genau 20 Zahlen geht
Wäre vielleicht jemand so nett und schaut mal drüber?
Hier der Code
Code:
#include <stdio.h>
int main(int argc, char *argv[]){
int zahlen[20];
int zahl_min,zahl_pos;
int i,x,z,temp=0;
int c;
int scanner_count = 0;
int temp_zahl = 0;
int arraysize=0;
/*FIX: problem wenn dateiende: CR+LF*/
/*FIX: zahleneingabe von mir muss mit -1 beendet werden*/
int a=0,old_a,new_a;
printf("EOF:%i\n\n",EOF);
/*einlesen der daten solange bis EOF erreicht ist*/
while(a<20){
if(a==0){
/*als Information für den benutzer*/
printf("Da EOF -1 ist, wird die Eingabe automatisch beendet, wenn Sie -1 eingeben\noder die Datei -1 enthaelt!!!!\n\n");
}
old_a = a;
printf("\n%i. Wert: ",a+1);
new_a = scanf("%i",&zahlen[a]);
printf("-->%i",zahlen[a]);
a+=new_a;
if((x = getchar()) == EOF || zahlen[a-1] == EOF) break;
/*printf("%i-->%i||%i||%i\n",zahlen[a-1],a,old_a,new_a);*/
arraysize++;
}
/*Ausgabe der eingelesenen Werte*/
printf("\nAnzahl der eingelesenen Werte = %i\n",arraysize);
/*Ausgabe der unsortierten Daten */
printf("Ausgabe der unsortierten Zahlen:\n\t\t\t");
for(i=0;i<arraysize;i++){
printf("%i\t",zahlen[i]);
}
printf("\n");
/*Daten werder sortiert*/
for(z=0;z<arraysize-1;z++){
/*-1 da letzter wert nicht mehr geprüft werden muss*/
zahl_min = zahlen[z];
zahl_pos = z;
for(x=z+1;x<arraysize;x++){
if(zahlen[x] < zahl_min){
zahl_min = zahlen[x];
zahl_pos = x;
}
}
/*hier werden daten getauscht*/
temp = zahlen[z];
zahlen[z] = zahlen[zahl_pos];
zahlen[zahl_pos] = temp;
/*ausgabe der sortierten daten*/
printf("Durchlauf %i\t",z+1);
for(i=0;i<arraysize;i++){
printf("\t%i",zahlen[i]);
}
printf("\n");
}
return 0;
}
|
|
|
12/04/2006, 19:19
|
#2
|
elite*gold: 0
Join Date: Mar 2005
Posts: 30
Received Thanks: 0
|
um dein problem mit der eingabe zu lösen: mach die eingabe der zahlen in eine while schleife wobei (!(eingabe<0)) die bedingung ist. das sollte so lange werte aufnehmen, bis die eingabe einen negativen wert ergibt...
|
|
|
12/04/2006, 20:39
|
#3
|
elite*gold: 0
Join Date: Aug 2004
Posts: 1,325
Received Thanks: 109
|
mache nicht wirklich c aber mit der eingabe und leerzeichen würde ich das so machen einlesen als string dann ne split/explode auf leerzeichen (wenn es das in c gibt) und dann haste die zahlen in ne array das dann noch das int konvertieren, wenn es sowas wie split/explode nicht gibt, halt als string einlesen dann nach ne leerzeichen suchen den teil bis zum leerzeichen rausschneiden und nach dem nächsten suchen etc, solange das array dynamisch ist isses auch egal wieviel zahlen eingegeben werden
|
|
|
12/05/2006, 00:27
|
#4
|
elite*gold: 0
Join Date: Nov 2005
Posts: 292
Received Thanks: 2
|
du machst dir zuviel arbeit bei den syntaxen und denkst zu wenig.
das ist ja nen regelrechter spam code ^^
#include <set>
#include <iostream>
int main(void)
{
std::set <int>s;
int i=0;
std::cout << "Zahlen eingeben, Buchstaben zum Beenden\n";
while( scanf( "%d", &i ) > 0 )
s.insert( i );
for( std::set<int>::iterator it = s.begin(); it != s.end(); ++it )
std::cout << *it << "\n";
return 0;
}
oder so ?!
|
|
|
12/05/2006, 09:43
|
#5
|
elite*gold: 0
Join Date: May 2005
Posts: 407
Received Thanks: 11
|
Quote:
Originally posted by KoyTheOne@Dec 5 2006, 00:27
du machst dir zuviel arbeit bei den syntaxen und denkst zu wenig.
das ist ja nen regelrechter spam code ^^
#include <set>
#include <iostream>
int main(void)
{
std::set <int>s;
int i=0;
std::cout << "Zahlen eingeben, Buchstaben zum Beenden\n";
while( scanf( "%d", &i ) > 0 )
s.insert( i );
for( std::set<int>::iterator it = s.begin(); it != s.end(); ++it )
std::cout << *it << "\n";
return 0;
}
oder so ?!
|
huch die befehle hab ich ja noch nie gesehen ;(
bräuchte wie gesagt nur eine änderung das man NICHT MEHR -1 eingeben muss zum beenden, am liebsten den ganzen oberen krempel (einlesen so um schreiben das man die zahlen so in der art einlesen kann 1 4 2 5 7 2 5 11 23 4 [Enter] )
und dann die berechnung kommt, aber das bekomme ich nicht hin ;(
|
|
|
12/07/2006, 14:31
|
#6
|
elite*gold: 0
Join Date: Nov 2005
Posts: 292
Received Thanks: 2
|
mach doch ne ascii code abfrage enter = 23
|
|
|
01/02/2007, 16:02
|
#7
|
elite*gold: 37
Join Date: Apr 2004
Posts: 2,154
Received Thanks: 250
|
enter = 13
|
|
|
01/03/2007, 12:18
|
#8
|
elite*gold: 0
Join Date: Jul 2004
Posts: 980
Received Thanks: 46
|
Vergiss alle posts bis hierher die haben alle nicht gelesen das es C sein soll
die andere lösung war c++ und coders beschreibung geht nicht weils keine dynamischen arrays gibt
ich editier gleich hier ne lösung rein muss nur eben mal los^^
|
|
|
01/03/2007, 13:00
|
#9
|
elite*gold: 0
Join Date: Jun 2006
Posts: 7
Received Thanks: 0
|
Quote:
Originally posted by Ultima@Jan 3 2007, 12:18
Vergiss alle posts bis hierher die haben alle nicht gelesen das es C sein soll
die andere lösung war c++ und coders beschreibung geht nicht weils keine dynamischen arrays gibt
ich editier gleich hier ne lösung rein muss nur eben mal los^^
|
Es gibt auch in C in bestimmtem Rahmen dynamische Arrays, die Arraygröße muss nicht zwangsweise zur compile-time bekannt sein sondern kann auch während dem laufenden Programm ermittelt werden.
Code:
int x = strlen("eine User-Eingabe");
int *arr = new int[x];
Ansonsten ist die C++-Variante natürlich um einiges schöner. Werd dazu auch nachher nochmal was posten 
Um genau zu sein jetzt, die ultra stylische C++/Boost-Variante:
Code:
#include <iostream>
#include <string>
#include <algorithm>
#include <boost/tokenizer.hpp>
#include <boost/lexical_cast.hpp>
class sort_desc
{
public:
int operator() (const int a, const int b) const
{
return a > b;
}
};
int main()
{
std::string input;
std::vector<int> zahlen;
std::cout << "Geben sie die Zahlen ein, jeweils mit einem Semikolon zwischen jeder:\n";
std::cin >> input;
boost::char_separator<char> sep(";");
boost::tokenizer<boost::char_separator<char> > teile(input, sep);
for (boost::tokenizer<boost::char_separator<char> >::const_iterator it = teile.begin(); it != teile.end(); ++it)
{
std::string part = *it;
int final;
try {
final = boost::lexical_cast<int>(part);
zahlen.push_back(final);
}
catch (boost::bad_lexical_cast)
{
std::cout << "Teilstring '" << part << "' ist keine Zahl und wird daher nicht beruecksichtigt.\n";
}
}
sort(zahlen.begin(), zahlen.end(), sort_desc());
std::cout << "Sortierte Zahlen: \n";
copy(zahlen.begin(), zahlen.end(), std::ostream_iterator<int>(std::cout, " "));
}
Komplett mit Erkennung von falschen Eingaben und dies und das
|
|
|
01/03/2007, 13:29
|
#10
|
elite*gold: 0
Join Date: Jul 2004
Posts: 980
Received Thanks: 46
|
mit dynamishcen array is gemeint die array größe zu einem späteren zeitpunkt zu verändern
und ansonsten kann man mit c alles machen nur man muss es per hand machen gibt halt nix fertiges so war es gemeint
|
|
|
01/03/2007, 17:00
|
#11
|
elite*gold: 37
Join Date: Apr 2004
Posts: 2,154
Received Thanks: 250
|
Code:
int c,pos,merker,endpos=5;
int zahlen[]={8,10,2,7,11};
for ( pos=0; pos < endpos; pos++ )
{
for( c=pos+1; c<endpos; c++ )
{
if ( zahlen[pos] > zahlen[c] ) {
merker=zahlen[pos];
zahlen[pos]=zahlen[c];
zahlen[c]=merker;
}
}
}
for( pos=0;pos<endpos;pos++)
{
printf("%i ",zahlen[1]);
}
|
|
|
01/08/2007, 11:27
|
#12
|
elite*gold: 0
Join Date: Mar 2006
Posts: 111
Received Thanks: 0
|
Quote:
Originally posted by Ultima+Jan 3 2007, 13:29--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (Ultima @ Jan 3 2007, 13:29)</td></tr><tr><td id='QUOTE'>
mit dynamishcen array is gemeint die array größe zu einem späteren zeitpunkt zu verändern[/b]
|
So wie malloc und realloc? :-)
<!--QuoteBegin--Ultima@Jan 3 2007, 13:29
und ansonsten kann man mit c alles machen nur man muss es per hand machen gibt halt nix fertiges so war es gemeint [/quote]
Was C++ angeht, könnte ich dir hier nicht ohne Beispiele zustimmen.
|
|
|
02/10/2011, 09:27
|
#13
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1
Received Thanks: 0
|
Ich habe ein ähnliches Problem... es eilt
Also ich code jetzt seit ner Woche oder so und bin noch ein newbie, also bitte nicht zu hart rannehmen
Ich muss ein Programm schreiben, welches 10 Zahlen, die ich beliebig eingebe, von klein nach Groß sortiert - Mit Hilfe des vergleichens nebeneinander stehender Zahlen- in C.
Ich habe schon einen Code:
| | | #include <stdio.h> | | int main(int argc, char *argv[]){ | | int a,x,i,temp=0; | | int zahlen[10]; | | int z=0,alt_z,neu_z; | | int scanner_count=0; | | int temp_zahl=0; | | int zahl_min,zahl_pos; | | int arraysize=0; | | /*Zahleneingabe wird Aufgefordert*/ | | printf("\nBitte geben Sie 10 Zahlen ein\n"); | | while (z<10){ | | alt_z=z; | | printf("\n%i. Zahl: ",z+1); | | neu_z=scanf("%i",&zahlen[z]); | | printf(" --> %i\n", zahlen[z]); | | z+=neu_z; | | arraysize++; | | /*Daten sortieren*/ | | for(a=0; a<10; a++){ | | zahl_min=zahlen[a]; | | zahl_pos=a; | | for(x=0; x<10; x++){ | | if(zahlen[z]>zahlen[z+1]){ | | | | /*tauschen*/ | | } | | temp=zahlen[a]; | | zahlen[a]=zahlen[zahl_pos]; | | zahlen[zahl_pos] = temp; | | } | | } | | } | | printf("\n\nSortiert\t",z); | | printf("\n--------------------------------------------------"); | | for(i=0;i<arraysize;i++){ | | printf("\n\t%i",zahlen[i]); | | | | } | | printf("\n\n"); | | return 0; | | } |
Mein Problem liegt beim Sortieren und beim Ausgeben.
Bitte! Ich brauche es bis spätestens Morgen :/
Uups der Blog is ja schon 4 Jahre alt... sorry
|
|
|
02/10/2011, 16:13
|
#14
|
elite*gold: 0
Join Date: Aug 2010
Posts: 334
Received Thanks: 79
|
Hi, würd mal sagen so ist das leichter lesbar.
Code:
#include <stdio.h>
int main(int argc, char *argv[]){
int a,x,i,temp=0;
int zahlen[10];
int z=0,alt_z,neu_z;
int scanner_count=0;
int temp_zahl=0;
int zahl_min,zahl_pos;
int arraysize=0;
/*Zahleneingabe wird Aufgefordert*/
printf("\nBitte geben Sie 10 Zahlen ein\n");
while (z<10){
alt_z=z;
printf("\n%i. Zahl: ",z+1);
neu_z=scanf("%i",&zahlen[z]);
printf(" --> %i\n", zahlen[z]);
z+=neu_z;
arraysize++;
/*Daten sortieren*/
for(a=0; a<10; a++){
zahl_min=zahlen[a];
zahl_pos=a;
for(x=0; x<10; x++){
if(zahlen[z]>zahlen[z+1]){
/*tauschen*/
}
temp=zahlen[a];
zahlen[a]=zahlen[zahl_pos];
zahlen[zahl_pos] = temp;
}
}
}
printf("\n\nSortiert\t",z);
printf("\n--------------------------------------------------");
for(i=0;i<arraysize;i++){
printf("\n\t%i",zahlen[i]);
}
printf("\n\n");
return 0;
}
Ich würds so ählich machen(bzw. würd ichs so machen wenn es eh nicht schon vektoren und strings gibt die mir die Arbeit abnehmen  ):
Code:
int max = 32700;
int zahlen[max] = 0;
int zahl;
//C++ kannst du wohl überstezen?
for(i= 0; i<= 10; i++)
{
cin >> zahl; //zahl einlesen
zahlen[zahl] = zahl;
}
for(i = 0; i < max; i++)
{
if(zahlen[i])//Wenn Zahl nicht 0 ist.
cout << zahlen[i] <<"," <<endl; //Alle Zahlen die nicht 0 sind ausgeben. Sind ja dann schon in der richtigen Reihenfolge.
Bin aber auch n nub und hab das jetzt nicht kompiliert, kA ob es geht.
|
|
|
 |
Similar Threads
|
[Problem] Variablen sortieren
02/02/2010 - AutoIt - 2 Replies
Ich bräuchte eine Möglichkeit wie ich variablen nach der Größe sortieren kann.
Ich habe mir das ungefähr so vorgestellt:
$variable1 = 6
$variable2 = 3
$variable3 = 4
$variable4 = 7
$variable5 = 2
$variable6 = 8
$variable7 = 1
|
[C++] Sortieren von zufällig erstellten Arrays.
03/18/2009 - C/C++ - 4 Replies
-
|
Programm zum Sortieren von mp3s gesucht
02/12/2009 - Technical Support - 1 Replies
Ich suche ein Programm für Windows XP, mit dem ich meine MP3s sortieren kann.
Und zwar sollte das ganze so funktionieren: Man muss einen Ordner auswählen können, wo die mp3s sind. Dann sollte man auswählen können, in welchen Ordner die sortiert werden.
Für jeden Artist soll das Programm einen Ordner erstellen in dem ordner, wo es die hinsortieren soll (falls noch nicht vorhanden) und dort dann die entsprechenden Mp3s rein schieben.
Ebenfalls wichtig ist, dass ich eine art Suchmuster für...
|
Hilfe!!!1 :0 Beim Sortieren
02/03/2008 - Technical Support - 4 Replies
†
|
taschen sortieren?!
01/14/2007 - World of Warcraft - 1 Replies
tach.
soweit ich weiss gibt es einzellne addons wie bagsort die die taschen inhalte (also items) sortieren. leider funzt das nich mehr >_>
gibt es UIs oda andere addons, die sone funktion beinhalten?
kthnxbye :D
|
All times are GMT +1. The time now is 22:40.
|
|