#define led 8
#define taster 9
int werte[100] = {0};
//Variablen für die Zeitabfrage
unsigned int zeitaktuell = 0;
unsigned int zeitalt = 0;
int zeitdiff = 0;
int wartezeit = 3000;
//Variablen für den Taster als Schalter
bool geschaltet = false;
bool tasterzustand = true;
bool tasterzustand_alt = true;
//Variablen für die Häufigkeit
int counter_max = 0;
int element = 0;
bool status_led = false;
void setup() {
Serial.begin(9600);
//Definieren der Ein- und Ausgänge
pinMode(led, OUTPUT);
pinMode(taster, INPUT_PULLUP);
digitalWrite(led, LOW);
}
void loop() {
//Aufrufen der Millis-Funktion
zeitaktuell = millis();
zeitdiff = zeitaktuell - zeitalt;
//Tasterabfrage
tasterzustand = digitalRead(taster);
//Zeitabfrage
if (zeitdiff >= wartezeit) {
//Array mit Werten füllen
for (int i = 0; i < 100; i++) {
werte[i] = random(100);
}
zeitalt = millis();
Serial.println("Array gefuellt");
/* Dieser Block dient der Anzeige des gefüllten Arrays
zur manuellen Prüfung des Programms
for (int i = 0; i<100; i++){
Serial.print(werte[i]);
Serial.print(" ");
}*/
Serial.println(" ");
//LED Togglen
status_led = ! status_led;
digitalWrite(led, status_led);
}
if (tasterzustand != tasterzustand_alt) { //Abfrage nach der Änderung
if (tasterzustand == LOW) { // Abfrage nach der positiven Flanke
//Ausgabe auf dem seriellen Monitor
Serial.println("-------------------------------------------------------");
Serial.print("Minimum: ");
Serial.println(minimum());
Serial.print("Maximum: ");
Serial.println(maximum());
Serial.print("Anzahl gerade: ");
Serial.println(gerade());
Serial.print("Anzahl ungerade: ");
Serial.println(ungerade());
haeufigkeit();
Serial.println("-------------------------------------------------------");
//Anpassen des alten Tasterzustands
tasterzustand_alt = ! tasterzustand_alt;
}
else {
//Anpassen des alten Tasterzustands
tasterzustand_alt = ! tasterzustand_alt;
}
}
//Entprellen
delay(50);
}
//Funktion zum berechnen des Minimums
int minimum() {
int mini = werte[0];
for (int i = 1; i < 100; i++) {
if (mini > werte[i]) { //Wenn das aktuelle Element KLEINER ist als das aktuelle Minimum...
mini = werte[i]; //... wird das aktuelle Minimum mit dem aktuellen Element überschrieben.
}
}
return mini;
}
//Funktion zum berechnen des Maximums
int maximum() {
int maxi = werte[0];
for (int i = 1; i < 100; i++) {
if (maxi < werte[i]) { //Wenn das aktuelle Element GRÖßER ist als das aktuelle Maximum...
maxi = werte[i]; //... wird das aktuelle Maximum mit dem aktuellen Element überschrieben.
}
}
return maxi;
}
//Funktion zum ermitteln der Anzahl der geraden Zahlen
int gerade() {
int count_gerade = 0;
for ( int i = 0; i < 100; i++) {
if (werte[i] % 2 == 0) { //Wenn das aktuelle Element restlos durch 2 teilbar ist...
count_gerade += 1; //... wird der Counter inkrementiert
}
}
return count_gerade;
}
//Funktion zum ermitteln der Anzahl der ungeraden Zahlen
int ungerade() {
int count_ungerade = 0;
for ( int i = 0; i < 100; i++) {
if (werte[i] % 2 != 0) { //Wenn das aktuelle Element NICHT restlos durch 2 teilbar ist...
count_ungerade += 1; //... wird der counter inkrementiert
}
}
return count_ungerade;
}
void haeufigkeit() {
int anz_werte[100] = {0};
counter_max = 0;
for (int j = 0; j < 100; j++) {
for (int i = 0; i < 100; i++) {
if (j == werte[i]) {
anz_werte[j] += 1;
}
}
}
for (int i = 0; i < 100; i++) {
if (anz_werte[i] > counter_max) {
counter_max = anz_werte[i];
element = i;
}
}
Serial.print("Die haeufigste Zahl lautet: ");
Serial.print(element);
Serial.print(" und kommt ");
Serial.print(counter_max);
Serial.println(" mal vor.");
Serial.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
for (int i = counter_max; i >= 0; i--) {
Serial.print("Anzahl: ");
Serial.print(i);
Serial.print("; Zahl: ");
for (int j = 0; j < 100; j++) {
if (anz_werte[j] == i) {
Serial.print(j);
Serial.print(", ");l
}
}
Serial.println(" ");
Serial.println(" ");
}
}