Forum: Mikrocontroller und Digitale Elektronik Messwerte sortieren


von Rüdiger B. (fenris)


Lesenswert?

Hallo,

irgendwie stehe ich gerade voll auf dem Schlauch.
Ich habe 3 Messwerte, channelx, channely und channelz (Wertebereich: 
-4000 bis +4000). Diese Werte würde ich gerne der Größe nach sortieren.
Das ganze soll nach Möglichkeit ohne implementierung komplexer 
Sortieralgorithmen gehen, sind ja nur die drei Werte.
Mein eigentliches Problem ist folgendes:

Wenn ich drei Messwerte sortiere, dann anhand ihrer Werte. Als Ergebnis 
bekomme ich die Werte in geordneter Reihenfolge, aber woher habe ich 
denn die Zuordnung zwischen Wert und Variablennamen. Schwer Auszudrücken 
irgendwie, ein Beispiel:
x = 1, y = 7, z = 3
Diese Werte schreibe ich z.B. in ein Array. Dann vergleiche ich und 
sortier die um, krieg ich wohl noch hin, aber wenn ich am ende eine 
Liste von 1, 3, 7 erhalte, wie weiss ich dann welcher Wert zu welcher 
Variable gehört?

Ich hoffe jemand entfernt mal das Brett von meinem Kopf.

von gast (Gast)


Lesenswert?

du machst aus deiner n x 3 Matrix eine 3n x 2 Matrix. In der ersten 
Spalte stehen nur die Symbole 'x','y','z' in der zweiten deine 
Messwerte. Dass du insgesamt mehr Sepicher brauchst, nimmst du in kauf.

von Bertram S. (bschall)


Lesenswert?

Mach ein struct mit Wert und Variablennamen.
Dann Sortierst du nach den Werten im Struct und der variablenname bleibt 
erhalten...
1
typedef struct{
2
  char name;
3
  uint16 value;
4
} Koordinate;
5
6
...
7
8
... fnc (...){
9
// Variable anlegen
10
Koordinate channelx, channely, channelz;
11
12
// Werte zuweisen
13
channelx.name = x;
14
channelx.value = get_Value();
15
...
16
17
//Sortieren wie auch immer
18
if(channelx.name < wasauchimmer)
19
  ersterwert = & channelx;
20
21
// Frage nach dem namen
22
werwarerster = ersterwert->name;
23
}

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Du machst IMHO einen Denkfehler, wenn du die Werte verschiedener 
Messkanäle untereinander ("iese Werte schreibe ich z.B. in ein Array") 
sortierst. Ich würde mehrere Arrays benutzen und nur die Werte eines 
Messkanals sortieren und dann die anderen Werte "mitziehen"

Unsortiert:

Index Messung    channelx channely channelz
0        1           1        7        3
1        2           0        5        8
2        3           3        10       2

Sortiert z.B. nach channelx:

Index Messung    channelx channely channelz
0        2           0        5        8
1        1           1        7        3
2        3           3        10       2

von Rüdiger B. (fenris)


Lesenswert?

Hui, danke für die schnellen Antworten schonmal.

Erstmal zu Stefan: Das Problem ist, dass ich erstmal nur eine Messung 
habe. Die Daten werden sortiert, verarbeitet, regeln etwas und 
anschliessend gibts dann viel später eine neue Messung.

Zu Bertram: Die Idee mit dem struct gefällt mir sehr gut, zumal die 
ganze SAche nach hinten raus auch noch komplizierter wird. Abhängig vom 
Vorzeichen des Wertes werden u.a auch noch unterschiedliche Kanäle 
angesteuert usw. Alles Informationen die sich in einer solchen Struktur 
gut mit einbauen lassen.

Ich hab die mIttagspause nun erstmal zu denken, mahlzeit. ;)

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.