Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung Nächste Überarbeitung Beide Seiten, nächste Überarbeitung | ||
programmieren_lernen:start [2014/05/13 21:24] ingo_wichmann [Boolean] |
programmieren_lernen:start [2014/10/11 11:00] ingo_wichmann |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Vorbereitung ====== | ====== Vorbereitung ====== | ||
- | Jeder Teilnehmer öffnet ein [[https://pad.lab.linuxhotel.de|pad]] und verlinkt es im [[https://lab.linuxhotel.de|Hauptpad zum Termin]]. | + | Jeder Teilnehmer öffnet ein Pad und verlinkt es im [[https://lab.linuxhotel.de|Hauptpad zum Termin]]. |
+ | |||
+ | Jeder Teilnehmer löst anhand der im Hauptpad zur Verfügung gestellten Links die Syntaxaufgaben eines Themas. Anschließend einigt sich jede Sprachgruppe auf jeweils eine Antwort pro Frage, die sie ins Sprachpad übernimmt. Das Sprachpad dient als Sammlung und Nachschlagewerk für Syntaxbeispiele, auf denen die Problemlösungsaufgaben in den folgenden Kapiteln aufbauen. | ||
+ | |||
+ | Jeder Teilnehmer löst die Basis-Problemlösungsaufgaben eines Themas. Schnelle Teilnehmer lösen auch die Zusatzaufgaben. Wenn alle Teilnehmer einer Sprachgruppe mit den Basis-Problemlösungsaufgaben fertig sind einigen sie sich auf jeweils eine Basislösung. | ||
+ | |||
+ | ====== Inhalte ====== | ||
+ | |||
+ | * [[Hello World]] | ||
+ | * [[Variablen]] | ||
+ | * Datentypen (I): [[Einzelwerte|Einzelwerte/Skalare]] | ||
+ | * [[Bedingte Anweisungen und Verzweigungen]] | ||
+ | * [[Schleifen]] | ||
+ | * Datentypen (II): [[Listen|Listen/Arrays]] | ||
+ | * [[Argumentenliste]] | ||
+ | * [[Mengenschleifen und Iteratoren]] | ||
+ | * IO (I): [[Dateneingabe]] | ||
+ | * [[STDIN]] | ||
+ | * Datentypen (III): [[Hashtabelle|Hash/assoziatives Array/Dictionary]] | ||
+ | * IO (II): | ||
+ | * [[Datei importieren]] | ||
+ | * [[Datei lesen]] | ||
+ | * [[Serialisierung]] | ||
+ | * [[Reguläre Ausdrücke]] | ||
+ | * [[Unterprogramme|Unterprogramme/Subroutinen/Funktionen]] | ||
- | Jeder Teilnehmer löst anhand der him Hauptpad zur Verfügung gestellten Links die Syntaxaufgaben eines Themas. Anschließend einigt sich jeder Sprachgruppe auf jeweils eine Antwort pro Frage, die sie ins Sprachpad übernimmt. | ||
- | Jeder Teilnehmer löst die Basis-Problemlösungsaufgaben eines Themas. Schnelle Teilnehmer lösen auch die Zusatzaufgaben. Wenn alle Teilnehmer einer Sprachgruppe mit den Basis-Problemlösungsaufgaben fertig sind einigen sie sich jeweils eine Basislösung. | ||
- | ====== git ====== | ||
- | [[git]] | ||
====== Hello World ====== | ====== Hello World ====== | ||
* interaktive Shell | * interaktive Shell | ||
Zeile 101: | Zeile 121: | ||
==== Boolean ==== | ==== Boolean ==== | ||
+ | Erklärung: Wie kann ich feststellen, ob eine "Bedingung" wahr oder falsch ist? | ||
+ | |||
=== Syntaxaufgaben === | === Syntaxaufgaben === | ||
* Wie kann ich Zahlen vergleichen? Größer, kleiner, gleich? | * Wie kann ich Zahlen vergleichen? Größer, kleiner, gleich? | ||
Zeile 124: | Zeile 146: | ||
* Welches Schlüsselwort steht für den undefinierten Wert? | * Welches Schlüsselwort steht für den undefinierten Wert? | ||
* Was passiert, wenn ich einen undefinierten Wert als Zahl, Text oder Boolean verwende? | * Was passiert, wenn ich einen undefinierten Wert als Zahl, Text oder Boolean verwende? | ||
+ | |||
+ | |||
+ | |||
====== Bedingte Anweisung und Verzweigung ====== | ====== Bedingte Anweisung und Verzweigung ====== | ||
- | * Wie kann ich abhängig von einer Bedingung verschiede Anweisungen zum Ausführen bringen? | + | Erklärung: Wie kann ich abhängig von einer Bedingung verschiede Anweisungen zum Ausführen bringen? |
+ | |||
+ | === Syntaxaufgaben === | ||
+ | * Wie kann ich eine Anweisung ausführen lassen, wenn ein String weniger als 12 Zeichen enthält? | ||
+ | * Wie kann ich mehrere Anweisungen ausführen lassen, wenn ''n'' größer als 25 ist? | ||
+ | * Wie kann ich mehrere Anweisungen ausführen lassen, wenn ''n'' größer als 12 oder ''k'' kleiner als 25 ist? | ||
+ | * Wie kann ich mehrere Anweisungen ausführen lassen, wenn ''k'' größer als 100 ist, und eine andere falls nicht? | ||
+ | |||
+ | === Problemlösungsaufgaben === | ||
+ | Schreibe ein Programm ''friendly'' so, dass der Gruß "Hallo!" ausgegeben wird, wenn der Name 10 Zeichen oder länger ist, aber für Namen mit 9 Zeichen oder wenigern der vorherige Satz, z.B. "Hallo Klaus!" Dabei soll der Name wie vorhin aus einer Variablen übernommen werden. | ||
+ | Aufruf des Programms: | ||
+ | ./friendly | ||
+ | Ausgabe: (wenn name = 'Klaus' ist) | ||
+ | <file> | ||
+ | Hallo Klaus! | ||
+ | </file> | ||
+ | |||
+ | Ausgabe: (wenn name = 'Helmut-Jürgen') | ||
+ | <file> | ||
+ | Hallo! | ||
+ | </file> | ||
+ | |||
+ | |||
- | Durchgängiges Beispiel: | ||
- | * Ergänze das hello-world Programm so, dass bei Namen mit weniger als 10 Zeichen "Guten Tag Klaus", und bei längeren Namen "Hallo ..." ausgegeben wird. | ||
====== Schleifen ====== | ====== Schleifen ====== | ||
- | Erklärung: Welche praktischen Probleme kann man mit Schleifen lösen? Wenn man Dinge mehrmals ausführen möchte, benutzt man eine [[wpde>Schleife_(Programmierung)|Schleife]]. | + | Erklärung: Welche praktischen Probleme kann man mit Schleifen lösen? Wenn man Dinge mehrmals ausführen möchte, benutzt man eine [[wpde>Schleife_(Programmierung)|Schleife]]. |
- | * Wie formuliert man eine kopfgesteuerte Schleife? | + | |
- | * Wie formuliert man eine fußgesteuerte Schleife? | + | |
- | * Wie formuliert man eine Zählschleife? | + | |
- | Durchgängiges Beispiel: | + | === Syntaxaufgaben === |
- | * Ergänze das Programm so, dass: | + | * Wie kann ich eine Anweisung (z.B. ''print "Hallo!"'') ausführen lassen, bis das Programm beendet wird? |
- | * der Gruß unendlich oft ausgegeben wird. | + | * Wie kann ich eine Anweisung ausführen lassen, solange eine Bedingung erfüllt ist? |
- | * der Gruß genau 10 Mal ausgegeben wird (mit Nummerierung). | + | * Wie kann ich eine Anweisung eine bestimmte Anzahl oft ausführen lassen? |
- | ====== Datentypen (II): Array ====== | + | === Problemlösungsaufgaben === |
+ | Schreibe ein Programm ''infinite'' so, dass der Gruß "Hallo Welt!" ausgegeben wird, bis das Programm (per Strg+C) beendet wird! | ||
+ | Aufruf des Programms: | ||
+ | ./infinite | ||
+ | Ausgabe: | ||
+ | <file> | ||
+ | Hallo Welt! | ||
+ | Hallo Welt! | ||
+ | Hallo Welt! | ||
+ | Hallo Welt! | ||
+ | Hallo Welt! | ||
+ | Hallo Welt! | ||
+ | Hallo Welt! | ||
+ | ^C | ||
+ | </file> | ||
- | Erklärung: was ist ein Array/eine Liste? Container für mehrere Dinge hintereinander | ||
+ | Schreibe ein Programm ''finite'', das den Gruß "Hallo Welt" genau zehn mal ausgibt, und bitte mit Nummerierung. | ||
+ | Aufruf des Programms: | ||
+ | ./finite | ||
+ | Ausgabe: | ||
+ | <file> | ||
+ | 1. Hallo Welt! | ||
+ | 2. Hallo Welt! | ||
+ | 3. Hallo Welt! | ||
+ | 4. Hallo Welt! | ||
+ | 5. Hallo Welt! | ||
+ | 6. Hallo Welt! | ||
+ | 7. Hallo Welt! | ||
+ | 8. Hallo Welt! | ||
+ | 9. Hallo Welt! | ||
+ | 10. Hallo Welt! | ||
+ | </file> | ||
+ | |||
+ | |||
+ | |||
+ | ====== Datentypen (II): Array ====== | ||
+ | Erklärung: Wie kann ich mehrere Dinge (z.B. Namen von Benutzern, Zahlen) hintereinander abspeichern? | ||
+ | |||
+ | === Syntaxaufgaben === | ||
* Packe die folgenden Elemente in ein Array/eine Liste names ''liste'': ''"eins", 2, 3.0'' | * Packe die folgenden Elemente in ein Array/eine Liste names ''liste'': ''"eins", 2, 3.0'' | ||
* Gebe die Länge der vorherigen Liste aus. | * Gebe die Länge der vorherigen Liste aus. | ||
* Gebe die Elemente einzeln wieder aus. | * Gebe die Elemente einzeln wieder aus. | ||
* Weise dem zweiten Element der Liste einen neuen Wert zu. | * Weise dem zweiten Element der Liste einen neuen Wert zu. | ||
- | * Welchen Wert enthält die Variable ''liste'' am Ende von folgendem Pseudocode: | + | * Welchen Wert enthält die Variable ''liste'' am Ende von folgendem Pseudocode. Bitte durch nachdenken lösen, dann mit einem Programm überprüfen! Warum ist der Wert so, wie du herausgefunden hast? |
<file> | <file> | ||
a = "eins" | a = "eins" | ||
Zeile 159: | Zeile 238: | ||
</file> | </file> | ||
* Wie füge ich am Ende bzw. am Anfang einer Liste ein oder mehrere Elemente an? | * Wie füge ich am Ende bzw. am Anfang einer Liste ein oder mehrere Elemente an? | ||
- | * Wie schneide ich sie ab? | + | * Wie erhalte ich aus einer Liste einen Teil, d.h. aus einer Liste ''l'' eine neue Liste ''k'', die die ersten 3 Elemente von ''l'' enthält? |
* Wie füge ich zwei Listen zusammen? | * Wie füge ich zwei Listen zusammen? | ||
* Wie finde ich heraus, ob ein bestimmter Wert in einer Liste enthalten ist? | * Wie finde ich heraus, ob ein bestimmter Wert in einer Liste enthalten ist? | ||
* Wie füge ich ein Array zu einem String zusammen? Ein mal mit, ein mal ohne Trennzeichnen. | * Wie füge ich ein Array zu einem String zusammen? Ein mal mit, ein mal ohne Trennzeichnen. | ||
- | * Wie wandle ich einen String der Spaltentrenner enthält in ein Array/eine Liste um? | ||
* Wie überführe ich einen String in eine Liste seiner Zeichen? | * Wie überführe ich einen String in eine Liste seiner Zeichen? | ||
* Was ist der Wahrheitswert von: <code>[], [''], [0], [False]</code> | * Was ist der Wahrheitswert von: <code>[], [''], [0], [False]</code> | ||
===== Die Argumentenliste ===== | ===== Die Argumentenliste ===== | ||
- | Wofür ist die Argumentenliste gut? | + | Erklärung: Wofür ist die Argumentenliste gut? Wie kann ich Werte in das Programm hineingeben? |
- | ==== Aufgabe ==== | + | === Syntaxaufgaben === |
- | Erweitere das hello-world Programm so, dass es es für alle übergebenen Namen einen Gruß ausgibt. Also z.B. so: | + | Wie kann ich aus dem Programm heraus auf die Parameter/Argumenten zugreifen, die dem Programm beim Start mitgegeben wurden? |
- | ./hello Klaus Frank Thomas | + | |
+ | === Problemlösungsaufgaben === | ||
+ | Schreibe ein Programm ''greetall'', das für alle auf der Kommandozeile übergebenen Namen einen Gruß ausgibt. | ||
+ | Aufruf des Programms: | ||
+ | ./greetall Klaus Frank Thomas | ||
Ausgabe: | Ausgabe: | ||
<file> | <file> | ||
Zeile 180: | Zeile 262: | ||
</file> | </file> | ||
- | === Zusatzaufgaben === | + | === Problemlösungsaufgaben (Zusatz) === |
- | Erweitere das hello-world-Programm so, dass wenn kein Argument übergeben wurde, "Hello World" ausgegeben wird. | + | Erweitere das Programm ''greetall'' so, dass wenn kein Argument übergeben wurde, "Hallo Welt!" ausgegeben wird. |
+ | Aufruf des Programms: | ||
+ | ./greetall | ||
+ | Ausgabe: | ||
+ | <file> | ||
+ | Hallo Welt! | ||
+ | </file> | ||
+ | |||
+ | Erweitere das Programm ''greetall'' so, dass wenn ein übergebener Name mehr als 10 Zeichen lang ist, statt dessen "Hallo!" ausgegeben wird (um die Ausgabe nicht so lang werden zu lassen). | ||
+ | Aufruf des Programms: | ||
+ | ./greetall Klaus Frank Thomas Karl-Friedrich | ||
+ | Ausgabe: | ||
+ | <file> | ||
+ | Guten Tag Klaus! | ||
+ | Guten Tag Frank! | ||
+ | Guten Tag Thomas! | ||
+ | Hallo! | ||
+ | </file> | ||
+ | |||
+ | |||
- | Erweitere das hello-world-Programm so, dass wenn ein übergebener Name mehr als 10 Zeichen lang ist, statt dessen "Hallo!" ausgegeben wird (um die Ausgabe nicht so lang werden zu lassen). | ||
====== Mengenschleifen und Iteratoren ====== | ====== Mengenschleifen und Iteratoren ====== | ||
Erklärung: Anstatt eine Schleife über Indizes laufen zu lassen, wäre es doch besser, die Schleife über die Elemente der Liste laufen zu lassen. | Erklärung: Anstatt eine Schleife über Indizes laufen zu lassen, wäre es doch besser, die Schleife über die Elemente der Liste laufen zu lassen. | ||
- | * Schreibe dein Programm so um, dass es über die eingegebenen Namen iteriert. Die Ausgabe des Programms bleibt dabei gleich, nur intern verändert sich etwas, so dass der Programmcode etwas anders aussieht. | + | === Problemlösungsaufgaben === |
+ | Schreibe dein Programm ''greetall'' zu ''greetall2'' so um, dass es über die eingegebenen Namen iteriert. Die Ausgabe des Programms bleibt dabei gleich; nur intern verändert sich etwas, so dass der Programmcode etwas anders aussieht. | ||
+ | Aufruf des Programms: | ||
+ | ./greetall2 Klaus Frank Thomas | ||
+ | Ausgabe: | ||
+ | <file> | ||
+ | Guten Tag Klaus! | ||
+ | Guten Tag Frank! | ||
+ | Guten Tag Thomas! | ||
+ | </file> | ||
+ | |||
+ | |||
+ | |||
+ | |||
====== IO (I) ====== | ====== IO (I) ====== | ||
Diskussionsfrage: Auf welche Arten kann ein Programm mit der Außenwelt kommunizieren? | Diskussionsfrage: Auf welche Arten kann ein Programm mit der Außenwelt kommunizieren? | ||
===== STDIN ===== | ===== STDIN ===== | ||
- | * Wie kann ich Eingaben von der Tastatur/stdin einlesen? | + | Erklärung: Oft sollen Programme vom Benutzer eine Eingabe von der Tastatur lesen, anstatt alle Parameter im Vorhinein auf der Kommandozeile zu bekommen. |
- | * Erweitere das Programm, so dass der Benutzer gezwungen wird einen Namen für die Begrüßung einzugeben, sofern kein Name in der Argumentenliste angegeben wurde. | + | |
- | ===== Datei importieren ===== | + | === Syntaxaufgaben === |
- | * Können wir Variablen aus anderen Dateien einlesen? import/include/eval/... | + | * Wie kann ich vom Benutzer eine Eingabe von der Tastatur lesen? Gibt es mehr als eine Möglichkeit? |
- | * Aufgabe: Erweitere das Programm so, dass der Benutzername in einer Konfig-Datei festgelegt wird. Das heißt, wenn kein Name als Argument übergeben wurde, soll zuerst eine Konfigurationsdatei importiert werden. Wenn in der Datei kein Name festgelegt wird oder die Datei nicht gefunden wurde, soll wie gehabt der Name auf der Eingabe abgefragt werden. | + | |
- | ====== Datentypen (III): Hash ====== | + | === Problemlösungsaufgaben === |
- | * Erklärung: was ist ein Hash/Dictionary? | + | Schreibe ein Programm ''greetme'', das den Benutzer zur Eingabe eines Namens auffordert. Wenn ein Name eingegeben wurde, soll die bekannte Begrüßung ("Guten Tag <name>" bzw "Hallo!") ausgegeben werden und sich das Programm dann beenden. Wenn kein Name eingegeben wurde, soll das Programm erneut nach einem Namen fragen. |
+ | Aufruf des Programms: | ||
+ | ./greetme | ||
+ | Ausgabe/Eingabe: | ||
+ | <file> | ||
+ | Bitte geben Sie Ihren Namen ein: | ||
+ | Bitte geben Sie Ihren Namen ein: Klaus | ||
+ | Guten Tag Klaus! | ||
+ | </file> | ||
+ | Ausgabe/Eingabe: | ||
+ | <file> | ||
+ | Bitte geben Sie Ihren Namen ein: Karlfriedrich | ||
+ | Hallo! | ||
+ | </file> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====== Datentypen (III): Hash/Array/Dictionary ====== | ||
+ | Erklärung: Wie kann ich mir zu einem Wert (z.B. einem Namen) einen weiteren Wert merken (z.B. das Alter)? Oft ist es nützlich, zusätzlich zu einem bekannten Wert (dem Schlüssel) einen weiteren Wert zu kennen (den "Wert"). | ||
+ | |||
+ | Beispiel: | ||
+ | * Telefonbuch: Schlüssel = Name, Wert = Telefonnummer | ||
+ | * | ||
+ | |||
+ | Wie kann man sich die Datenstruktur vorstellen? Bild mit Eimer und Fähnchen | ||
+ | |||
+ | === Syntaxaufgaben === | ||
* Wie lege ich einen leeren Hash an? | * Wie lege ich einen leeren Hash an? | ||
* Wie lege ich einen Hash incl. erster Elemente an? | * Wie lege ich einen Hash incl. erster Elemente an? | ||
Zeile 210: | Zeile 350: | ||
* Wie finde ich die Menge aller Schlüssel? Werte? | * Wie finde ich die Menge aller Schlüssel? Werte? | ||
* Wie iteriere ich über alle Einträge? | * Wie iteriere ich über alle Einträge? | ||
- | * Kann ich ein Array in einen Hash umwandeln? | + | * Kann ich ein Array in einen Hash umwandeln? Geht das? |
- | * Wie kann ich einen Hash in ein Array umwandeln? | + | |
+ | === Problemlösungsaufgaben === | ||
+ | Schreibe ein Programm ''statistik'', das vom Benutzer eine Eingabe erwartet. Sobald der Benutzer eine leere Zeile eingibt, gibt das Programm eine Statistik über die Häufigkeit der eingegebenen Zeichen aus. | ||
+ | |||
+ | Aufruf des Programms: | ||
+ | ./statistik | ||
+ | Ausgabe/Eingabe: | ||
+ | <file> | ||
+ | Bitte geben Sie Zeichen ein. Beenden durch Leerzeile! | ||
+ | Dies ist ein Text. Dies ist MEIN Text. Mein Text ist ein toller Text und nicht nur ein Test! | ||
+ | |||
+ | D -- 2 | ||
+ | E -- 1 | ||
+ | I -- 1 | ||
+ | M -- 2 | ||
+ | N -- 1 | ||
+ | T -- 5 | ||
+ | n -- 7 | ||
+ | -- 18 | ||
+ | ! -- 1 | ||
+ | c -- 1 | ||
+ | d -- 1 | ||
+ | e -- 12 | ||
+ | h -- 1 | ||
+ | i -- 10 | ||
+ | l -- 2 | ||
+ | . -- 2 | ||
+ | o -- 1 | ||
+ | r -- 2 | ||
+ | s -- 6 | ||
+ | t -- 10 | ||
+ | u -- 2 | ||
+ | x -- 4 | ||
+ | </file> | ||
+ | |||
+ | |||
+ | Zusatz 1: Sortiere die Statistik nach dem eingegebenen Zeichen. | ||
+ | Aufruf des Programms: | ||
+ | ./statistik | ||
+ | Ausgabe/Eingabe: | ||
+ | <file> | ||
+ | Bitte geben Sie Zeichen ein. Beenden durch Leerzeile! | ||
+ | Dies ist ein Text. Dies ist MEIN Text. Mein Text ist ein toller Text und nicht nur ein Test! | ||
+ | |||
+ | -- 18 | ||
+ | ! -- 1 | ||
+ | . -- 2 | ||
+ | D -- 2 | ||
+ | E -- 1 | ||
+ | I -- 1 | ||
+ | M -- 2 | ||
+ | N -- 1 | ||
+ | T -- 5 | ||
+ | c -- 1 | ||
+ | d -- 1 | ||
+ | e -- 12 | ||
+ | h -- 1 | ||
+ | i -- 10 | ||
+ | l -- 2 | ||
+ | n -- 7 | ||
+ | o -- 1 | ||
+ | r -- 2 | ||
+ | s -- 6 | ||
+ | t -- 10 | ||
+ | u -- 2 | ||
+ | x -- 4 | ||
+ | </file> | ||
+ | |||
+ | |||
+ | Zusatz 2: Sortiere die Statistik nach der Anzahl der Zeichen. | ||
+ | Aufruf des Programms: | ||
+ | ./statistik | ||
+ | Ausgabe/Eingabe: | ||
+ | <file> | ||
+ | Bitte geben Sie Zeichen ein. Beenden durch Leerzeile! | ||
+ | Dies ist ein Text. Dies ist MEIN Text. Mein Text ist ein toller Text und nicht nur ein Test! | ||
+ | |||
+ | -- 18 | ||
+ | e -- 12 | ||
+ | i -- 10 | ||
+ | t -- 10 | ||
+ | n -- 7 | ||
+ | s -- 6 | ||
+ | T -- 5 | ||
+ | x -- 4 | ||
+ | M -- 2 | ||
+ | D -- 2 | ||
+ | . -- 2 | ||
+ | l -- 2 | ||
+ | r -- 2 | ||
+ | u -- 2 | ||
+ | I -- 1 | ||
+ | N -- 1 | ||
+ | E -- 1 | ||
+ | h -- 1 | ||
+ | o -- 1 | ||
+ | c -- 1 | ||
+ | ! -- 1 | ||
+ | d -- 1 | ||
+ | </file> | ||
+ | |||
+ | |||
+ | Zusatz 3: Gib ein Ascii-Diagramm der Statistik aus. Die Breite der Balken soll dabei für das meist-eingegebene Zeichen auf 60 gesetzt werden. | ||
+ | Aufruf des Programms: | ||
+ | ./statistik | ||
+ | Ausgabe/Eingabe: | ||
+ | <file> | ||
+ | Bitte geben Sie Zeichen ein. Beenden durch Leerzeile! | ||
+ | Dies ist ein Text. Dies ist MEIN Text. Mein Text ist ein toller Text und nicht nur ein Test! | ||
+ | |||
+ | -- 18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
+ | e -- 12 ++++++++++++++++++++++++++++++++++++++++ | ||
+ | i -- 10 +++++++++++++++++++++++++++++++++ | ||
+ | t -- 10 +++++++++++++++++++++++++++++++++ | ||
+ | n -- 7 +++++++++++++++++++++++ | ||
+ | s -- 6 ++++++++++++++++++++ | ||
+ | T -- 5 ++++++++++++++++ | ||
+ | x -- 4 +++++++++++++ | ||
+ | D -- 2 ++++++ | ||
+ | . -- 2 ++++++ | ||
+ | M -- 2 ++++++ | ||
+ | l -- 2 ++++++ | ||
+ | u -- 2 ++++++ | ||
+ | r -- 2 ++++++ | ||
+ | E -- 1 +++ | ||
+ | N -- 1 +++ | ||
+ | I -- 1 +++ | ||
+ | d -- 1 +++ | ||
+ | ! -- 1 +++ | ||
+ | c -- 1 +++ | ||
+ | o -- 1 +++ | ||
+ | h -- 1 +++ | ||
+ | </file> | ||
- | * Aufgabe: Erstelle eine Statistik über die Häufigkeit von Zeichen, die über stdin gelesen werden (z.B. 'a': 5, 'b': 10, ...). | ||
| | ||
- | ====== IO (II) ====== | + | ====== IO (II) (wird vorr. nicht erreicht) ====== |
+ | |||
+ | ===== Datei importieren ===== | ||
+ | * Können wir Variablen aus anderen Dateien einlesen? import/include/eval/... | ||
+ | * Aufgabe: Erweitere das Programm so, dass der Benutzername in einer Konfig-Datei festgelegt wird. Das heißt, wenn kein Name als Argument übergeben wurde, soll zuerst eine Konfigurationsdatei importiert werden. Wenn in der Datei kein Name festgelegt wird oder die Datei nicht gefunden wurde, soll wie gehabt der Name auf der Eingabe abgefragt werden. | ||
+ | |||
===== Datei einlesen ===== | ===== Datei einlesen ===== | ||
* Wie kann ich eine Datei komplett einlesen? | * Wie kann ich eine Datei komplett einlesen? | ||
Zeile 235: | Zeile 513: | ||
====== Todo ====== | ====== Todo ====== | ||
* Sichtbarkeit von Variablen | * Sichtbarkeit von Variablen | ||
+ | |||
+ | * [[git]] | ||