C Sortieren von Zahlen?
Hey Guys!
Und zwar, ich muss ein Programm schreiben, dass die drei seiten eines Dreiecks abfragt (a,b,c) und eine Funktion soll dann die zahlen sortieren, sodass c immer die größte Seite ist.
Wie muss ich das schreiben?
Was genau ist unklar? Das Sortieren von 3 Zahlen?
Wie ich das in die Funktion schreibe, evt. mit pointer
Welche Programmiersprache? COBOL? Sollen mehrere Eingaben sortiert werden oder nur eine ...
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
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);
unsigned 8 bit integer. Ist gleichzusetzen mit "unsigned char". Du kannst aber - wenn Speicherplatz keine Rolle spielt - auch ganz normal mit "int" arbeiten.
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
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.
sry aber ich werde aus deiner schreibweise net schlau
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.
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).
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.
Und wie mit pointer?