Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Übungen 10 Leute haben das erste Übungsblatt allein bearbeitet bzw. separat abgegeben. Wichtig: Übungspartner finden! Außerdem: Lösungen nur einmal abgeben.

Ähnliche Präsentationen


Präsentation zum Thema: "Übungen 10 Leute haben das erste Übungsblatt allein bearbeitet bzw. separat abgegeben. Wichtig: Übungspartner finden! Außerdem: Lösungen nur einmal abgeben."—  Präsentation transkript:

0 Programmierkurs für absolute Anfänger
 Wahrheitswerte, Operatoren und Schleifen Caren Brinckmann Sommersemester 2005

1 Übungen 10 Leute haben das erste Übungsblatt allein bearbeitet bzw. separat abgegeben. Wichtig: Übungspartner finden! Außerdem: Lösungen nur einmal abgeben. Aufgaben gründlich durchlesen, bevor losprogrammiert wird! Erst das Programm mit Hilfe von Kommentaren strukturiert entwerfen, dann programmieren. Auf dem eigenen Notebook programmieren? Freitag, , 10:45h im CIP-Raum: Installation von Perl unter Windows auf Euren Notebooks Programmierkurs für absolute Anfänger – Sitzung 3

2 Vorlesungsstoff Powerpoint-Folien ausdrucken und durcharbeiten
Literatur: Ziegler, J. (2002): Programmieren lernen mit Perl. Springer. Schwartz, R. & Christiansen, T. (1997): Learning Perl. O'Reilly. Online-Doku: neue Sprechstunde: Do 14-15h, Zi. 4.08 Vorlesungsstoff rechtzeitig nachbereiten, so dass die Übungsaufgaben in der Übung gelöst werden können. Programmierkurs für absolute Anfänger – Sitzung 3

3 UNIX / Linux-Kenntnisse
Dies ist kein UNIX/Linux-Kurs... Literatur im Handapparat in der Bibliothek: Wolfinger, Christine (2002): Keine Angst vor UNIX. Springer. Linux-Kursmaterial: Liste elementarer Unix-Befehle: sgi/sgi/unixeinfuehrung1 Buch und/oder freundlichen Helfer schnappen, und elementare Grundkenntnisse selbstständig aneignen! Angebot von Martin: Fr, , 14:30h im CIP-Raum: Einführung in elementare Unix-Befehle und Beantwortung aller sonstigen Fragen. Wer hat Interesse? Programmierkurs für absolute Anfänger – Sitzung 3

4 Wiederholung (1) Namen von Perl-Programmen enden auf .pl
Der Quellcode des Programms kann mit einem beliebigen Texteditor erstellt und gespeichert werden. Das Perl-Programm meinprogramm.pl wird ausgeführt mit folgendem Befehl: perl -w meinprogramm.pl Wenn der Perl-Interpreter keine Fehlermeldungen ausgibt und das Programm läuft, heißt das nur, dass es syntaktisch korrekt ist. Trotzdem kann es noch semantische Fehler enthalten. Jedes Programm muss daher ausgiebig getestet werden: Nicht nur den Standardfall testen, sondern alle Möglichkeiten, die auftreten können, abdecken! Programmierkurs für absolute Anfänger – Sitzung 3

5 Wiederholung (2) Innerhalb eines Perl-Programms wird jede Anweisung mit einem Semikolon ; abgeschlossen. Kommentarzeilen beginnen mit # In Variablen werden Werte gespeichert. Namen von skalaren Variablen, d.h. Variablen, die genau einen Wert speichern, beginnen in Perl mit dem Dollar-Zeichen $ Lesen einer Zeile (mit Zeilentrennzeichen) von der Standardeingabe (Tastatur): $zeile = <STDIN>; Funktionsaufruf: Funktionsname(Argument) $wortlaenge1 = length($wort); $wortlaenge2 = length("abakadabra"); Funktion chomp schneidet das letzte Zeichen einer Zeichenkette ab, wenn dieses das Zeilentrennzeichen \n ist. chomp $zeile; ## Variante: chomp($zeile); Programmierkurs für absolute Anfänger – Sitzung 3

6 Wiederholung (3) Verwechslungsgefahr: Bedingte Anweisungen:
arithmetischer Gleichheitsoperator == Zuweisungsoperator = Bedingte Anweisungen: if (Bedingung_1) { Anweisungsblock_1 } elsif (Bedingung _2) { Anweisungsblock_2 ... } else { Anweisungsblock_sonst } Programmierkurs für absolute Anfänger – Sitzung 3

7 Nachtrag: \t und ** Häufig benötigtes Sonderzeichen: Tabulator-Zeichen \t print "$spalte1\t$spalte2\t$spalte3\n"; Weiterer arithmetischer Operator: Exponent ** $x = 2 ** 7;  27 = 128 $y = 9 ** 2;  92 = 81 Programmierkurs für absolute Anfänger – Sitzung 3

8 weitere Funktionen Wurzelfunktion: sqrt
$zahl = 15; $wurzel = sqrt($zahl); ## -> Nachkommastellen abschneiden: int $ganzezahl = int($wurzel); ## -> 3 Zufallszahl: rand rand($zahl) liefert eine zufällige Kommazahl zwischen 0 (inklusive) und $zahl (exklusiv). $zufallskommazahl = rand($zahl); ## Zufallszahl zwischen 0 und mehrere Funktionen/Operatoren in einem Ausdruck: $ganzezufallszahl = int(rand($zahl) + 1); ## ganze Zufallszahl zwischen 1 und 15 (inkl.) Programmierkurs für absolute Anfänger – Sitzung 3

9 Schachtelung von Blöcken
Innerhalb eines if-Blocks kann es weitere if-Blöcke geben  Schachtelung Schachtelung kann beliebig tief werden. wichtig: korrekte Klammerstruktur und korrekte Einrücktiefe! if ($zahl = = 1) { ... if ($teiler == 0) { } } else { if ($teiler > 0) { Programmierkurs für absolute Anfänger – Sitzung 3

10 Zahlen und Zeichenketten
Eine Zeichenkette, die nur aus Ziffern besteht, kann als Zahl interpretiert werden. $string = "43"; $zahl = 27; $resultat = $string + $zahl;  $resultat erhält den Wert 70 Eine Zeichenkette, die keine Ziffern enthält, wird im arithmetischen Kontext als 0 interpretiert. $resultat = "Hallo" + 5;  $resultat erhält den Wert 5 Programmierkurs für absolute Anfänger – Sitzung 3

11 Initialisierung von Variablen
Eine Variable, die nicht initialisiert wurde, d.h. der noch nie ein Wert zugewiesen wurde, hat in Perl den speziellen Wert undef. Wenn eine nicht-intialisierte skalare Variable in einem Ausdruck verwendet wird, so erhält sie automatisch als initialen Wert den Null-String "". $resultat = $undefiniert + 2;  $resultat erhält den Wert 2 Nach Möglichkeit sollten alle Variablen bei ihrem ersten Vorkommen im Programm initialisiert werden. Programmierkurs für absolute Anfänger – Sitzung 3

12 Wahrheitswerte in Perl
falsch: 0 (die Zahl 0) "0" (die Zeichenkette 0) "" (die leere Zeichenkette) undef (Wert einer Variablen, die noch nicht initialisiert wurde) wahr: alle anderen Werte! Programmierkurs für absolute Anfänger – Sitzung 3

13 Beispiel: Wahrheitswerte
if($a) { print "A";} else { print "B";} if(0) { print "C";} else { print "D";} if("0"){ print "E";} else { print "F";} if("") { print "G";} else { print "H";} if($x) { print "I";} else { print "J";} if(3.1415) { print "K";} else { print "L";} if("abel") { print "M";} else { print "N";} if($x == $a) { print "O";} else { print "P";} if($x = $a) { print "Q";} else { print "R";} Programmierkurs für absolute Anfänger – Sitzung 3

14 Flaggen und Boole'sche Variablen
Flagge: Variable, die nur kleine ganzzahlige Werte annimmt und an bestimmten Stellen Auskunft darüber gibt, ob bestimmte Bedingungen erfüllt sind oder nicht. Boole'sche Variable: Flagge, die nur zwei Werte annimmt. $gefunden = 0; # Suche... if ($gefunden) { # ... } else { } Programmierkurs für absolute Anfänger – Sitzung 3

15 Zuweisungsoperatoren
$zahl = $zahl + 2; äquivalent: $zahl += 2; ebenso: -= *= /= %= **= .= $zahl = 3; $zahl += 5; $zahl -= 6; $zahl *= 10; $zahl /= 4; $zahl %= 3; $zahl **= 3; $string = "rosa"; $string .= "rot"; Ergebnis: $zahl ist gleich 8 Programmierkurs für absolute Anfänger – Sitzung 3

16 Inkrement- und Dekrementoperator
$zahl = $zahl + 1; einfacher: $zahl += 1; noch einfacher: $zahl++; ebenso: $zahl = $zahl - 1; einfacher: $zahl -= 1; noch einfacher: $zahl--; Programmierkurs für absolute Anfänger – Sitzung 3

17 Zeichenketten-Wiederholungsoperator
$string = "so" x 3;  sososo $string x= 2;  sosososososo $laut = "t"; $wiederholungen = 5; $zeichenkette = $laut x $wiederholungen; Programmierkurs für absolute Anfänger – Sitzung 3

18 Arithmetische Vergleichsoperatoren
Vergleich von Zahlen: == gleich != ungleich < kleiner > größer <= kleiner gleich >= größer gleich Programmierkurs für absolute Anfänger – Sitzung 3

19 Beispiel $x=3.000; $y=3.001; $z="3"; if($x == $y) {print "A";}
if($x != $y) {print "B";} if($x < $y) {print "C";} if($x <= $y) {print "D";} if($x > $y) {print "E";} if($x >= $y) {print "F";} if($x == $z) {print "G";} if($y != $z) {print "H";} Programmierkurs für absolute Anfänger – Sitzung 3

20 Rundungsfehler Durch die interne Darstellung von Kommazahlen kann es zu Rundungsfehlern kommen. $wert1 = 14.3; $wert2 = ; if ($wert1 == $wert2) { print "wert1 ist gleich wert2\n"; } else { print "wert1 und wert2 sind verschieden\n"; } Fazit: Vorsicht beim Vergleich von Kommazahlen! Programmierkurs für absolute Anfänger – Sitzung 3

21 Lexikographische Vergleichsoperatoren
Vergleich von Zeichenketten alphabetische Sortierung: die ASCII-Werte der Buchstaben werden verglichen eq gleich ne ungleich lt kleiner gt größer le kleiner gleich ge größer gleich Programmierkurs für absolute Anfänger – Sitzung 3

22 Beispiel $s1="abba"; $s2="abbb"; if($s1 eq $s2) {print "A";}
if($s1 ne $s2) {print "B";} if($s1 lt $s2) {print "C";} if($s1 le $s2) {print "D";} if($s1 gt $s2) {print "E";} if($s1 ge $s2) {print "F";} $x=24; $y=1111; if($x gt $y) {print "G";} Programmierkurs für absolute Anfänger – Sitzung 3

23 Übung Folgendes Programm enthält einen beliebten Fehler. Das Programm druckt "Alter Schwede!". Warum? $name = "Otto"; # irgendein Code, der $name nicht verändert # ... if ($name = = "Samar") { print "Alter Schwede!\n"; } Programmierkurs für absolute Anfänger – Sitzung 3

24 Logische Operatoren – Motivation
if ($kontostand <= 0) { if ($dispo == 0) { print "Sie dürfen kein Geld abheben.\n"; } if (($kontostand <= 0) && ($dispo == 0)) { print "Sie dürfen kein Geld abheben.\n"; } äquivalent: Programmierkurs für absolute Anfänger – Sitzung 3

25 Logische Operatoren nicht: ! und not und: && und and oder: || und or
Die Varianten unterscheiden sich nur in ihrer Präzedenz: ! hat eine höhere Präzedenz als not, && eine höhere Präzedenz als and, und || hat eine höhere Präzedenz als or. Programmierkurs für absolute Anfänger – Sitzung 3

26 Präzedenz der Operatoren
in absteigender Präzedenz: ++ -- (Inkrement, Dekrement) ** (Exponent) ! + - (logisches nicht, unäres plus, unäres minus) * / % x (mal, durch, modulo, String-Wiederholung) + - . (binäres plus, binäres minus, String-Konkatenation) < > <= >= lt gt le ge == != eq ne && (logisches und) || (logisches oder) = += -= *= etc. (Zuweisungsoperatoren) not (logisches nicht) and (logisches und) or (logisches oder) Programmierkurs für absolute Anfänger – Sitzung 3

27 Beispiel $x=1; $y=2; if ($y<$x || $y==2) { print "A"; }
if ($y<$x && $y==2) { print "B"; } if (! ($x<$y)) { print "C"; } if (! $x<$y ) { print "D"; } if (! $x) { print "E"; } if (!($y<$x) && $y==2 || $x==3) { print "F"; } if (!($y<$x && $y==2 || $x==3)) { print "G"; } Programmierkurs für absolute Anfänger – Sitzung 3

28 Übung Schreibe ein Programm, das Folgendes leistet: Lösung:
Drei Zahlen x, y und z werden eingelesen. Wenn y zwischen x und z liegt, wird "DRINNEN" ausgegeben. Lösung: $x=<STDIN>; chomp $x; $y=<STDIN>; chomp $y; $z=<STDIN>; chomp $z; if (($x<$y && $y<$z) || ($z<$y && $y<$x)) { print "DRINNEN\n"; } Programmierkurs für absolute Anfänger – Sitzung 3

29 Abgekürzte Auswertung
Ein komplexer Ausdruck wird immer von links nach rechts ausgewertet. Der Perl-Interpreter bricht die Auswertung ab, sobald das Ergebnis feststeht: Ausdruck1 && Ausdruck2  Wenn Ausdruck1 falsch ist, wird Ausdruck2 gar nicht mehr ausgewertet. Ausdruck1 || Ausdruck2  Wenn Ausdruck1 wahr ist, wird Ausdruck2 gar nicht mehr ausgewertet. Beispiel: Division durch 0 vermeiden $a = 0; $b = 3; $resultat = $a && ($b / $a); Programmierkurs für absolute Anfänger – Sitzung 3

30 while-Schleife Beispiel: Alle Zahlen von 1 bis 1000 aufzählen.
print "1\n"; print "2\n"; print "3\n"; ... $zahl = 1; while ($zahl<=1000) { print "$zahl\n"; $zahl++; } Syntax: while (Bedingung) { Anweisungsblock } Anweisungsblock wird ausgeführt, solange Bedingung wahr ist. Programmierkurs für absolute Anfänger – Sitzung 3

31 Programme mit Daten füttern
Normalfall: Standardeingabe STDIN wird von der Tastatur bezogen. Ein Programm kann seine Standardeingabe aber auch aus einer Datei beziehen: Aufruf auf der Kommandozeile mit dem "<"- Symbol Beispiel: $ perl programm.pl < datei.txt Durchforsten der Standardeingabe: Zeile für Zeile aus der Standardeingabe lesen, bis diese leer ist. while ($zeile = <STDIN>) { ## mach was mit $zeile } Übung: Programm, das eine Datei mit Namen einliest, und nur die Namen ausgibt, die mehr als 5 Buchstaben haben. Programmierkurs für absolute Anfänger – Sitzung 3

32 Funktion split Die Funktion split teilt eine Zeichenkette in mehrere Zeichenketten auf. Syntax: split(/Trennzeichen/,Zeichenkette) Beispiel: $zeile1 = "g-40"; ($laut1,$dauer1) = split(/-/,$zeile1); print "Laut: $laut1\nDauer: $dauer1\n"; $zeile2 = "g\t40"; ## Tabulatorzeichen \t ($laut2,$dauer2) = split(/\t/,$zeile2); print "Laut: $laut2\nDauer: $dauer2\n"; $zeile3 = "h\t50-70"; ($laut3,$dauer3) = split(/\t/,$zeile3); print "Laut: $laut3\nDauer: $dauer3\n"; Programmierkurs für absolute Anfänger – Sitzung 3

33 Beispiel: Lautdauern aufsummieren
lautdauern.txt gesamtdauer.pl g,40 u:,156 t,65 @,52 n,80 t,72 a:,267 k,91 $gesamtdauer = 0; while ($zeile = <STDIN>) { chomp $zeile; ($laut,$dauer) = split(/,/,$zeile); $gesamtdauer += $dauer; } print "Gesamtdauer: $gesamtdauer\n"; Aufruf: perl -w gesamtdauer.pl < lautdauern.txt Programmierkurs für absolute Anfänger – Sitzung 3

34 Beispiel: Passwortabfrage
Folgendes Programm fordert den Benutzer solange zur Eingabe eines Passworts auf, bis er das Passwort "coli" eingibt: $passwort = ""; while ($passwort ne "coli") { print "Passwort: "; $passwort = <STDIN>; chomp $passwort; } print "Das Passwort ist richtig!\n"; Programmierkurs für absolute Anfänger – Sitzung 3


Herunterladen ppt "Übungen 10 Leute haben das erste Übungsblatt allein bearbeitet bzw. separat abgegeben. Wichtig: Übungspartner finden! Außerdem: Lösungen nur einmal abgeben."

Ähnliche Präsentationen


Google-Anzeigen