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

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Imperative Programmierung
der Universität Oldenburg
OStR Dipl. Ing. Carsten Kraft
Forschungszentrum caesar
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.
Zusammenfassung der Vorwoche
Einführung in JavaScript II
Programmieren in Logik
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Java: Dynamische Datentypen
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
Programmierkurs für absolute Anfänger Listen und Arrays Caren Brinckmann Sommersemester 2005.
Funktion defined Die Funktion defined testet, ob eine Variable einen anderen Wert als undef enthält. Ist der Wert undef, so wird falsch zurückgegeben,
Flussdiagramm: längster Laut und seine Dauer
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
ARRAY oder FELD oder VEKTOR
Polymorphie (Vielgestaltigkeit)
Robotik mit LEGO Mindstorms
Perl-Grundlagen Teile der Präsentation von A. Grupp,
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung Funktionen und Parameter
Imperative Programmierung
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
DVG Ablaufsteuerung
Marcus Haller & René Schulze
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Einführung in die Programmiersprache C 1
Java programmieren mit JavaKara
Informatik 1 Übung 2.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Debugging in Lua Universität zu Köln Re-usable Content in 3D und Simulationssystemen Prof. Dr. Manfred Thaller Referent: Artur Wilke.
Präsentation C Tutorium von Daniel J. Nowak Folie 1 C Tutorium.
FORTRAN 77.
Informatik I for D-MAVT
PHP Basic.
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Einführung in PHP.
Einführung in PHP 5.
Datentypen: integer, char, string, boolean
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
BMEVIEEA100 Grundlagen der Programmierung
PHP: Operatoren und Kontrollstrukturen
Zeichenketten in PASCAL
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen.
1 Tagesüberblick 4 Lösung Hausaufgabe/Fragen Mustervergleiche.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Übersicht Nachtrag zu Ausdrücken
1 Tagesüberblick 5 Lösung Hausaufgabe/Fragen Assoziative Felder Funktionen zu Variablenbehandlung.
Anführungszeichen?! echo 'Apfel$atf'; // ergibt: Apfel$aft
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Programmierungssprache PERL
(Syntax, Strings/Zahlen, Variablen, Arrays)
1 Tagesüberblick 7 Lösung Hausaufgabe/Fragen mehrdimensionale Datenstrukturen Module Fehlersuche Zusammenfassung Feedback.
MATLAB Control Statements.
Delphi Chars und Strings
Variablen und Datentypen
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Datentypen: integer, char, string, boolean
 Präsentation transkript:

Programmierkurs für absolute Anfänger  Wahrheitswerte, Operatoren und Schleifen Caren Brinckmann Sommersemester 2005 http://www.coli.uni-saarland.de/~cabr/teaching.php

Ü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

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

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

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

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

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

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

weitere Funktionen Wurzelfunktion: sqrt $zahl = 15; $wurzel = sqrt($zahl); ## -> 3.872... 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 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ü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

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

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

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

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

Ü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

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

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

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

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

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

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