Zusammenfassung
Diese Lektion eröffnet die vierte Einheit des Kurses, die dem Kontrollfluss gewidmet ist. Sie erklärt, wozu die Einheit dient: zu lehren, die Reihenfolge zu steuern, in der die Anweisungen eines Programms ausgeführt werden, mit Entscheidungen und mit Schleifen, und über ihre Korrektheit zu argumentieren, das heißt sicherzustellen, dass jeder Fall behandelt wird, dass jede Schleife tut, was sie soll, und dass sie terminiert; sie stellt ihre vier Lektionen vor und den Faden, der sie verbindet; sie erinnert daran, was die Einheit voraussetzt, vor allem die zusammengesetzten Bedingungen der Einheit 3; sie formuliert das Problem, das die Einheit löst, das eines Programms, das den größten gemeinsamen Teiler mit einer festen Anzahl von Schritten berechnet und je nach Daten falsch antwortet oder bei einer Division durch null anhält; sie nimmt die Invariante als das Werkzeug vorweg, mit dem die Einheit ihre Schleifen begründen wird; und sie zeigt, wohin sie führt, in den folgenden Einheiten und im Kurs Programmieren in C++ II.
Lernziele
- Die Abfolge der Inhalte der Einheit beschreiben und erklären, was jede Lektion zur nächsten beiträgt.
- Sich an die zusammengesetzten Bedingungen der Einheit 3 erinnern (die Junktoren, die Kurzschlussauswertung und die Negation mit den De Morganschen Gesetzen) und sie bei Bedarf wiederholen.
- An einem Beispiel die Invariante als Werkzeug des Argumentierens vorwegnehmen: eine Beziehung zwischen den Variablen, die eine Wiederholung erhält und die am Ende das Ergebnis liefert.
- Erkennen, was man am Ende der Einheit können soll, und es von dem unterscheiden, was in den folgenden Einheiten gelernt wird.
Eingangstest
Bevor man die Einheit durcharbeitet, lohnt es sich, den Ausgangspunkt zu bestimmen. Dieser Test ist eine Selbstüberprüfung: Er wird nicht benotet, und sein einziger Zweck ist es, das Lernen zu leiten. Die ersten vier Fragen prüfen, was die Einheit voraussetzt: die Negation einer zusammengesetzten Bedingung, die Kurzschlussauswertung, die Ablaufverfolgung einer Wiederholung aus Lektion 1.1 und die Grenze eines int. Die sieben folgenden behandeln in der Reihenfolge der Lektionen die zentralen Ideen der Einheit, und mehrere von ihnen gehen von der Schulmathematik aus: der größte gemeinsame Teiler, das Summenzeichen, die Terminierung eines Verfahrens. Niemand muss sie schon richtig beantworten, und bei einigen von ihnen ist „Das weiß ich noch nicht“ eine ehrliche Antwort: Jede Antwort, ob richtig oder nicht, erklärt den Punkt und nennt die Lektion, die ihn behandelt. Dieselben Fertigkeiten werden am Ende erneut gemessen, in der Synthese-Lektion.
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.
Frage 1Aus früheren EinheitenWas ist die Negation der Bedingung
1 <= n && n <= 10?Verneint jeden Teil, behält aber die Konjunktion bei: vergisst De Morgan. Außerdem ist keine Zahl zugleich kleiner als 1 und größer als 10, sodass diese Bedingung immer falsch ist.Wechselt den Junktor richtig, verneint aber die Relationen falsch: schließt zu viel aus, nämlich die Grenzen 1 und 10, die die ursprüngliche Bedingung erfüllen.Verneint nur den ersten Teil.Nach De Morgan ist die Negation einer Konjunktion die Disjunktion der Negationen, und die Negation von1 <= nistn < 1, nichtn <= 1. Die Einheit braucht sie in jeder verketteten Entscheidung, weil derelse-Zweig genau die Negation der vorigen Bedingungen behandelt, und in jeder Schleife, weil nach dem Verlassen die Negation ihrer Bedingung gilt.Wiederholen: Relationen und Logik
Frage 2Aus früheren EinheitenWas geschieht mit
int d{0};undint n{5};beim Auswerten vond != 0 && n / d > 2?Übersieht die Kurzschlussauswertung: Die Division wird nie berechnet.Eine Konjunktion mit einem falschen Operanden kann auf keine Weise wahr sein.Der Ausdruck ist korrekt; der Compiler kennt den Wert vondzur Laufzeit nicht.Der erste Operand ist falsch, und die Kurzschlussauswertung wertet den zweiten nicht aus: Der Wächter links schützt die Division. Die Einheit macht aus diesem Wächter explizite Entscheidungen und Schleifenbedingungen, die ihren Rumpf schützen.Wiederholen: Relationen und Logik
Frage 3Aus früheren EinheitenDie Division durch fortgesetzte Subtraktion aus Lektion 1.1 beginnt mit und und wiederholt „solange , subtrahiere von und addiere 1 zu “. Wie oft wird mit und der Rumpf der Wiederholung ausgeführt?
Zählt die Auswertungen der Bedingung, die eine mehr sind als die Durchläufe.Hält die Wiederholung bei an: liest als .Verwechselt die Anzahl der Durchläufe mit dem Anfangswert von .Die Ablaufverfolgung ergibt : Der Rumpf wird viermal ausgeführt und die Bedingung fünfmal ausgewertet, weil die letzte Auswertung diejenige ist, die fehlschlägt. Lektion 4.2 schreibt diese Wiederholung in C++ und macht aus der Ablaufverfolgung eine Tabelle.Wiederholen: Vom Problem zum Algorithmus
Frage 4Aus früheren EinheitenWas garantiert der Standard bei einem
intmit 32 Bit über den Wert von46341 * 46341?Übersieht den Wertebereich des Typs: Diese Zahl passt nicht in einenint.Glaubt, der Überlauf bleibe am Rand stehen; der Standard verspricht nichts.Den Typ des Ergebnisses bestimmen die Operanden, dieintsind, nicht der Wert des Ergebnisses.Das Maximum ist . Die Einheit trifft dieses Produkt an einer Stelle, an der man es nicht sucht: in der Bedingungd * d <= neiner Schleife, die Teiler probiert und die gerade dann überläuft, wenn nahe am Maximum liegt.Wiederholen: Ganze Zahlen und ihre Darstellung
Frage 5Ein Programm enthält die Kette von Entscheidungen
if (score >= 50), die „Bestanden“ schreibt;else if (score >= 90), die „Ausgezeichnet“ schreibt; undelse, die „Nicht bestanden“ schreibt. Was schreibt es, wennscoregleich 95 ist?Glaubt, die anspruchsvollste Bedingung gewinne; es gewinnt die erste, die erfüllt ist.Glaubt, alle wahren Zweige würden ausgeführt; in einer Kette wird nur einer ausgeführt.Das ist eine ehrliche Antwort: Lektion 4.1 erklärt es, und der Abschlusstest wird auf die Grenzen einer Kette zurückkommen.In einer Kette wird der erste Zweig ausgeführt, dessen Bedingung wahr ist, und . Der Zweig „Ausgezeichnet“ wird nie ausgeführt: Sein tatsächlicher Fall ist und , und der ist leer. Lektion 4.1 lehrt, den tatsächlichen Fall jedes Zweigs zu lesen und die Bedingungen zu ordnen.Wiederholen: Entscheidungen
Frage 6Welcher der folgenden Ausdrücke bezeichnet die Summe ?
Addiert -mal die Zahl , also : verwechselt den Term mit der oberen Grenze.Berechnet : verschiebt die Grenzen und verliert den letzten Term, der Off-by-one-Fehler der Schleifen.Die obere Grenze kann nicht der Index selbst sein: Der Ausdruck hat keine Bedeutung.Der Index durchläuft die ganzen Zahlen von 1 bis , und jeder Term ist selbst. Einefor-Schleife, die akkumuliert, ist die direkte Übersetzung dieser Schreibweise: Die Laufvariable ist der Index, ihre Grenzen sind die der Summe, und der Rumpf addiert den Term.Wiederholen: Schleifen
Frage 7Was schreibt
std::println("{}", total);mitint total{0};nachfor (int i{0}; i < 5; ++i) { total += i; }?Glaubt,ierreiche 5: liest<als<=.Verwechselt den Akkumulator mit dem Zähler: Fünf ist die Anzahl der Durchläufe, nicht die Summe.Das ist eine ehrliche Antwort: Lektion 4.2 lehrt die Form desforund wie man seine Durchläufe zählt.Die Variableinimmt die Werte 0, 1, 2, 3 und 4 an, und ; mitigleich 5 schlägt die Bedingung fehl, und der Rumpf wird nicht ausgeführt. Es ist die Summe der vorigen Frage mit den Grenzen 0 und 4.Wiederholen: Schleifen
Frage 8Welche Beziehung zwischen den Variablen gilt bei der Division durch fortgesetzte Subtraktion (, ; solange , geht in über und in ) jedes Mal, wenn die Bedingung ausgewertet wird?
Gilt nur beim Verlassen: Solange wiederholt wird, sichert die Bedingung das Gegenteil.Gilt nur am Ende; vorher ist kleiner als der Quotient.Das ist eine ehrliche Antwort: Lektion 4.3 lehrt, diese Beziehung zu finden und zu prüfen, und der Abschlusstest wird erneut danach fragen.Sie gilt am Anfang, weil ; und wenn sie vor einem Durchlauf gilt, gilt sie danach, weil . Beim Verlassen kommt die Negation der Bedingung, , hinzu, und beide zusammen ergeben das Ergebnis. Eine solche Beziehung heißt Invariante, und Lektion 4.3 macht aus ihr die Methode, Schleifen zu entwerfen und zu begründen.Wiederholen: Korrekte Schleifen entwerfen
Frage 9Ein Verfahren geht von einer beliebigen ganzen Zahl aus (positiv, null oder negativ) und wiederholt „solange , subtrahiere 2 von “. Terminiert es für jedes ?
Das geschieht mit der Bedingung ; mit hält die Wiederholung an, sobald den Wert 0 oder hat.Bei negativem ist die Bedingung von Anfang an falsch, und der Rumpf wird nicht ausgeführt.Die Schlussfolgerung ist richtig, die Begründung aber nicht: Ganzzahligkeit genügt nicht; die Größe muss eine natürliche Zahl sein, solange wiederholt wird, und sie muss abnehmen.Die Größe ist eine natürliche Zahl, solange wiederholt wird (die Bedingung sichert es), und nimmt streng ab: Sie ist eine Variante, das Werkzeug aus Lektion 1.1, das Lektion 4.3 bei jeder Schleife verwendet. Mit „solange “ würde sich die Antwort ändern: Ein ungerades springt über die Null.Wiederholen: Korrekte Schleifen entwerfen
Frage 10Was ist der größte gemeinsame Teiler von 84 und 36?
Ist ein gemeinsamer Teiler, aber nicht der größte.Ist ein gemeinsamer Teiler, aber nicht der größte: Es fehlt der Faktor 3, den beide ebenfalls enthalten.Ist das kleinste gemeinsame Vielfache, nicht der größte gemeinsame Teiler.Die gemeinsamen Teiler sind 1, 2, 3, 4, 6 und 12. Der euklidische Algorithmus erhält ihn, ohne Teiler zu suchen: und , also . Lektion 4.4 schreibt ihn als Schleife und beweist, warum er funktioniert.Wiederholen: Numerische Algorithmen
Frage 11Bis zu welchem Teiler muss man gehen, um durch Probieren von Teilern zu entscheiden, ob 101 eine Primzahl ist?
Nimmt die Hälfte: Das ist richtig, aber fünfmal länger als nötig.Probiert alle Kandidaten: Das ist richtig, nutzt aber nicht aus, dass die Teiler paarweise auftreten.Das ist eine ehrliche Antwort: Lektion 4.4 beweist es.Hätte 101 einen Teiler mit , so wäre auch einer, und einer der beiden wäre höchstens . Es genügt, 2 bis 10 zu probieren: Keine dieser Zahlen teilt 101, also ist 101 eine Primzahl. Lektion 4.4 beweist die Regel und schreibt sie ohne Wurzeln und ohne Produkte, die überlaufen.Wiederholen: Numerische Algorithmen
Inhalt wird geladen…
Abgeschlossen
Melde dich an, um deinen Fortschritt zu speichern