Dies ist eine alte Version des Dokuments!
Vorbereitung
Jeder Teilnehmer öffnet ein Pad und verlinkt es im 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.
git
Hello World
interaktive Shell
Quellcode-Datei
Problemlösungsaufgaben
Schreibe ein Programm hello-world
, das „hello world“ ausgibt.
Aufruf des Programms:
./hello-world
Ausgabe:
hello world
Variablen
Erklärung: Wofür sind Variablen gut?
Syntaxaufgaben
Was sind die Namenskonventionen/Wie dürfen Variablen heißen?
Beispiele für nicht erlaubte Variablennamen?
Wird Gross/Kleinschreibung unterschieden?
Wie weise ich einer Variable einen Wert zu?
Muss ich Variablen deklarieren?
Wie lese ich den Wert einer Variablen wieder aus/wie benutze ich den Wert einer Variablen?
Problemlösungsaufgaben
Schreibe ein Programm hello-name
, das „hello“ und einen in einer Variablen vorhandenen Namen ausgibt! Also z.B. „hello Klaus“.
Aufruf des Programms:
./hello-name
Ausgabe:
hello Klaus
Datentypen (I): Skalar
Erklärung: Warum werden Datentypen unterschieden?
Zahl
Syntaxaufgaben
Wie stelle ich eine (Dezimal-)zahl dar?
Wie berechne ich die folgenden arithmetischen Operationen:
addieren
subtrahieren
multiplizieren
dividieren
potenzieren
Was ist das Ergebnis von:
3 * 5 + 2
?
2 + 5 * 3
?
(2 + 5) * 3
?
2 + (5 * 3)
?
(0.1+0.7)*10
?
10/3
?
10.0 / 3
?
10.0 / 3 / 10
?
10.0 / 3 / 10 * 3 * 10
?
10.0 / 3 / 10 * 10 * 3
?
10000000000000000.0 + 1
?
10000000000000000 + 1
?
Welche Größenbeschränkungen kennt meine Sprache? Mit welcher Genauigkeit arbeitet sie?
Problemlösungsaufgaben
Schreibe ein Programm rechner
, das die Variablen 'zahl1' und 'zahl2' mit allen oben gefundenen Rechenoperatoren (addieren, subtrahieren, multiplizieren, dividieren, potenzieren) verknüpt und jeweils das Ergebnis ausgibt.
Aufruf des Programms:
./rechner
Ausgabe: (wenn zahl1 = 6 ist, und zahl2 = 2 ist)
8
4
12
3
9
String
Erklärung: Wofür sind Strings gut? Wo werden Strings verwendet?
Syntaxaufgaben
Welche Arten einen String zu definieren gibt es? Und wie unterscheiden die sich?
Wie kann ich Strings aneinanderfügen?
Wie kann ich Variablen in Text einbauen?
Wie kann ich die Länge eines Strings herausfinden?
Was ist „1000“ + 2
? Was ist „1000“ * 2
?
Problemlösungsaufgaben
Schreibe ein Programm greeter
so, dass ein ganzer Satz ausgegeben wird, z.B. „Hallo Klaus!“. Dabei soll der Name Klaus aus einer Variablen übernommen werden.
Aufruf des Programms:
./greeter
Ausgabe: (wenn name = 'Klaus' ist)
Hallo Klaus!
Boolean
Syntaxaufgaben
Wie kann ich Zahlen vergleichen? Größer, kleiner, gleich?
Wie kann ich das Ergebnis eines Vergleiches sehen?
Wie kann ich Strings vergleichen? Gleich, ungleich?
Wie kann ich Zahlen und Strings vergleichen?
Wie kann ich Vergleiche verknüpfen? Und, Oder, Nicht, …?
Wie kann ich testen, ob eine Zahl zwischen zwei Werten liegt?
Was ist der Wahrheitswert von:
0
0.0
1
0.1
„0“
„“
„true“
„false“
(0.1+0.7)*10 == 8
undefinierte Werte
Syntaxaufgaben
Welches Schlüsselwort steht für den undefinierten Wert?
Was passiert, wenn ich einen undefinierten Wert als Zahl, Text oder Boolean verwende?
Bedingte Anweisung und Verzweigung
Schleifen
Erklärung: Welche praktischen Probleme kann man mit Schleifen lösen? Wenn man Dinge mehrmals ausführen möchte, benutzt man eine Schleife.
Wie formuliert man eine kopfgesteuerte Schleife?
Wie formuliert man eine fußgesteuerte Schleife?
Wie formuliert man eine Zählschleife?
Durchgängiges Beispiel:
Datentypen (II): Array
Erklärung: was ist ein Array/eine Liste? Container für mehrere Dinge hintereinander
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 Elemente einzeln wieder aus.
Weise dem zweiten Element der Liste einen neuen Wert zu.
Welchen Wert enthält die Variable liste
am Ende von folgendem Pseudocode:
a = "eins"
b = 2
c = 3.0
liste = [a,b,c]
a = 5
Wie füge ich am Ende bzw. am Anfang einer Liste ein oder mehrere Elemente an?
Wie schneide ich sie ab?
Wie füge ich zwei Listen zusammen?
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 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?
Was ist der Wahrheitswert von:
[], [''], [0], [False]
Die Argumentenliste
Wofür ist die Argumentenliste gut?
Aufgabe
Erweitere das hello-world Programm so, dass es es für alle übergebenen Namen einen Gruß ausgibt. Also z.B. so:
./hello Klaus Frank Thomas
Ausgabe:
Guten Tag Klaus!
Guten Tag Frank!
Guten Tag Thomas!
Zusatzaufgaben
Erweitere das hello-world-Programm so, dass wenn kein Argument übergeben wurde, „Hello World“ ausgegeben wird.
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
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.
IO (I)
Diskussionsfrage: Auf welche Arten kann ein Programm mit der Außenwelt kommunizieren?
STDIN
Wie kann ich Eingaben von der Tastatur/stdin einlesen?
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
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.
Datentypen (III): Hash
Erklärung: was ist ein Hash/Dictionary?
Wie lege ich einen leeren Hash an?
Wie lege ich einen Hash incl. erster Elemente an?
Wie füge ich neue Elemente hinzu?
Wie lese ich ein Element aus?
Wie verändere ich Elemente, die schon im Hash drin sind?
Wie überprüfe ich, ob mein Hash zu einem bestimmten Schlüssel einen Wert enthält?
Wie finde ich die Menge aller Schlüssel? Werte?
Wie iteriere ich über alle Einträge?
Kann ich ein Array in einen Hash umwandeln?
Wie kann ich einen Hash in ein Array umwandeln?
Aufgabe: Erstelle eine Statistik über die Häufigkeit von Zeichen, die über stdin gelesen werden (z.B. 'a': 5, 'b': 10, …).
IO (II)
Datei einlesen
Aufgabe: In einer von uns bereitgestellten Log-Datei, finde die Häufigkeit der Worte „POST“, „GET“, „200“, „500“ und „404“ heraus.
Serialisierung
Wie kann ich Datenstrukturen im YAML-Format speichern?
Wie kann ich Datenstrukturen aus YAML-Dateien einlesen?
Wie kann ich Datenstrukturen im JSON-Format speichern?
Wie kann ich Datenstrukturen aus JSON-Dateien einlesen?
Reguläre Ausdrücke
Einführung in Reguläre Ausdrücke mit egrep
Wie kommen die RE in meine Sprache rein?
Wie speichere ich die Ergebnisse eines Treffers in ein Array?
Wie benutze ich einen Regulären Ausdruck um die Gültigkeit einer Eingabe als Telefonnumer zu überprüfen?
Subroutinen/Funktionen
Todo