Übung Praktische Informatik I

Ähnliche Dokumente
Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Aufruf des Compilers in der Kommandozeile und Ausführung des Programms:

Objektorientierte Programmierung und Modellierung

Einführung in die Programmierung 1

Kapitel 5: Syntaxdiagramme und Grammatikregeln

Java I Vorlesung Imperatives Programmieren

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Probeklausur Name: (c)

Einstieg in die Informatik mit Java

Elementare Konzepte von

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Tag 4 Repetitorium Informatik (Java)

Wie entwerfe ich ein Programm?

Reguläre Ausdrücke. Michael Jäger. 4. April 2017

Einführung in die Programmierung

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

Informatik II. Woche 10, Giuseppe Accaputo

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Empfehlenswerte Referenzen

Institut für Informatik und Angewandte Kognitionswissenschaften

ÜBUNGS-BLOCK 7 LÖSUNGEN

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Grundelemente objektorientierter Sprachen (1)

Einstieg in die Informatik mit Java

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Theoretische Informatik. Reguläre Sprachen und Automaten

Grundelemente objektorientierter Sprachen (1)

Kapitel 2. Methoden zur Beschreibung von Syntax

Kapitel 12: Induktive

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Lexikalische Programmanalyse der Scanner

Syntax von Programmiersprachen

Einstieg in die Informatik mit Java

Sprachbeschreibung und Erweiterung

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

Syntax von Programmiersprachen

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Alphabet, formale Sprache

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Ein erstes Java-Programm

Informatik II. Woche 15, Giuseppe Accaputo

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Praktische Eine Einführung

7. Syntax: Grammatiken, EBNF

Vorkurs Informatik WiSe 16/17

Automaten und Formale Sprachen

Java Datentypen und Variablen

Tag 4 Repetitorium Informatik (Java)

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

II.1.1. Erste Schritte - 1 -

Programmierpraktikum

Grundelemente objektorientierter Sprachen (1)

Programmierstarthilfe SS 2010 Fakultät für Ingenieurwissenschaften und Informatik 2. Blatt Für die Woche vom 3.5. bis zum 7.5.

Reguläre Sprachen und endliche Automaten

Programmierstarthilfe SS 2010 Fakultät für Ingenieurwissenschaften und Informatik 6. Blatt Für die Woche vom bis zum 4.6.

Erste Java-Programme (Scopes und Rekursion)

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Vorkurs Informatik WiSe 16/17

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Syntax von Programmiersprachen

4. Die lexikalische Analyse

2.2 Syntax, Semantik und Simulation

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Einführung in die Programmierung I. 1.0 EBNF 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

1 Hashing und die Klasse String

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Felder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Vorkurs Informatik WiSe 17/18

Einführung in die Programmierung für NF. Übung

Grundlagen der theoretischen Informatik

Einstieg in die Informatik mit Java

Informatik Hochschule Mainz Geoinformatik und Vermessung. Wiederholung. Frohes Fest und Guten Rutsch!

3.1 Reservierte Wörter

Klausur: Programiermethoden und Techniken

Martin Unold INFORMATIK. Geoinformatik und Vermessung

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Übungsblatt 1. Java Vorkurs (WS 2017)

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Modellierung und Programmierung 1

Test zu Grundlagen der Programmierung Leitung: Susanne Guth/Michael Hahsler. 31. Jänner 2003

Informatik Vorkurs - Vorlesung 2

Probeklausur: Programmierung WS04/05

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Programmierstarthilfe SS 2009 Fakultät für Ingenieurwissenschaften und Informatik 4. Blatt Für die Woche vom bis zum 22.5.

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Intensivübung zu Algorithmen und Datenstrukturen

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9

Tag 2 Repetitorium Informatik (Java)

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Transkript:

Übung Praktische Informatik I HWS 2008/2009 Benjamin Guthier Lehrstuhl für Praktische Informatik IV Universität Mannheim guthier@pi4.informatik.uni-mannheim.de 24.10.08 6-1

Heutige große Übung Hinweise zum 6. Übungsblatt Reguläre Ausdrücke, Automaten, kontextfreie Grammatiken Referenzen auf Objekte Arrays Offizielle Java-Dokumentation 24.10.08 6-2

Aufgabe 1 - Zahlworte Es soll eine Klasse Zahlworte implementiert werden, die int-zahlen in die entsprechenden Zahlworte als String umwandelt. Der Einfachheit halber dürfen bestimmte Regelmäßigkeiten angenommen werden. 1a) Implementieren Sie die Methode String ziffer(int z) 1b) Implementieren Sie die Methode String zahlwort(int zahl) Methode ziffer wird mehrfach in Methode zahlwort benötigt. Die Regeln in Aufgabe 1b) sind schon fast die Lösung! 24.10.08 6-3

Aufgabe 2 - Verschlüsselung Erstellen Sie eine Klasse Enigma, die Zeichenketten mittels eines Passwortes verschlüsselt. Die Verschlüsselung soll so ablaufen, dass das Passwort gegebenenfalls wiederholt über die Zeichenkette gelegt und zeichenweise hinzuaddiert wird. 2a) char[] verschluesseln(char[] zeichen, char[] passwort) char[] verschluesseln(char[] zeichen, char[] passwort) Beispiel für Verschlüsselung (Vignère-Chiffre): pwdpwdpwd + nachricht = dxgxomsex Polyalphabetische Substitutionschiffre (wie die echte Enigma!) Besonderheit in Unicode: A hat den Wert 65, B 66, a 97, usw... Addition produziert also seltsame Sonderzeichen. Das ist okay. 24.10.08 6-4

Aufgabe 2 - Verschlüsselung (2) 2b) Implementieren Sie einer Testmethode public static void main(string[] args), die eine Zeichenkette vom Benutzer erfragt und ver-, bzw. entschlüsselt. Benutzereingabe mittels Methode String JOptionPane.showInputDialog(String) Konvertierung eines String in char[] mittels Methode aus der Klasse String char[] tochararray() 24.10.08 6-5

Aufgabe 3 - Reguläre Ausdrücke Hinweis: In Aufgabe 3b sind zehn verschiedene Elemente der Sprache gemeint! Mehr zu regulären Ausdrücken im Inhaltsteil der Übungsfolien... 24.10.08 6-6

Alphabet, Wort, Sprache Ein Alphabet ist eine endliche Menge von Zeichen. Beispiele: = {0, 1, 2, 3,..., 9} = {a, b, c,..., y, z} = {Ø,,,,, 3, M, ƒ, Ÿ} Ein Wort ist eine endliche Folge von Zeichen aus. Beispiele: 0815 wort 3M Ø Leeres Wort ε Eine Sprache über ist eine Menge von Worten aus. Beispiele: {7, 77, 777, 7777,...} (Sprache mit unendlich vielen Worten) {ε, abc, def, ghi, jkl, mno, qrst, uvw, xyz} (enthält das leere Wort) { 3M, M3, ƒ Ÿ} 24.10.08 6-7

Reguläre Ausdrücke Erlauben Definition von Sprachen ohne Auflistung aller (ggf. unendlich vieler) Wörter. Reguläre Ausdrücke sind über einem Alphabet definiert. Zusätzliche Operatoren: oder * Wiederholung. Verkettung (wird eigentlich immer weggelassen)? optional (Definiert durch: e? := e ε) ( ) Klammerung Präzedenzregeln helfen Klammern zu sparen: * und? binden stärker als Verkettung bindet stärker als 24.10.08 6-8

Reguläre Ausdrücke (2) Beispiele für reguläre Ausdrücke: 77* (0 1 2 3 4 5 6 7 8 9)*(0 5) (ab c*)(d e f)?ghi Anwendungen für reguläre Ausdrücke: Definition von erlaubten Literalen in Programmiersprachen Erweiterte Suche in großen Texten: Suche alle Datumsangaben Suche Referenzen der Form [<ziffer>*] Erweitertes Suchen und Ersetzen: Ersetze alle Dezimalstellen Trennpunkte (englisch) durch Kommas (deutsch). 24.10.08 6-9

Endliche Automaten Äquivalentes Mittel zur Definition von Sprachen Haben gleiche Mächtigkeit wie reguläre Ausdrücke Automaten bestehen aus: Zuständen (auch Knoten ) Zustandsübergängen ( Kanten ), beschriftet mit Zeichen aus Alphabet Einem markierten Startknoten Beliebig vielen Zielknoten Beispiel: Automat zu regulärem Ausdruck 0*(1 2 3 4 5 6 7 8 9)(0 5) 24.10.08 6-10

Endliche Automaten (2) Definition einer Sprache durch Verifikation Beginne beim Startknoten Jeder Buchstabe des Wortes beschreibt einen Zustandsübergang Erreicht man mit dem letzten Buchstaben des Wortes einen Zielknoten, so ist das Wort Teil der Sprache. Umgekehrt gehört das Wort nicht zur Sprache, wenn kein Zielknoten erreicht oder ein nicht vorgesehener Zustandsübergang durchgeführt wird. Beispielworte: 98, 0025, 100 24.10.08 6-11

Kontextfreie Grammatiken Kontextfreie Grammatiken sind mächtiger als reguläre Ausdrücke dank Rekursion. Reguläre Ausdrücke zur Definition simpler Literale: Datum, Geldbetrag, float, Bezeichner in Java Definition einer Programmiersprache braucht mehr. Kontextfreie Grammatiken können mehr, z.b. korrekte Klammerung: <expr> ::= <literal> <expr> + <expr> <expr> - <expr> <expr> * <expr> <expr> / <expr> ( <expr> ) 24.10.08 6-12

Referenzen auf Objekte In Java existiert Unterschied zwischen primitiven Datentypen und Referenzdatentypen (Objekten). Beispiel für Referenzdatentyp Person Person a = new Person( Benjamin ); Person b = a; b.name = Horst ; // a.name ist nun auch Horst Person c = new Person( Horst ); // Nun gilt: // Vergleich (a == b) ist true, // aber Vergleich (a == c) ist false! 24.10.08 6-13

Arrays Arrays sind Referenzdatentypen, gebildet durch: <Datentyp>[] Erlauben die Speicherung mehrerer gleichartiger Objekte Aber: Anzahl ist unveränderlich. Nützlich in sehr vielen Bereichen der Programmierung Array von Personen = Personenverzeichnis Array von Zeichen = String Array von Farbwerten (Pixeln) = Bild Array von Spielkarten = Kartenstapel 24.10.08 6-14

Arrays (2) Arrays aus primitiven Datentypen int[] zahlen = new int[200]; zahlen[30] = 42; // OK Arrays aus Referenzdatentypen Person[] personen = new Person[200]; personen[30].name = Horst ; // Fehler! Das 30. Element der Liste ist nur eine Referenz und noch nicht initialisiert. Zuerst 200 Personen mit new erzeugen Person[] personen = new Person[200]; for (int i=0; i<200; ++i) personen[i] = new Person(); personen[30].name = Horst ; // Jetzt OK 24.10.08 6-15

Arrays (3) Elegante Schleife für Arrays in Java (ähnlich for-each-schleife) for (<Datentyp> <Bezeichner> : <Container>) <Anweisung> Ein Beispiel: int[] betraege = new int[200];... int summe = 0; for (int b : betraege) summe += b; Vorsicht: b ist hier nur eine Kopie des int und keine Referenz! for (int b : betraege) b = 100; // tut nichts! Nur Lesen moeglich 24.10.08 6-16

Offizielle Java-Dokumentation Webseite: http://java.sun.com/javase/6/docs/api/ Oder bei manueller Suche, auf Folgendes achten: Java Standard Edition (Java SE) Version 6 Core API Enthält Dokumentation aller eingebauter Java-Klassen. Keine Beschreibung der Sprache an sich (Syntax, Konstrukte) Wichtige Pakete sind: java.lang, java.util, java.io und java.net 24.10.08 6-17

Okay, dann... Schönes Wochenende! T.G.I.F. 24.10.08 6-18