Forum: PC-Programmierung Sortieren in C


von Neuling (Gast)


Lesenswert?

Hallo Zusammen


Hier mal ein Quellcode zum jeweiligen Namen gehört eine Punktezahl, und 
es soll aufsteigend sortiert werden. Es läuft soweit, allerdings erden 
immer nur die Zahlen und nicht der Name ausgegeben...was mache ich 
falsch ?
PS bin noch Anfänger:-)

 int main()
{
int kai,uwe,heinz;
uwe=11;
heinz=4;
kai=21;

int array[3] = {kai,uwe,heinz};

int x;

for (int y=1; y<3; y++)
{
for(int z=0;z<3-1;z++)
{
if (array[z]>array[z+1])
{
x = array[z];
array[z]=array[z+1];
array[z+1] = x;
}
}
}
for(int y=0;y<3;y++)
printf("%i,",array[y]);



return 0;
}

: Verschoben durch Moderator
von Mr. Big (Gast)


Lesenswert?

Neuling schrieb:
> Hallo Zusammen
>
> Hier mal ein Quellcode zum jeweiligen Namen gehört eine Punktezahl, und
> es soll aufsteigend sortiert werden. Es läuft soweit, allerdings erden
> immer nur die Zahlen und nicht der Name ausgegeben...was mache ich
> falsch ?


Du hast vergessen, das C-Buch zu lesen.
Kurz nachholen und alles läuft!

von Safari (Gast)


Lesenswert?

>printf("%i,",array[y]);
wird zu

printf("%s,",array[y]);

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

int array[3] = {21,11,4};

macht das selbe und macht den falsch funktionierenden Code 
übersichtlicher

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Safari schrieb:
>>printf("%i,",array[y]);
> wird zu
>
> printf("%s,",array[y]);

Wenns denn ein char* wäre sicher, aber so ?

von Einer K. (Gast)


Lesenswert?

Neuling schrieb:
> PS bin noch Anfänger:-)

Merkt man...

Tipp:
Alles schon zusammengehörig in Strukturen stopfen, die Strukturen in ein 
Array und dann z.B. qsort() drauf los lassen.
https://www.tutorialspoint.com/c_standard_library/c_function_qsort.htm

von Alex G. (dragongamer)


Lesenswert?

Das funktioniert grundsätzlich so nicht.
kai,uwe,heinz sind in dem Code Variablen und keine Texte.
Das Array int array[3] = {kai,uwe,heinz}; enthält darum einfach die 
Zahlen und keine Namen.
Genau genommen sieht dein Mikrocontroler die Begriffe "kai", "uwe" und 
"heinz" nie weil der sogenannte Compiler der aus C, Maschinencode macht, 
einfach die Werte verwendet, und keine von dir benannten Variablen.

In der Tat fehlen dir Grundlagen. Der Tipp mit den Structs ist nicht 
schlecht. Du brauchst eine Datenstruktur in die du einerseits den Wert 
abspeicherst aber ebenso den Namen des Wertes (als char* welches in C 
Texte aufnehmen kann.).
Dadurch sind diese beiden Dinge untrennbar miteinander verbunden und 
können bei Bedarf abgerufen werden.

: Bearbeitet durch User
von N2 (Gast)


Lesenswert?

Hi,


Oben dazu:
const char* name[] = {"Kai", "Uwe", "Heinz" };


printf ändern:

printf("%s: %i, ",name[y], array[y]);

Gruß N2

von Rolf M. (rmagnus)


Lesenswert?

N2 schrieb:
> Oben dazu:
> const char* name[] = {"Kai", "Uwe", "Heinz" };
>
> printf ändern:
>
> printf("%s: %i, ",name[y], array[y]);

Du hast aber gesehen, dass das Werte-Array umsortiert wurde? Mit diesem 
Code werden die Namen aber nicht mit umsortiert.

von Marco H. (damarco)


Lesenswert?

http://www.gnu.org/software/libc/manual/html_node/Searching-and-Sorting.html#Searching-and-Sorting

Du brauchst aber eine Funktion die den Vergleich an sich durchführt...

http://www.gnu.org/software/libc/manual/html_node/Comparison-Functions.html#Comparison-Functions


so geht es aber auch...
https://stackoverflow.com/questions/20519293/optimized-bsort-in-c

allerdings würde ich mich als Anfänger an die Standard Funktionen 
halten.

Ich würde auch eine Struktur benutzen um die Punktzahl einen Namen 
zuordnen zu können.
1
struct spieler {
2
3
char name[64];
4
int punkte;
5
}
6
7
Denn du musst ja die Punkte mit den Namen sortieren.

: Bearbeitet durch User
von N2 (Gast)


Lesenswert?

Hi,

Hab ich nicht dran gedacht...

Aber ein bisschen nachdenken darf der TO auch :)

Alles sinnvoll in ne Struct und die Struct sortieren...

Gruss

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.