Vorsemesterkurs Informatik

Ähnliche Dokumente
Vorsemesterkurs Informatik

Vorsemesterkurs Informatik Sommersemester Aufgabenblatt Nr. 5A. Lösung zu Aufgabe 1 (Fehler in Haskell-Quelltext: Parsefehler)

Skript. Vorkurs Informatik. Sommersemester Prof. Dr. Georg Schnitger Dr. David Sabel Conrad Rau

Skript. Vorkurs Informatik. Sommersemester Conrad Rau Dr. David Sabel Jens Keppeler

Skript. Vorkurs Informatik. Sommersemester Conrad Rau Dr. David Sabel Jens Keppeler

Programmierkurs II. Einführung in die deklarative Programmiersprache HASKELL

Programmieren in Haskell Einführung

Definition Compiler. Bekannte Compiler

Vorsemesterkurs Informatik

Programmiersprachen und Übersetzer

6. Grundlagen der Programmierung

Einführung in die Funktionale Programmierung mit Haskell

Basiskonstrukte von Haskell

Crashkurs Haskell Mentoring WiSe 2016/17. Anja Wolffgramm Freie Universität Berlin

ALP I Einführung in Haskell

Grundlagen der Programmentwicklung

Übersicht. Einführung in die Funktionale Programmierung: Einleitung & Motivation. Klassifizierung von Programmiersprachen (1)

Algorithmus: Kochrezept

Programmieren in Haskell Debugging

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

3. Methodik der Programmerstellung

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Funktionale Programmierung Grundlegende Datentypen

Einführung in die Programmierung 1

Programmierpraktikum

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Zur Benutzung von Haskell-Interpretern

Programmieren lernen mit Perl

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

Programmieren mit statistischer Software

Thema Nr. 3. Auf dem Weg zur guten Lösung - Systemrückmeldungen von Lern - und Programmierumgebungen

Algorithmen mit Python

Eine JAVA Einführung ... Quellcode:... COMA Übung 3. T.Bosse. A.Griewank. Vorschau JAVA Programme Sprachen Kate

Funktionale Programmiersprachen

Einführung in die Funktionale Programmierung: Einleitung & Motivation

Einführung in die C-Programmierung

Vorlesung Informatik II

B Haskell ausführen und dokumentieren

Haskell und Python. pures Programmieren, Auswerten von Ausdrücken rekursives Programmieren, Typsystem. Python: Eine prozedurale Programmiersprache

2 Grundlagen der Programmierung

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Funktionale Programmierung Einführung

Funktionale Programmierung

Eine kleine Anleitung zum Programmieren mit MATLAB

Übungspaket 9 Logische Ausdrücke

Im Mathe-Pool startet man Eclipse am besten aus einer Shell heraus, und zwar indem man im Home- Verzeichnis den Befehl

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Vorlesung Informatik I

Real World Haskell Projekte 2

Scala. Funktionale (Zustandslose) Objekte

2D22 Prinzipien der Softwareentwicklung. Prinzipien der Softwareentwicklung S. Strahringer 1

Einführung in PHP. (mit Aufgaben)

Visual Basic Hamster

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

06 While-Schleifen. While-Schleifen 1/7 Wiederholung: Schleifen

R-Fehlermeldungsleitfaden

4.2 Selbstdefinierte Matlab-Funktionen 1. Teil

Intensivübung zu Algorithmen und Datenstrukturen

Informatik I Übung, Woche 40

Programmieren für Physiker: C++

Kapitel 02. Java was, wann, warum, wieso. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung

Multiparadigmen- Programmiersprachen

Übung 1 - Betriebssysteme I

Klassen in Java. Grundlagen der Programmierung. Stephan Kleuker 68

Einführung in die Computerlinguistik Einführung in Perl (1)

Kapitel 2: Python: Ausdrücke und Typen. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

Funktionale Programmierung Blatt 1

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Haskell in der Schule - (K)ein Thema? Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli

Vorlesung Programmieren

Interpreter - Gliederung

Beim Programmieren mit MMIX habt ihr vielleicht schon öfter eine der folgenden Fehlermeldungen von MMIXAL bekommen:

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Wolmerin; Java lernen y. mit Eclipse 3. Galileo Computing

Einführung in die Informatik I (autip)

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

SUBSTRING - wo liegt mein Fehler?

Einführung in Eclipse und Java

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Modellierung und Programmierung 1

Java Programmierung auf der Konsole / unter Eclipse

Transkript:

Vorsemesterkurs Informatik Programmieren und Programmiersprachen SoSe 2012 Stand der Folien: 26. März 2012

Übersicht Programme und Programmiersprachen Haskell 1 Programme und Programmiersprachen 2 Haskell Der GHCi Quelltexte erstellen und im GHCi laden Kommentare in Quelltexten Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 2/19

Programme und Programmiersprachen Haskell Höhere Programmiersprachen Maschinenprogramme bestehen aus Bit-Folgen (0en und 1en), Für den Mensch nahezu unverständlich Verständlicher, aber immer noch zu kleinschrittig: Assemblercode Ausweg: Höhere Programmiersprachen Für den Mensch (meist) verständliche Sprache Abstraktere Konzepte, nicht genau am Rechner orientiert Der Rechner versteht diese Sprachen nicht Quelltext = Programm in höherer Programmiersprache Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 3/19

Programme und Programmiersprachen Haskell Compiler / Interpreter Compiler Quelltext Interpreter Quelltextstück Gültiges Programm? Nein Ja Fehler Übersetzung auf einmal Compilieren dauert Ausführung schnell Maschinenprogramm Gültiges Programmstück? Ja Nein Fehler passenden Maschinencode ausführen Schnelle Übersetzung e. kleinen Stücks Gut zum schnellen Ausprobieren Ausführung eher langsam Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 4/19

Programme und Programmiersprachen Haskell Programmierparadigmen Es gibt viele verschiedene höhere Programmiersprachen! Wir betrachen funktionale Programmiersprachen Einordnung: Imperative Programmiersprachen Deklarative Programmiersprachen Funktionale Programmiersprachen Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 5/19

Programme und Programmiersprachen Haskell Funktionale Programmiersprachen Programm = Menge von Funktionsdefinitionen Ausführung = Auswerten eines Ausdrucks Resultat = eine einziger Wert keine Seiteneffekte (sichtbare Speicheränderungen)! (insbes.: keine Programmvariablen, Zuweisung,... ) Es gilt das Prinzip der referentiellen Transparenz: Die Anwendung einer gleichen Funktion auf gleiche Argumente liefert stets das gleiche Resultat. Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 6/19

Haskell Haskell die pure funktionale Programmiersprache relativ neu: erster Standard 1990 Benannt nach dem amerik. Mathematiker Haskell B. Curry (1900-1982) Haskell 98 veröffentlicht 1999, Revision 2003 Haskell 2010, veröffentlicht Juli 2010 Die Informationsquelle: http://haskell.org Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 7/19

GHC und GHCi Wir verwenden den Glasgow Haskell Compiler, bzw. den Interpreter dazu: GHCi Homepage: http://www.haskell.org/ghc. Auf den RBI-Rechnern: Kommando ghci bzw. /opt/rbi/bin/ghci Selbst-Installieren: Am besten die Haskell Platform: http://hackage.haskell.org/platform/ Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 8/19

Bedienung des GHCi /opt/rbi/bin/ghci GHCi, version 6.10.1: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim... linking... done. Loading package integer... linking... done. Loading package base... linking... done. Prelude> 1+1 2 Prelude> 3*4 12 Prelude> 15-6*3-3 Prelude> -3*4-12 Prelude> 1+2+3+4+ <interactive>:1:8: parse error (possibly incorrect indentation) Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 9/19

Einige Interpreterkommandos :quit Verlassen des Interpreters :help :load Dateiname :reload Der Interpreter zeigt einen Hilfetext an, Übersicht über die verfügbaren Kommandos Lädt Haskell-Quellcode der entsprechenden Datei, die Dateiendung von Dateiname muss.hs lauten. Lädt die aktuelle geladene Datei erneut (hilfreich, wenn man die aktuell geladene Datei im Editor geändert hat). Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 10/19

Haskell-Quellcode im Editor erstellen Endung:.hs Beispiel: Datei hallowelt.hs wert = "Hallo Welt!" hallowelt.hs > /opt/rbi/bin/ghci GHCi, version 6.10.1: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim... linking... done. Loading package integer... linking... done. Loading package base... linking... done. Prelude> :load hallowelt.hs [1 of 1] Compiling Main ( hallowelt.hs, interpreted ) Ok, modules loaded: Main. *Main> funktioniert nur, wenn hallowelt.hs im aktuellen Verzeichnis ist Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 11/19

Haskell-Quellcode Beispiel: Datei hallowelt.hs liegt in programme/ wert = "Hallo Welt!" hallowelt.hs > /opt/rbi/bin/ghci GHCi, version 6.10.1: http://www.haskell.org/ghc/ Loading package ghc-prim... linking... done. Loading package integer... linking... done. Loading package base... linking... done. Prelude> :load hallowelt.hs :? for help <no location info>: can t find file: hallowelt.hs Failed, modules loaded: none. Prelude> :load programme/hallowelt.hs [1 of 1] Compiling Main ( programme/hallowelt.hs, interpreted ) Ok, modules loaded: Main. *Main> wert "Hallo Welt!" Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 12/19

Nächstes Beispiel zwei_mal_zwei = 2 * 2 oft_fuenf_addieren = 5 + 5 + 5 + 5 +5 + 5 + 5 + 5 + 5 + 5 + 5 beides_zusammenzaehlen = zwei_mal_zwei + oft_fuenf_addieren einfacheausdruecke.hs Prelude> :load einfacheausdruecke.hs [1 of 1] Compiling Main ( einfacheausdruecke.hs, interpreted ) Ok, modules loaded: Main. *Main> zwei_mal_zwei 4 *Main> oft_fuenf_addieren 55 *Main> beides_zusammenzaehlen 59 *Main> 3*beides_zusammenzaehlen 177 Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 13/19

Funktionsnamen müssen mit einem Kleinbuchstaben oder dem Unterstrich beginnen, sonst Zwei_mal_Zwei = 2 * 2... grosskleinschreibungfalsch.hs Prelude> :load grosskleinschreibungfalsch.hs [1 of 1] Compiling Main ( grosskleinschreibungfalsch.hs ) grosskleinschreibungfalsch.hs:3:0: Not in scope: data constructor Zwei_mal_Zwei Failed, modules loaded: none. Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 14/19

Kommentare Eine Quelltext-Datei enthält neben dem Programm: Erklärungen und Erläuterungen Was macht jede der definierten Funktionen? Wie funktioniert die Implementierung? Was ist die Idee dahinter? Man sagt auch: Der Quelltext soll dokumentiert sein! Wie kennzeichnet man etwas als Kommentar in Haskell? Zeilenkommentare: -- Kommentar... Kommentarblöcke: Durch {- Kommentar -} Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 15/19

Kommentare: Beispiele wert = "Hallo Welt" -- ab hier ist ein Kommentar bis zum Zeileende wert2 = "Nochmal Hallo Welt" -- Diese ganze Zeile ist auch ein Kommentar! Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 16/19

Kommentare: Beispiele wert = "Hallo Welt" -- ab hier ist ein Kommentar bis zum Zeileende wert2 = "Nochmal Hallo Welt" -- Diese ganze Zeile ist auch ein Kommentar! Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 16/19

Kommentare: Beispiele wert = "Hallo Welt" -- ab hier ist ein Kommentar bis zum Zeileende wert2 = "Nochmal Hallo Welt" -- Diese ganze Zeile ist auch ein Kommentar! {- Hier steht noch gar keine Funktion, da auch die naechste Zeile noch im Kommentar ist wert = "Hallo Welt" gleich endet der Kommentar -} wert2 = "Hallo Welt" Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 16/19

Kommentare: Beispiele wert = "Hallo Welt" -- ab hier ist ein Kommentar bis zum Zeileende wert2 = "Nochmal Hallo Welt" -- Diese ganze Zeile ist auch ein Kommentar! {- Hier steht noch gar keine Funktion, da auch die naechste Zeile noch im Kommentar ist wert = "Hallo Welt" gleich endet der Kommentar -} wert2 = "Hallo Welt" Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 16/19

Fehler Beim Programmieren passieren Fehler, aber unterschiedliche Arten von Fehlern: Syntaxfehler: Der Quellcode entspricht nicht der Syntax der Programmiersprache. Z.B. falsches Zeichen, fehlende Klammern, falsche Einrückung,... Logische / Semantische Fehler: Das Programm implementiert die falsche Funktionalität Typfehler: Der Code ist syntaktisch korrekt, aber die Typen passen nicht, z.b. 1 + A, etc. (später dazu mehr) Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 17/19

Fehler (2) Unterscheiden nach Zeitpunkt des Auftretens Compilezeitfehler: Fehler, die bereits vom Compiler / Interpreter entdeckt werden, und daher in einer Fehlermeldung enden. Laufzeitfehler: Fehler, die erst zur Laufzeit auftreten, und daher nicht vom Compiler/Interpreter schon erkannt werden. Z.B. Division durch 0, Datei lesen, die nicht existiert, etc. Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 18/19

Haskell und Fehler In Haskell werden sehr viele Fehler bereits beim Compilieren entdeckt Z.B.: Keine Typfehler zur Laufzeit Der GHCI liefert Fehlermeldungen genau lesen! 1 -- 1 und 2 addieren 3 eineaddition = (1+2) 3 4 -- 2 und 3 multiplizieren 5 einemultiplikation = (2*3)) fehler.hs Prelude> :load fehler.hs [1 of 1] Compiling Main ( fehler.hs, interpreted ) fehler.hs:5:27: parse error on input ) Failed, modules loaded: none. Vorkurs Informatik SoSe 2012 (03) Programmieren & Programmiersprachen 19/19