2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Ähnliche Dokumente
2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte

Informatik 1. Sommersemester Helmut Seidl. Institut für Informatik TU München

Einführung in die Informatik 1

Die Klasse MiniJava ist in der Datei MiniJava.java definiert:

Selektion (bedingte Auswahl):

6 Speicherorganisation

Martin Unold INFORMATIK. Geoinformatik und Vermessung

4 Kontrollfluss-Diagramme

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

public class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test

Vorkurs Informatik WiSe 16/17

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

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Vorkurs Informatik WiSe 17/18

6 Speicherorganisation

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

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

Martin Unold INFORMATIK. Geoinformatik und Vermessung

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

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Java Spickzettel von Panjutorials.de

Erste Java-Programme (Scopes und Rekursion)

Wintersemester 2006/2007 Helmut Seidl Institut für Informatik TU München

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Vorkurs Informatik WiSe 17/18

II.1.1. Erste Schritte - 1 -

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Klassenvariablen, Klassenmethoden

Vorkurs Informatik WiSe 16/17

Java: Eine kurze Einführung an Beispielen

RO-Tutorien 3 / 6 / 12

3.4 Struktur von Programmen

Tag 4 Repetitorium Informatik (Java)

Von der Programmiersprache WHILE zum ersten Einstieg in Java

2.8 Klassen. Nichtgleichartige Elemente können in Klassen zu einem neuen Typ zusammengefasst werden. Beispiel: Die drei Komponenten

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

II.1.1. Erste Schritte - 1 -

Programmierpraktikum

II.1.1. Erste Schritte - 1 -

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Elementare Konzepte von

OOP Aufgabenblatt 7 6. Dezember 2013

Martin Unold INFORMATIK. Geoinformatik und Vermessung

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

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

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

Informatik I - Einstiegskurs

Programmieren Vorkurs

2 Programmieren in Java I noch ohne Nachbearbeitung

RO-Tutorien 15 und 16

Java I Vorlesung Imperatives Programmieren

II.1.1. Erste Schritte - 1 -

Einführung in die Informatik 1

Mögliche Implementierung von intern():

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

3 Syntax von Programmiersprachen

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

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Praktische Informatik 1

Probeklausur: Programmierung WS04/05

RO-Tutorien 17 und 18

Objektorientierte Programmierung Studiengang Medieninformatik

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

System.out.println("TEXT");

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

3. Anweisungen und Kontrollstrukturen

Kapitel 4: Anweisungen und Kontrollstrukturen

Algorithmen und Datenstrukturen

Speicher und Adressraum

Programmierung für Mathematik HS11

Ausnahmen (Exceptions)

Java Einführung Methoden. Kapitel 6

Helmut Seidl. Informatik 1. TU München

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

1 Programmiersprachen

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax

Intensivübung zu Algorithmen und Datenstrukturen

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

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

15 Fehlerobjekte: Werfen, Fangen, Behandeln

15 Fehlerobjekte: Werfen, Fangen, Behandeln. Idee. Fehlerklassen. Fehlerklassen

Informatik. Wiederholung Felder (Arrays), string. Vorlesung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Einstieg in die Informatik mit Java

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Algorithmen und Datenstrukturen II

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Transkript:

Variablen Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Variablen dienen zur Speicherung von Daten. Um Variablen in MiniJava zu nutzen müssen sie zunächst eingeführt, d.h. deklariert werden. Als Beispiel betrachten wir MiniJava. 30. Jan. 2018 Felix Brandt, Harald Räcke 13/596 30. Jan. 2018 Felix Brandt, Harald Räcke 14/596 Variablen int x, result; Diese Deklaration führt die beiden Variablen mit den Namen x und result ein. Das Schlüsselwort int besagt, dass diese Variablen ganze Zahlen ( Integers ) speichern sollen. int heißt auch Typ der Variablen x und result. Variablen können dann benutzt werden, um anzugeben, auf welche Daten Operationen angewendet werden sollen. Die Variablen in der Aufzählung sind durch Kommas, getrennt. Am Ende steht ein Semikolon ;. Operationen Zuweisung Operationen gestatten es, Werte von Variablen zu ändern. Die wichtigste Operation ist die Zuweisung. Beispiele: x = 7; Die Variable x erhält den Wert 7. result = x; Der Wert der Variablen x wird ermittelt und der Variablen result zugewiesen. result = x + 19; Der Wert der Variablen x wird ermittelt, 19 dazu gezählt und dann das Ergebnis der Variablen result zugewiesen. 30. Jan. 2018 Felix Brandt, Harald Räcke 15/596 30. Jan. 2018 Felix Brandt, Harald Räcke 16/596

Operationen Zuweisung Achtung: Java bezeichnet die Zuweisung mit = anstatt := (Erbschaft von C... ) Eine Zuweisung wird mit ; beendet. In der Zuweisung x = x + 1; greift das x auf der rechten Seite auf den Wert vor der Zuweisung zu. Operationen Input/Output MiniJava enthält Operationen um Daten (Zahlen) einlesen bzw. ausgeben zu können. Beispiele: x = read(); Liest eine Folge von Zeichen ein und interpretiert sie als ganze Zahl, deren Wert sie der Variablen x als Wert zuweist. write(42); Schreibt 42 auf die Ausgabe. write(result); Bestimmt den Wert der Variablen result und schreibt dann diesen auf die Ausgabe. write(x-14); Bestimmt den Wert der Variablen x, subtrahiert 14 und schreibt das Ergebnis auf die Ausgabe. 30. Jan. 2018 Felix Brandt, Harald Räcke 17/596 30. Jan. 2018 Felix Brandt, Harald Räcke 18/596 Operationen Input/Output Achtung: Das argument der write-operation in den Beispielen ist ein int. Um es ausgeben zu können muss es erst in eine Zeichenfolge umgewandelt werden, d.h. einen String In MiniJava können auch direkt Strings ausgegeben werden: write("hello World!!!"); Schreibt Hello World!!! auf die Ausgabe. Kontrollstrukturen Sequenz Sequenz: 1 int x, y, result; 3 y = read(); 4 result = x + y; 5 write(result); Zu jedem Zeitpunkt wird nur eine Operation ausgeführt. Jede Operation wird genau einmal ausgeführt. Die Reihenfolge, in der die Operationen ausgeführt werden, ist die gleiche, in der sie im Programm stehen. Mit Beendigung der letzten Operation endet die Programm-Ausführung. Sequenz alleine erlaubt nur sehr einfache Programme. 30. Jan. 2018 Felix Brandt, Harald Räcke 19/596 30. Jan. 2018 Felix Brandt, Harald Räcke 20/596

Selektion (bedingte Auswahl): 1 int x, y, result; 3 y = read(); 4 if (x > y) 5 result = x - y; 6 else 7 result = y - x; 8 write(result); Zuerst wird die Bedingung ausgewertet Ist sie erfüllt, wird die nächste Operation ausgeführt. Ist sie nicht erfüllt, wird die nächste Operation nach dem else-zweig ausgeführt. Statt einer einzelnen Operation können die Alternativen auch aus Statements bestehen: 1 int x; 3 if (x == 0) 4 write(0); 5 else if (x < 0) 6 write(-1); 8 write(+1); 30. Jan. 2018 Felix Brandt, Harald Räcke 21/596 30. Jan. 2018 Felix Brandt, Harald Räcke 22/596... oder aus (geklammerten) Folgen von Operationen und Statements: 3 if (x!= 0) { 4 y = read(); 5 if (x > y) 6 write(x); 8 write(y); 9 } else 10 write(0);... eventuell fehlt auch der else-teil: 3 if (x!= 0) { 4 y = read(); 5 if (x > y) 6 write(x); 8 write(y); 9 } Auch mit Sequenz und Selektion kann noch nicht viel berechnet werden... 30. Jan. 2018 Felix Brandt, Harald Räcke 23/596 30. Jan. 2018 Felix Brandt, Harald Räcke 24/596

Kontrollstrukturen Iteration Iteration (wiederholte Ausführung) Im allgemeinen sollte man Eingaben vom Benutzer immer auf Zu- y = read(); 3 while (x!= y) { lässigkeit prüfen. 4 if (x < y) 5 y = y - x; 6 else 7 x = x - y; 8 } 9 write(x); Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte while-statement erneut ausgeführt. Das Programm erfüllt die Spezifikation, dass es für x, y N\{0}, den GGT berechnet. Bei falscher Eingabe terminiert es eventuell nicht. Ist die Bedingung nicht erfüllt fährt die Programmausführung hinter dem while-statement fort. Theorem ( Berechenbarkeitstheorie) Jede (partielle) Funktion auf ganzen Zahlen, die überhaupt berechenbar ist, läßt sich mit Selektion, Sequenz, und Iteration, d.h., mithilfe eines MiniJava-Programms berechnen. Beweisidee Was heißt berechenbar? Eine Funktion heißt berechenbar wenn man sie mithilfe einer Turingmaschine berechnen kann. Schreibe ein MiniJava-Programm, das eine Turingmaschine simuliert. Eine Sprache mit dieser Eigenschaft nennt man auch turingvollständig. Für dieses Theorem ist es wichtig, dass die int-variablen von MiniJava beliebige ganze Zahlen speichern können. Sobald man dies einschränkt (z.b. 32 Bit) ist die entstehende Sprache immer noch sehr mächtig aber streng formal nicht mehr turingvollständig. 30. Jan. 2018 Felix Brandt, Harald Räcke 26/596 MiniJava-Programme sind ausführbares Java. Man muss sie nur geeignet dekorieren. das GGT-Programm. 3 y = read(); 4 while (x!= y) { 5 if (x < y) 6 y = y - x; 8 x = x - y; 9 } 10 write(x); Ein Java-Programm 1 public class GGT extends MiniJava { 2 public static void main (String[] args) { 3 int x, y; 4 x = read(); 5 y = read(); 6 while (x!= y) { 7 if (x < y) 8 y = y - x; 9 else 10 x = x - y; 11 } 12 write(x); 13 } // Ende der Definition von main() 14 } // Ende der Definition der Klasse GGT Datei "GGT.java" 30. Jan. 2018 Felix Brandt, Harald Räcke 27/596 30. Jan. 2018 Felix Brandt, Harald Räcke 28/596

Ein Java-Programm Erläuterungen: Jedes Programm hat einen Namen (hier GGT) Der Name steht hinter dem Schlüsselwort class (was eine Klasse ist, was public ist lernen wir später) Der Dateiname muss zum Programmnamen passen, d.h. in diesem Fall GGT.java heißen. Das MiniJava-Programm ist der Rumpf des Hauptprogramms, d.h. der Funktion main(). Die Programmausführung eines Java-Programms startet stets mit einem Aufruf dieser Funktion main(). Die Operationen write() und read() werden in der Klasse MiniJava definiert. Durch GGT extends MiniJava machen wir diese Operationen innerhalb des GGT-Programms verfügbar. 1 import javax.swing.joptionpane; 2 import javax.swing.jframe; 3 public class MiniJava { 4 public static int read() { 5 JFrame f = new JFrame(); 6 String s = JOptionPane.showInputDialog(f, "Eingabe:"); 7 int x = 0; f.dispose(); 8 if (s == null) System.exit(0); 9 try { x = Integer.parseInt(s.trim()); 10 } catch (NumberFormatException e) { x = read(); } 11 return x; 12 } 13 public static void write(string x) { 14 JFrame f = new JFrame(); 15 JOptionPane.showMessageDialog (f, x, "Ausgabe", JOptionPane.PLAIN_MESSAGE); 16 f.dispose(); 17 } 18 public static void write(int x) { write(""+x); } 19 } Datei: "MiniJava.java" Ein Java-Programm Weitere Erläuterungen: Jedes Programm sollte Kommentare enthalten, damit man sich selbst später noch darin zurecht findet! Ein Kommentar in Java hat etwa die Form: // Das ist ein Kommentar!!! Wenn er sich über mehrere Zeilen erstrecken soll dann /* Dieser Kommentar ist verdammt laaaaaaaaaaaang */ Das Programm GGT kann nun übersetzt und dann ausgeführt werden: raecke> javac GGT.java raecke> java GGT Der Compiler javac liest das Programm aus den Dateien GGT.java und MiniJava.java ein und erzeugt für sie JVM-Code, den er in den Dateien GGT.class und MiniJava.class ablegt. Das Laufzeitsystem java liest die Dateien GGT.class und MiniJava.class ein und führt sie aus. 30. Jan. 2018 Felix Brandt, Harald Räcke 31/596 30. Jan. 2018 Felix Brandt, Harald Räcke 32/596

Wichtige Erweiterung Arrays Ausblick Arrays enthalten eine Gruppe von Variablen auf die über einen index zugegriffen wird: Deklariere Variablen a[0],...,a[99] und b[0],...,b[4]: int[] a = new int[100], b = new int[5]; Greife auf Element a[5] zu: int i; int[] a = new int[100]; a[5] = 1; // a[5] ist jetzt 1 i = 5; a[i] = 7; // a[5] ist jetzt 7 i = 7; a[i-2] = 8; // a[5] ist jetzt 8 MiniJava ist sehr primitiv Die Programmiersprache Java bietet noch eine Fülle von Hilfsmitteln an, die das Programmieren erleichtern sollen. Insbesondere gibt es viele weitere Datentypen (nicht nur int) und viele weitere Kontrollstrukturen... kommt später in der Vorlesung! 30. Jan. 2018 Felix Brandt, Harald Räcke 33/596 30. Jan. 2018 Felix Brandt, Harald Räcke 34/596