270 likes | 405 Views
Programmierkurs für absolute Anfänger. Perl, Praat & bash. http://www.coli.uni-saarland.de/~cabr/teaching.php. Caren Brinckmann Sommersemester 2005. Motivation. stupide Arbeiten dem Computer überlassen weniger Zeit und konsistenter als von Hand
E N D
Programmierkurs für absolute Anfänger Perl, Praat & bash http://www.coli.uni-saarland.de/~cabr/teaching.php Caren Brinckmann Sommersemester 2005
Motivation • stupide Arbeiten dem Computer überlassen • weniger Zeit und konsistenter als von Hand • Wiederholungen / Änderungen / Fehlerbehebung leicht möglich • Arbeiten mit großen Datenmengen möglich Programmierkurs für absolute Anfänger – Sitzung 1
Beispiele • Intonationsuntersuchung: Wörter aus der Datenbank CELEX heraussuchen, die nur aus stimmhaften Lauten bestehen • Perzeptionsexperiment • "pieps" vor wav-Dateien einfügen • Ausgabedaten von SCAPE für statistische Analyse umformatieren • Produktionsexperiment: Daten mit Praat labeln, Werte in tabellarischer Form ausgeben und für statistische Analyse umformatieren • Analyse eines annotierten Korpus: • durchschnittliche Dauerwerte aller Laute • Häufigkeiten von Tilgungen und Ersetzungen Programmierkurs für absolute Anfänger – Sitzung 1
Ziele • programmiertechnische Grundkonzepte verstehen • Aufgaben strukturiert analysieren und als Algorithmus formulieren können • einfache Programme selbst schreiben können • klaren Programmierstil aneignen • Fehler suchen und finden • fremde Programme verstehen und verändern können • selbstständig weiterlernen können Programmierkurs für absolute Anfänger – Sitzung 1
Kursinhalt • Sprachen • Schwerpunkt: Perl • höhere Programmiersprache • sehr gut geeignet für die Verarbeitung von großen Textmengen • Praat-Skripte: automatisierte Analyse von Sprachdateien • Shell-Skripte (bash): Wiederholung von UNIX-Befehlen • Daten • CELEX: lexikalische Datenbank (Deutsch, Englisch, Niederländisch) mit Informationen über • Aussprache mit Silbengrenzen • Morphologie und Syntax • Worthäufigkeit • Kiel Corpus: gelesene und spontane Sprachdaten • segmentelle und prosodische Annotation Programmierkurs für absolute Anfänger – Sitzung 1
Vorstellungsrunde • Name und Studienfächer? • Vorwissen: • Programmiererfahrung? • Windows/Unix-Kenntnisse? • Praat? • Motivation: was würdest Du gerne können? • Erwartungen, Wünsche? Programmierkurs für absolute Anfänger – Sitzung 1
Organisatorisches • Di: Vorlesung (5.09) • Fr: Übung (5.08) Besprechung der bearbeiteten Übungsaufgaben Ausgabe der neuen Übungsaufgaben • CIP-Pool (5.08): Einloggen unter Linux und unter Windows möglich? Wenn nicht Systemgruppe • eigene e-mail Adresse schicken an:cabr@coli.uni-sb.de Programmierkurs für absolute Anfänger – Sitzung 1
Scheinerwerb (1) • regelmäßige Anwesenheit:max. 2 Vorlesungen und 2 Übungen verpassen • Übungsaufgaben • 1 Woche Bearbeitungszeit • Bearbeitung zu zweit! • Abgabe per e-mail (cabr@coli.uni-sb.de) • 2 schriftliche Kurztests im Laufe des Semesters • Termine werden rechtzeitig bekanntgegeben • Minimum: 50% der Gesamtpunktzahl über beide Tests • Abschlussaufgabe • kleines, abgegrenztes Projekt • eigene Vorschläge möglich • Bearbeitung zu zweit! • Programmierung + Dokumentation Programmierkurs für absolute Anfänger – Sitzung 1
Scheinerwerb (2) Endnote: • Übungsaufgaben: 40% • Kurztests: 20% • Abschlussaufgabe: 40% Fragen? Programmierkurs für absolute Anfänger – Sitzung 1
Verarbeitung Eingabe Ausgabe Einführendes Beispiel Daten: g 40 u: 156 t 65 @ 52 n 80 t 72 a: 267 k 91 Aufgabe: Algorithmus, der die Dauer der Äußerung berechnet • lies aus der Eingabedatei die Dauerwerte ein • summiere die Einzeldauern auf • gib die Summe aus Programmierkurs für absolute Anfänger – Sitzung 1
Was ist ein Algorithmus? • Bearbeitungsvorschrift, die aus elementaren Grundschritten besteht: • Lesen • Schreiben • arithmetische Operation • Vergleichen • Springen • liefert auf eine eindeutig festgelegte Weise zu jeder vorgegebenen Eingabe in endlich vielen Schritten eine Ausgabe • jedes Programm führt mindestens einen Algorithmus aus Programmierkurs für absolute Anfänger – Sitzung 1
Dateiöffnen gesamtdauer := 0 alle Zeilengelesen? lies die nächste Zeile Ausgabegesamtdauer nein ja Dateischließen Zeile aufteilenin Einzelelemente:nenne 1. Wert einzellautnenne 2. Wert einzeldauer STOP gesamtdauer := gesamtdauer + einzeldauer Flussdiagramm: Gesamtdauer START Programmierkurs für absolute Anfänger – Sitzung 1
Elemente von Flussdiagrammen Grenzstelle START Verzweigung STOP Ein-/Ausgabe(Lesen/Schreiben) Übergangsstelle allgemeineOperation Ablauflinien Programmierkurs für absolute Anfänger – Sitzung 1
Dateiöffnen START gesamtdauer := 0anzahl_laute := 0 alle Zeilengelesen? lies die nächste Zeile durchschnittsdauer :=gesamtdauer / anzahl_laute nein ja Dateischließen Ausgabedurchschnittsdauer Zeile aufteilenin Einzelelemente:nenne 1. Wert einzellautnenne 2. Wert einzeldauer STOP gesamtdauer := gesamtdauer + einzeldaueranzahl_laute := anzahl_laute + 1 Beispiel: Durchschnittsdauer Programmierkurs für absolute Anfänger – Sitzung 1
gesamtdauer_t := 0anzahl_laute_t:= 0 START Dateiöffnen alle Zeilengelesen? lies die nächste Zeile durchschnittsdauer_t :=gesamtdauer_t / anzahl_laute_t nein ja Zeile aufteilenin Einzelelemente:nenne 1. Wert einzellautnenne 2. Wert einzeldauer Ausgabedurchschnittsdauer_t Dateischließen einzellaut = 't' ? nein STOP ja gesamtdauer_t := gesamtdauer_t + einzeldaueranzahl_laute_t := anzahl_laute_t + 1 Beispiel: Durchschnittsdauer von 't' Programmierkurs für absolute Anfänger – Sitzung 1
Beispiel: Durchschnittsdauer aller Dateien in einem Verzeichnis Verzeichnis öffnen gesamtdauer := 0 anzahl_dateien := 0 START alle Dateienverarbeitet? ja durchschnittsdauer :=gesamtdauer / anzahl_dateien nein Ausgabedurchschnittsdauer verarbeite nächste Datei mit Unterprogramm "gesamtdauer" nenne Rückgabewert gesamtdauer_datei Verzeichnisschließen gesamtdauer := gesamtdauer + gesamtdauer_datei anzahl_dateien := anzahl_dateien + 1 STOP Programmierkurs für absolute Anfänger – Sitzung 1
Übung Daten: g 40 u: 156 t 65 @ 52 n 80 t 72 a: 267 k 91 Aufgaben: Flussdiagramm für ein Programm, das • den längsten Laut und seine Dauer ausgibta: 267 • die maximale Dauer von 't' ausgibt72 Programmierkurs für absolute Anfänger – Sitzung 1
Höhere Programmiersprachen (1) • erlauben strukturierte Beschreibung von Algorithmen • der "Quellcode" eines Programms wird automatisch in entsprechende Maschinenbefehle übersetzt: • kompilierte Sprachen, z.B. C, C++Quellcode Compiler lauffähiges Binary • Vorteil: kompilierte Programme sind sehr schnell • Nachteil: maschinenabhängig • Skriptsprachen oder interpretierte Sprachen, z.B. bash, Praat-Skriptsprache: Interpreter führt den Quellcode direkt aus • Vorteil: maschinenunabhängig, Übersetzungsschritt fällt weg • Nachteil: langsamer • interpretative Sprachen und virtuelle Maschinen, z.B. Perl, Java: Mischform von Compiler und Interpreter Programmierkurs für absolute Anfänger – Sitzung 1
Höhere Programmiersprachen (2) • imperativ-prozedural: Pascal, Basic, Perl, Skriptsprachen • klassische Aufgabenstellung: Eingabe, Verarbeitung, Ausgabe • "wie?": Weg zur Lösung = Folge von Operationen • Hauptprogramm mit Unterprozeduren • objektorientiert: C++, Java • Zusammenfassung von Daten und auf diesen Daten operierenden Algorithmen zu Objekten • deklarativ: Lisp, Prolog • "was?": Beschreibung was berechnet werden soll, nicht wie diese Rechnung durchzuführen ist Programmierkurs für absolute Anfänger – Sitzung 1
Syntax & Semantik • Syntax: Die Programme müssen der fest vorgeschriebenen Grammatik der jeweiligen Programmiersprache gehorchen • Quellcode muss syntaktisch korrekt sein, damit er vom Compiler-Interpreter übersetzt werden kann Beispiel (Perl):$z=$x+$y; ## syntaktisch korrekt$z=$x plus $y; ## syntaktisch falsch • Semantik: Bedeutung des jeweiligen programmiersprachlichen Konstrukts was bewirkt es, wenn es ausgeführt wird • Programme können syntaktisch korrekt sein, aber semantisch falsch! Programmierkurs für absolute Anfänger – Sitzung 1
Sprachelemente imperativ-prozeduraler Programmiersprachen (1) • sequenzielle Ablauforientierung: • Anweisungen werden nacheinander ausgeführt • Anweisungen erzeugen oder verändern Werte • Konstante: • Objekt mit einem Wert, der sich über die ganze Programmablaufzeit nicht ändert • Variable: • Objekt, das während des Programmablaufs beliebig oft seinen Wert ändern kann • hat immer einen festen Namen • Typisierung: in vielen Sprachen haben Variablen einen Typ, z.B. dürfen sie nur Zahlen oder Zeichen enthalten • Feld / Array / Vektor: • Liste von durchnummerierten Variablen, z.B. dauer0, dauer1, dauer2 • Felder fangen in vielen Programmiersprachen mit Index 0 an! Programmierkurs für absolute Anfänger – Sitzung 1
Sprachelemente imperativ-prozeduraler Programmiersprachen (2) • Operator: • erzeugt aus einem oder zwei Werten (= Operanden) einen neuen Wert • unäre Operatoren haben einen Operanden, z.B. -2 • binäre Operatoren haben zwei Operanden, z.B. 2 * 3 • Präzedenz von Operatoren im Zweifelsfall Klammern setzen, z.B. (4 * 3) + 10 • Ausdruck: • besteht aus Konstanten, Variablen und Operatoren,z.B. $x + $y (addiert die Werte der Variablen $x und $y) • Zuweisung: • setzt den Wert einer Variablen auf den Wert eines Ausdrucks, z.B. $z = $x + $y • Achtung: Vergleich (==) vs. Zuweisung (=) Programmierkurs für absolute Anfänger – Sitzung 1
Kontrollstrukturen • Verzweigung / bedingte Anweisung • prüft, ob eine bestimmte Aussage wahr ist • ist sie wahr, wird ein bestimmter Programmteil ausgeführt, sonst ein anderer (oder nichts) • Schleifen • ein bestimmter Programmteil wird mehrmals durchlaufen, solange oder bis eine bestimmte Aussage wahr ist Programmierkurs für absolute Anfänger – Sitzung 1
Prozeduren und Funktionen • Strukturierung und Teamarbeit • Prozedur: Unterprogramm, das für sich alleine lauffähig ist, und das beliebig oft wiederverwendet werden kann • Funktion: Prozedur, die nach Beendigung ihrer Arbeit zusätzlich einen Wert zurückliefert • Funktionen und Prozeduren können Parameter haben, d.h. Eingabedaten, mit denen sie arbeiten Programmierkurs für absolute Anfänger – Sitzung 1
Wahrheitswerte • Überprüfung einer Aussage auf ihren Wahrheitsgehalt, z.B. einzellaut = 't' Aussage hat einen Wahrheitswert • Kodierung von Wahrheitswerten: • 0 = falsch • 1 = wahr • logische Operatoren: nicht, oder, und Programmierkurs für absolute Anfänger – Sitzung 1
komplexe Aussagen • Präzedenz der logischen Operatoren: • nicht hat eine höhere Präzedenz als und • und hat eine höhere Präzedenz als oder • "Gurken sind rot und 5 ist gerade oder Juli ist ein Sommermonat" "Gurken sind rot und (5 ist gerade oder Juli ist ein Sommermonat)" • Übung: wahr oder falsch? • 4 ist ungerade oder Juli ist ein Sommermonat • 4 ist ungerade und Juli ist ein Sommermonat • 7 ist ungerade und 3 mal 5 ist 15 • nicht 4 ist gerade • 3 plus 4 ist 7 oder 7 ist ungerade und 3 mal 5 ist 17 • (3 plus 4 ist 7 oder 7 ist ungerade) und 3 mal 5 ist 17 • nicht (4 ist ungerade oder Juli ist ein Sommermonat) • nicht 4 ist ungerade und Juli ist ein Sommermonat Programmierkurs für absolute Anfänger – Sitzung 1
zum Nachlesen • Ziegler, Joachim (2002): Programmieren lernen mit Perl. Kapitel 1. Berlin: Springer. • im Handapparat in der Bibliothek Programmierkurs für absolute Anfänger – Sitzung 1