Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 22:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Zahlen sortieren in C

Discussion on Zahlen sortieren in C within the General Coding forum part of the Coders Den category.

Reply
 
Old   #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;
}
lugh is offline  
Old 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...
99345 is offline  
Old 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
NoName is offline  
Old 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&#092;n";
while( scanf( "%d", &i ) > 0 )
s.insert( i );
for( std::set<int>::iterator it = s.begin(); it != s.end(); ++it )
std::cout << *it << "&#092;n";
return 0;
}

oder so ?!
KoyTheOne is offline  
Old 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&#092;n";
while( scanf( "%d", &i ) > 0 )
s.insert( i );
for( std::set<int>::iterator it = s.begin(); it != s.end(); ++it )
std::cout << *it << "&#092;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 ;(
lugh is offline  
Old 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
KoyTheOne is offline  
Old 01/02/2007, 16:02   #7

 
x]vIrus[x's Avatar
 
elite*gold: 37
Join Date: Apr 2004
Posts: 2,154
Received Thanks: 250
enter = 13
x]vIrus[x is offline  
Old 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^^
Ultima is offline  
Old 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&#40;&#34;eine User-Eingabe&#34;&#41;;
int *arr = new int&#91;x&#93;;
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 &#60;iostream>
#include &#60;string>
#include &#60;algorithm>
#include &#60;boost/tokenizer.hpp>
#include &#60;boost/lexical_cast.hpp>

class sort_desc
{
public&#58;
	int operator&#40;&#41; &#40;const int a, const int b&#41; const
	{
 return a > b;
	}
}; 

int main&#40;&#41;
{
	std&#58;&#58;string input;
	std&#58;&#58;vector&#60;int> zahlen;
	std&#58;&#58;cout &#60;&#60; &#34;Geben sie die Zahlen ein, jeweils mit einem Semikolon zwischen jeder&#58;&#092;n&#34;;
	std&#58;&#58;cin >> input;

	boost&#58;&#58;char_separator&#60;char> sep&#40;&#34;;&#34;&#41;;
	boost&#58;&#58;tokenizer&#60;boost&#58;&#58;char_separator&#60;char> > teile&#40;input, sep&#41;;
	for &#40;boost&#58;&#58;tokenizer&#60;boost&#58;&#58;char_separator&#60;char> >&#58;&#58;const_iterator it = teile.begin&#40;&#41;; it != teile.end&#40;&#41;; ++it&#41;
	{
 std&#58;&#58;string part = *it;
 int final;
 try {
 	final = boost&#58;&#58;lexical_cast&#60;int>&#40;part&#41;;
 	zahlen.push_back&#40;final&#41;;
 }
 catch &#40;boost&#58;&#58;bad_lexical_cast&#41;
 {
 	std&#58;&#58;cout &#60;&#60; &#34;Teilstring '&#34; &#60;&#60; part &#60;&#60; &#34;' ist keine Zahl und wird daher nicht beruecksichtigt.&#092;n&#34;;
 }
	}

	sort&#40;zahlen.begin&#40;&#41;, zahlen.end&#40;&#41;, sort_desc&#40;&#41;&#41;;
	std&#58;&#58;cout &#60;&#60; &#34;Sortierte Zahlen&#58; &#092;n&#34;;
	copy&#40;zahlen.begin&#40;&#41;, zahlen.end&#40;&#41;, std&#58;&#58;ostream_iterator&#60;int>&#40;std&#58;&#58;cout, &#34; &#34;&#41;&#41;;
}
Komplett mit Erkennung von falschen Eingaben und dies und das
caytchen is offline  
Old 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
Ultima is offline  
Old 01/03/2007, 17:00   #11

 
x]vIrus[x's Avatar
 
elite*gold: 37
Join Date: Apr 2004
Posts: 2,154
Received Thanks: 250
Code:
 int c,pos,merker,endpos=5;
 int zahlen&#91;&#93;={8,10,2,7,11};
 for &#40; pos=0&#59; pos &#60; endpos&#59; pos++ &#41;
 {
  for&#40; c=pos+1&#59; c&#60;endpos&#59; c++ &#41;
  {
   if &#40; zahlen&#91;pos&#93; > zahlen&#91;c&#93; &#41; {
    merker=zahlen&#91;pos&#93;;
    zahlen&#91;pos&#93;=zahlen&#91;c&#93;;
    zahlen&#91;c&#93;=merker;
   }
  }
 }
 for&#40; pos=0;pos&#60;endpos;pos++&#41;
 {
  printf&#40;&#34;%i &#34;,zahlen&#91;1&#93;&#41;;
 }
x]vIrus[x is offline  
Old 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.
SilonVier is offline  
Old 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
TheLeFreak is offline  
Old 02/10/2011, 16:13   #14
 
ZackBlack's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 334
Received Thanks: 79
Hi, würd mal sagen so ist das leichter lesbar.
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.
ZackBlack is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.