Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


programmieren_lernen:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Nächste Überarbeitung Beide Seiten, nächste Überarbeitung
programmieren_lernen:start [2014/05/12 05:57]
ingo_wichmann [Schleifen]
programmieren_lernen:start [2014/05/17 14:33]
ingo_wichmann
Zeile 1: Zeile 1:
 +====== Vorbereitung ======
 +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. ​
 ====== git ====== ====== git ======
 [[git]] [[git]]
Zeile 4: Zeile 10:
   * interaktive Shell   * interaktive Shell
   * Quellcode-Datei   * Quellcode-Datei
 +=== Problemlösungsaufgaben ===
 +Schreibe ein Programm ''​hello-world'',​ das "hello world" ausgibt.
 +
 +Aufruf des Programms:
 +  ./​hello-world
 +Ausgabe:
 +<​file>​
 +hello world
 +</​file>​
 ====== Variablen ====== ====== Variablen ======
-Erklärung: ​Variablen ​sind Namen für Werte, ...+Erklärung: ​Wofür ​sind Variablen gut?
  
-  ​* Was sind die Namenskonventionen/​Wie dürfen Variablen heißen? Wird Gross/​Kleinschreibung unterschieden?​ +=== Syntaxaufgaben === 
-  * Wie weise ich einer Variable einen Wert zu? Muss ich Variablen deklarieren?​+  ​* 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?   * Wie lese ich den Wert einer Variablen wieder aus/wie benutze ich den Wert einer Variablen?
-  * Gibt es andere Namen für "​Variable"?​ 
  
-Durchgängiges Beispiel: +=== Problemlösungsaufgaben === 
-  ​* ​Schreibe ein Programm, das "Hallo" und einen in einer Variablen vorhandenen Namen ausgibt! Also z.B. "Hallo Klaus"​.+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: 
 +<​file>​ 
 +hello Klaus 
 +</​file>​
  
 ===== Datentypen (I): Skalar ===== ===== Datentypen (I): Skalar =====
-Erklärung: ​Werte haben verschiedene Typen+Erklärung: ​Warum werden Datentypen unterschieden?​
  
 ==== Zahl ==== ==== Zahl ====
 +=== Syntaxaufgaben ===
   * Wie stelle ich eine (Dezimal-)zahl dar?    * Wie stelle ich eine (Dezimal-)zahl dar? 
   * Wie berechne ich die folgenden arithmetischen Operationen:​   * Wie berechne ich die folgenden arithmetischen Operationen:​
Zeile 32: Zeile 57:
     * ''​(2 + 5) * 3''?​     * ''​(2 + 5) * 3''?​
     * ''​2 + (5 * 3)''?​     * ''​2 + (5 * 3)''?​
 +    * ''​(0.1+0.7)*10''?​
     * ''​10/​3''?​     * ''​10/​3''?​
     * ''​10.0 / 3''?​     * ''​10.0 / 3''?​
Zeile 37: Zeile 63:
     * ''​10.0 / 3 / 10 * 3 * 10''? ​     * ''​10.0 / 3 / 10 * 3 * 10''? ​
     * ''​10.0 / 3 / 10 * 10 * 3''?​     * ''​10.0 / 3 / 10 * 10 * 3''?​
-    * 10000000000000000.0 + 1?  +    * ''​10000000000000000.0 + 1''​?  
-    * 10000000000000000 + 1+    * ''​10000000000000000 + 1''​?
-  * Gibt es einen Tausendertrenner?+
   * Welche Größenbeschränkungen kennt meine Sprache? Mit welcher Genauigkeit arbeitet sie?   * 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)
 +<​file>​
 +8
 +4
 +12
 +3
 +9
 +</​file>​
  
 ==== String ==== ==== String ====
 +Erklärung: Wofür sind Strings gut? Wo werden Strings verwendet?
  
-  * Wie definiere ich einen String? +=== Syntaxaufgaben === 
-  * Welche ​unterschiedlichen ​Arten gibt es? Und wie unterscheiden die sich?+  * Welche Arten einen String zu definieren ​gibt es? Und wie unterscheiden die sich?
   * Wie kann ich Strings aneinanderfügen?​   * Wie kann ich Strings aneinanderfügen?​
-  * Gibt es sowas wie sprintf? 
   * Wie kann ich Variablen in Text einbauen?   * Wie kann ich Variablen in Text einbauen?
   * Wie kann ich die Länge eines Strings herausfinden?​   * Wie kann ich die Länge eines Strings herausfinden?​
-  * Was ist "​1000"​ + 1?+  * Was ist ''​"​1000"​ + 2''?​ Was ist ''"​1000"​ * 2''​?
  
-Durchgängiges Beispiel: +=== Problemlösungsaufgaben === 
-  * Ergänze das hello-world ​Programm so, dass ein ganzer Satz ausgegeben wird, z.B. "Hallo Klaus!"​. ​Verwende dabei Interpolation.+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) 
 +<​file>​ 
 +Hallo Klaus! 
 +</​file>​
  
 ==== Boolean ==== ==== Boolean ====
 +=== Syntaxaufgaben ===
   * Wie kann ich Zahlen vergleichen?​ Größer, kleiner, gleich?   * Wie kann ich Zahlen vergleichen?​ Größer, kleiner, gleich?
-  * Wie kann ich das Ergebnis eines Vergleiches ​in Perl sehen?  +  * Wie kann ich das Ergebnis eines Vergleiches sehen?  
-    * Einschub: Ternärer Operator+    * Einschub ​(für Perl): Ternärer Operator
   * Wie kann ich Strings vergleichen?​ Gleich, ungleich?   * Wie kann ich Strings vergleichen?​ Gleich, ungleich?
   * Wie kann ich Zahlen und Strings vergleichen?​   * Wie kann ich Zahlen und Strings vergleichen?​
Zeile 72: Zeile 118:
     * "​true"​     * "​true"​
     * "​false"​     * "​false"​
 +    * ''​(0.1+0.7)*10 == 8''​
  
 ==== undefinierte Werte ==== ==== undefinierte Werte ====
 +=== Syntaxaufgaben ===
   * 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 ​zur ausführen ​bringen?+  * Wie kann ich abhängig von einer Bedingung verschiede Anweisungen ​zum Ausführen ​bringen?
  
 Durchgängiges Beispiel: Durchgängiges Beispiel:
Zeile 84: Zeile 132:
  
 ====== Schleifen ====== ====== Schleifen ======
-Erklärung: Wenn man Dinge mehrmals ausführen möchte, benutzt man eine [[wpde>​Schleife_(Programmierung)|Schleife]]. ​(Diagramm) -> Wikipedia+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 kopfgesteuerte Schleife?
   * Wie formuliert man eine fußgesteuerte Schleife?   * Wie formuliert man eine fußgesteuerte Schleife?
Zeile 93: Zeile 141:
     * der Gruß unendlich oft ausgegeben wird.     * der Gruß unendlich oft ausgegeben wird.
     * der Gruß genau 10 Mal ausgegeben wird (mit Nummerierung).     * der Gruß genau 10 Mal ausgegeben wird (mit Nummerierung).
- 
  
 ====== Datentypen (II): Array ====== ====== Datentypen (II): Array ======
Zeile 99: Zeile 146:
 Erklärung: was ist ein Array/eine Liste? Container für mehrere Dinge hintereinander Erklärung: was ist ein Array/eine Liste? Container für mehrere Dinge hintereinander
  
-  * Packe die folgenden Elemente in ein Array/eine 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.
Zeile 111: Zeile 158:
 a = 5 a = 5
 </​file>​ </​file>​
-  * Wie füge 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 schneide ich sie ab? 
   * 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?+  * 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 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: <​code>​[],​ [''​],​ [0], [False]</​code>​   * Was ist der Wahrheitswert von: <​code>​[],​ [''​],​ [0], [False]</​code>​
- 
  
 ===== Die Argumentenliste ===== ===== Die Argumentenliste =====
-Erklärung+Wofür ist die Argumentenliste gut?
  
-  * Erweitere das hello-world Programm so, dass es es den übergebenen Namen ausgibt, wenn er vorhanden ist, sonst ''​Klaus''?​ +==== Aufgabe ==== 
-  ​* Erweitere das Programm so, dass auch mehrere Namen auf der Kommandozeile übergeben werden können und alle einzeln als Gruß ausgegeben werden!+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: 
 +<​file>​ 
 +Guten Tag Klaus! 
 +Guten Tag Frank! 
 +Guten Tag Thomas! 
 +</​file>​
  
 +=== 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 ====== ====== 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.+  * 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) ====== ====== 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?​
- ​-->​ Wir wollen: Tastatur (stdin/​stdout),​ Dateien lesen als Daten, Dateien eval'​en+
 ===== STDIN ===== ===== STDIN =====
   * Wie kann ich Eingaben von der Tastatur/​stdin einlesen?   * Wie kann ich Eingaben von der Tastatur/​stdin einlesen?
Zeile 139: Zeile 197:
  
 ===== Datei importieren ===== ===== Datei importieren =====
-  * Können wir Variablen aus anderen Dateien einlesen? ​--> ​import/​include/​eval/​... +  * 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.+  * 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 ====== ====== Datentypen (III): Hash ======
Zeile 149: Zeile 207:
   * Wie lese ich ein Element aus?   * Wie lese ich ein Element aus?
   * Wie verändere ich Elemente, die schon im Hash drin sind?   * 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 finde ich die Menge aller Schlüssel? Werte?
   * Wie iteriere ich über alle Einträge?   * Wie iteriere ich über alle Einträge?
-  * Wann kann ich ein Array in einen Hash umwandeln? Wie geht das?+  * Kann ich ein Array in einen Hash umwandeln?
   * Wie kann ich einen Hash in ein Array 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, ...).   * Aufgabe: Erstelle eine Statistik über die Häufigkeit von Zeichen, die über stdin gelesen werden (z.B. '​a':​ 5, '​b':​ 10, ...).
-  ​* Aufgabe: In einer von uns bereitgestellten Log-Datei, finden Sie die Häufigkeit der Worte "​POST",​ "​GET",​ "​200",​ "​500",​ "​404"​ heraus.+  ​
 ====== IO (II) ====== ====== IO (II) ======
 ===== Datei einlesen ===== ===== Datei einlesen =====
 +  * Wie kann ich eine Datei komplett einlesen?
   * Wie kann ich den Inhalt von Dateien zeilenweise einlesen?   * Wie kann ich den Inhalt von Dateien zeilenweise einlesen?
 +
 +  * Aufgabe: In einer von uns bereitgestellten Log-Datei, finde die Häufigkeit der Worte "​POST",​ "​GET",​ "​200",​ "​500"​ und "​404"​ heraus.
 ===== Serialisierung ===== ===== Serialisierung =====
   * Wie kann ich Datenstrukturen im YAML-Format speichern?   * Wie kann ich Datenstrukturen im YAML-Format speichern?
programmieren_lernen/start.txt · Zuletzt geändert: 2023/12/27 13:18 von 91.240.118.241