C Sortieren von Zahlen?

mertkert  21.04.2020, 10:35

Was genau ist unklar? Das Sortieren von 3 Zahlen?

Sirjb04 
Beitragsersteller
 21.04.2020, 10:35

Wie ich das in die Funktion schreibe, evt. mit pointer

ogdan  21.04.2020, 10:36

Welche Programmiersprache? COBOL? Sollen mehrere Eingaben sortiert werden oder nur eine ...

Sirjb04 
Beitragsersteller
 21.04.2020, 10:36

Standart C

1 Antwort

Du ermittelst mit zweistufiger, simpler if(x größer als y) Abfrage die größte Zahl aus den drei und speicherst die der größe nach in

uint8 u8Groesste
uint8 u8Mittlere
uint8 u8Kleinste

Woher ich das weiß:Studium / Ausbildung – Masterstudium Elektrotechnik - Schwerpunkt Embedded Systems

Sirjb04 
Beitragsersteller
 21.04.2020, 10:37

Und wie mit pointer?

0
ogdan  21.04.2020, 10:44
@Sirjb04

Solange es fix um das sortieren von drei zahlen geht, macht ein Pointer keinen Sinn.

0
Sirjb04 
Beitragsersteller
 21.04.2020, 10:45
@ogdan

Ich will c einfach die längst Seite zuweisen zb. a=8 b=5 c=7 dann sollen a und c tauschen damit c die größte seite ist. Oder a=10 b=15 c=12 so soll b mit c vertaushct werden

0
Gehilfling  21.04.2020, 11:02
@Sirjb04

Prototyp:

void vSortiere(uint8* a, uint8* b, uint8* c);

Du kannst die Ergebnisse aus meinem Beispiel (Groesste, Mittlere, Kleinste) dann einfach über Dereferenzierung des Zeigers (*-Operator) in die Speicherzelle schreiben.

Aufruf passiert dann über die entsprechenden Adressen der Speicher:

vSortiere(&a, &b, &c);

0
Gehilfling  21.04.2020, 11:05
@Sirjb04

unsigned 8 bit integer. Ist gleichzusetzen mit "unsigned char". Du kannst aber - wenn Speicherplatz keine Rolle spielt - auch ganz normal mit "int" arbeiten.

0
Sirjb04 
Beitragsersteller
 21.04.2020, 11:26
@Gehilfling

www.

mediafire

.com

/file/ap48kjclouxvpav/Dreieck.c/file

Das ist mein derzeitiges Programm, aber die Funktion ist nicht definiert weil ich nciht weiß wie und wo ich die definieren soll und ich weiß nicht ob sie funktioniert. Sry kann den link net anders schreiben weil ich sonst den Kommentar net abschicken kann

0
Gehilfling  21.04.2020, 11:31
@Sirjb04

Wie du die Funktion definieren sollst hab ich dir praktisch schon in C-Code implementiert.

Die Abfrage steht oben in Pseudo-Code. Du prüfst aus zwei Werten, welcher größer ist und aus dem daraus resultierenden Maximum prüfst du gegen den letzten Wert.

0
Sirjb04 
Beitragsersteller
 21.04.2020, 11:31
@Gehilfling

sry aber ich werde aus deiner schreibweise net schlau

0
ogdan  21.04.2020, 13:30
@Sirjb04

Die Idee ist doch rechtschaffen einfach a -> zeiger/pointer auf -> Eingabe für a
b -> zeiger/pointer auf -> Eingabe für b
c -> zeiger/pointer auf -> Eingabe für c
Dann vergleiche wert von c mit wert von b, wenn b>c dann tausche den Zeiger von c mit dem Zeiger auf b,

dann vegleiche nochmal wert von c mit Wert von a und wenn a>c, dann tausche den Zeiger von c mit dem Zeiger auf a.

Zuletzt noch a und b vergleichen, wenn a > b, dann die beiden Zeiger tauschen.

Damit hast Du Zeiger von a zeigt auf kürzesten Wert, Zeiger von b zeigt auf mittleren Wert und Zeiger von c zeigt auf längsten/größten Wert.

1
Sirjb04 
Beitragsersteller
 21.04.2020, 19:15
@ogdan

Ich habs so versucht:

if(d.c<d.a){

      d.c=d.a;

      d.a=d.c;

   }

   if(d.c<d.b){

      d.c=d.b;

      d.b=d.c;

   }

aber dann kommt mir a und c oder für b und c das selbe raus

0
regex9  22.04.2020, 03:16
@Sirjb04

Natürlich.

Angenommen, c = 1 und a = 2:

c = a // c << 2
a = c // a << 2

So überschreibst du den originalen Wert von c ja gleich mit der ersten Zuweisung und niemand kennt ihn danach noch. Daher ist es sinnvoll, diesen Wert erst in einer anderen, neuen Variable abzulegen, die dann später a zugewiesen werden kann.

temp = c
c = a
a = temp

Für die Lesbarkeit deines eigenen Codes wäre es im Übrigen förderlich, ab und an Leerzeichen einzubringen:

// bad
if(d.c<d.a){

// good
if (d.c < d.a) {

Zum einen lässt sich so der Operator von den ihm anstehenden Termen abgrenzen und das Leerzeichen nach dem Schlüsselwort if verdeutlicht üblicherweise nochmal explizit, dass es sich hier um eine Kontrollstruktur handelt und keinen Funktionsaufruf mit folgender Argumentenliste:

if (true) { // control statement with space
  doSomething(1, 2, 3); // function call without space
}

Des Weiteren solltest du aussagekräftige Bezeichner verwenden (z.B. dreieck anstatt ein nichtssagendes d).

1
Gehilfling  22.04.2020, 07:38
@Sirjb04

Ein Tipp um sowas zu vermeiden: schreib dir alles Schritt für Schritt auf Papier auf und welchen wert eine Variable hat. Da siehst du sofort, dass das nicht funktionieren kann.

0