Werte sortieren

Gast #75728
Lesenswert?
• ▲
▼
qsort(), sollte doch gehen, für 10 Werte.

Wohin muss ich für qsort() noch linken? Steht ja in der stdlib.h, wie
die dtostre() auch.
Libm.a?

extern void qsort(void *__base, size_t __nmemb, size_t __size,
          __compar_fn_t __compar);

Die Beschreibung der Parameter ist nicht gut gelungen, ich verstehe sie
jedenfalls nicht auf anhieb.

Angenommen ich habe die Werte: Wert[0]-Wert[9]
Dann ist "Wert" der erste Parameter, also base.
Size of each object?
Der zweiter Parameter wäre dann 10, aber was ist "size_t __size"
Bei Compar das selbe, wenn ich nur ascending will, was gebe ich dann
für compar an? Gar nichts?

Könnte mir jemand ein kleines Beispiel posten:
Wert[0]=3,44
...
Wert[9]=3,41

qsort(*Wert, 10, size_t __size, ascending)
Gast #75730
Lesenswert?
• ▲
▼
Ok, danke das werde ich so hinbekommen.
Habe auch schon was gefunden:
http://www.phim.unibe.ch/comp_doc/c_manual/C/EXAMPLES/qsort1.c

Wofür ich das brauche?
Ich lese über den ADC Sensorwerte ein und bekomme zu 95% gute Werte
aber auch hin und wieder einen der aus der Reihe tanzt.

Werte[] = { 2,34; 2,35; 2,34; 2,36; 2,08; 3,14; 2,36}

Um den Median zu ermitteln muss ich die Werte ja vorher ordnen, dafür
brauchte ich die Funktion.

Werte_neu[] = { 2,08; 2,34; 2,34; 2,35; 2,36; 2,36; 3,14}

Mittelwert würde mir jetzt 2,42 liefern.
Wie man aber sieht liegt wohl der bessere Wert bei 2,35

Also rechne ich jetzt immer mit dem Wert_neu[3] und brauche keine
Rücksicht mehr auf große Schwankungen die manchmal auftreten Rücksicht
nehmen.

Ich weiss, es wissen bestimmt die meisten dass sich das Median
schimpft, aber was solls, besser als eine einfache Mittelwertbildung
(für die, die es nicht wissen).
Gast #75732
Lesenswert?
• ▲
▼
Hallo Crash,
bei so starken Ausreissern in den gemessenen Werten solltest du
analysieren, woher dieses kommt.
Liefert dein Sensor diese ?
Wenn ja, so könntest du mit einer RC-Kombination das Sensorsignal
glätten.
Was für einen Sensor nutzt du?
Gast #75733
Lesenswert?
• ▲
▼
Hallo der Herr mit dem sinnvollen Namen...

qsort() ist Bestandteil der ganz normalen Standard-C-Bibliothek,
d. h. jedes gute C-Buch sollte Dir das erläutern können.

Da der ADC ja nur Integer-Werte liefert, sortiere lieber diese (also
vor der Umwandlung in float), spart Rechenzeit.

In Andreas' Beispiel fehlen die Typen für die Parameter, außerdem
werden die Parameter als Zeiger übergeben.  Beim Vergleich von int's
kann man die Funktion übrigens einfacher schreiben:

int
compare_int(void *a, void *b)
{
  int *ia, *ib;

  ia = (int *)a;
  ib = (int *)b;

  return *ia - *ib;
}

Für Deine Anwendung besser geeignet dürfte ein gleitender Mittelwert
sein: Du berechnest einfach bei jeder Messung den Mittelwert mit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren