informatik 1
DESCRIPTION
Informatik 1. Übung 5. Übung 5. Nachbesprechung. Korrekturen. Ich prüfe keine Syntax schreibt wenn was nicht kompiliert Lösungen müssen nicht perfekt sein Testat gibt es für ernst gemeinte Lösungsversuche Formatiert euren Code schön sonst geb ich mir auch keine Mühe - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/1.jpg)
Informatik 1
Übung 5
![Page 2: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/2.jpg)
NACHBESPRECHUNGÜbung 5
![Page 3: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/3.jpg)
Korrekturen
• Ich prüfe keine Syntax– schreibt wenn was nicht kompiliert
• Lösungen müssen nicht perfekt sein– Testat gibt es für ernst gemeinte Lösungsversuche
• Formatiert euren Code schön– sonst geb ich mir auch keine Mühe
• Musterlösungen anschauen
![Page 4: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/4.jpg)
Ich gebe nicht auf
• Code schön formatierenif (x > 0) { a = 1; b = 1;
// Kommentar. if (y > 0) { c = 1; } else { d = 1; }
e = 1;}
![Page 5: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/5.jpg)
Variablentyp
• Richtige Typen verwendenTyp Verwendung Werte
bool Wahrheitswert true, false
char/wchar_t Ein Zeichen 'a', 'b', ...
int Eine ganze Zahl 0, 1, ...
float/double Eine reelle Zahl 0.0, 0.1, ...
![Page 6: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/6.jpg)
Ganzzahldivision
• Auf Ganzzahl-Division achtenAusdruck Wert
1/10 0
1.0/10 0.1
1/10.0 0.1
![Page 7: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/7.jpg)
Charakter
• Buchstaben entsprechen Zahlen• Wenn möglich Buchstaben verwenden
bool isCapital = 'A' < c && c < 'Z'; bool isCapital = 65 < c && c < 90;
char c = 'A'; char c = 65;
if(antwort == 'y') if(antwort == 121)
![Page 8: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/8.jpg)
Identische Blöcke
• Copy-Paste vermeiden
if(i<10) { switch(i) { case 0: cout << "Null"; break; case 1: cout << "Eins"; break; }} else { switch(i%10) { case 0: cout << "Null"; break; case 1: cout << "Eins"; break; }}
string s;switch(i%10) { case 0: s = "Null"; break; case 1: s = "Eins"; break;}
if(i<10) { cout << s;} else { cout << s;}
![Page 9: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/9.jpg)
Division durch 0
• Arithmetische Operationen prüfen– Division durch 0– Logarithmus einer negativen Zahl– ...
• In if-Bedingung: als erstes prüfen– Vorzeitiger Abbruch der Auswertung
int x = 1;int y = 0;int z = x / y;
if(y!=0 && x/y > 1)
![Page 10: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/10.jpg)
Arithmetische Operationen
• CPU kann nur multiplizieren und addieren• xy, sin(x), √x, ... müssen berechnet werden– Iterative multiplikation (siehe Übung 4)– Tabellierte Werte– Gleichungssystem lösen– Taylorreihe– ...
![Page 11: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/11.jpg)
WIEDERHOLUNGVorlesung 5
![Page 12: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/12.jpg)
VARIABLENEinzelne Werte
![Page 13: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/13.jpg)
Variablen
• Variablen in Speicherzellen gespeichert• Jede Speicherzelle hat Adresse und Inhalt• Vereinfachtes Bespiel– Nur integer– Nur 7 Speicherzellen
![Page 14: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/14.jpg)
Variablen
• Variablen in Speicherzellen gespeichert• Jede Speicherzelle hat Adresse und Inhalt
Name Addresse Inhalt
0000
0001
0002
0003
0004
0005
0006
![Page 15: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/15.jpg)
Variablen
• Variablen in Speicherzellen gespeichert• Jede Speicherzelle hat Adresse und Inhalt
Name Addresse Inhalt
x 0000 ???
0001
0002
0003
0004
0005
0006
int x;
![Page 16: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/16.jpg)
Variablen
• Variablen in Speicherzellen gespeichert• Jede Speicherzelle hat Adresse und Inhalt
Name Addresse Inhalt
x 0000 10
0001
0002
0003
0004
0005
0006
int x;x = 10;
![Page 17: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/17.jpg)
Variablen
• Variablen in Speicherzellen gespeichert• Jede Speicherzelle hat Adresse und Inhalt
Name Addresse Inhalt
x 0000 10
y 0001 ???
0002
0003
0004
0005
0006
int x;x = 10;int y;
![Page 18: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/18.jpg)
Variablen
• Variablen in Speicherzellen gespeichert• Jede Speicherzelle hat Adresse und Inhalt
Name Addresse Inhalt
x 0000 10
y 0001 10
0002
0003
0004
0005
0006
int x;x = 10;int y;y = x;
![Page 19: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/19.jpg)
ARRAYSAufeinanderfolgende Werte
![Page 20: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/20.jpg)
Arrays
• Mehrere aufeinanderfolgende Zellen
Name Addresse Inhalt
x 0000 10
y 0001 10
z[0] 0002 ???
z[1] 0003 ???
0004
0005
0006
int x = 10;int y = 10;int z[2];
![Page 21: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/21.jpg)
Arrays
• Mehrere aufeinanderfolgende Zellen
Name Addresse Inhalt
x 0000 10
y 0001 10
z[0] 0002 20
z[1] 0003 30
0004
0005
0006
int x = 10;int y = 10;int z[2];z[0] = 20;z[1] = 30;
![Page 22: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/22.jpg)
POINTER (ZEIGER)Verweise auf Werte
![Page 23: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/23.jpg)
Pointer
• Pointer verweisen auf andere Speicherzellen• Wert vom Pointer– Adresse einer anderen Speicherzelle
// Variablen, welche auf eine andere Speicherzelle zeigt,// welche wiederum den gegebenen Typ speichert.typ* name;
![Page 24: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/24.jpg)
Pointer
• Pointer verweisen auf andere Speicherzellen• Wert vom Pointer– Adresse einer anderen Speicherzelle
int x; // x speichert eine ganze Zahlint* p; // p speichert die Adresse einer ganzen Zahlp = &x; // die Adresse von x wird in p gespeichert
// Variablen, welche auf eine andere Speicherzelle zeigt,// welche wiederum den gegebenen Typ speichert.typ* name;
![Page 25: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/25.jpg)
Pointer
• Pointer verweisen auf andere Speicherzellen
Name Addresse Inhalt
x 0000 10
y 0001 10
p 0002 ???
0003
0004
0005
0006
int x = 10;int y = 10;int* p;
![Page 26: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/26.jpg)
Pointer
• Pointer verweisen auf andere Speicherzellen
Name Addresse Inhalt
x 0000 10
y 0001 10
p 0002 [0001]
0003
0004
0005
0006
int x = 10;int y = 10;int* p;p = &y;
![Page 27: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/27.jpg)
Pointer
• NULL bedeutet „zeigt auf nichts“
Name Addresse Inhalt
x 0000 10
y 0001 10
p 0002 [NULL]
0003
0004
0005
0006
int x = 10;int y = 10;int* p;p = NULL;
![Page 28: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/28.jpg)
Pointer
• Pointer verweisen auf andere Speicherzellen• Dereferenzieren– Zugriff auf die adressierte Speicherzelle
int x;int* p = &x;*p = 10; // p zeigt auf x, also wird in x die 10 gespeichert
![Page 29: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/29.jpg)
Pointer
• Pointer verweisen auf andere Speicherzellen
Name Addresse Inhalt
x 0000 10
y 0001 10
p 0002 [0001]
0003
0004
0005
0006
int x = 10;int y = 10;int* p;p = &y;
![Page 30: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/30.jpg)
Pointer
• Pointer verweisen auf andere Speicherzellen
Name Addresse Inhalt
x 0000 10
y 0001 20
p 0002 [0001]
0003
0004
0005
0006
int x = 10;int y = 10;int* p;p = &y;*p = 20;
![Page 31: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/31.jpg)
Pointer
• &x– Adresse der Variablen x
• *x– Wert der Zelle, auf welche x zeigt– „dem Pfeil folgen“
![Page 32: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/32.jpg)
Pointer
• Beliebig viele Indirektionen
Name Addresse Inhalt
x 0000 10
px 0001 [0000]
ppx 0002 [0001]
pppx 0003 [0002]
0004
0005
0006
int x;int* px = &x;int** ppx = &px;int*** pppx = &ppx;
***pppx = 1;
![Page 33: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/33.jpg)
Pointer-Arithmetik
• Addition auf Adressen• Zeiger + konstante Zahl
Name Addresse Inhalt
x[0] 0000 10
x[1] 0001 10
p 0002 [0000]
q 0003 [0001]
0004
0005
0006
int x[2] = {10,10};int* p = &x;int* q = p+1;
![Page 34: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/34.jpg)
ARRAYS UND ZEIGERGemeinsamkeiten
![Page 35: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/35.jpg)
Arrays
• Name des Arrays = Zeiger auf die erste Zelle
int x[2];
int* p = x; // p zeigt auf das erste Element in xint* p = &(x[0]); // p zeigt auf das erste Element in x
![Page 36: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/36.jpg)
Arrays
• Array-Index = Pointer-Arithmetik
int x[2];
int x1 = x[1]; // x1 wird das zweite Element von x zugewiesenint x1 = *(x+1); // x1 wird das zweite Element von x zugewiesen
![Page 37: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/37.jpg)
LESEN VON ZEIGERN
![Page 38: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/38.jpg)
Leseweise
• Beim Variablennamen starten• Nach aussen arbeiten– nach rechts, dann nach links
const int * const x[2];
x ist ...
![Page 39: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/39.jpg)
Leseweise
• Beim Variablennamen starten• Nach aussen arbeiten– nach rechts, dann nach links
const int * const x[2];
x ist ein Array von zwei ...
![Page 40: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/40.jpg)
Leseweise
• Beim Variablennamen starten• Nach aussen arbeiten– nach rechts, dann nach links
const int * const x[2];
x ist ein Array von zwei konstanten ...
![Page 41: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/41.jpg)
Leseweise
• Beim Variablennamen starten• Nach aussen arbeiten– nach rechts, dann nach links
const int * const x[2];
x ist ein Array von zwei konstanten Zeigern ...
![Page 42: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/42.jpg)
Leseweise
• Beim Variablennamen starten• Nach aussen arbeiten– nach rechts, dann nach links
const int * const x[2];
x ist ein Array von zwei konstanten Zeigern auf ein integer...
![Page 43: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/43.jpg)
Leseweise
• Beim Variablennamen starten• Nach aussen arbeiten– nach rechts, dann nach links
const int * const x[2];
x ist ein Array von zwei konstanten Zeigern auf ein integer, der konstant ist
![Page 44: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/44.jpg)
DYNAMISCHER SPEICHER
![Page 45: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/45.jpg)
Speicher reservieren
• Operator new• Erstellt eine neue Speicherzelle– Typ muss angegeben werden– Gibt Zeiger auf die neue Zelle zurück
int* p;
// Erstellt Speicherplatz für einen neuen integer// p zeigt auf die neu angelegte Speicherzellep = new int;
![Page 46: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/46.jpg)
Speicher freigeben
• Operator delete• Löscht eine zuvor erstellte Speicherzelle– Achtung: Zeiger werden ungültig
// Erstellt Speicherplatz für einen neuen integerint* p = new int;
// Löscht die Speicherzelle, auf welche p zeigtdelete p;
// p zeigt hier immer noch auf die Speicherzelle, die nicht mehr gibt
![Page 47: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/47.jpg)
Speicher freigeben
• Operator delete• Löscht eine zuvor erstellte Speicherzelle– Achtung: Zeiger werden ungültig
// Erstellt Speicherplatz für einen neuen integerint* p = new int;
// Löscht die Speicherzelle, auf welche p zeigtdelete p;
// p zurücksetzenp = NULL;
![Page 48: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/48.jpg)
Arrays
• Arrays anlegen und freigeben
int N;
// Erstellt Speicherplatz für N neue integerint* p = new int[N];
// Zugriff mit und ohne Array-Syntaxp[1] = 10;*(p+1) = 10;
// Löscht alle Speicherzellendelete[] p;
![Page 49: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/49.jpg)
QUIZ
![Page 50: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/50.jpg)
Quiz
• Was gibt das Programm aus?
int x = 10;int y = 20;
cout << x;
![Page 51: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/51.jpg)
Quiz
• Was gibt das Programm aus?
int x = 10;int y = 20;int* p = &y;
cout << p;
![Page 52: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/52.jpg)
Quiz
• Was gibt das Programm aus?
int x = 10;int y = 20;int* p = &y;
cout << *p;
![Page 53: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/53.jpg)
Quiz
• Was gibt das Programm aus?
int x = 10;int y = 20;int* p;
cout << p;
![Page 54: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/54.jpg)
Quiz
• Was gibt das Programm aus?
int x = 10;int y = 20;int* p = &x;
*p = 11;p = &y;*p = 21;
cout << x;cout << y;
![Page 55: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/55.jpg)
Quiz
• Was gibt das Programm aus?
int x[2] = {10, 20};
cout << (x+1);
![Page 56: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/56.jpg)
Quiz
• Was gibt das Programm aus?
int x[2] = {10, 20};
cout << *x + 1;
![Page 57: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/57.jpg)
Quiz
• Was gibt das Programm aus?
int x[2] = {10, 20};
cout << *(x + 1);
![Page 58: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/58.jpg)
STRUCTSVariablenverbunde
![Page 59: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/59.jpg)
Structs
• Ein struct fasst mehrere Variablen zusammen• Definiert einen neuen Typ
// Definiere einen neuen Typ mit zwei integer-Elementenstruct vector2D { int x; int y;};
vector2d v;
![Page 60: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/60.jpg)
Structs
• Zugriff auf Elemente• „member“ auf Englisch
vector2D v;
v.x = 10;v.y = 10;
![Page 61: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/61.jpg)
Structs
• Zuweisung kopiert alle Elemente– Anderst als bei Arrays
vector2D v;vector2D w;
v = w;
![Page 62: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/62.jpg)
Structs
• Elemente vom Struct in benachbarten Zellen• Wie beim Array
Name Addresse Inhalt
v.x 0000 ???
v.y 0001 ???
0002
0003
0004
0005
0006
vector2D v;
![Page 63: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/63.jpg)
Structs
• Elemente vom Struct in benachbarten Zellen• Wie beim Array
Name Addresse Inhalt
v.x 0000 10
v.y 0001 20
0002
0003
0004
0005
0006
vector2D v;v.x = 10;v.y = 20;
![Page 64: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/64.jpg)
Structs und Zeiger
• Zeiger auf structs möglich• Verkürzte Syntax für Elementzugriff
vector2D v;vector2D* pv = &v;
(*pv).x = 10; // Setze Element „x“ vom referenzierten Vektor auf 10pv->x = 10; // Setze Element „x“ vom referenzierten Vektor auf 10
![Page 65: Informatik 1](https://reader035.vdocuments.pub/reader035/viewer/2022062409/5681491d550346895db65647/html5/thumbnails/65.jpg)
ÜBUNGSerie 6