Algorithmen implementieren. Implementieren von Algorithmen

Ähnliche Dokumente
Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Repetitorium Informatik (Java)

Umsetzung einer Klassenkarte in einer Programmiersprache

Einstieg in die Informatik mit Java

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben

3.2 Datentypen und Methoden

Tag 8 Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Klassen als Datenstrukturen

Einstieg in die Informatik mit Java

Elementare Konzepte von

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

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

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Implementieren von Klassen

Tag 7 Repetitorium Informatik (Java)

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

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

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

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

Einstieg in die Informatik mit Java

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Objektorientierte Programmierung

Klassenvariablen, Klassenmethoden

2 Eine einfache Programmiersprache

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

Algorithmen und Programmierung II

Einstieg in die Informatik mit Java

3. Anweisungen und Kontrollstrukturen

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

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Java: Eine kurze Einführung an Beispielen

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen

Informatik I - Einstiegskurs

Kapitel 4. Kontrollstrukturen

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

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

C++ - Einführung in die Programmiersprache Schleifen

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Kapitel 4. Kontrollstrukturen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

2 Eine einfache Programmiersprache

Programmierkurs Java

5.5.8 Öffentliche und private Eigenschaften

Javakurs für Anfänger

Probeklausur: Programmierung WS04/05

Verkettete Datenstrukturen: Listen

Algorithmen und Datenstrukturen

Felder. M. Jakob. 28. April Gymnasium Pegnitz

System.out.println("TEXT");

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Einführung in die Programmierung mit VBA

Einstieg in die Informatik mit Java

Datenstrukturen / Container in Java

Java Einführung Methoden. Kapitel 6

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Propädeutikum zur Programmierung

Globale Variablen Diverses. Globale Variablen. Globale Variablen

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Informatik Abitur Bayern 2017 / II - Lösung

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

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

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

PROGRAMMIERUNG IN JAVA

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem

Software Entwicklung 1

Arrays. Einleitung. Deklarieren einer Array Variablen

2 Teil 2: Nassi-Schneiderman

Musterlösung Stand: 5. Februar 2009

Kapitel 3. Programmierkurs. Arten von Anweisungen. 3.1 Was sind Anweisungen?

Einführung in das Programmieren Probeklausur Lösungen

Welche Informatik-Kenntnisse bringen Sie mit?

Anweisungen zur Ablaufsteuerung

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Java I Vorlesung Imperatives Programmieren

1 Abstrakte Datentypen

Programmieren in Java -Eingangstest-

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

Tag 4 Repetitorium Informatik (Java)

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

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

Computeranwendung und Programmierung (CuP)

Grundwissen Informatik JS Oktober 2016

Einstieg in die Informatik mit Java

Prozeduren vs. Funktionen

Javakurs für Anfänger

Transkript:

Algorithmen implementieren Implementieren von Algorithmen Um Algorithmen ablaufen zu lassen, muss man sie als Programm darstellen (d.h. implementieren) Wie stellt man die algorithmischen Strukturelemente in einem Programm dar?

Was ist Implementierung? Die Umsetzung eines Algorithmus in eine Programmiersprache, die von einer Maschine gelesen und interpretiert werden kann, bezeichnet man als Implementierung. Zur Implementierung der algorithmischen Strukturelemente (Sequenz, Alternative, Wiederholung) stellt jede Programmiersprache spezielle Sprachelemente zur Verfügung, die man auch als algorithmische Kontrollstrukturen bezeichnet.

Sequenzen (Anweisungsfolgen) temp = hoehe; hoehe = breite; breite = temp; System.out.println("Höhe = " + hoehe); System.out.println("Breite = " + breite ); In Java werden die einzelnen Anweisungen einer Sequenz durch Strichpunkte voneinander getrennt. Schließt man eine Sequenz in geschweifte Klammern ein, so entsteht ein Block, den man anstatt einer einzelnen Anweisung verwenden kann. Sequenzen in Java: <Anweisung1>; <Anweisung2>; <Anweisung3>; <AnweisungN>; Bedeutung: Die Folge von Anweisungen wird unbedingt vollständig ausgeführt

Wiederholung mit Anfangsbedingung neuezahl = 1; while (neuezahl!= 6){ neuezahl = wuerfeln(); System.out.println(neueZahl); Die Methode public int wuerfeln() muss anderweitig definiert sein Bedeutung: Wiederholung in Java: while (<Bedingung>) { <Sequenz> 1) Falls <Bedingung> den Wert true hat, wird <Sequenz> ausgeführt. Danach wird <Bedingung> erneut ausgewertet und wieder bei 1) begonnen. 2) Falls <Bedingung> den Wert false hat, erfolgt keine Aktion. Die gesamte while-anweisung wird abgeschlossen.

Alternative if (b!= 0) { System.out.print("Das Ergebnis lautet: "); System.out.println(a/b); else { System.out.println("Fehler!"); Sonderfall: Bedingte Anweisung in Java: Alternative in Java: if (<Bedingung>) { <Sequenz1> else { <Sequenz2> if (<Bedingung>) { <Sequenz1> Bedeutung: Falls <Bedingung> den Wert true hat, wird <Sequenz1> ausgeführt, andernfalls <Sequenz2>

Lokale Variablen public int summebis (int letztersummand) { int summe = 0; int i = 1; while (i <= letztersummand) { summe = summe + i; i = i + 1; return summe; Lokale Variablen summe, i In objektorientierten Programmen benötigt man neben den Attributen der Objekte oft Datenspeicher für Zwischenergebnisse, die nach dem Abschluss der jeweiligen Berechnung nicht weiter benötigt werden. Man verwendet dafür spezielle Variablen innerhalb von Methoden. Diese Variablen sind nur während des Ablaufs dieser Methode, d. h. nur lokal innerhalb der Methode definiert und heißen deshalb lokale Variablen. Nach dem Ende der Ausführung der Methode wird der dafür reservierte Speicherplatz wieder freigegeben.

Globale Variablen bzw. Attribute Speicherstrukturen wie Attribute oder Variablen bezeichnet man als global bezüglich einer Methode, wenn sie vor dem Aufruf dieser Methode schon definiert sind und auch nach dem Ablauf der Methode noch definiert bleiben. Im Programmtext werden solche globalen Variablen außerhalb der Methode in übergeordneten Strukturen deklariert, z. B. in der Klasse, in der die Methode definiert wird.

Global oder lokal? Bezüglich der Methode uhr_verstellen sind: public class Uhr { int aktuellestunde, aktuelleminute; public void uhr_verstellen(int minuten) { int diffstunden, diffminuten, uebertragstunden, uebertragminuten; // Verstellung umrechnen in Stunden und Minuten diffstunden = minuten/60; diffminuten = minuten-60*diffstunden; // Neue Minuten- bzw. Stundenwerte // mit Übertrag und Korrekturen aktuelleminute = aktuelleminute+diffminuten; uebertragstunden = aktuelleminute/60; aktuelleminute = aktuelleminute-uebertragstunden*60; aktuellestunde = aktuellestunde+diffstunden+uebertragstunden; uebertragstunden = aktuellestunde/24; aktuellestunde = aktuellestunde-uebertragstunden*24; global lokal

Seiteneffekte Einen schreibenden Zugriff auf globale Variable oder Attribute bezeichnet man auch als Seiteneffekt einer Methode, weil dadurch Werte zurückliefert, die (im Sinne einer Funktion) nicht explizit in ihrer Definition angegebenen sind. Diese Werte erscheinen ja weder im Kopf (d. h. der ersten Zeile) der Methodendefinition noch nach return. Dort ist also nicht erkennbar, welche Attributwerte die Methode verändert. Dies macht ein Programm unübersichtlich und fehleranfällig. Daher versucht man, Seiteneffekte möglichst zu vermeiden.

Seiteneffekte public class Uhr { int aktuellestunde, aktuelleminute; globale Attribute public void uhr_verstellen(int minuten) { int diffstunden, diffminuten, uebertragstunden, uebertragminuten; // Verstellung umrechnen in Stunden und Minuten diffstunden = minuten/60; diffminuten = minuten-60*diffstunden; // Neue Minuten- bzw. Stundenwerte // mit Übertrag und Korrekturen aktuelleminute = aktuelleminute+diffminuten; uebertragstunden = aktuelleminute/60; aktuelleminute = aktuelleminute-uebertragstunden*60; aktuellestunde = aktuellestunde+diffstunden+uebertragstunden; uebertragstunden = aktuellestunde/24; aktuellestunde = aktuellestunde-uebertragstunden*24; Seiteneffekt

Wiederholung mit fester Wiederholungsanzahl public void Zinsen (double kapital, double zinssatz, int jahre) { double kontostand = kapital; for (int i=1; i<=jahre; i++){ kontostand = kontostand*(1+zinssatz/100); System.out.println("Kontostand nach "+jahre+" Jahren:"); System.out.println(kontostand+" "); Wiederholungen mit fester Anzahl von Durchläufen: Lokale Zählvariable Abbruchbedingung wiederhole solange.. Erhöhung des Wertes von i um 1 je Durchlauf for (int i=1; i<=jahre; i++) {.. Äquivalent zu Wiederhole für i=1 bis i = jahre mit Schrittweite 1 oder int i = 1; while (i <=jahre) {.. i = i+1

Algorithmen implementieren Felder Mehrere Werte vom gleichen Typ können in Feldern abgespeichert werden. Felder können auch Objekte enthalten.

Wie kann man mehrere Werte für spätere Wiederverwendung speichern? Lösung: Felder bzw. indizierte Variable Mathematische Schreibweise mit Index: kontostand i bezeichnet den Kontostand nach i Jahren z.b.: kontostand 1, kontostand 2, In Programmiersprachen als Feld, z.b. Java: kontostand[i] z.b. kontostand[1], kontostand[2], Ein Feld besteht aus einer Menge gleichartiger (typgleicher) Variablen bzw. Attribute, hier z.b. vom Typ double: kontostand[0],.., kontostand[10]

Deklaration und Erzeugen von Feldern 1. Felder müssen zunächst wie alle anderen Variablen oder Attribute deklariert werden: double[] kontostand; 2. Dann muss jedes Feld (ähnlich einem Objekt) angelegt werden: kontostand = new double[6]; Bedeutung: Erzeuge die folgenden 6 indizierten Variablen/Attribute: kontostand[0], kontostand[1],.. kontostand[5] Vorsicht: new double[n] erzeugt Feldelemente mit den Indizes 0 bis n-1 Die Anlage wird oft auch gleich zusammen mit der Deklaration erledigt: double[] kontostand = new double[6];

Belegen mit Werten 3. Schließlich müssen die einzelnen Elemente mit Werten belegt werden, z. B: kontostand[0] = 10000; kontostand[1] = 10000 * (1 + zinssatz/100);

Beispiel public void zinsen2 (double kapital, double zinnsatz, int jahre) { double kontostand[]= new double[jahre+1]; double aktuell = kapital; kontostand[0]= kapital; for (int i=1; i<=jahre; i=i+1){ aktuell = aktuell * (1 + zinnsatz/100); kontostand[i] = aktuell; // Ausgabe for (int i=0; i<=jahre; i=i+1){ System.out.println("Kontostand nach " + i + " Jahren:"); System.out.println(kontostand[i] + " ");

Anwendung: Bubblesort public void bubblesort() { String temp; for (int i=0;i<9;i++){ for (int k=0; k<9; k++) { if(kundenname[k].compareto(kundenname[k+1]) > 0){ temp = kundenname[k]; kundenname[k] = kundenname[k+1]; kundenname[k+1] = temp; compareto(string s2) ist eine Methode der Klasse String, die den Wert des aufgerufenen Objektes (z.b. s1) mit dem Wert von s2 vergleicht. Das Ergebnis ist negativ, wenn s1 alphabetisch vor s2 steht, Null bei Gleichheit und positiv, wenn s1 nach s2 steht.

Objektwertige Felder Auch (zusammengesetzte) Objekte kann man mit Hilfe von Feldern verwalten. z. B. eine Reihe von Girokonten der Klasse Konto mit den folgenden Attributen int nummer; int kundennummer; String art; double kontostand; Aufgabenstellung: Überzogene Konten suchen: Wiederhole für alle Girokonten der SparBank Überprüfe Kontostand Falls Konto überzogen, gib Warnung aus EndeFalls Ende Wiederhole

Objektwertige Felder Wir definieren dazu einfach ein Feld, das als Typ seiner Elemente die Klasse Konto hat: Konto[] giro = new Konto[10]; Dabei handelt es sich genau genommen um ein Feld aus Referenzen: Die einzelne Elemente des Feldes enthalten nicht Objekte der Klasse Konto, sondern lediglich Referenzen auf diese Objekte.

Explizites Anlegen der Feldelemente Bei der vorherigen Deklaration wird lediglich ein Feld für die Referenzen auf die Objekte erzeugt, nicht die Objekte selbst: Konto[] giro = new Konto[10]; Die einzelnen Objekte müssen jeweils noch mit new angelegt werden, z.b.: giro[0] = new Konto(100122, 22343, "BestGiro", 1012.99)

Felder aus atomaren Typen vs. Objektwertige Felder int[] fib = new int[10] fib[0] = 0; fib[1] = 1;... Konto[] giro = new Konto[10] giro[0] = new Konto(100122, 22343, "BestGiro", 1012.99)... <Ref. Klasse> fib[0] 0 giro[0] <Ref. Objekt> fib[1] 1 fib[2] 1 fib[3] 2 giro[1] giro[2] giro[3] 100122 22343 "BestGiro" 1012.99