Programmieren in C/C++ und MATLAB

Werbung
Programmieren in C/C++
und MATLAB
Sebastian Bauer
Sven Willert
Sabine Schmidt
Institut für Geowissenschaften
Christian-Albrechts-Universität zu Kiel
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-1
Übung
1) Schreiben Sie ein Programm, das die Fläche unter einer Parabel,
also das Integral
b
∫ x²dx
a
approximativ auswertet. Nähern Sie die Fläche als Summe schmaler
Rechtecke konstanter Breite und mit Höhe x².
Eingabe soll sein der obere und der untere Integrationswert a und b
sowie die Anzahl der zu verwendenden Stützstellen, Ausgabe die
berechnete Fläche.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-2
Übung: Integralberechnung
Numerik:
f(x)
Näherung des Integralwertes durch Stützstellen
bei i/2 δx, an denen die
Höhe des Rechtecks zu f(x)
= x2 = ((i+1./2.) δx)2
berechnet wird. Die Breite
des Rechtecks ist jeweils δx
= (b-a)/n, wobei n die
Anzahl der Stützstellen ist.
Ergänzung:
Vergleichen Sie ihr
numerisches Ergebnis mit
der analytischen exakten
Lösung.
Sebastian Bauer
Institut für Geowissenschaften
0.5 δx
1.5 δx
δx
δx
Programmieren in C/C++ und MATLAB
CAU
4-3
2.5 δx
δx
x
Übung: Integralberechnung
#include <cstdlib>
#include <iostream>
int main(int argc, char *argv[])
{
// Variablen:
double a, b;
// Untere und obere Integrationsgrenze
int stuetzstellen;
// Anzahl der Stuetzstellen
double flaeche = 0.0; // Integralwert
double delta_x, x;
// Integrationsintervall, Integrationsvariable
/*
Eingabe der Werte über die Tastatur
*/
cout << " Berechnung des Integrals von a nach b über x^2 anhand von n Stuetzstellen" << endl;
// Eingabe der unteren Integrationsgrenze
cout << " Bitte geben Sie die untere Integrationsgrenze ein (a): ";
cin >> a;
// Eingabe der oberen Integrationsgrenze
cout << " Bitte geben Sie die obere Integrationsgrenze ein (b): ";
cin >> b;
// Eingabe der Anzahl der Stuetzstellen
cout << " Bitte geben Sie die Anzahl der Stuetzstellen ein (n): ";
cin >> stuetzstellen;
cout << " Ihre Eingabe: a: " << a << ", b: " << b << ", n: " << stuetzstellen << endl;
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-4
Programm weiter auf nächster Folie
using namespace std;
/*
Berechnung des Integrals F = integral von a nach b über x^2
*/
Übung: Integralberechnung
/*
Berechnung des Integrals
*/
// Berechnung des Integrationsintervalls
delta_x = (b-a)/((double)stuetzstellen);
// Setzt Startwert für die Stuetzwerte entlang der x-Achse
a = a + delta_x/2.0;
for(int i=0; i < stuetzstellen; i++){
x = a + delta_x*((double)i);
flaeche += (x*x)*delta_x;
cout << "i: " << i << ", x: " << x << ", Flaeche: " << flaeche << endl;
}
/*
Ergebnisausgabe
*/
cout << " Der Integralwert betraegt: " << flaeche << endl;
/*
Vergleich echte Integration
*/
double flaeche2 = (b*b*b-a*a*a)/3.0;
cout << " Analytische Integration ergibt: " << flaeche2 << endl;
cout << " Differenz [%]: " << (flaeche2-flaeche)/flaeche2*100.0 << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-5
Kontrollstrukturen
Bisher eingeführt:
Daten – Datentypen (Deklaration, Definition, Variablen)
Operatoren – Verknüpfung von Daten bzw. Änderung von Daten
Zu den grundlegenden Sprachelementen gehören nun auch noch
Bedingungen und Kontrollstrukturen, die es erlauben,
bestimmte Operationen nur unter bestimmten Umständen oder mit
einer bestimmten Struktur auszuführen.
Dazu gehören
- Bedingungen: Wenn (...) Dann (...)
- Schleifen:
Solange (...) mache (...)
Ohne diese Elemente kommt kein Programm aus!
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-6
Bedingungen
Fast kein Programm läuft geradlinig durch, fast immer muss
überprüft werden, ob bestimmte Voraussetzungen erfüllt sind,
sodass in Abhängigkeit dieser Voraussetzungen sich der
Programmablauf verzweigt. Dazu muss im einzelnen jeweils
überprüft werden, ob eine bestimmt Bedingung erfüllt ist oder nicht.
Die Vorgehensweise ist dabei immer gleich:
Wenn die Voraussetzung erfüllt ist wird etwas ausgeführt,
sonst etwas anderes.
Die if-Bedingung (Wenn-Bedingung):
if (Bedingung)
Anweisung;
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-7
Bedingungen
Die if-else-Bedingung (Wenn-dann-Bedingung):
if (Bedingung)
Anweisung1;
else
Anweisung2;
Dabei können mehrere Anweisungen in einem Teil ausführen, diese
müssen dann zu einem Block zusammengefasst werden:
if (Bedingung)
{
Anweisung1;
Anweisung2;
Anweisung3;
}
else
Anweisung4;
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-8
Bedingungen
Formulieren einer Bedingung:
Eine Bedingung ist ein Ausdruck, der einen Ganzzahltyp oder bool
ergibt. Dafür können alle Vergleichsoperatoren (<, >, ==, !=, etc.)
verwendet werden. Die Bedingung ist erfüllt, wenn sie true oder
verschieden von 0 ist.
Ausdrücke können logisch verknüpft werden (&& (und), || (oder),
! (Negation))
if (a>0) x = x/a;
if (p != 0 && x != 0)
x *= p;
else
x = 1;
if (boolwert == true)
i++;
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-9
Bedingungen
Bedingungen können geschachtelt werden, d.h. in einem Block einer
if-Bedingung kann eine weitere if-Bedingung gestellt werden.
Ebenso sind Sprachkombinationen mit allen anderen
Kontrollstrukturen möglich.
Kurzformen:
if (wert != 0) ist gleichbedeutend mit
if (wert == 0) ist gleichbedeutend mit
Sebastian Bauer
Institut für Geowissenschaften
if (wert)
if (!wert)
Programmieren in C/C++ und MATLAB
CAU
4-10
Mehrfachbedingungen
Es gibt oft Fälle, in denen es mehr als zwei Möglichkeiten gibt. Die
Darstellung durch if-Abfragen kann sehr kompliziert werden, daher
gibt es den folgenden Befehl in C++.
switch (Ausdruck)
{
case: Konstante1 : Anweisung1; break;
case: Konstante2 : {Anweisungen2}; break;
...
default: Standrd‐Anweisung;
}
Der Ausdruck muss ganzzahligen Typs sein (char, long, int),
ebenso wie die Konstanten, mit denen ja intern verglichen wird.
Immer break am Ende eines case verwenden!
Die Standard-Anweisung ist für den Fall, dass keine der caseAnweisungen zutrifft.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-11
Schleifen
Oft gibt es in Programmen Aufgaben, die wiederholt ausgeführt
werden müssen. Dies geschieht entweder, bis eine bestimmte
Bedingung erfüllt oder eine Höchstzahl an Wiederholungen erreicht
ist.
Für diese Art der Kontrollstruktur gibt es in C++ drei Arten von
Schleifen die eng verwandt sind.
Schleife mit Anfangsüberprüfung (while-Schleife)
Hier wird zunächst das Abbruchkriterium überprüft, bevor der Block
der Schleife Ausgeführt wird
while (Ausdruck)
{ //Schleifenblock
Anweisung;
}
Der Ausdruck ist wie bei if-Bedingung zu verstehen.
Bei dieser Art der Schleife kann der Schleifenblock nicht ausgeführt
werden.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-12
Schleifen
Schleife mit Endüberprüfung (do-while-Schleife)
Hier wird das Abbruchkriterium nach Ausführen der Anweisungen im
Block der Schleife ausgewertet:
do
{//Schleifenblock
Anweisung;
}
while (Ausdruck);
Der Ausdruck ist wie bei if-Bedingung zu verstehen.
Bei dieser Art der Schleife wird der Schleifenblock immer mindestens
einmal ausgeführt.
Die beiden Schleifenformen lassen sich ineinander überführen, oft
jedoch mit zusätzlichen Bedingungen.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-13
Schleifen
for-Schleife
for (Initialisierung; Bedingung; Anpassung;)
{
// Anweisungen;
}
Initialisierung: Startwert des Schleifenpoarameters/Laufvariablen,
nur zu Beginn der for-Schleife ausgewertet
Bedingung: Die for-Schleife wird ausgeführt, solange die Bedingung
erfüllt ist (Ausdruck hat Wert ungleich 0)
Anpassung: Nach jeder ausführung des Schleifenblocks kann hier
der Schleifenparameter angepasst werden
int zaehler=0;
for (int i=1; i<=100; i++){
zaehler +=i;
cout << “ Summe bis i: “ << zaehler << endl;
}
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-14
Schleifen
Wird kein Block mit {...} verwendet, so gilt die Wiederholung nur für
die nächstfolgende Anweisung.
Die Zählvariable kann in der for-Schleife deklariert werden, sie ist
dann nur innerhalb der Schleife gültig.
for-Schleifen sind in C++ sehr mächtig, und können für alle
Datenstrukturen eingesetzt werden.
Schleifenkontrolle
Abbruch einer Schleife durch break – geknüpft an eine Bedingung.
Damit wird die Abarbeitung der Schleife unterbrochen.
Abbruch der Anweisungen im Schleifenbkörper, aber Fortführen der
Schleife mit angepasstem Schleifenparameter: continue
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-15
Vergleich - Schleifen
while-Schleife
Sebastian Bauer
Institut für Geowissenschaften
do-while-Schleife
Programmieren in C/C++ und MATLAB
CAU
for-Schleife
4-16
Übung
Schreiben Sie ein Programm, das die Zahl π durch
4 4 4 4 4
π = 4 − + − + − + ...
3 5 7 9 11
approximiert.
Schreiben Sie das Programm einmal mit einer for-Schleife und
einmal mit einer do-while-Schleife. Die Schleifen sollen jeweils
abbrechen, wenn die gewünschte Genauigkeit (über Benutzereingabe
vorgegeben) erreicht ist, und das Ergebnis soll auf den Bildschirm
ausgegeben werden.
Zusatzaufgabe: Schreiben Sie das Programm so um, dass es eine
while-Schleife verwendet.
Sebastian Bauer
Institut für Geowissenschaften
Programmieren in C/C++ und MATLAB
CAU
4-17
Herunterladen