Mittelwert aus Array berechenen C

Gast #1798312
Lesenswert?

Hallo zusammen,

ich habe ein Problem bei einer Mittelwertbildung aus einem Array.
Ich habe ein Array aus einer eigenend Struct wodurch die
einzelnen Punkte eine Stromwert, Messpunktnummer und Zeitwert haben.
Dieses Array wird im normal Fall vom ADC beschrieben, das klappt auch.
Zum testsen von einzelnen Funktionen habe ich das Array manuell selbst 
beschrieben.
Nun möchte ich aus 5 Werten den Mittelwert für Strom und Zeit berechnen.
Beispiel Strom:
Arraystelle:   Stromwert[mA]:
0              1000
1              1200
2              1100
3              1200
4              1300

Theoredischer Mittelwert: 1160

Am Ende Prüfe ich meine Mittelwertfunktion mit einem einfachen if auf 
1160
und dann soll eine LED an gehen.
Jedoch bleibt die LED aus. Sie geht an wenn ich auf 960 vergleiche.
Das Ergebnis entsteht wenn man nur die Array Werte 1-4 und nicht 0-4 zur 
Mittelwertbildung benutzt werden. aber warum benutzt mein Code nicht 
0-4?
Meine for schleife geht von 0-4 von daher versteh ichs nicht. Oder leigt 
der fehler noch wo anders?

Gruß und Danke schonmal für die hilfe
Angehängte Dateien:
Gast #1798323
Lesenswert?

Es gibt Fragestellung, für die haben andere Leute Debugger erfunden. 
Deine ist so eine.

Schrittweise durchsteppen, Werte ansehen, und überprüfen, was passiert.

Falls du keinen Debugger hast, der Fehler steckt in dieser Zeile:
>#define SIZE_POINTS 4

Oliver
Gast #1798338
Lesenswert?

Du schrebist den Mittelwert in "The_Point.current".
          The_Point.current = (summe_current /5);
Die fragst aber "summe_current" ab. Dort steht noch die Summe, nicht der 
Mittelwert.
         if (summe_current == 1160)
#1798351
Lesenswert?

Und wenn in einer for-Schleife, die ganz offensichtlich die Aufgabe hat, 
alle Elemente eines Arrays durchzugehen ...

   for (uint8_t i = 0; i<=4; i++)

ein <= bei der Abbruchbedingung auftaucht, dann muessen in dir in 
Zukunft sofort 5 Warnglocken und Sirenen losgehen.

Etwas in der Form sieht praktisch immer so aus
1
#define ANZAHL  5
2

3
int Array[ ANZAHL ];
4

5

6
...
7

8
  for( i = 0; i < ANZAHL; ++i )
9
    mach was mit Array[i];

achte darauf, wie das #define-ment für Anzahl an den einzelnen Stellen 
benutzt wird! Auf die Art stimmt immer alles zusammen.
Und nochwas: Ein Array mit 5 Einträgen, hat gültige Indizes
   0, 1, 2, 3, 4
zähl nach. Sind genau 5 Stück. Bei der Definition eines Arrays gibt man 
an, wieviele Elemente man haben möchte und nicht, welches der höchste 
noch zulässige Index sein soll.
#1798368
Lesenswert?

Andi schrieb:
> Karl heinz Buchegger schrieb:
>> #define ANZAHL  5
>> int Array[ ANZAHL ];
>
>> ...
>>
>>
>>
>>   for( i = 0; i < ANZAHL; ++i )
>>
>>     mach was mit Array[i];
>
>
> ja sollte lieber Anzahl angeben das stimmt. aber warum nur < und nicht
> <= ?
> mit < fehlt mir doch mein letzter wert oder?

Anzahl sei 5

  0    ist kleiner als 5
  1    ist kleiner als 5
  2    ist kleiner als 5
  3    ist kleiner als 5
  4    ist kleiner als 5

  5    ist nicht kleiner als 5 -> Schleife wird nicht mehr wiederholt
                                  sondern verlassen.

Der Schleifenrumpf wird als mit Werten für i von
    0, 1, 2, 3, 4
durchlaufen. Sobald i zu 5 wird, schlägt die Bedingung zu und die 
Schleife ist beendet.

Was waren noch mal die gültigen Indizes bei einem Array der Größe 5?

    0, 1, 2, 3, 4    (zähl nach, sind genau 5 Stück)

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