Zum Inhalt springen
Topos Uranos

Zusammenfassung

Diese Lektion eröffnet die achte und letzte Einheit des Kurses, die den größeren Programmen gewidmet ist. Sie erklärt ihren Zweck: Programme zu organisieren, zu überprüfen und zu debuggen, die weder in eine Datei noch in den Kopf passen; sie stellt ihre drei Lektionen vor und den Faden, der sie verbindet und den in der ersten Lektion des Kurses geöffneten Kreis schließt (spezifizieren, bauen, überprüfen); sie ruft in Erinnerung, was die Einheit voraussetzt, nämlich den ganzen Kurs; sie formuliert das Problem, das die Einheit löst, das eines Programms aus einer einzigen Datei, das mit den Daten funktioniert, mit denen es getestet wurde, und einen Fehler an der Grenze seiner Spezifikation verschweigt; sie nimmt den Unterschied zwischen Testen und Beweisen vorweg; und sie zeigt, wohin sie führt, im Abschlussprojekt und in Programmieren in C++ II.

Lernziele

  1. Die Abfolge der Inhalte der Einheit beschreiben und erklären, was jede Lektion zur folgenden beiträgt.
  2. An einem Beispiel den Unterschied zwischen dem Deklarieren und dem Definieren einer Funktion in Erinnerung rufen, ebenso den Vertrag, der sie spezifiziert, und die Etappen (Kompilierung und Linken), die mehrere Dateien in ein Programm verwandeln.
  3. An einem Beispiel den Unterschied zwischen dem Testen eines Programms mit einigen Fällen und dem Beweis vorwegnehmen, dass es für alle zulässigen Fälle korrekt ist.
  4. Erkennen, was man am Ende der Einheit und des Kurses können soll, und es von dem unterscheiden, was man in Programmieren in C++ II lernen wird.

Eingangstest

Bevor man die Einheit durcharbeitet, lohnt es sich, den Ausgangspunkt zu bestimmen. Dieser Test wird nicht benotet: Er leitet das Lernen. Die ersten sieben Fragen prüfen, was die Einheit voraussetzt (Deklarieren und Definieren, die Vorbedingung, den Vertrag einer Funktion aus Einheit 6, die Meldungen des Linkers, die Fälle einer binären Suche, die Ablauftabelle (Trace-Tabelle) und das Lesen außerhalb eines Vektors); die drei folgenden behandeln in der Reihenfolge der Lektionen die zentralen Ideen der Einheit, und bei ihnen ist „Das weiß ich noch nicht“ eine ehrliche Antwort. Jede Antwort erklärt den Punkt und nennt die Lektion, die ihn behandelt; dieselben Fertigkeiten werden in der Synthese-Lektion erneut gemessen.

Eingangstest

Miss vor Beginn der Einheit deinen Ausgangspunkt. Es ist eine kurze Selbsteinschätzung: Sie wird nicht benotet, und das Ergebnis wird nur in deinem Browser gespeichert.

  1. Frage 1Aus früheren EinheitenWas bewirkt die Zeile int gcd(int a, int b);, die vor main steht?

  2. Frage 2Aus früheren EinheitenDie Funktion toBase(n, base) hat die Vorbedingung „n >= 0 und 2 <= base <= 10“. Wer muss sie garantieren?

  3. Frage 3Aus früheren EinheitenDie Funktion binarySearch(values, target) aus Lektion 6.4 gibt eine Position von target zurück oder values.size(), wenn es nicht vorkommt. Was ist ihre Vorbedingung?

  4. Frage 4Aus früheren EinheitenEin Programm kompiliert ohne Fehler, und beim Erzeugen der ausführbaren Datei erscheint undefined reference to `tetrahedral(int)'. Welche Etappe ist gescheitert?

  5. Frage 5Aus früheren EinheitenWelche dieser Mengen von Fällen stellt eine binäre Suche am besten auf die Probe?

  6. Frage 6Aus früheren EinheitenWelche Werte haben a und b nach int a{0}; int b{1}; for (int i{0}; i < 4; ++i) { const int t{a + b}; a = b; b = t; }?

  7. Frage 7Aus früheren EinheitenWarum hält std::vector<int> v{1, 2}; std::println("{}", v[2]); mit den Optionen des Kurses an und kann, nur mit -O2 kompiliert und ohne die Sanitizer, eine beliebige Zahl ausgeben?

  8. Frage 8Ein Header mit Include-Guards definiert (und deklariert nicht nur) double scale(double x), ohne inline, und main.cpp und report.cpp binden ihn ein. Was geschieht beim Erzeugen des Programms?

  9. Frage 9Eine Funktion besteht fünfhundert sorgfältig gewählte automatisierte Tests. Was kann man behaupten?

  10. Frage 10Ein Haltepunkt liegt auf der Zeile total += k; innerhalb einer Schleife, und das Programm hält dort zum dritten Mal an. Was zeigt die hervorgehobene Zeile an?