Objektorientierte Programmierung OOP Programmieren mit Java



Ähnliche Dokumente
Objektorientierte Programmierung OOP Programmieren mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

System.out.println("TEXT");

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

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

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Vorkurs Informatik WiSe 17/18

Objektorientierte Programmierung OOP Programmieren mit Java

Vorkurs Informatik WiSe 16/17

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

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

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

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

II.1.1. Erste Schritte - 1 -

Einführung in C. EDV1-04C-Einführung 1

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

Einführung in die Programmierung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

JAVA-Datentypen und deren Wertebereich

Objektorientierte Programmierung OOP Programmieren mit Java

Selbsteinstufungstest Vorkurs Programmieren

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

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

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Kurze Einführung in die Programmiersprache C++ und in Root

Informatik I - Einstiegskurs

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Javakurs für Anfänger

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15

Grundlagen der Modellierung und Programmierung, Übung

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Programmierung für Mathematik HS11

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Java I Vorlesung Imperatives Programmieren

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

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

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Wie entwerfe ich ein Programm?

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

Einstieg in die Informatik mit Java

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

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Java - Programmierung - Prozedurale Programmierung 1

Java: Eine kurze Einführung an Beispielen

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

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

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Probeklausur: Programmierung WS04/05

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

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

Projekt 3 Variablen und Operatoren

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Einführung in die Programmierung. (K-)II/Wb17

Javakurs für Anfänger

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

Programmieren I. Kapitel 5. Kontrollfluss

Wenn... dann... if (condition) statement. if (kontostand < 0) System.out.println("Oops..."); false. condition. true. statement

Einführung in die Programmierung 1

Institut für Informatik

Klausur Fachprüfung Wirtschaftsinformatik. Name:

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

Primitive Datentypen

Begleittext: Einführung in das Programmieren in Java für Nichtinformatiker

Tag 4 Repetitorium Informatik (Java)

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

Die Programmiersprache C Eine Einführung

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

Programmierung für Mathematik (HS13)

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

2 Teil 2: Nassi-Schneiderman

Einführung in die Programmierung mit VBA

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Intensivübung zu Algorithmen und Datenstrukturen

Algorithmen und ihre Programmierung

Die einfachsten Anweisungen

5 Grundlagen der Java-Syntax

Transkript:

Objektorientierte Programmierung OOP Programmieren mit Java 7.1.1 Anweisungen 7.1.2 Verzweigungen aufgrund von Bedingungen 7.1.3 Wiederholungen mit Schleifen 7.1.4 Blöcke, Funktionen, Objekte 7.2 Wiederholung der Grundelemente und Syntax in Java 7.2.1 Grundkonzept von Java 7.2.2 Sprachelemente, Datentypen und Variablen 7.2.3 Operatoren 7.2.4 Datenfelder 7.2.5 Zeichenketten 7.2.6 main-methode und Parameterübergabe 7.2.7 Bedingungen und Schleifen 7.4.1 Sechsstellige Zufallszahl 7.4.2 Quadratwurzel nach Heron Prof. Dr. Rolf Dornberger OOP: 22.09.2010 2 7.1 Wiederholung der grundlegenden Programmstrukturen 7.1.1 Anweisungen 7.1.2 Verzweigungen aufgrund von Bedingungen 7.1.3 Wiederholungen mit Schleifen 7.1.4 Blöcke, Funktionen, Objekte 7.2 Wiederholung der Grundelemente und Syntax in Java 7.1 Wiederholung der grundlegenden Programmstrukturen Setzt man Algorithmen in eine computerverständliche Form um, so tauchen drei (bzw. vier) grundlegende Programmstrukturen unabhängig von einer Programmiersprache immer wieder auf. Dies sind: Anweisungen Verzweigungen bzw. Alternativen aufgrund von Bedingungen Wiederholungen mit Schleifen (Aufruf anderer Algorithmen bzw. Blöcke mit Programmstrukturen) Fasst man mehrere einzelne solche Programmstrukturen zusammen, so ergibt sich eine weitere grundlegende Programmstruktur, die je nach Programmiersprache respektive Programmiertyp umschrieben wird als: Block (Modul, Funktion, Unterroutine, Klasse, Objekt oder wie auch immer) Prof. Dr. Rolf Dornberger OOP: 22.09.2010 3 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 4

7.1.1 Anweisungen 7.1.1 Anweisungen In Computerprogrammen werden im Allgemeinen schrittweise die Anweisungen im Quelltext abgearbeitet. Vielleicht lässt sich dies am besten mit einem Brettspiel vergleichen. Allerdings würfelt der Computer nicht, sondern geht Feld für Feld vor. gewinnen im Lotto und kassieren 10000 Franken haben sich das Bein verstaucht, einmal aussetzen kaufen ein neues Auto für 20000 Franken. Das Software-Engineering kennt dafür verschiedene Darstellungsmöglichkeiten: z.b. Struktogramm oder Flussdiagramm gewinnen im Lotto und kassieren 10000 Franken haben sich das Bein verstaucht, einmal aussetzen kaufen ein neues Auto für 20000 Franken. schliessen eine Feuerversicherung für 1000 Franken ab. schliessen eine Feuerversicherung für 1000 Franken ab. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 5 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 6 wahr Bedingung falsch wahr Bedingung falsch 7.1.2 Verzweigungen aufgrund von Bedingungen 7.1.2 Verzweigungen aufgrund von Bedingungen In Computerprogrammen werden Verzweigungen bzw. Alternativen mit Bedingungen bzw. Entscheidungen bewirkt. An Verzweigungen können zwei oder mehrere Alternativen weitergehen. schliessen eine Feuerversicherung für 1000 Franken ab. stehen an einer Weggabelung. Würfeln 1, 3 oder 5, geht es nach links, ansonsten nach rechts weiter. kaufen einen Fernseher für 500 Sfr. überweisen 2000 Sfr. von Konto A auf Konto B. wahr Dies lässt sich z.b. auch mit einem z.b. Struktogramm oder Flussdiagramm verdeutlichen. Bedingung Entscheidung Anweisung 5 falsch true Bedingung Entscheidung Anweisung 5 false schliessen eine Feuerversicherung für 1000 Franken ab. stehen an einer Weggabelung. Würfeln 1, 3 oder 5, geht es nach links, ansonsten nach rechts weiter. kaufen einen Fernseher für 500 Sfr. überweisen 2000 Sfr. von Konto A auf Konto B. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 7 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 8

Schleife Schleife 7.1.3 Wiederholungen mit Schleifen In Computerprogrammen werden Wiederholungen mit Schleifen bewirkt. Schleifen können mit einer fest vorgegebenen Anzahl an Durchläufen erfolgen oder solange, bis eine bestimmte Bedingung erfüllt ist. Durchlaufen nebenstehende Schleife solange, bis insgesamt 50000 Sfr. besitzen. gewinnen 3000 Sfr. Jemand Anweisung 5 überweist Anweisung Ihnen 6 2000 Sfr. kaufen ein neues Auto für 20000 Franken. 7.1.3 Wiederholungen mit Schleifen Dies lässt sich z.b. auch mit einem z.b. Struktogramm oder Flussdiagramm verdeutlichen. Schleife Durchlaufen nebenstehende Schleife solange, bis insgesamt 50000 Sfr. besitzen. gewinnen 3000 Sfr. Jemand Anweisung 5 überweist Anweisung Ihnen 6 2000 Sfr. kaufen ein neues Auto für 20000 Franken. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 9 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 10 7.1.4 Blöcke, Funktionen, Objekte 7.1.4 Blöcke, Funktionen, Objekte In Computerprogrammen werden gewisse Programmteile, die immer wieder vorkommen, in Blöcke (Module, Funktionen, Unterroutinen, Klassen, Objekte oder wie auch immer genannt) gepackt. In Computerprogrammen werden gewisse Programmteile, die immer wieder vorkommen, in Blöcke (Module, Funktionen, Unterroutinen, Klassen, Objekte oder wie auch immer genannt) gepackt. Diese Blöcke stehen nur über spezielle Schnittstellen mit der Umgebung in Kontakt. Aufruf des Blocks XY Prof. Dr. Rolf Dornberger OOP: 22.09.2010 11 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 12

7.2 Wiederholung der Grundelemente und Syntax in Java 7.2 Wiederholung der Grundelemente und Syntax in Java 7.2.1 Grundkonzept von Java 7.2.2 Sprachelemente, Datentypen und Variablen 7.2.3 Operatoren 7.2.4 Datenfelder 7.2.5 Zeichenketten 7.2.6 main-methode und Parameterübergabe 7.2.7 Bedingungen und Schleifen Prof. Dr. Rolf Dornberger OOP: 22.09.2010 13 7.2.1 Grundkonzept von Java Java läuft plattformunabhängig und architekturneutral auf verschiedensten Systemen und über verteilte Systeme hinweg. Java ist vollständig objektorientiert, sicher sowie stabil und unterstützt Multithreading. Java wird von Sun ständig weiterentwickelt und in verschiedenen Versionen als JDK bzw. SDK (Java bzw. Software Development Kit) als Freeware (unter Umständen auch als Open-Source) gratis zur Verfügung gestellt (für Linux, Windows, Solaris...). Der Java-Quelltext (gespeichert als Javafile.java) wird mittels des Java- Compilers javac in Java-Bytecode übersetzt. Der Bytecode wird auf jedem Computer, auf dem eine Java Virtual Machine läuft, mittels des Java-Interpreters java zur Laufzeit interpretiert. Weitere Java-Entwicklungswerkzeuge (javadoc, jdb,...) und IDEs (Integrated Development Environment) und CASE-Tools (Computer-aided Software Engineering) unterstützen die Entwicklung von Java-Programmen. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 14 7.2.2 Sprachelemente, Datentypen und Variablen Java verwendet den Unicode-Zeichensatz und kann somit Umlaute und zusätzliche Buchstaben anderer Alphabete darstellen und verwenden (solange vom Editor unterstützt). Außerdem unterscheidet Java Groß- und Kleinschreibung. Java ist keine zeilengebundene Programmiersprache, d.h. es darf eine beliebige Zeilenformatierung im Programmtext stehen (solange Zeilenumbrüche und Leerzeichen zulässig platziert sind). Java kennt die Kommentare /* und */, das Zeilenkommentar // und das javadoc-kommentar /** und */. Java kennt die primitiven Datentypen byte, short, int, long, float, double, boolean und char. Zeichen (char) werden in einfachen Anführungszeichen geschrieben '', Zeichenketten (Referenztyp String) in den Anführungszeichen "". Jede Variable muss definiert und einem Typ zugewiesen werden: Typname Variablenname; Zusätzlich kann der Variablen dabei auch ein Wert zugewiesen werden: Typname Variablenname = Wert; Prof. Dr. Rolf Dornberger OOP: 22.09.2010 15 7.2.3 Operatoren Es existieren die arithmetischen Operatoren: +, -, *, /, %, ++, -- Es existieren die arithmetischen Zuweisungsoperatoren: =, +=, -=, *=, /=, %= Es existieren die Vergleichsoperatoren: ==,!=, <, <=, >, >= Es existieren die logischen Vergleichsoperatoren:!, &&,, &,, ^ Es existieren die bitweise Operatoren: ~, &,, ^, >>, >>>, <<, &=, =, ^=, >>=, >>>=, <<= Explizite Konvertierung von einem primitiven Datentyp in einen anderen erfolgen mittels des Type- Cast-Operators: (byte), (short), (int), (long), (float), (double) und (char) Für die bedingte Zuweisung gibt es in Java den Fragezeichen-Operator? : also Wert = BoolescherAusdruck? Wert1 : Wert2; Prof. Dr. Rolf Dornberger OOP: 22.09.2010 16

7.2.4 Datenfelder Datenfelder sind ein- oder mehrdimensionale Arrays und werden wie folgt definiert: int[][] Matrix; Matrix = new int[intzeile][intspalte]; oder zusammengefasst in einem Ausdruck: int[][] Matrix = new int[intzeile][intspalte]; oder beispielsweise mit direkt vorbelegten Werten: int[][] Matrix = {{1, 2, {3, 4, {5, 6; Der Zugriff auf Array-Elemente erfolgt mittels direkter Indizierung, z.b.: Matrix[2][1] Die Nummerierung der Datenfelder beginnt immer mit 0, also z.b.: Matrix[0][0] Matrix[0][1] Matrix[1][0]... Die Anzahl der Array-Elemente wird mit.length abgefragt: Anzahl Zeilen: Matrix.length Anzahl Spalten in der 1.Zeile: Matrix[0].length Anzahl Spalten in der 2.Zeile: Matrix[1].length... Prof. Dr. Rolf Dornberger OOP: 22.09.2010 17 7.2.5 Zeichenketten Zeichenketten werden wie folgt definiert: String a = new String("Hello World"); oder in der Kurzform: String a = "Hello World"; Die Länge einer Zeichenkette wird mit.length() abgefragt: a.length() Zeichenketten werden mit dem Operator + verknüpft, z.b: a = "Hello " + "World"; Prof. Dr. Rolf Dornberger OOP: 22.09.2010 18 7.2.6 main-methode und Parameterübergabe Das Grundgerüst eines Java-Programms mit der main-methode als Haupteinstiegspunkt in das Java-Programm sieht wie folgt aus: public class JavaProgramm { public static void main(string[] args) { // hier Programmcode Parameterübergabe beim Aufruf des Java-Programms erfolgt mittels: java JavaProgramm Parameter1 Parameter2... Zugriff auf die einzelnen Parameter (die als Array von String vorliegen) erfolgt mittels: args[0] args[1]... Das File, in dem das Java-Programm gespeichert wird, muss (bzw. sollte) so heißen wie die Klasse und muss auf.java enden: JavaProgramm.java 7.2.7 Bedingungen und Schleifen Verzweigungen bzw. Alternativen werden durch Bedingungen bzw. Entscheidungen verursacht. Dafür gibt es in Java die if-, if-else- und switch-anweisung. Wiederholungen werden mit Schleifen bewirkt. Die do-schleife (auch do-while-schleife genannt) führt zunächst einmal die dazugehörige Anweisung aus und prüft dann den dazugehörigen Booleschen Ausdruck. Solange dieser Ausdruck true ist, wird die Anweisung erneut ausgeführt. Die while-schleife prüft zunächst den dazugehörigen Booleschen Ausdruck. Solange dieser Ausdruck true ist, wird die dazugehörige Anweisung ausgeführt. Die for-schleife dient in der Regel dazu, die dazugehörige Anweisung mit einer bestimmten Anzahl an Durchläufen auszuführen. Die for-schleife kann dabei explizit über Zählvariablen oder als foreach-schleife über Datenfelder und Aufzählungsobjekte laufen. In Java gibt es zwei Sprunganweisungen, die es erlauben, die Auswertungsreihenfolge einer laufenden Schleife zu verändern. Die break-anweisung beendet eine Schleife, die continue- Anweisung springt zum nächsten Schleifendurchgang. Durch Angabe eines Labels LabelX: springen die break- und die continue-anweisung direkt zu diesem Label. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 19 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 20

7.3 Methoden 7.2 Wiederholung der Grundelemente und Syntax in Java 7.3 Methoden Methoden können in Java als eine Art von Funktionen verwendet werden. Mit einem oder mehreren Eingabewerten wird ein Resultat erzeugt und zurück- oder ausgegeben. Mit Methoden (als Teil der Objekte und Klassen) kann in Java in etwa die grundlegende Programmstruktur eines Blocks realisiert werden. Methoden, die bisher auftauchten, sind: (wobei die letzten beiden streng genommen nur Operatoren sind) main(string[] args) System.out.println(Zeichenkette) System.out.print(Zeichenkette) Zeichenkette.length() Datenfeld.length Datenfeld[0].length (Methoden werden später im Zusammenhang mit der Objektorientiertheit von Java noch viel genauer erklärt. Daher hier nur eine kleine Einführung.) Prof. Dr. Rolf Dornberger OOP: 22.09.2010 21 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 22 7.3 Methoden Weitere wichtige Methoden, die von Java bereitgestellt werden, sind beispielsweise: System.exit(0) beendet das Java-Programm. Ganzzahl = Integer.parseInt(Zeichenkette) Gleitzahl = Double.parseDouble(Zeichenkette) konvertieren eine Zeichenkette vom Typ String in eine Ganzzahl vom Typ int bzw. eine Gleitzahl vom Typ double. Zufallszahl = Math.random() erzeugt eine Zufallszahl vom Typ double, die grösser gleich 0.0 und kleiner 1.0 ist. Zeichenkette1.equals(Zeichenkette2) überprüft, ob zwei Zeichenketten identisch sind. Zahl.toString() wandelt eine Zahl in eine Zeichenkette. Math.pow(a,b) und Math.sqrt(c) berechnet die Potenz ab und die Wurzel c. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 23 7.3 Methoden Um beispielsweise eine double-zahl über die Konsole (Eingabeaufforderung, DOS-Shell) einzulesen, verwendet man in Java mehrere Methoden (neben mehreren Objekten): z.b..parsedouble(),.readline() try { Gleitzahl = Double.parseDouble((new BufferedReader( new InputStreamReader(System.in))).readLine()); catch(exception ex) { System.out.println(ex.toString()); Ganz am Anfang des Quelltextes muss zusätzlich noch folgende Anweisung stehen: import java.io.*; (Da Java plattformunabhängig läuft, bedarf es innerhalb eines Java-Programms mehrerer Befehle, um Werte einlesen zu können. Was hier try und catch und die anderen Ausdrücke bedeuten, wird in einem späteren Kapitel noch ausführlich erklärt. Versuchen bis dahin, die Methoden mit Copy&Paste einzusetzen.) Prof. Dr. Rolf Dornberger OOP: 22.09.2010 24

7.3 Methoden 7.3 Methoden Will man in Java selber Methoden implementieren, wie man Funktionen und Unterprogramme in anderen Programmiersprachen schreibt, so werden diese Methoden zusätzlich in die Klasse des Java-Programms geschrieben, in der die main-methode steht, und mit static benannt, wie beispielsweise das Programm MethodeStatic1 zeigt: public class MethodeStatic1 { // Hauptmethode public static void main(string[] args) {... // Methode für Berechnung der Summe static double berechnesumme(double a, double b) {... In welcher Reihenfolge die Methoden untereinander in einem Java-Programm (Klasse) letztendlich angeordnet sind, ist egal. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 25 Methoden haben Übergabeparameter und einen Rückgabewert, wie beispielhaft am Programm MethodeStatic1 mit der Methode berechnesumme gezeigt ist. Die Übergabeparameter an die Methode berechnesumme(double a, double b) sind die double-zahlen Zahl1 und Zahl2. public class MethodeStatic1 { // Hauptmethode public static void main(string[] args) { double Zahl1 = 5.0, Zahl2 = 6.5, Ergebnis; Ergebnis = berechnesumme(zahl1, Zahl2); System.out.println(Ergebnis); // Methode für Berechnung der Summe static double berechnesumme(double a, double b) { double Summe = a + b; return(summe); (Methoden werden in einem späteren Kapitel noch viel genauer erklärt.) Prof. Dr. Rolf Dornberger OOP: 22.09.2010 26 7.2 Wiederholung der Grundelemente und Syntax in Java 7.4.1 Sechsstellige Zufallszahl 7.4.2 Quadratwurzel nach Heron 7.4 Algorithmen Algorithmus In der Mathematik ein Verfahren, bei dem aufgrund eines Systems von Regeln gegebene Größen (Eingabeinformationen, Aufgaben) in andere Größen (Ausgabeinformationen, Lösungen) umgewandelt werden können. Durch Algorithmen können komplizierte Prozesse von (Rechen-) Automaten nachgebildet werden. Quelle: www.wissen.de [Stand: 23.9.02] Software beinhaltet im Allgemeinen sehr viele Algorithmen. Die meisten sind schon programmiert und werden vom System und zusätzlichen Programm- Bibliotheken angeboten. Will man einen Algorithmus selber programmieren, muss man Regeln und mathematische Formeln so in ein Computerprogramm implementieren, dass eindeutig alle Rechenvorschriften ausgeführt werden und auf alle Sonderfälle geachtet wird. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 27 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 28

7.4.1 Sechsstellige Zufallszahl Ein Beispiel, wie ein Algorithmus in Java implementiert werden kann, ist die Ermittlung einer sechsstelligen Zufallszahl (Ganzzahl), wie sie beispielsweise in der Joker- oder Super-6-Ziehung der Lottogesellschaften vorkommt, wie z.b.: Überlegungen zum Aufstellen des Algorithmus: In Java gibt es die Methode.random(), die eine Zufallszahl (Gleitzahl) zwischen 0.0 und kleiner 1.0 (also 0.9999999...) erzeugt. Die Jokerzahl liegt zwischen 000000 und 999999. D.h. die Java-Zufallszahl muss damit mit 1000000 multipliziert werden: 000000.000... und 999999.999... Die Kommastellen müssen abgeschnitten werden, d.h. es wird nur eine Ganzzahl benötigt. Achtung: Führende Nullen einer Zahl werden in der Ausgabe einer Zahl nicht dargestellt. D.h. dass z.b. die Zahl 5674 als 005674 zu lesen ist. 1. Zusatz: Alle Berechnungen sollen in eine separate Methode gepackt werden. 2. Zusatz: Es sollen solange Zufallszahlen ausgegeben werden, bis eine Zahl größer gleich 800000 dabei ist. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 29 7.4.1 Sechsstellige Zufallszahl Mit den Überlegungen alleine ist quasi schon der Algorithmus definiert. Der Algorithmus kann nun noch grafisch beispielsweise in einem Flussdiagramm dargestellt werden. Neben einer verbalen Formulierung kann dann public class SechsstelligeZufallszahl1 { das Flussdiagramm noch so weit verfeinert // Hauptmethode werden, public static dass void es main(string[] nahezu den args) Programmcode { double zahl; enthält. int ganzzahl; zahl = Math.random(); zahl *= 1000000; ganzzahl = (int) zahl; System.out.println("Sechsstellige Zufallszahl: " + ganzzahl); Prof. Dr. Rolf Dornberger OOP: 22.09.2010 30 7.4.1 Sechsstellige Zufallszahl 1. Zusatz: Nun sollen alle Berechnungen in eine separate Methode gepackt werden. Der Hintergrund könnte sein, dass diese Methode auch in anderen Programmen verwendet werden soll. public class SechsstelligeZufallszahl2 { // Hauptmethode public static void main(string[] args) { int einezahl; einezahl = ermittlezahl(); System.out.println("Sechsstellige Zufallszahl: " + einezahl); public static int ermittlezahl(){ double zahl; int ganzzahl; zahl = Math.random(); zahl *= 1000000; ganzzahl = (int) zahl; return ganzzahl; 7.4.1 Sechsstellige Zufallszahl 2. Zusatz: Nun sollen solange Zufallszahlen ausgegeben werden, bis eine Zahl größer gleich 800000 dabei ist. public class SechsstelligeZufallszahl3 { // Hauptmethode public static void main(string[] args) { int einezahl; do { einezahl = ermittlezahl(); System.out.println("Sechsstellige Zufallszahl: " + einezahl); while (einezahl < 800000); public static int ermittlezahl(){ double zahl; int ganzzahl; zahl = Math.random(); zahl *= 1000000; ganzzahl = (int) zahl; return ganzzahl; Prof. Dr. Rolf Dornberger OOP: 22.09.2010 31 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 32

7.4 Algorithmen Ein komplexeres Beispiel, wie ein Algorithmus in Java implementiert werden kann, ist die Quadratwurzelberechnung nach Heron. Heron war ein Mathematiker, der ein Näherungsverfahren zur Berechnung einer Quadratwurzel aus einer positiven Zahl x vorschlug, das alleine die Grundrechenarten Addition, Multiplikation und Quotient verwendet. (Wie Heron auf den Algorithmus kam, ist hier unerheblich.) Der Algorithmus Quadratwurzelberechnung nach Heron sieht wie folgt aus: Schritt 0: Setze x 0 = x Schritt n+1: x n + Setze 1 = 1 2 * x Die Folge der Zahlen x 0, x 1, x 2,... konvergiert dann gegen x. n Der Algorithmus soll nun solange laufen, bis die Differenz der nach Heron berechneten Quadratwurzel zu der vom Computer intern berechneten Quadratwurzel kleiner als ein epsilon = 0.00001 ist. + x x x n 7.4 Algorithmen Das entsprechende Programm QuadratwurzelHeron 1 sieht in einem ersten Schritt wie folgt aus: public class QuadratwurzelHeron1 { public static void main (String[] args) { // Einlesen der Zahl x, für die Wurzel berechnet werden soll double x = Double.parseDouble (args[0]); // Setzen der Genauigkeit epsilon double epsilon = 0.00001; // Schritt 0: x(n) = x(0) = x für n = 0 double xn = x; // Definition der Variablen x(n+1) und n double xn1; int n = 1; // Schritt n+1: Führe solange aus, bis Genauigkeit erreicht do { xn1 = 0.5 * (xn + x/xn); System.out.println("x(" + n++ + ") = " + xn1); xn = xn1; // Prüfe Genauigkeit while (Math.pow(xn1,2) - x > epsilon); // Ausgabe Ergebnis System.out.println("Ergebnis = " + xn1); System.out.println("zum Vergleich: sqrt(x) = " + Math.sqrt(x)); Prof. Dr. Rolf Dornberger OOP: 22.09.2010 33 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 34 7.4 Algorithmen Das entsprechende Programm QuadratwurzelHeron2 sieht nach einer Zusammenfassung der Variablen xn und xn1 wie folgt aus: public class QuadratwurzelHeron2 { public static void main (String[] args) { // Einlesen der Zahl x, für die Wurzel berechnet werden soll double x = Double.parseDouble (args[0]); // Setzen der Genauigkeit epsilon double epsilon = 0.00001; // Schritt 0: x(n) = x(0) = x für n = 0 double xn = x; // Definition der Variablen n int n = 1; // Schritt n+1: Führe solange aus, bis Genauigkeit erreicht do { xn = 0.5 * (xn + x/xn); System.out.println("x(" + n++ + ") = " + xn); // Prüfe Genauigkeit while (Math.pow(xn,2) - x > epsilon); 7.5 Rekursion 7.2 Wiederholung der Grundelemente und Syntax in Java // Ausgabe Ergebnis System.out.println("Ergebnis = " + xn); System.out.println("zum Vergleich: sqrt(x) = " + Math.sqrt(x)); Prof. Dr. Rolf Dornberger OOP: 22.09.2010 35 Prof. Dr. Rolf Dornberger OOP: 22.09.2010 36

7.5 Rekursion 7.5 Rekursion Java erlaubt, dass Methoden sich selber aufrufen, also rekursive Aufrufe ausführen. Dies wird als Rekursion bezeichnet. Ein klassisches Beispiel für rekursive Aufrufe ist die Berechnung der Fakultät einer positiven ganzen (Integer-) Zahl n: Fakultaet(n) = n! = 1 * 2 * 3 *.. * (n-1) * n Die Implementierung des Algorithmus Fakultät n! kann so erfolgen: Schritt n: Wenn n > 1 dann n! = n * (n-1)! Schritt n-1:(n-1)! wird wiederum mit einem rekursiven Aufruf berechnet, solange bis n = 1 wird. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 37 Hauptprogramm Zahl n einlesen n muss >0 sein Aufruf der Fakultäts-Methode berechnefakultaet() Fakultäts-Methode Berechnung von n * (n-1) rekursiver Aufruf der Methode import java.io.*; public class Rekursion1 { public static void main (String[] args) { System.out.println("Fakultaet von positiver Integer-Zahl berechnen"); // Zahl für Fakultaetsberechnung einlesen und auf Integer prüfen int zahl = 0; do { System.out.print("Zahl = "); try { zahl = Integer.parseInt((new BufferedReader( new InputStreamReader(System.in))).readLine()); catch(exception ex) { System.out.println("Eingabe keine Integer-Zahl"); while (zahl <= 0); // Aufruf der Fakultaets-Methode long ergebnis = berechnefakultaet(zahl); // Ausgabe des Ergebnisses System.out.println("Fakultaet von " + zahl + " = " + ergebnis); // Methode zur rekursiven Berechnung der Fakultaet static public long berechnefakultaet(int zahl) { long ergebnis; if (zahl > 1) ergebnis = zahl * berechnefakultaet(--zahl); else ergebnis = 1; return(ergebnis); Prof. Dr. Rolf Dornberger OOP: 22.09.2010 38 Lernziele Erklären können, welche grundlegenden Programmstrukturen es gibt und wie diese in Java umgesetzt werden. Die Grundelemente und Syntax von Java (Sprachelemente, Datentypen, Variablen, Operatoren, Datenfelder, Zeichenketten, main-methode, Parameterübergabe, Bedingungen und Schleifen) kennen und richtig anwenden bzw. einsetzen können. (Statische) Methoden als Funktionen in Java verstanden haben und einsetzen können. Wichtige Methoden, die von Java zur Verfügung gestellt werden, kennen und anwenden können. Einfache Algorithmen in Java implementieren können. Rekursion in Java programmieren können. Prof. Dr. Rolf Dornberger OOP: 22.09.2010 39