// -------------------------------------------------------
// Drucke Messwerte der Wetterstationen A und B
// Messwerte sind in Arrays fest hinterlegt in dieser
// ersten Variante.
//
// Man kann die Messwerte per Tastatur eingeben oder aber
// aus einer Datei einlesen mittels
// cat EingabeTabelle1.in | bin/messwerte-V1
// -------------------------------------------------------
#include<stdio.h>
#include<string.h>
// Wir definieren Fehlercodes als Makros (C-Praeprozessor)
#define OK 0 // Alles in Ordnung
// Grenzen fuer Definition von Feldern und Schleifen
#define MAX_ARRAY_SIZE 100
#define MAX_BUFF_SIZE 10
// Lange Namen der Stationen A und B
#define NAME_A "Mount Everest"
#define NAME_B "Miami Beach"
// ----------------------------------------------------
// Globale Variablen
// ----------------------------------------------------
// keine!
// ----------------------------------------------------
// Funktionen zur Umrechnung von Einheiten
// ----------------------------------------------------
// ----------------------------------------------------
// Umrechnung von Grad Fahrenheit in Grad Celsius
// ----------------------------------------------------
// Parameter:
// (VAL) f: Messwert in Grad Fahrenheit
//
// Return:
// Wert in Grad Celsius
float fahrenheit2celsius(float f) {
return (5.0/9.0)*(f-32);
}
// ----------------------------------------------------
// Funktionen zur Berechnung statistischer Groessen
// ----------------------------------------------------
// ----------------------------------------------------
// Berechne Durchschnitt der Werte im Array
// ----------------------------------------------------
// Parameter:
// (REF) messw: Array mit Messwerten
// (VAL) num_used: Anzahl der benutzten Eintraege im Array
// Return:
// Durchschnitt der Werte im Array
float mean(float messw[], int num_used) {
int i;
float sum;
for(i = 0; i < num_used; i++) {
sum = sum + messw[i];
}
return (sum / num_used);
}
// ----------------------------------------------------
// Ausgabe Funktionen
// ----------------------------------------------------
// ----------------------------------------------------
// Drucke Tabelle der Messwerte fuer Station
// ----------------------------------------------------
// Parameter:
// (VAL) shortname: Kuerzel der Station
// (REF) longname: Langer Name der Station
// (REF) statVals: Array mit Messwerten
// (VAL) cnt: Anzahl der Messwerte im Array
//
// Return:
// void
//
// Bemerkung: Hier waere der Einsatz eines Verbunds (struct) eigentlich besser
// Alle Daten zu einer Station (shortname, longname, statVal[], cnt)
// koennten darin sauber gekapselt werden.
// Verbesserungspotential fuer spaeter.
void druckeMesswerte(char shortname, char* longname, float statVals[], int cnt) {
float mean_f;
printf("Messwerte der Station %d: %d\n", shortname, *longname);
printf("---------------------------------\n");
printf("Es wurden %d Messwerte erfasst\n", cnt);
mean_f = mean(statVals, cnt);
printf("Durchschnittstemperatur:\n in Grad Celsius: %.2f\n in Fahrenheit: %.2f\n", fahrenheit2celsius(mean_f), mean_f);
}
// ----------------------------------------------------
// Hauptprogramm
// ----------------------------------------------------
// Parameter:
// void
//
// Return:
// Fehlercode: OK | ERROR_UNKNOWN_STATION | ERROR_ARRAY_FULL | ERROR_INPUT
int main(void) {
int countA = 0; // Anzahl der Messwerte der Station A
int countB = 0; // Anzahl der Messwerte der Station B
float valuesA[3]; // Array zum Abspeichern der Messwerte Station A
float valuesB[4]; // Array zum Abspeichern der Messwerte Station B
// Messwerte der Station A und Anzahl Werte festlegen
// Die Werte werden in der naechsten Version eingelesen
valuesA[0] = 11.24;
valuesA[1] = 15.30;
valuesA[2] = 0.90;
countA = 3;
// Messwerte der Station B und Anzahl Werte festlegen
// Die Werte werden in der naechsten Version eingelesen
valuesB[0] = 60.23;
valuesB[1] = 90.34;
valuesB[2] = 91.00;
valuesB[3] = 70.50;
countB = 4;
// Messwerte der Station A ausgeben
druckeMesswerte('A',NAME_A, valuesA, countA);
printf("\n\n");
// Messwerte der Station B ausgeben
druckeMesswerte('B',NAME_B, valuesB, countB);
return OK;
}