Bit wisem 2015-wieners-sitzung-13_Zusammenfassung II
WiSe 2013 | Programmierpraktikum C++ - 05_Strukturierung von Anwendungen
1. Programmierpraktikum C++
Wintersemester 2013 / 2014
18. November 2013 – Strukturierung von Anwendungen
Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners // jan.wieners@uni-koeln.de
2. Kurzüberblick
Strukturierung von Anwendungen I
Funktionen
Call by Value
Call by Reference
Auslagerung von Funktionalität in Headerdateien
Zeiger, Adressoperator
Strukturierung von Anwendungen II
Strukturen
Objektorientierung: Klassen
Wiederholung 02.11.2010
3. […]
int addiereArabisch(int a, int b);
int main() {
[…]
ergebnis = addiereArabisch(zahl1, zahl2);
[…]
}
int addiereArabisch(int a, int b) {
return a + b;
}
4. […]
Deklaration: „In meiner
Anwendung existiert eine
Funktion, die ich zu einem
späteren Zeitpunkt definiere“
int addiereArabisch(int a, int b);
int main() {
Deklaration
Funktionskopf, der mit einem
Semikolon abgeschlossen
wird.
[…]
ergebnis = addiereArabisch(zahl1, zahl2);
[…]
}
int addiereArabisch(int a, int b) {
return a + b;
}
Definition: „Auf
diese bestimmte Art
und Weise verfährt
meine Funktion“
5. Generieren beide Anwendungen dasselbe Ergebnis?
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
int addition(int operandA, int
operandB) {
return operandA+operandB;
}
int addition(int,int);
int main() {
int zahl1=1;
cout<<addition(zahl1,4)<<endl;
}
==?
int main() {
int zahl1=1;
cout<<addition(zahl1,4)<<endl;
}
int addition(int zahl1, int zahl2) {
return zahl1+zahl2;
}
6. Funktionen: Call by value
Call by value Der Compiler fertigt eine Kopie des
Variableninhalts an:
#include <iostream>
using namespace std;
int function(int wert) {
wert += 5;
return wert;
}
int main() {
int zahl = 10;
cout << zahl;
func(zahl);
cout << endl << zahl;
return 0;
}
Ausgabe?
7. Funktionen: Call by reference
Call by reference Compiler fertigt keine Kopie des Variableninhalts
an; wir arbeiten unmittelbar mit der Variablen:
#include <iostream>
using namespace std;
void func(int *wert) {
*wert += 5;
}
int main() {
int zahl = 23;
cout << zahl;
func(&zahl);
cout << zahl;
return 0;
Ausgabe?
}
& Adressoperator
* Zeigeroperator (auch: Inhalts-/Dereferenzierungsoperator)
8. Zeiger
Bis dato: Variablen
int ganzzahligerWert = 13;
char einzelnesZeichen = ‘A‘;
int[50] eindimensionalesArray;
int[5][5] zweidimensionalesArray;
Beispiel:
unsigned int i;
i=1;
Interne Repräsentation der Variable i:
11. Zusammenfassen von Variablen
char roemischeZiffern[8] = "ivxlcdm";
int ziffernWert[7] = {1, 5, 10, 50, 100, 500, 1000};
Verbindung der Werte aufgrund der Arrayposition
0
1
2
3
4
5
6
I
V
X
L
C
D
M
1
5
10
50
100
500
1000
12.
13. Zusammenfassen von Variablen
Struct roemisch
{
char roemischeZiffer;
int arabischerWert;
};
struct roemisch werte[7];
0
1
2
3
I, 1
V, 5
X, 10
L, 50
4
5
C, 100 D, 500
6
M, 1000
14.
15. Übungsaufgabe: Filmdatenbank
Die ultimative Konkurrenz zur Internet Movie Database (IMDb): Erstellen
Sie Ihre eigene Filmdatenbank. Ihre Datenbank soll maximal 100 Einträge
speichern und folgende Elemente aufnehmen können:
Deutscher Name des Films
Originaltitel
Veröffentlichungsjahr
Regie
Aufgabe 1.1: Überlegen Sie, wie Sie die Datenbank
umsetzen können – welche Datenstruktur bietet
sich für die zu repräsentierenden Informationen an?
Aufgabe 1.2: Implementieren Sie folgenden
Programmablauf (vgl. den oben angeführten
Screenshot):
wird das Zeichen "j" eingegeben, so wird ein
neuer Datensatz angelegt.
wird das Zeichen "n" eingegeben, so wird die
Applikation mit einer Abschiedsmeldung
beendet.
wird das Zeichen "p" eingegeben, so werden
alle bislang in der Datenbank gespeicherten
Einträge angezeigt.
Aufgabe 1.3: Lagern Sie relevante Teile Ihrer
Filmdatenbank in eine eigene Headerdatei bzw.
Bibliothek aus.