Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Informatik 1 Übung 5. NACHBESPRECHUNG Übung 5 Korrekturen Ich prüfe keine Syntax – schreibt wenn was nicht kompiliert Lösungen müssen nicht perfekt sein.

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik 1 Übung 5. NACHBESPRECHUNG Übung 5 Korrekturen Ich prüfe keine Syntax – schreibt wenn was nicht kompiliert Lösungen müssen nicht perfekt sein."—  Präsentation transkript:

1 Informatik 1 Übung 5

2 NACHBESPRECHUNG Übung 5

3 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

4 Ich gebe nicht auf Code schön formatieren if (x > 0) { a = 1; b = 1; // Kommentar. if (y > 0) { c = 1; } else { d = 1; } e = 1; }

5 Variablentyp Richtige Typen verwenden TypVerwendungWerte boolWahrheitswerttrue, false char/wchar_tEin Zeichen'a', 'b',... intEine ganze Zahl0, 1,... float/doubleEine reelle Zahl0.0, 0.1,...

6 Ganzzahldivision Auf Ganzzahl-Division achten AusdruckWert 1/ / /

7 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)

8 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; }

9 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)

10 Arithmetische Operationen CPU kann nur multiplizieren und addieren x y, sin(x), x,... müssen berechnet werden – Iterative multiplikation (siehe Übung 4) – Tabellierte Werte – Gleichungssystem lösen – Taylorreihe –...

11 WIEDERHOLUNG Vorlesung 5

12 VARIABLEN Einzelne Werte

13 Variablen Variablen in Speicherzellen gespeichert Jede Speicherzelle hat Adresse und Inhalt Vereinfachtes Bespiel – Nur integer – Nur 7 Speicherzellen

14 Variablen Variablen in Speicherzellen gespeichert Jede Speicherzelle hat Adresse und Inhalt NameAddresseInhalt

15 Variablen Variablen in Speicherzellen gespeichert Jede Speicherzelle hat Adresse und Inhalt NameAddresseInhalt x0000??? int x;

16 Variablen Variablen in Speicherzellen gespeichert Jede Speicherzelle hat Adresse und Inhalt NameAddresseInhalt x int x; x = 10;

17 Variablen Variablen in Speicherzellen gespeichert Jede Speicherzelle hat Adresse und Inhalt NameAddresseInhalt x y0001??? int x; x = 10; int y;

18 Variablen Variablen in Speicherzellen gespeichert Jede Speicherzelle hat Adresse und Inhalt NameAddresseInhalt x y int x; x = 10; int y; y = x;

19 ARRAYS Aufeinanderfolgende Werte

20 Arrays Mehrere aufeinanderfolgende Zellen NameAddresseInhalt x y z[0]0002??? z[1]0003??? int x = 10; int y = 10; int z[2];

21 Arrays Mehrere aufeinanderfolgende Zellen NameAddresseInhalt x y z[0] z[1] int x = 10; int y = 10; int z[2]; z[0] = 20; z[1] = 30;

22 POINTER (ZEIGER) Verweise auf Werte

23 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;

24 Pointer Pointer verweisen auf andere Speicherzellen Wert vom Pointer – Adresse einer anderen Speicherzelle int x; // x speichert eine ganze Zahl int* p; // p speichert die Adresse einer ganzen Zahl p = &x; // die Adresse von x wird in p gespeichert // Variablen, welche auf eine andere Speicherzelle zeigt, // welche wiederum den gegebenen Typ speichert. typ* name;

25 Pointer Pointer verweisen auf andere Speicherzellen NameAddresseInhalt x y p0002??? int x = 10; int y = 10; int* p;

26 Pointer Pointer verweisen auf andere Speicherzellen NameAddresseInhalt x y p0002[0001] int x = 10; int y = 10; int* p; p = &y;

27 Pointer NULL bedeutet zeigt auf nichts NameAddresseInhalt x y p0002[NULL] int x = 10; int y = 10; int* p; p = NULL;

28 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

29 Pointer Pointer verweisen auf andere Speicherzellen NameAddresseInhalt x y p0002[0001] int x = 10; int y = 10; int* p; p = &y;

30 Pointer Pointer verweisen auf andere Speicherzellen NameAddresseInhalt x y p0002[0001] int x = 10; int y = 10; int* p; p = &y; *p = 20;

31 Pointer &x – Adresse der Variablen x *x – Wert der Zelle, auf welche x zeigt – dem Pfeil folgen

32 Pointer Beliebig viele Indirektionen NameAddresseInhalt x px0001[0000] ppx0002[0001] pppx0003[0002] int x; int* px = &x; int** ppx = &px; int*** pppx = &ppx; ***pppx = 1;

33 Pointer-Arithmetik Addition auf Adressen Zeiger + konstante Zahl NameAddresseInhalt x[0] x[1] p0002[0000] q0003[0001] int x[2] = {10,10}; int* p = &x; int* q = p+1;

34 ARRAYS UND ZEIGER Gemeinsamkeiten

35 Arrays Name des Arrays = Zeiger auf die erste Zelle int x[2]; int* p = x; // p zeigt auf das erste Element in x int* p = &(x[0]); // p zeigt auf das erste Element in x

36 Arrays Array-Index = Pointer-Arithmetik int x[2]; int x1 = x[1]; // x1 wird das zweite Element von x zugewiesen int x1 = *(x+1); // x1 wird das zweite Element von x zugewiesen

37 LESEN VON ZEIGERN

38 Leseweise Beim Variablennamen starten Nach aussen arbeiten – nach rechts, dann nach links const int * const x[2]; x ist...

39 Leseweise Beim Variablennamen starten Nach aussen arbeiten – nach rechts, dann nach links const int * const x[2]; x ist ein Array von zwei...

40 Leseweise Beim Variablennamen starten Nach aussen arbeiten – nach rechts, dann nach links const int * const x[2]; x ist ein Array von zwei konstanten...

41 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...

42 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...

43 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

44 DYNAMISCHER SPEICHER

45 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 Speicherzelle p = new int;

46 Speicher freigeben Operator delete Löscht eine zuvor erstellte Speicherzelle – Achtung: Zeiger werden ungültig // Erstellt Speicherplatz für einen neuen integer int* p = new int; // Löscht die Speicherzelle, auf welche p zeigt delete p; // p zeigt hier immer noch auf die Speicherzelle, die nicht mehr gibt

47 Speicher freigeben Operator delete Löscht eine zuvor erstellte Speicherzelle – Achtung: Zeiger werden ungültig // Erstellt Speicherplatz für einen neuen integer int* p = new int; // Löscht die Speicherzelle, auf welche p zeigt delete p; // p zurücksetzen p = NULL;

48 Arrays Arrays anlegen und freigeben int N; // Erstellt Speicherplatz für N neue integer int* p = new int[N]; // Zugriff mit und ohne Array-Syntax p[1] = 10; *(p+1) = 10; // Löscht alle Speicherzellen delete[] p;

49 QUIZ

50 Quiz Was gibt das Programm aus? int x = 10; int y = 20; cout << x;

51 Quiz Was gibt das Programm aus? int x = 10; int y = 20; int* p = &y; cout << p;

52 Quiz Was gibt das Programm aus? int x = 10; int y = 20; int* p = &y; cout << *p;

53 Quiz Was gibt das Programm aus? int x = 10; int y = 20; int* p; cout << p;

54 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;

55 Quiz Was gibt das Programm aus? int x[2] = {10, 20}; cout << (x+1);

56 Quiz Was gibt das Programm aus? int x[2] = {10, 20}; cout << *x + 1;

57 Quiz Was gibt das Programm aus? int x[2] = {10, 20}; cout << *(x + 1);

58 STRUCTS Variablenverbunde

59 Structs Ein struct fasst mehrere Variablen zusammen Definiert einen neuen Typ // Definiere einen neuen Typ mit zwei integer-Elementen struct vector2D { int x; int y; }; vector2d v;

60 Structs Zugriff auf Elemente member auf Englisch vector2D v; v.x = 10; v.y = 10;

61 Structs Zuweisung kopiert alle Elemente – Anderst als bei Arrays vector2D v; vector2D w; v = w;

62 Structs Elemente vom Struct in benachbarten Zellen Wie beim Array NameAddresseInhalt v.x0000??? v.y0001??? vector2D v;

63 Structs Elemente vom Struct in benachbarten Zellen Wie beim Array NameAddresseInhalt v.x v.y vector2D v; v.x = 10; v.y = 20;

64 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 10 pv->x = 10; // Setze Element x vom referenzierten Vektor auf 10

65 ÜBUNG Serie 6


Herunterladen ppt "Informatik 1 Übung 5. NACHBESPRECHUNG Übung 5 Korrekturen Ich prüfe keine Syntax – schreibt wenn was nicht kompiliert Lösungen müssen nicht perfekt sein."

Ähnliche Präsentationen


Google-Anzeigen