1 / 65

Informatik 1

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

gale
Télécharger la présentation

Informatik 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informatik 1 Übung 5

  2. Übung 5 Nachbesprechung

  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

  6. Ganzzahldivision • Auf Ganzzahl-Division achten

  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 intx = 1; inty = 0; intz = x / y; if(y!=0 && x/y > 1)

  10. 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 • ...

  11. Vorlesung 5 wiederholung

  12. Einzelne Werte Variablen

  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

  15. Variablen • Variablen in Speicherzellen gespeichert • Jede Speicherzelle hat Adresse und Inhalt int x;

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

  17. Variablen • Variablen in Speicherzellen gespeichert • Jede Speicherzelle hat Adresse und Inhalt int x; x = 10; int y;

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

  19. Aufeinanderfolgende Werte Arrays

  20. Arrays • Mehrere aufeinanderfolgende Zellen int x = 10; int y = 10; int z[2];

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

  22. Verweise auf Werte Pointer (Zeiger)

  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 // Variablen, welche auf eine andere Speicherzelle zeigt, // welche wiederum den gegebenen Typ speichert. typ* name; 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

  25. Pointer • Pointer verweisen auf andere Speicherzellen int x = 10; int y = 10; int* p;

  26. Pointer • Pointer verweisen auf andere Speicherzellen int x = 10; int y = 10; int* p; p = &y;

  27. Pointer • NULL bedeutet „zeigt auf nichts“ 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 int x = 10; int y = 10; int* p; p = &y;

  30. Pointer • Pointer verweisen auf andere Speicherzellen 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 int x; int* px = &x; int** ppx = &px; int*** pppx = &ppx; ***pppx = 1;

  33. Pointer-Arithmetik • Addition auf Adressen • Zeiger + konstante Zahl int x[2] = {10,10}; int* p = &x; int* q = p+1;

  34. Gemeinsamkeiten Arrays und Zeiger

  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 * constx[2]; x ist ...

  39. Leseweise • Beim Variablennamen starten • Nach aussen arbeiten • nach rechts, dann nach links const int * constx[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 = newint;

  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;

More Related