Zum Inhalt springen
Topos Uranos

Zusammenfassung

Diese Lektion eröffnet die siebte Einheit des Kurses, die dem Text und den Dateien gewidmet ist. Sie erklärt, wozu die Einheit dient: zu lehren, wie man Text als Daten behandelt, mit seiner wirklichen Kodierung, und wie man ein Programm Dateien lesen und schreiben lässt, ohne dass es an einer fehlerhaften Eingabe zerbricht; sie stellt ihre vier Lektionen und den Faden vor, der sie verbindet; sie erinnert an das, was die Einheit voraussetzt, vor allem daran, dass ein Zeichen für die Maschine eine Zahl ist, und an die Vektoren, Datensätze und Funktionen der Einheiten 5 und 6; sie formuliert das Problem, das die Einheit löst, das eines scheinbar korrekten Programms, das ohne Warnung Daten verliert, an der ersten unerwarteten Zeile stehen bleibt und Namen mit Akzenten falsch misst; sie nimmt vorweg, dass ein Buchstabe nicht immer ein Byte belegt; und sie zeigt, wohin sie führt, in Einheit 8 und im Kurs Programmieren in C++ II.

Lernziele

  1. Die Abfolge der Inhalte der Einheit beschreiben und erklären, was jede Lektion zur nächsten beiträgt.
  2. Die Darstellung der Zeichen als numerische Codes wiederholen (Lektion 2.4) und einen Code binär und hexadezimal schreiben.
  3. An einem Beispiel vorwegnehmen, dass ein Buchstabe nicht immer ein Byte ist und dass deshalb Bytes zählen nicht Buchstaben zählen heißt.
  4. Erkennen, was man am Ende der Einheit können soll, und es von dem unterscheiden, was in der nächsten Einheit und in Programmieren in C++ II 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 sechs Fragen prüfen, was die Einheit voraussetzt: den Code eines Zeichens, das Schreiben einer Zahl in binärer und hexadezimaler Form, eine Bitmaske, das Durchlaufen eines Vektors, das seine Elemente filtert, was geschieht, wenn ein Lesevorgang Buchstaben statt einer Zahl erhält, und die Definition eines Datensatzes. Die vier folgenden behandeln in der Reihenfolge der Lektionen die zentralen Ideen der Einheit: was eine Suche liefert, die nichts findet, die Größe eines Wortes mit Akzent, die leere Zeile, die erscheint, wenn man zwei Arten des Lesens mischt, und die Datei, die nicht geöffnet werden konnte. Niemand muss diese vier 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.

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 schreibt std::println("{:d} {:d}", 'A', 'a');?

  2. Frage 2Aus früheren EinheitenWie schreibt man 233 binär und hexadezimal?

  3. Frage 3Aus früheren EinheitenWelchen Wert hat 0xB1 & 0xC0?

  4. Frage 4Aus früheren EinheitenWas schreibt std::vector<int> v{4, 7, 10, 3}; std::vector<int> w{}; for (const int x : v) { if (x % 2 == 0) { w.push_back(x); } } std::println("{}", w);?

  5. Frage 5Aus früheren EinheitenNach int n{-1}; std::cin >> n; wird abc eingegeben. Welchen Wert hat n, und was geschieht mit den folgenden Lesevorgängen?

  6. Frage 6Aus früheren EinheitenWelche der folgenden Definitionen deklariert korrekt einen Datensatz mit einem Titel und einem Jahr?

  7. Frage 7Wenn s als std::string s{"casa azul"}; definiert ist, was liefert s.find("x")?

  8. Frage 8Was schreibt std::println("{}", std::string{"año"}.size()); in einem in UTF-8 gespeicherten Programm wie denen dieses Kurses?

  9. Frage 9Ein Programm führt int age{}; std::string name{}; std::cin >> age; std::getline(std::cin, name); aus, und es wird 36 eingegeben, die Eingabetaste gedrückt, Ana eingegeben und wieder die Eingabetaste gedrückt. Was steht danach in name?

  10. Frage 10Ein Programm führt std::ifstream in{"data.txt"}; int x{-1}; in >> x; aus, aber data.txt existiert nicht in dem Ordner, aus dem es gestartet wird. Was geschieht?