C++ und MATLAB

Programmieren in C/C++ und MATLAB Sabine Schmidt Sebastian Bauer Institut für Geowissenschaften Christian-Albrechts-Universität zu Kiel Sabine Schmi...
Author: Elsa Ute Sommer
4 downloads 0 Views 520KB Size
Programmieren in C/C++ und MATLAB

Sabine Schmidt Sebastian Bauer Institut für Geowissenschaften Christian-Albrechts-Universität zu Kiel

Sabine Schmidt, Sebastian Bauer Institut für Geowissenschaften

Programmieren in C/C++ und MATLAB CAU, Sommersemester 2008

4-1

Übung Aufgabe: Berechnen Sie für die Klimastation Schleswig des Deutschen Wetterdienstes die Monatsmittelwerte, Monatsmaxima und Monatsminima der Temperatur für das Jahr 2007 und schreiben Sie die Tabelle der Monatswerte in eine Datei. Benötigt werden diese Werte oft für klimatische Berechnungen, hydrologische Berechnungen zum Wasserdargebot und zur Grundwasserneubildung. Als Daten gehen diese Werte dann in das Präprozessing ein.

Sabine Schmidt, Sebastian Bauer Institut für Geowissenschaften

Programmieren in C/C++ und MATLAB CAU, Sommersemester 2008

4-2

Übung Vorbereitet für Sie ist eine Datei „schleswig.txt“, die die gemessenen Tageswerte der Klimastation Schleswig enthält. Diese kann man aus dem Internet beim DWD herunterladen, Tageswerte seit 1991 stehen so zur Verfügung. Um Ihnen die Aufgabe zu erleichtern, ist die Datei vereinfacht worden: jeder Monat hat genau 30 Tage. Die Datei enthält insgesamt alle Werte aus dem Jahr 2007, also 12*30 = 360 Tagesmessungen. Die Datei besteht aus einem Dateikopf und den Werten. Der Dateikopf ist eine Zeile lang und enthält die Spaltenbeschriftungen: STAT

10035 10035

JJJJMMDD Quality Min_T_5cm Mean_rel_humidity Mean_Wind Rain_mm Air_press_hPa 20071230 3 0 11.5 2.3 4.7 20071229 3 3.4 16.7 0.1 7.5

Min_T_2m Max_wind

Mean_T_2m_°C Sunshine_hours

Max_T_2m cloud_amount

2.2 0.8 3.9 1.6

4.1 1009.9 5.3 1002.6

6.6

90.8

3

6.7

86

4

Achtung: Zeilenumbrüche nur hier, nicht in der Datei!

Sabine Schmidt, Sebastian Bauer Institut für Geowissenschaften

Programmieren in C/C++ und MATLAB CAU, Sommersemester 2008

4-3

Übung Lesen Sie diese Daten ein und speichern Sie die eingelesenen Werte alle in einem array. Überlegen Sie sich dessen Dimensionen. Achtung: Die Werte sind in der Datei zeitlich so angeordnet, dass die neuesten Werte oben stehen. Beim Einlesen können Sie diese so in das array einlesen, dass sie dort chronologisch richtig stehen. Verwenden Sie dazu eine for-Schleife mit umgekehrter Indizierung: for(i=max_i; i >= 0; i‐‐){...} Da jeder Monat genau 30 Tage lang ist, können Sie zählen, und müssen nicht anhand des Datums herausbekommen, wann die Monate anfangen und wann diese wiederum aufhören.

Sabine Schmidt, Sebastian Bauer Institut für Geowissenschaften

Programmieren in C/C++ und MATLAB CAU, Sommersemester 2008

4-4

Übung Zum Berechnen der Monatsmittelwerte gilt:

Tmean

1 30 = ∑ Ti 30 i =1

Maximawerte und Minimawerte werden durch Vergleich mit jedem einzelnen Wert ermittelt. Für das Maximum gilt: double wert_max = ‐1000.0; // kleiner als alle Werte im Datensatz for(i=0;i wert_max) wert_max = wert[i]; Benutzen Sie formatierte Ausgabe, um eine Tabelle in die Ausgabedatei zu schreiben. Wenn Sie die Methode setw() verwenden wollen, müssen Sie den Header iomanip.h einbinden.

Sabine Schmidt, Sebastian Bauer Institut für Geowissenschaften

Programmieren in C/C++ und MATLAB CAU, Sommersemester 2008

4-5

Übung Das Ergebnis sollte sein: T_mean T_min T_max 5.367      ‐3.2      10.5 3.48        ‐2         7 6.63       3.1       9.7 10.22       5.3      16.8 12.38       8.7      16.9 16.28        11      21.7 16.24      12.1      22.9 17.17      11.8      21.5 13.08      10.2      16.2 8.867       3.6      12.8 4.957       0.4      12.1 3.443      ‐4.6       9.5

Ergänzungen: Adaptieren Sie Ihr Programm so, das es auch Min-MaxMean Werte für die Luftfeuchte berechnet. Adaptieren Sie Ihr Programm so, das es die Monate anhand des Datums erkennt. Sabine Schmidt, Sebastian Bauer Institut für Geowissenschaften

Programmieren in C/C++ und MATLAB CAU, Sommersemester 2008

4-6

Lösung #include #include #include #include



using namespace std; int main(int argc, char *argv[]) { /* Programm zum Einlesen von Wetterdaten auf Tagesbasis; Berechnung von Monatsmittelwerten der Temperatur    Dateninput File: Schleswig.txt Format steht in erster Zeile Das Format ist angepass, um die Übung zu erleichtern: Jeder Monat hat 30 Tage, es stehen Werte für 12 Monate zur Verfügung In der Datei stehen 14 Spalten */ double data[360][14]; // Feld fuer die eingelesenen Klimadaten auf Tagesbasis: 12*30, 14 double wert;        // Variable zum Einlesen int i, j, k, d=0;            // Zählindex double T_min, T_max, T_mean;     // Minimum, Maximum und Mittelwert der Temperatur string name_string;  // string zum Einlesen der Titelzeile string monatsnamen[] = {"    Januar", "   Februar", "     Maerz", "     April", "       Mai", "      Juni", "       Juli", "    August", " September", "   Oktober", "  November", " Dezember"}; ifstream klima_in;      // Eingabedateien   ofstream mklima_out;    // Ausgabedatei

Sabine Schmidt, Sebastian Bauer Institut für Geowissenschaften

Programmieren in C/C++ und MATLAB CAU, Sommersemester 2008

4-7

Lösung /* Öffnen der Eingabedatei */ klima_in.open("schleswig.txt"); if(!klima_in) { cout