Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer &...
-
Upload
yngvi-streifel -
Category
Documents
-
view
109 -
download
0
Transcript of Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer &...
![Page 1: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/1.jpg)
Willkommen!
Informatik I/II PVK
![Page 2: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/2.jpg)
Informatik I/II PVK 2
Über mich
Name: Benjamin Knecht Vertiefungsrichtung: „Computer & Netzwerke“ Hilfsassistent für Technische Informatik I/II Projektleiter für Orxonox (www.orxonox.net) Verwendung von Programmiersprachen im
Studium 1. Semesterarbeit (Symbian C) 2. Semesterarbeit (Java) Masterarbeit (C++)
![Page 3: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/3.jpg)
Informatik I/II PVK 3
Kursablauf
Montag: Grundlagen in C/C++ Dienstag: Objektorientierung in C++ und
mögliche Prüfungsaufgabe Mittwoch: Einführung in Java und
Unterschiede zu C++ Donnerstag: Konzepte der OO-
Programmierung (Bäume, Backtracking, Spieltheorie etc.)
Freitag: Prüfungsaufgaben für Informatik II, Fragen und Vertiefung Slides sind auf: www.benjaminknecht.ch/info-pvk
![Page 4: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/4.jpg)
Informatik I/II PVK 4
Was wird besprochen?
Inhalt der Zusammenfassung Grundlagen zum Verständnis von C/C++
und Java Programmierkonzepte Prüfungsaufgaben Falls erwünscht Übungsaufgaben
![Page 5: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/5.jpg)
Informatik I/II PVK 5
Fragen
Fragen bitte sofort stellen bei … Unklarheiten Fehler meinerseits
Anregungen zum Kursablauf mehr Theorie? mehr eigenständiges Arbeiten? Besprechung bestimmter Übungen
![Page 6: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/6.jpg)
Informatik I/II PVK 6
Ablauf heute
Allgemeines zum Programmieren Variablen und Basistypen Operatoren Schleifen Arrays und Pointer
char-Array (string) Referenzen
Funktionen
![Page 7: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/7.jpg)
Informatik I/II PVK 7
Programmieren allgemein
Implementierung von Algorithmen Berechnungen Such-Algorithmen
Verarbeitung von Daten Datenbanken
Simulieren von Abläufen Spiele etc...
![Page 8: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/8.jpg)
Informatik I/II PVK 8
Erstellung eines Programms
Compiler
Quellcode
Assembler
Assemblerprogramm
Maschinencode
Linker
Ausführbares Programm
Lader/Binder
Programm im Speicherbereich
Instruktionen
...ProgramCounter
Variablen
...
Bibliotheken
Hauptspeicher
![Page 9: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/9.jpg)
Informatik I/II PVK 9
Compiler – gcc und g++
Compiler für C++ (g++) Kompilieren
g++ -g –c file1.cpp –I ~/include/ Linken
g++ -Wall -o myprog myprog.o file1.o –L ~/lib/ -lmylib
![Page 10: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/10.jpg)
Informatik I/II PVK 10
Fehler
Kompilierfehler (z.B.: Syntaxfehler) Linkerfehler (fehlende Bibliothek) Laufzeitfehler (runtime error)
Fehler der zur Zeit des Kompilierens nicht klar war
segmentation fault (Fehler bei Speicherzugriff)
![Page 11: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/11.jpg)
Informatik I/II PVK 11
Variablen & Basistypen
Wir kennen folgende Basistypen char char c = 'A'; (ASCII-Satz) int int i = 100231564; double double d = 3.123456; float float f = 3.23f; bool bool isTrue = true;
Speicherplatz der Datentypen abhängig von Betriebssystem
sizeof Operator findet Grösse des Typs Rundungsungenauigkeit bei Fliesskommazahlen
![Page 12: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/12.jpg)
Informatik I/II PVK 12
Definitionsbereiche
Befinden sich in <climits> Definiert als CHAR_MIN, SCHAR_MAX, UINT_MIN, DOUBLE_MAX etc.
unsigned und signed Erstes Bit wird für Vorzeichen benötigt
Variablen laufen über kann nur schwer geprüft werden
![Page 13: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/13.jpg)
Informatik I/II PVK 13
Namenskonvention
Variablennamen dürfen '_', 'a-z', 'A-Z' und '0-9' enthalten.
Verboten: Zahlen am Anfang „__“ am Anfang (zwei '_') „_Grossbuchstaben“ Keywords
Empfohlen wird camelCase für Variablen und für Klassennamen CamelCase
Mehr gute Styletipps: http://www.orxonox.net/wiki/c++_styleguide
![Page 14: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/14.jpg)
Informatik I/II PVK 14
Typenkonversion
Implizite Konvertierung int i = 3.425; // i == 3
Explizite Konvertierung (float)15/4
Typenkonversion hat höhere Präzendenz als /
![Page 15: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/15.jpg)
Informatik I/II PVK 15
Null
Basistypen haben alle einen speziellen Null-Wert
int 0 double 0.0 float 0.0f char '\0' bool false (Pointer) null
![Page 16: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/16.jpg)
Informatik I/II PVK 16
Arithmetische Operatoren
5 bekannte arithmetische Operatoren +, -, *, /, %
Lesevorgang von links nach rechts Unterschiedliche Präzedenz
*, /, % binden stärker als +, - Präzedenzliste in Zusammenfassung
![Page 17: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/17.jpg)
Informatik I/II PVK 17
Verkürzte Operatoren
++, --, +=, *= etc. i++; ist eine Kurzform von i=i+1; i--; entspricht i=i-1;
achte auf Unterschied von i++ und ++i
i+=3; ist eine Kurzform von i=i+3; etc.
![Page 18: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/18.jpg)
Informatik I/II PVK 18
Anweisungen
Werte werden kopiert mit = int a = 3; int b = a; // Kopie von Integer
Deklaration schafft bereits Speicherplatz, aber noch undefiniert
Wird erst bei grösseren Objekten wichtig
![Page 19: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/19.jpg)
Informatik I/II PVK 19
Vergleichsoperatoren
Vergleichsoperatoren erzeugen einen boolschen Ausdruck
==, !=, <, <=, >, >= lässt sich immer nach true oder false
auswerten bool tiny = number <= 0.000001;
true → 1 false → 0 0 → false != 0 → true Achtung == nie mit = verwechseln!
![Page 20: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/20.jpg)
Informatik I/II PVK 20
Logische Operatoren
Logische Operatoren verknüpfen boolsche Ausdrücke
&&, ||, ! bool b = 17 < a && a < 30;
auf keinen Fall 17 < a < 30 ist immer true
b != 0 && a/b < 1.3 sollte b == 0 gelten, teilen wir bei a/b durch 0 obiger Ausdruck wird aber fehlerfrei
ausgewertet, weil ein false auf der linken Seite weiteres Auswerten erübrigt
![Page 21: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/21.jpg)
Informatik I/II PVK 21
Bit Operatoren
Bitoperatoren verändern Werte auf Bitebene
<<, >>, |, &, ^, ~ es gibt auch verkürzte Versionen (<<= etc.) i >>= 1; entspricht i /= 2; Vorsicht: ^ ist nicht für Exponenten sondern
XOR-Operation ~ nicht mit boolschem ! verwechseln
![Page 22: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/22.jpg)
Informatik I/II PVK 22
Scopes
Scopes werden mit {, } eingegrenzt Variablen sind nur innerhalb ihres Scopes
sichtbar Scopes können beliebig verschachtelt werden Existieren Variablen mit gleichem Namen, so
zählt die „lokalere“ Variable
![Page 23: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/23.jpg)
Informatik I/II PVK 23
Scopes Beispiel
int a = 3;int main(){
double b = a*3.14159;{
char a = 'h';b -= a;b += ::a;
}a++;return 0;
}
Obwohl die Variable a mehrmals deklariert wird, ist folgender Code korrekt.
Wegen dem Scope ist klar, für welche Bereiche a ein int ist und wann ein char
::a holt vom Scope versteckte, globale Variablen hervor
![Page 24: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/24.jpg)
Informatik I/II PVK 24
if-else Statements
if (Bedingung1)
{
Anweisung1; // Falls Bedingung1 wahr
}
else
{
Anweisung2; // Falls Bedingung1 falsch
}
![Page 25: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/25.jpg)
Informatik I/II PVK 25
if-else Statements
Vorsicht bei einzeiligen if-Statements und Verschachtelung
if (x < 0) if (y != 0) // do something else if (y != 0) // do something else
![Page 26: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/26.jpg)
Informatik I/II PVK 26
if-else Statements
else gehört zu zweitem if if (x < 0)
if (y != 0) // do something else if (y != 0) // do something else
![Page 27: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/27.jpg)
Informatik I/II PVK 27
Inline if
Wenn man einen Ausdruck schnell testen will
(Bedingung) ? wahr : falsch Bsp: int a = (x > 0) ? x : 0;
Gilt aber generell als schlechter Programmierstil
![Page 28: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/28.jpg)
Informatik I/II PVK 28
switch Statement switch (Integerausdruck) {
case Konstante1:
Anweisung1;
break;
case Konstante2:
case Konstante3:
Anweisung2;
break;
default:
Standardanweisung;
}
Integerausdruck kann auch ein char sein
![Page 29: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/29.jpg)
Informatik I/II PVK 29
for, while und do-while Schleife
for (Initialisierung; Bedingung; Update) {} while (Bedingung) {} do {} while (Bedingung)
for (int i = 0, int j = 1; j < size; i++, j++)
Ist Bedingung leer, so ist sie immer true
Vorzeitiges abbrechen (break) oder weiterfahren (continue) möglich. Ansonsten Ausführung bis Bedingung falsch.
Alle Schleifen sind gegenseitig austauschbar
![Page 30: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/30.jpg)
Informatik I/II PVK 30
Arrays
Arrays sind fixe Bereiche einer konstanten Länge und eines beliebigen Typs im Speicher
Deshalb müssen Arrays auch mit einer Konstanten deklariert/initialisiert werden
int days[30]; // 30 ist konstant int days[30] = {20, 21, 24, 32, 24, 20, 16}; int days[] = {20, 21, 24}; // size 3
Der Index des Arrays geht von 0 bis length-1 int t = (days[0] + days[1])/2; Wird auf ein Element ausserhalb der Grösse des
Arrays zugegriffen wird ein Laufzeitfehler ausgelöst
![Page 31: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/31.jpg)
Informatik I/II PVK 31
Mehrdimensionale Arrays
Arrays können auch beliebig mehrdimensional sein
int test[][2] = {{1,2},{2,3},{4,5}}; Grösse des Arrays kann aber nur für erste
Dimension wie oben automatisch erkannt werden
int test[][] = {{1,2},{4,5}}; Geht also nicht
![Page 32: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/32.jpg)
Informatik I/II PVK 32
Char-Arrays
Eine besondere Sorte von Arrays sind die char-Arrays oder Strings
char name[] = „Stefan“; Strings sind terminiert mit dem null-char '\0'
Das obere Array hat also die Länge 7 Vorsicht: 'a' + 'b' wird nicht zu „ab“.
Stattdessen werden ASCII werte addiert.
Weil char-Arrays so grauenhaft sind, wird in C++ ein string Object zur Verfügung gestellt
char-Arrays sind in der Regel also zu vermeiden
![Page 33: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/33.jpg)
Informatik I/II PVK 33
Pointer Ein Pointer zeigt irgendwo auf den Speicher
Variable Funktion etc.
int number = 100;int* pt = &number;*pt = 200;
& liefert die Speicheradresse einer beliebigen Variable
Mit * kann man den Pointer wieder dereferenzieren und auf den Wert an der Speicheradresse zugreifen.
Je nach Architektur ist ein Pointer nur wenige Bytes gross (Adresse im Speicher)
![Page 34: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/34.jpg)
Informatik I/II PVK 34
Pointer 2
Pointer sind meistens von einem Datentyp. Es gibt aber auch den void-Pointer
(void)* pt = (void*)&a; Oder aber einen Pointer auf einen Pointer
int a = 5;int* b = &a;int** c = &b;
Vorsicht bei solchen Deklarationen double *p1, p2;
Die Pointer Variable hat jedoch ihren eigenen Typ
![Page 35: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/35.jpg)
Informatik I/II PVK 35
Arrays sind ja nur Pointer
Die Variable des Arrays zeigt auf das erste Element im Speicher
int a[] = {1,5,9,4,8,6}
1
5
9
4
8
6
...
a
![Page 36: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/36.jpg)
Informatik I/II PVK 36
Arrays sind ja nur Pointer
Die Variable des Arrays zeigt auf das erste Element im Speicher
int a[] = {1,5,9,4,8,6}
1
5
9
4
8
6
...
a
int* b = a;
,b
![Page 37: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/37.jpg)
Informatik I/II PVK 37
Arrays sind ja nur Pointer
Die Variable des Arrays zeigt auf das erste Element im Speicher
int a[] = {1,5,9,4,8,6}
1
5
9
4
8
6
...
a
int* b = a;b = &a[3];
b
![Page 38: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/38.jpg)
Informatik I/II PVK 38
Arrays sind ja nur Pointer
Die Variable des Arrays zeigt auf das erste Element im Speicher
int a[] = {1,5,9,4,8,6}
1
5
9
8
6
...
a
int* b = a;b = &a[3];
b*b = 10;10
Es können also mehrere Pointer auf ein Ziel zeigen oder auf Teile von Objekten
![Page 39: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/39.jpg)
Informatik I/II PVK 39
Referenzen
Eine Referenz ist ein Alias einer anderer Variable (also ein anderer Name, aber die gleiche Stelle im Speicher)
int fussball = 11;int& soccer = fussball; keine Kopie des Wertes
Eine Referenz muss beim Deklarieren initialisiert werden und kann ihre Speicheradresse nachher nicht mehr ändern
Eine Referenz verhält sich wie ein Pointer der bereits dereferenziert wurde.
![Page 40: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/40.jpg)
Informatik I/II PVK 40
Dynamische Speicherverwaltung
Bisher war bereits zu Compilezeit klar wieviel Speicher genutzt wird.
Man kann aber auch zur Laufzeit Speicher allozieren.
Dies macht man mit dem new-Operator double* p_value = new double;
Der new-Operator gibt immer einen Pointer des erzeugten Typs zurück. Also die Adresse des allozierten Speicher.
![Page 41: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/41.jpg)
Informatik I/II PVK 41
Dynamische Speicherverwaltung
Speicher der mit new alloziert wurde wird nicht mehr am Ende des Scopes freigegeben.
Deshalb muss der Programmierer alles was er mit new erzeugt hat irgendwann auch selbst wieder mit delete löschen.
Ansonsten gibt es Memory Leaks double* p_value = new double;...delete p_value;
![Page 42: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/42.jpg)
Informatik I/II PVK 42
Dynamische Arrays
Arrays können jetzt auch dynamisch erstellt werden (also nicht mit konstanter Länge)
int* a_ptr = new int[10]; delete [] a_ptr;
Alle Pointer (ausser void-Pointer) kann man inkrementieren
a_ptr+1 == &a_ptr[1] *(a_ptr+2) == a_ptr[2]
![Page 43: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/43.jpg)
Informatik I/II PVK 43
Funktionen
typenName funktionsName (argumentenListe)
{
Anweisungen;
return value;
}
Sowohl typenName als auch argumentenListe kann void sein
Bei einem Funktionsaufruf werden Argumente und Rückgabewert hin und her kopiert.
![Page 44: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/44.jpg)
Informatik I/II PVK 44
Inline Funktionen
Bei einem konventionellen Funktionsaufruf passiert dies:
Speichern der aktuellen Adresse (für Rücksprung) Sichern von lokalen Variablen Kopieren der Argumente Abarbeiten der Funktion Kopieren des return-values Rücksprung Wiederherstellung des Ausgangszustandes
Deshalb gibt es inline-Funktionen, welche direkt in den Code kopiert werden.
inline double square(double x) { return x*x; }
![Page 45: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/45.jpg)
Informatik I/II PVK 45
Call by Value
double cube(double x)
{
return x*x*x;} Bei kleinen Werten wie double kein Problem, aber
was ist mit grösseren Objekten wie zum Beispiel Arrays?
![Page 46: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/46.jpg)
Informatik I/II PVK 46
Functioncall für Arrays
int smallest(int arr[]); Da ein Array aber auch ein Pointer ist könnte man
das auch so schreiben: int smallest(int* arr);
Das gilt natürlich nicht nur für Arrays sondern auch für Pointer allgemein.
Dieser Aufruf kopiert das Array nicht, sondern nur die Adresse
Das heisst aber auch, dass alle Veränderungen auf den Originaldaten stattfinden!
![Page 47: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/47.jpg)
Informatik I/II PVK 47
Call by Reference
int devide(double& x, double q) {
if (q != 0) {x /= q;return 0;
}return 1;
} Ändert den Originalwert von x x muss nicht dereferenziert werden Rückgabewert gibt an, ob die Operation geglückt
ist
![Page 48: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/48.jpg)
Informatik I/II PVK 48
Default Argumente
double pow(double x, int e = 2); Defaultwerte werden nur in den Prototypen
gesetzt.
Dies erzeugt eigentlich zwei Funktionen (eine mit und eine ohne das zweite Argument)
pow(2.0); // ist 2^2 (= 4) pow(2.0, 3); // ist 2^3 (= 8)
Defaultargumente müssen immer zuletzt stehen double pow(int e = 2, double x);
ist also nicht erlaubt
![Page 49: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/49.jpg)
Informatik I/II PVK 49
Functionpointer
Prototypen kennen wir ja schon: double f(double x);
Funktionspointer sind einfach Pointer auf den Speicher wo die Funktion sich befindet
double (*pf)(double); Dieser Functionpointer kann auf alle Funktionen
zeigen die einen double annehmen und einen double als Rückgabewert haben.
Ein Aufruf geht dann ganz einfach: pf = f; double result = pf(8.23);
![Page 50: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/50.jpg)
Informatik I/II PVK 50
Templates
Eine Funktion (oder sogar Klasse) kann für unterschiedliche Typen erzeugt werden.
template <class Any>void Swap(Any &a, Any &b){ … }
Beispiele dazu wären vector<> und list<>
Der Compiler erzeugt jeweils die Funktionen einzeln für jeden Typ on demand
![Page 51: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/51.jpg)
Informatik I/II PVK 51
Prüfungsaufgabe 1
Programmanalyse Meistens eine Funktion gegeben und deren
„Funktion“ gefragt. Vorgehen:
Verschiedene Werte ausprobieren und Resultate vergleichen
Array-Zustände mitnotieren Auf Syntax achten Keywords
![Page 52: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/52.jpg)
Informatik I/II PVK 52
Prüfungsaufgabe 1
Schreiben Sie für die folgenden drei Teilaufgaben jeweils den Inhalt des Arrays a in die dafür vorgesehene Tabelle. Die Werte des Arrays werden dabei von einer Teilaufgabe zur nächsten übertragen. Das Array a werde an der Adresse 100 angelegt.
int a [8] = {2,4,6,8,10,12,14,16};
a[3] = 5; *a = a[6];
a[6] = (int)a; int* b = &a[4];
for (int i=0; i<4; i++) b[i] = 2*a[i];
![Page 53: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/53.jpg)
Informatik I/II PVK 53
Lösung zu vorherigem Slide
2 4 6 5 10 12 14 16
14 4 6 5 10 12 100 16
14 4 6 5 28 8 12 10
![Page 54: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/54.jpg)
Informatik I/II PVK 54
Prüfungsaufgabe 1 (cont.)
Zu ermitteln ist der Inhalt von c direkt nach dem Aufruf von foo in main. Schreiben Sie das Resultat in die dafür vorgesehene Tabelle.
void foo(int src[], int dest[], int size) {
for (int i=0; i<size; i++) {
int a=0;
for (int i2=0; i2<=i; i2++) {
a = a+src[i2];}
dest[i] = a;
}
}
int main() {
int b[6] = {2,5,0,-4,-4,1};
int c[6] = {0,0,0,0,0,0};
foo(b,c,6);
return 0;
}
![Page 55: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/55.jpg)
Informatik I/II PVK 55
Lösung zu vorherigen Slide
2 7 7 3 -1 0
Jeweils die Summe der vorherigen Elemente des Ursprungsarrays
![Page 56: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/56.jpg)
Informatik I/II PVK 56
Prüfungsaufgabe 1 (cont.)
Zu wie vielen Lesezugriffen auf das Array b führt der obige Aufruf von foo(b,c,6)?
Die Funktion foo ist ineffizient implementiert. Schreiben Sie eine neue Funktion foo, mit der gleichen Funktionalität aber nur einer for-Schleife. Die Signatur ist bereits angegeben.
void foo(int src[], int dest[], int size)
{
//Insert your code here
![Page 57: Willkommen! Informatik I/II PVK. 2 Über mich Name: Benjamin Knecht Vertiefungsrichtung: Computer & Netzwerke Hilfsassistent für Technische Informatik.](https://reader036.fdocuments.net/reader036/viewer/2022081516/55204d8149795902118d37e8/html5/thumbnails/57.jpg)
Informatik I/II PVK 57
Lösung zu vorherigen Slide
1 + 2 + 3 + 4 + 5 + 6 = 21 Zugriffe auf das Array void foo(int src[], int dest[], int size)
{
int sum = 0;
for (int i = 0; i < size; i++)
{
sum += src[i];
dest[i] = sum;
}
}