WiSe 2014 | Softwaretechnologie I _ Funktionen, Zeiger, Strukturen, Bibliotheken

Preview:

DESCRIPTION

WiSe 2014 | Softwaretechnologie I _ Funktionen, Zeiger, Strukturen, Bibliotheken

Citation preview

Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung

Jan G. Wieners // jan.wieners@uni-koeln.de

Softwaretechnologie IWintersemester 2014 / 2015

18. November 2014 – Funktionen, Strukturen und Bibliotheken

Kurzwiederholung

[…]

int addiereArabisch(int a, int b);

int main() {[…]ergebnis=addiereArabisch( zahl1, zahl2 );[…]

}

int addiereArabisch(int a, int b) {int resultat;resultat=a+b;a=0;b=0;return resultat;

}

[…]

int addiereArabisch(int a, int b);

int main() {[…]ergebnis=addiereArabisch( zahl1, zahl2 );[…]

}

int addiereArabisch(int a, int b) {int resultat;resultat=a+b;a=0;b=0;return resultat;

}

Deklaration: „In meiner

Anwendung existiert eine

Funktion, die ich zu einem

späteren Zeitpunkt definiere“

Deklaration Funktionskopf,

der mit einem Semikolon

abgeschlossen wird.

Definition: „Auf

diese bestimmte Art

und Weise verfährt

meine Funktion“

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:

Zeiger

*

Beispiel:

int wert = 23;

int *zeigerAufWert = NULL;

zeigerAufWert = &wert;

cout << "Vorher: " << endl << wert << endl << zeigerAufWert;

*zeigerAufWert = 42;

cout << "\nNachher: " << endl << wert << endl << zeigerAufWert;

Zeiger dürfen nur auf Variablen verweisen, die denselben

Datentyp haben!

Zeiger

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;

}

Funktionen: Call by value

Ausgabe?

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;

}

Funktionen: Call by reference

Ausgabe (und Unterschied)?

Schreiben Sie eine Funktion (und das

Hauptprogramm dazu), die:

zwei Zahlen vom Datentyp int einliest,

die Zahlen vertauscht

und an das Programm zurückgibt

Übung

char *zeigeBegruessung(char *name1) {

cout << "Bitte geben Sie Ihren Namen ein:" << endl;

cin >> name1;

return name1;}

Strukturen

Kapselung / Information Hiding / Objektorientierung

struct nameDerStruktur

{

// Elemente der Struktur

};

Strukturen – so funktioniert‘s

struct

struct nameDerStruktur

{

// Elemente der Struktur

};

Beispiel:

struct person

{

char vorname[100];

char nachname[100]

} ;

Strukturen

struct

struct personenDB {

char vorname[100];char nachname[100];

};

Deklaration:personenDB meineDatenbank;

Mit mehren Elementen / Instanzen der Struktur arbeiten:personenDB zehnDatenbanken[10];

Dynamisch:personenDB *dynamischeDB = new personenDB;

Zugriff auf Elemente der Struktur: struct.vorname (Punkt-Operator) struct->vorname (-> Operator)

Strukturen

#include <iostream>using namespace std;

struct EineStruktur{

int Zahl;};

int main(){

EineStruktur Werte[5];

for(int i=0; i<5; i++){

Werte[i].Zahl=i;cout << Werte[i].Zahl << endl;

}return 0;}

struct - Arrays

#include <iostream>using namespace std;struct EineStruktur{

int Zahl;int Funktion(int a, int b) // gehoert zu EineStruktur (inline definiert){

Zahl = a + b;return Zahl;

}};

int main(){

EineStruktur Wert;cout << "Returnwert: " << Wert.Funktion(1,2) << endl;return 0;

}

struct - Methoden

Übungsaufgabe

Eine 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: 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.

Filmdatenbank

Eigene Bibliotheken /

Headerdateien

Vom System bereitgestellte Headerdateien:

#include <dateiname>

Analog: Definition eigener Bibliotheken

(*.cpp + *.h)

Einbinden von Headerdateien:

#include “meineHeaderdatei.h"

Funktionalität auslagern: Headerdateien

/

Recommended