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;
}
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...
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
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 ;(
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
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.
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.
#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.
[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
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...
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