programmierkurs für absolute anfänger cabr/teaching.php wahrheitswerte, operatoren und schleifen...
Post on 05-Apr-2015
103 Views
Preview:
TRANSCRIPT
Programmierkurs für absolute Anfänger
http://www.coli.uni-saarland.de/~cabr/teaching.php
Wahrheitswerte, Operatoren und Schleifen
Caren BrinckmannSommersemester 2005
Programmierkurs für absolute Anfänger – Sitzung 3 2
Ü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, 29.4.05, 10:45h im CIP-Raum: Installation von Perl unter Windows auf Euren Notebooks
Programmierkurs für absolute Anfänger – Sitzung 3 3
Vorlesungsstoff Powerpoint-Folien ausdrucken und durcharbeiten Literatur:
Ziegler, J. (2002): Programmieren lernen mit Perl. Springer.http://www.algorilla.de/index.php?page=download.con
Schwartz, R. & Christiansen, T. (1997): Learning Perl.O'Reilly.
Online-Doku: http://perldoc.perl.org/ 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 4
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:
http://ruthless.zathras.de/facts/linux/ Liste elementarer Unix-Befehle:
http://www.zki.hs-magdeburg.de/info/kontakt/service/hardware/sgi/sgi/unixeinfuehrung1
Buch und/oder freundlichen Helfer schnappen, und elementare Grundkenntnisse selbstständig aneignen!
Angebot von Martin: Fr, 29.4.05, 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 5
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 6
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 7
Wiederholung (3) Verwechslungsgefahr:
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 8
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 9
weitere Funktionen Wurzelfunktion: sqrt
$zahl = 15;$wurzel = sqrt($zahl); ## -> 3.872...
Nachkommastellen abschneiden: int$ganzezahl = int($wurzel); ## -> 3
Zufallszahl: randrand($zahl) liefert eine zufällige Kommazahl zwischen 0 (inklusive) und $zahl (exklusiv).$zufallskommazahl = rand($zahl);## Zufallszahl zwischen 0 und 14.99999...
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 10
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 11
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 12
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 13
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 14
Beispiel: Wahrheitswerte$a=3;
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 15
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 16
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";
Programmierkurs für absolute Anfänger – Sitzung 3 17
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 18
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 19
Arithmetische Vergleichsoperatoren
Vergleich von Zahlen:
== gleich
!= ungleich
< kleiner
> größer
<= kleiner gleich
>= größer gleich
Programmierkurs für absolute Anfänger – Sitzung 3 20
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 21
Rundungsfehler Durch die interne Darstellung von Kommazahlen kann es zu
Rundungsfehlern kommen.
$wert1 = 14.3;$wert2 = 100 + 14.3 - 100;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 22
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 23
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 24
Ü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 25
Logische Operatoren – Motivationif ($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 26
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 27
Präzedenz der Operatorenin 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 28
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 29
Übung Schreibe ein Programm, das Folgendes leistet:
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 30
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 31
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 32
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 33
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 34
Beispiel: Lautdauern aufsummieren
$gesamtdauer = 0;while ($zeile = <STDIN>) {
chomp $zeile;($laut,$dauer) = split(/,/,$zeile);$gesamtdauer += $dauer;
}print "Gesamtdauer: $gesamtdauer\n";
g,40u:,156t,65@,52n,80
t,72a:,267k,91
lautdauern.txt gesamtdauer.pl
Aufruf:perl -w gesamtdauer.pl < lautdauern.txt
Programmierkurs für absolute Anfänger – Sitzung 3 35
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";
top related