Pr¨ asenz¨ ubung zum Kurs Algorithmische Mathematik II
Averkov, Zeile, Jost
Email: clemens.zeile@ovgu.de, felix.jost@ovgu.de
Fakult¨at f¨ur Mathematik Otto-von-Guericke-Universit¨at Magdeburg
Sommersemester 2018 11. April 2018
Inhalt I
Organisatorisches Scheinkriterien Sonstiges und Fragen
Das Klassenkonzept inC++
Zeiger und Referenzen
Scheinkriterien
Ahnlich wie bei “Algorithmischer Mathematik 1”, Homepage:¨
http://www.math.uni-magdeburg.de/institute/imo/teaching/sose18/algomat2/
Teil 1:
I voraussichtlich10Ubungsbl¨¨ atter, (mind.50 %der Punkte)
I (mindestens) 1 ¨Ubungsaufgabe korrekt an der Tafel
I Abgabe in2erGruppen
I Ublicherweise 4 Aufgaben: eine Programmieraufgabe, drei Beweisaufgaben.¨
I F¨ur dieProgrammieraufgabe(n)gelten die Hinweise aus dem ersten Semester, Abgabenan algomath1718@ovgu.de
Teil 2:
I Mitte/Ende MaiAusgabeProgrammierprojekt
I Bearbeitung in3erGruppen
I Mitte/Ende JuniAbgabe.
I Um den Schein zu erhalten muss das Programmierprojekt erfolgreich pr¨asentiert werden.
Scheinkriterien
Ahnlich wie bei “Algorithmischer Mathematik 1”, Homepage:¨
http://www.math.uni-magdeburg.de/institute/imo/teaching/sose18/algomat2/
Teil 1:
I voraussichtlich10Ubungsbl¨¨ atter, (mind.50 %der Punkte)
I (mindestens) 1 ¨Ubungsaufgabe korrekt an der Tafel
I Abgabe in2erGruppen
I Ublicherweise 4 Aufgaben: eine Programmieraufgabe, drei Beweisaufgaben.¨
I F¨ur dieProgrammieraufgabe(n)gelten die Hinweise aus dem ersten Semester, Abgabenan algomath1718@ovgu.de
Teil 2:
I Mitte/Ende MaiAusgabeProgrammierprojekt
I Bearbeitung in3erGruppen
I Mitte/Ende JuniAbgabe.
I Um den Schein zu erhalten muss das Programmierprojekt erfolgreich pr¨asentiert werden.
Scheinkriterien
Ahnlich wie bei “Algorithmischer Mathematik 1”, Homepage:¨
http://www.math.uni-magdeburg.de/institute/imo/teaching/sose18/algomat2/
Teil 1:
I voraussichtlich10Ubungsbl¨¨ atter, (mind.50 %der Punkte)
I (mindestens) 1 ¨Ubungsaufgabe korrekt an der Tafel
I Abgabe in2erGruppen
I Ublicherweise 4 Aufgaben: eine Programmieraufgabe, drei Beweisaufgaben.¨
I F¨ur dieProgrammieraufgabe(n)gelten die Hinweise aus dem ersten Semester, Abgabenan algomath1718@ovgu.de
Teil 2:
I Mitte/Ende MaiAusgabeProgrammierprojekt
I Bearbeitung in3erGruppen
I Mitte/Ende JuniAbgabe.
Sonstiges und Fragen
I 1. ¨Ubungsblatt nach der Vorlesung am 5. April
I Ubungsaufgaben werden immer 1 Woche nach Abgabe besprochen¨
I Ubung am¨ 1. Maiwird am 3. Mai als Groߨubung nachgeholt
I Wann wollt ihr mit der ¨Ubung beginnen?
I Andere Fragen?
Mail-Adressen:felix.jost@ovgu.de, clemens.zeile@ovgu.de
Datentyp class
Zus¨atzlich zu denvordefinierten Datentypen(int, doubleusw.) kann man mit Klassen (Schl¨usselwortclass) eigene Typen definieren.
Diese bezeichnet man alsObjekte, da Klassen nicht nurDatenenthalten sondern auchMethoden, um diese zu verarbeiten und weiterzugeben.
Beispiele:
I Auto
I Hund
I Matrix
I Kunden einer Bank
I . . .
Datentyp class
Zus¨atzlich zu denvordefinierten Datentypen(int, doubleusw.) kann man mit Klassen (Schl¨usselwortclass) eigene Typen definieren.
Diese bezeichnet man alsObjekte, da Klassen nicht nurDatenenthalten sondern auchMethoden, um diese zu verarbeiten und weiterzugeben.
Beispiele:
I Auto
I Hund
I Matrix
I Kunden einer Bank
I . . .
Datentyp class
Zus¨atzlich zu denvordefinierten Datentypen(int, doubleusw.) kann man mit Klassen (Schl¨usselwortclass) eigene Typen definieren.
Diese bezeichnet man alsObjekte, da Klassen nicht nurDatenenthalten sondern auchMethoden, um diese zu verarbeiten und weiterzugeben.
Beispiele:
I Auto
I Hund
I Matrix
I Kunden einer Bank
I . . .
Motivation
I Realit¨at ist objektorientiert
I Vereinfachung und Kapselung
I Wiederverwendbarkeit
I Leichte Erweiterbarkeit
I Parallelisierbarer Entwicklungsprozess
Aufbau und Eigenschaften eines Objekts
I von Außen
I Objekt hat ¨offentliche Eigenschaften (Attribute)
I Objekt besitzt ¨offentlich definierte Funktionen (Methoden), welche sich auf seine Eigenschaften auswirken
I von Innen
I Verarbeiten der ¨uber Funktionsaufrufe eingehenden Befehle (Botschaft) zur ¨Anderungen der Eigenschaften
I “Interne” Funktionen und Eigenschaften, zur Wahrnehmung der ¨außeren Funktion
Aufbau und Eigenschaften eines Objekts
I von Außen
I Objekt hat ¨offentliche Eigenschaften (Attribute)
I Objekt besitzt ¨offentlich definierte Funktionen (Methoden), welche sich auf seine Eigenschaften auswirken
I von Innen
I Verarbeiten der ¨uber Funktionsaufrufe eingehenden Befehle (Botschaft) zur ¨Anderungen der Eigenschaften
I “Interne” Funktionen und Eigenschaften, zur Wahrnehmung der ¨außeren Funktion
Aufbau und Eigenschaften des Objekts Auto
I von Außen zug¨anglich
I Attribut
”Geschwindigkeit“ (nur lesend)
I Attribut Farbe: Rot
I Attribut Leistung: 160 kW
I Methoden
”beschleunigen“ und
”bremsen“
I definierte Funktionsweise
I Aufruf der Methoden ver¨andert die Geschwindigkeit
I von Innen
I Wird
”beschleunigen“ aufgerufen, mehr Kraftstoff an den Motor liefern
I Wird
”bremsen“ aufgerufen, Bremsanlage bet¨atigen
Folgen dieses Aufbaus f¨ ur das Objekt Auto
I F¨ur den externen Benutzer von
”Auto“ ist es vollkommen egal was passiert wenn er”beschleunigen“ m¨ochte
I Jedes
”Auto“-Objekt MUSS die Methoden
”beschleunigen“ und
”bremsen“
verstehen
I Der Aufruf der Methode
”beschleunigen“ ist von der konkreten Implementierung von”Auto“ vollkommen unabh¨angig
I ”Auto“-Objekte k¨onnen innerhalb des Programms beliebig ausgetauscht werden
Begriffe: Objekt – Klasse – Instanz
Bei der Arbeit mit Objekten unterscheidet man:
I Klasse:
I Zusammenfassungvon ¨ahnlichen Objekten, welche sich nur in Ihren Attributen unterscheiden
I Charakterisiertdie Objekte
I Schablone/ Prototyp
I Instanz
I Konkretes Objekt dasbestimmte Attributwerteaufweist
Beispiel class ”Dog”
1 #i n c l u d e <i o s t r e a m>
2
3 u s i n g n a m e s p a c e s t d ; 4
5
6 c l a s s Dog 7 {
8 p u b l i c:
9 i n t GetAge ( ) ;
10 v o i d S e t A g e (i n t a g e ) ; 11 p r i v a t e:
12 i n t i t s A g e ;
13 };
14
15 i n t Dog : : GetAge ( ) 16 {
17 r e t u r n i t s A g e ; 18 }
19
20 v o i d Dog : : S e t A g e (i n t a g e ) 21 {
22 i t s A g e = a g e ; 23 }
24
i n t main ( )
Erstellen und Zerst¨ oren
Konstruktor:
I Dienen derErstinitialisierungvon Daten einer Klasse
I Klassenmethode, kein R¨uckgabewert, Name wie Klasse selbst
I Standardkonstruktor(ohne Argumente), Parameterkonstruktor ( ¨Ubergabe Parameter),. . .
I Compiler erzeugt automatisch Standardkonstruktor
I Automatischaufgerufen,wenneinObjekt erzeugtwird
Destruktor:
I Jede Klasse besitzt genau einen Destruktor
I Hauptaufgabe:Freigeben von dynamischem Speicherplatzder Klasse
I Hat den Namen der Klasse, wobeiTilde(∼) vorangestellt
I Keine Argumente, keinen R¨uckgabewert
I Compiler erzeugt automatisch Standarddestruktor
Erstellen und Zerst¨ oren
Konstruktor:
I Dienen derErstinitialisierungvon Daten einer Klasse
I Klassenmethode, kein R¨uckgabewert, Name wie Klasse selbst
I Standardkonstruktor(ohne Argumente), Parameterkonstruktor ( ¨Ubergabe Parameter),. . .
I Compiler erzeugt automatisch Standardkonstruktor
I Automatischaufgerufen,wenneinObjekt erzeugtwird
Destruktor:
I Jede Klasse besitzt genau einen Destruktor
I Hauptaufgabe:Freigeben von dynamischem Speicherplatzder Klasse
I Hat den Namen der Klasse, wobeiTilde(∼) vorangestellt
Beispiel Konstruktor/Destruktor
1 #i n c l u d e <i o s t r e a m>
2 u s i n g n a m e s p a c e s t d ; 3
4 c l a s s Dog 5 { 6 p u b l i c:
7 Dog ( i n t i n i t i a l A g e ) ;
8 ˜Dog ( ) ;
9 v o i d s e t A g e (i n t a g e )
10 {
11 i t s A g e=a g e ;
12 };
13
14 i n t g e t A g e ( )
15 {
16 r e t u r n i t s A g e ;
17 }
18
19 p r i v a t e:
20 i n t i t s A g e ;
21 };
22
23 Dog : : Dog (i n t i n i t i a l A g e ){ // E r s e t z e S t a n d a r d k o n s t r u k t o r 24 i t s A g e = i n i t i a l A g e ;
25 };
26
Zeiger
I Variable, die Speicheradresse enth¨alt
I Ber¨ucksichtigung des dort abgelegten Datentyps, Beispiel:int * p;
I Eindeutig addressierten Speicherstelle f¨ur jede Variable eines Programms
I Ermittlung der Adresse einer Variable mittels ”&“, Beispiel:p = &a;
I Dereferenzoperator (Zugriffsoperator) *<pointer>erlaubt (indirekten) Zugriff auf Daten auf welche der Pointer zeigt
I Zeiger auf Strukturen/Klassen:(*p).Attributundp->Attribut¨aquivalent
Zeiger-Beispiel
1 // P o i n t e r o p e r a t o r s 2 #i n c l u d e <i o s t r e a m>
3 u s i n g n a m e s p a c e s t d ; 4
5 i n t main ( ) 6 { 7
8 i n t i , j , ∗p i n t ; 9
10 i = 1 0 ; // i = 10
11 p i n t = & i ; // p o i n t e r i n i t i a l i z a t i o n 12 j=∗p i n t ; // a c c e s s on i n t
13
14 // c o u t<<” A d r e s s e von i : ”<<& i << e n d l ;
15 // c o u t<<” I n h a l t von p i n t ( a d r e s s e a u f i ) : ”<< p i n t <<e n d l ; 16 // c o u t<<” Z e i g e r von p i n t : ”<<∗p i n t << e n d l ;
17
18 // i = 5 ; 19
20 // c o u t<<” Z e i g e r von p i n t : ”<<∗p i n t << e n d l ; 21
22 // c o u t<<” j : ”<< j << e n d l ; 23
24 ∗p i n t = 0 ; // i = 0 c o u t<<” i : ”<< i <<e n d l ;
Dynamische Speicherallokation: new und delete
I Keywordnew: Neue Objekte auf dem Freispeicher erzeugen
I R¨uckgabewert ist eine Speicheradresse, welcher man einem Zeiger zuweisen muss
I Beispiel:int* px = new int;
I deletegibt den Speicherbereich wieder frei
(bei Programmende, Geltungsbereichende oder expliziter Aufruf)
I F¨ur jeden Aufruf vonnewkorrespondierender Aufruf vondelete
I Dynamische Speicherallokation: Gr¨oße wird erst sp¨ater festgelegt
I Beispiel: Matrix
Matrix-Beispiel
1 // Dynamic a r r a y 2D 2 #i n c l u d e <i o s t r e a m>
3 u s i n g n a m e s p a c e s t d ; 4
5 i n t main ( ) 6 {
7 i n t n , m, i , j ;
8 d o u b l e ∗∗b ; // p o i n t e r a t p o i n t e r s a t d o u b l e 9
10 c o u t<<” E i n g a b e Z e i l e n n : ”; c i n>>n ; 11 c o u t<<” E i n g a b e S p a l t e n m : ”; c i n>>m;
12
13 b =new d o u b l e∗ [ n ] ; // A l l o c a t e row p o i n t e r s 14
15 f o r ( i = 0 ; i <n ; i ++) {
16 b [ i ] =new d o u b l e[m ] ; // A l l o c a t e r o w s
17 }
18
19 f o r ( i = 0 ; i <n ; i++ ) { // i n i t i a l i z e b
20 f o r ( j = 0 ; j<m; j ++){
21 b [ i ] [ j ] = ( i +1)∗( j +1) ;
22 }
23 }
24 // . . .
f o r ( i = n−1; i>= 0 ; i−−){
Klassen-Beispiel
1 c l a s s tDatum { 2 p u b l i c:
3 tDatum ( ) ;
4 ˜ tDatum ( ) ; 5 };
6 tDatum : : tDatum ( ){
7 i n t Tag =0;
8 i n t Monat =0;
9 i n t J a h r =0;
10 };
11 tDatum : : ˜ tDatum ( ){ 12 };
13 // a l t e r n a t i v e i m p l e m e n t i e r u n g 14 c l a s s tDatum{
15 p u b l i c: 16 tDatum ( ){
17 i n t Tag =0;
18 i n t Monat =0;
19 i n t J a h r =0;
20 };
21 ˜ tDatum ( ){
22 };
23 };
24 i n t main ( ){ 25 tDatum h e u t e ;
Referenzen
I Alias(Pseudoname) f¨ur eine Variable
I Kann genauso wie Variable benutzt werden
I Deklaration mit Hilfe des ”&”Operators
I Adresse der Referenz identisch mit Adresse des Ziels der Referenz
I Kein zus¨atzlicher Speicher
I Verwendung u.a. zurParameter¨ubergabean Funktionen und Vereinfachung komplizierter Datenstrukturen
Referenzen-Beispiel
1 #i n c l u d e <i o s t r e a m>
2
3 u s i n g n a m e s p a c e s t d ; 4 i n t main ( )
5 { 6 i n t a , b ;
7 i n t & r e f = a ; // R e f e r e n z e n m u e s s e n a u f e t w a s z e i g e n
8 a = 5 ; // r e f = a = 5
9 b = 6 ; 10
11 c o u t<<” r e f : ”<< r e f<<” a : ”<<a<<” b : ”<<b<< e n d l ; 12
13 a = 8 ;
14 c o u t<<” r e f : ”<< r e f<<” a : ”<<a<<” b : ”<<b<< e n d l ; 15
16
17 r e f = b ;
18 c o u t<<” r e f : ”<< r e f<<” a : ”<<a<<” b : ”<<b<< e n d l ; 19
20 b =7;
21 c o u t<<” r e f : ”<< r e f<<” a : ”<<a<<” b : ”<<b<< e n d l ; 22
Aufgabe 2
1 // 1 . ) W e l c h e r F e h l e r i s t h i e r e i n g e b a u t ? 2 // 2 . ) Welche Werte h a b e n a , b , c , ∗d am Ende ? 3
4
5 #i n c l u d e <i o s t r e a m>
6
7 u s i n g n a m e s p a c e s t d ; 8
9 i n t main ( ) 10 { 11 i n t a ; 12 i n t& b = a ; 13 i n t& c = b ; 14 i n t ∗d = &c ; 15 a = 6 ; 16 ∗b = 7 ; 17 ∗d = 8 ; 18
19 r e t u r n 0 ; 20 }
Weitergehende Konzepte
I Vererbung
(OberklasseLandfahrzeug, KlassePKW erbt Eigenschaften von Klasse Landfahrzeug)
I Befreundete Klassen
(Gew¨ahre einer Nicht-Member-Funktion der Klassematrix Zugriff auf den privaten Teil einer Klassevektor)
I Templates
(Eine Klasse mit einem variablen Typen, der vom Nutzer selbst definiert wird sobald er das Template benutzt)
I Smart pointer
(abstrakter Datentyp, der einen Zeiger nachbildet und zus¨atzlich weitere F¨ahigkeiten besitzt, wie automatische Speicherverwaltung)
Definition Graph
Definition 4.1
Ein GraphG ist ein geordnetes Paar (V,E), wobeiV eine Menge von Knoten (englisch vertex/vertices, oft auch Ecken genannt) undEeine Menge von Kanten (engl. edge/edges, manchmal auch B¨ogen genannt) bezeichnet undE⊂V×V erf¨ullt sein soll.
Bemerkung: Unterscheidung zwischen gerichteten und ungerichteten Graphen
Beispiele:
I Knoten sind verschiedene St¨adte, Kanten Straßen.
I U-Bahn-Netz: Stationen und Verbindungen
I . . .
Definition Graph
Definition 4.1
Ein GraphG ist ein geordnetes Paar (V,E), wobeiV eine Menge von Knoten (englisch vertex/vertices, oft auch Ecken genannt) undEeine Menge von Kanten (engl. edge/edges, manchmal auch B¨ogen genannt) bezeichnet undE⊂V×V erf¨ullt sein soll.
Bemerkung: Unterscheidung zwischen gerichteten und ungerichteten Graphen
Beispiele:
I Knoten sind verschiedene St¨adte, Kanten Straßen.
I U-Bahn-Netz: Stationen und Verbindungen
I . . .
Definition Graph
Definition 4.1
Ein GraphG ist ein geordnetes Paar (V,E), wobeiV eine Menge von Knoten (englisch vertex/vertices, oft auch Ecken genannt) undEeine Menge von Kanten (engl. edge/edges, manchmal auch B¨ogen genannt) bezeichnet undE⊂V×V erf¨ullt sein soll.
Bemerkung: Unterscheidung zwischen gerichteten und ungerichteten Graphen
Adjazenzmatrix
Definition 4.2
SeiG = (V,E) ein Graph. Die zugeh¨orige AdjazenzmatrixA= (ai,j), i,j∈V ist durch seine Eintr¨age definiert als
ai,j=
1, falls (i,j)∈E,
0, sonst. (4.1)
Ubungsaufgabe 3 ¨
Implementieren Sie den KlassentypGraph. ¨Uberlegen Sie sich sinnvolle Variablen und Methoden. Insbesondere soll es m¨oglich sein Kanten ¨uber eine Adjazenzmatrix zu definieren und diese wiederum ausgeben zu lassen.