INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Funktionen für min/max/durchschnitt der Werte eines Array
24.12.2019, 15:38 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2019 15:46 von Fips.)
Beitrag #1
Funktionen für min/max/durchschnitt der Werte eines Array
Universelle Funktionen für Verschiedene Datentypen.
Die Funktion für den Durchschnitt funktioniert leider nur für den Esp.....

Code:
// Template Funktion größten Wert aus Array ermitteln
template <typename T, size_t size> T maxRead(const T (&arr)[size]) {
  T maxValue {arr[0]};
  for (auto &value : arr) maxValue = max(maxValue, value);
  return maxValue;
}

// Template Funktion kleinsten Wert aus Array ermitteln
template <typename T, size_t size> T minRead(const T (&arr)[size]) {
  T minValue {arr[0]};
  for (auto &value : arr) minValue = min(minValue, value);
  return minValue;
}

// Template Funktion Durchschnitt aus Array ermitteln
template <typename T, size_t size> T averageRead(const T (&arr)[size]) {
  double average {0};
  for (auto &value : arr) average += (double)value / size;
  return std::numeric_limits<T>::is_integer ? round(average) : average;
}

void setup() {
  Serial.begin(115200);
  delay(100);
  Serial.printf("\n\n%s\n\n",__TIMESTAMP__);
  
  const char charArray[] {'%', 42, '!', 40};
  int8_t int8Array[] {5, 3, 2, 4, 5, 1, 3, 2, 4, 5, -1, 2, 3, 4, 2, 1, 6, 3, 2, 4, 1, 5, 3, 2, 4, 2, 5, 3, 2, 4, 3, 5, 1, 1, 2};
  const uint8_t uint8Array[] {67, 107, 115, 123, 103, 116, 112, 175, 93, 4, 91, 99, 253, 111, 119, 118, 108, 89, 121, 77, 79, 97, 87, 59, 127, 126, 125, 124, 123};
  float floatArray[] { -1.55, 8.94, 14.27, -5.63, 10.42, 2.38, 87.91, 3.39, 4.73};
  int32_t int32Array[] { -2134567890, 1234567890, 987654321, -69567433, 981, 483609};
  uint64_t uint64Array[] {2113720368549745289, 6134567890, 1337203685477587};

  Serial.print("char max:\t\t"); Serial.println(maxRead(charArray));
  Serial.print("char min:\t\t"); Serial.println(minRead(charArray));
  Serial.print("char mittel:\t\t"); Serial.println(averageRead(charArray));
  
  Serial.print("\nint8 max:\t\t"); Serial.println(maxRead(int8Array));
  Serial.print("int8 min:\t\t"); Serial.println(minRead(int8Array));
  Serial.print("int8 mittel:\t\t"); Serial.println(averageRead(int8Array));
  
  Serial.print("\nuint8 max:\t\t"); Serial.println(maxRead(uint8Array));
  Serial.print("uint8 min:\t\t"); Serial.println(minRead(uint8Array));
  Serial.print("uint8 mittel:\t\t"); Serial.println(averageRead(uint8Array));
  
  Serial.print("\nfloat max:\t\t"); Serial.println(maxRead(floatArray));
  Serial.print("float min:\t\t"); Serial.println(minRead(floatArray));
  Serial.print("float mittel:\t\t"); Serial.println(averageRead(floatArray));

  Serial.printf("\nint32 max:\t\t%+11d\n", maxRead(int32Array));
  Serial.printf("int32 min:\t\t%+11d\n", minRead(int32Array));
  Serial.printf("int32 mittel:\t\t%+11d\n", averageRead(int32Array));
  
  Serial.printf("\nuint64 max:\t\t%19lld\n", maxRead(uint64Array));
  Serial.printf("uint64 min:\t\t%19lld\n", minRead(uint64Array));
  Serial.printf("uint64 mittel:\t%19lld\n", averageRead(uint64Array));
}

void loop() {}


Testausgabe:
Code:
Tue Dec 24 15:14:19 2019

char max:            *
char min:            !
char mittel:         &

int8 max:            6
int8 min:           -1
int8 mittel:         3

uint8 max:          253
uint8 min:            4
uint8 mittel:       109

float max:          87.91
float min:          -5.63
float mittel:       13.87

int32 max:         +1234567890
int32 min:         -2134567890
int32 mittel:         +3095246

uint64 max:        2113720368549745289
uint64 min:                 6134567890
uint64 mittel:      705019192789930368


Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Modellierung eines Klatschschalters für die Arduino Plattform mit Zustandautomaten TeDom 0 10.779 06.10.2016 08:31
Letzter Beitrag: TeDom

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste