max und min aus 8 Werten finden

Gast #597797
Lesenswert?
• ▲
▼
Hallo,

Als Beispiel die Werte in einem Array mit index 0...7

C-Syntax ist nicht meine Stärke, Assembler passt hier zum GCC ;)
also Basic-ähnlicher Pseudocode

minwert = 1025 (bzw. mögliches Maximum +1)
maxwert = 0

For I=0 to I=7
  if array[I] > maxwert
    maxwert = array[i]
  endif

  if array[i] < minwert
    minwert = array[i]
  endif
endif

Gruß aus Berlin
Michael
#597802
Lesenswert?
• ▲
▼
1
#define MAX 1023  //höchstmöglicher zu erwartender Messwert
2
#define MIN 0     //kleinstmöglicher zu erwartender Messwert
3
unsigned int messwert_array[8], min_wert = MAX, max_wert = MIN;
4

5
for(unsigned char i = 0; i < 8; i++)
6
{
7
    if(messwert_array[i] < min_wert)
8
        min_wert = messwert_array[i];
9
    if(messwert_array[i] > max_wert)
10
        max_wert = messwert_array[i];
11
}
Gast #597807
Lesenswert?
• ▲
▼
Wieso überprüfst Du das nicht gleich während des Einlesens?

Beim ersten Einlesen des ADC setzt du min_val und max_val auf diesen 
Wert.
Bei jedem weiteren Einlesen machst Du folgendes:
1
if (val > max_val) max_val = val;
2
if (val < min_val) min_val = val;

  
Gast #597811
Lesenswert?
• ▲
▼
Hallo,

@Florian Demski: so als Anmerkung von mir... ;)

ich programmiere AVR in ASM, schau in C immer mal wieder rein, falls ich 
es doch mal intensiver nutzen will oder muß.

Dein Codebeispiel ist für mich einer der Gründe, weshalb ich es manchmal 
schnell wieder lasse.

Sicher elegant (ich verstehe es durchaus, ich kann ja programmieren, nur 
C eben nicht direkt), für einen Einsteiger aber der Beweis, wie man 
Abläufe in C so cryptisch verschlüsselt, daß man es erst nach einigem 
Nachdenken versteht.

Oder gibt es einen Grund, den ich übersehe, weshalb man die min /max 
Sachen unbedingt in ein Define verpacken muß und für die If-Geschichte 
die Kurzschreibweise benutzen muß?

Wirklich nur eine Anmerkung und keineswegs böse gemeint.

Gruß aus Berlin
Michael
#597834
Lesenswert?
• ▲
▼
Michael U. wrote:
>
...
> Oder gibt es einen Grund, den ich übersehe, weshalb man die min /max
> Sachen unbedingt in ein Define verpacken muß und für die If-Geschichte
> die Kurzschreibweise benutzen muß?

Da hast du recht, die wären als Funktion besser aufgehoben.
Das gibt sonst bei

   j = max( i++, 5 );

böse Überraschungen.

Aber ansonsten: Gerade diese Makros sind normalerweise
Standardbeispiele in den meisten C-Büchern. Auch wenn
das seit Einführung von inline Funktionen keine gute
Idee mehr ist.
Gast #597864
Lesenswert?
• ▲
▼
Hallo,

@Karl heinz Buchegger: naja, soweit habe ich garnicht geschaut. ;)
Ich finde nur das Beispiel von Johannes M. für einen Einsteiger erstmal 
viel lesbarer und damit nachvollziehbarer.

Mit den Makros sehe ich wie in ASM: ich benutze sie durchaus, allerdings 
ist ein Programm von jemand anderem mit vielen Makros auch für mich 
aufwändiger nachzuverfolgen, weil ich da auch jedesmal erst nachschauen 
muß, was im zugehörigen Makro definiert ist und es steht meist nicht 
direkt unter dessen Benutzung. ;)

Gruß aus Berlin
Michael

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