Informatik Funktionen

Ähnliche Dokumente
CS1005 Objektorientierte Programmierung

OOP Aufgabenblatt 4 2. November 2013

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

Rekursive Funktionen

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

JAVA - Methoden - Rekursion

Klassenvariablen, Klassenmethoden

JAVA - Methoden

Rekursive Funktionen

Systemnahe Programmierung in C (SPiC)

Einstieg in die Informatik mit Java

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Einstieg in die Informatik mit Java

Informatik Algorithmen und Programme

II.3.1 Rekursive Algorithmen - 1 -

2. Unterprogramme und Methoden

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Java Einführung Methoden. Kapitel 6

Einstieg in die Informatik mit Java

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Variablenarten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Einführung in die Programmierung für NF. Zuweisungen, main- Methode und Kommentare

Fakultät IV Elektrotechnik/Informatik

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Prozeduren vs. Funktionen

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Einstieg in die Informatik mit Java

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

OOP Aufgabenblatt November 2013

Implementieren von Klassen

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmierung für Mathematik (HS13)

Einführung in die Programmierung für NF. Zuweisungen, main- Methode und Kommentare

CS1005 Objektorientierte Programmierung

Algorithmen und Datenstrukturen II

Programmiertechnik Klassenmethoden

Erste Java-Programme (Scopes und Rekursion)

Übungen zu Algorithmen

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2016/17. Vorbereitende Aufgaben

Einstieg in die Informatik mit Java

Selbsteinstufungstest Vorkurs Programmieren

Aufgabe 1 (12 Punkte)

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

OOP Aufgabenblatt 7 6. Dezember 2013

Tag 8 Repetitorium Informatik (Java)

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

System.out.println("TEXT");

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Musterlösung Stand: 5. Februar 2009

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015. Musterlösung

Elementare Konzepte von

Programmiertechnik Übungen zu Klassen & -methoden

Basispruefung Herbst 2016/ Einführung in die Programmierung

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

Prüfung Softwareentwicklung II (IB)

Grundelemente objektorientierter Sprachen (1)

Klausur zur Vorlesung. Grundlagen der Informatik und Numerik. Dr. Monika Meiler Mo , Beginn: Uhr, Ende Uhr

Programmierpraktikum

Informatik II Aufgabenblatt 1

Grundelemente objektorientierter Sprachen (1)

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

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

Standardkonstrukte in Java

Probeklausur Informatik 2 Sommersemester 2013

Programmierkurs Java

Programmierung für Mathematik HS11

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

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Aufgabe 1.1. Alle Aufgaben beziehen sich auf Java.

Einstieg in die Informatik mit Java

Vorbereitende Aufgaben

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

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

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben

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

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einstieg in die Informatik mit Java

Grundelemente objektorientierter Sprachen (1)

Speicher und Adressraum

Vererbung, Polymorphie

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Welche Informatik-Kenntnisse bringen Sie mit?

Algorithmen und Datenstrukturen

Allgemeine Hinweise:

Informatik I (D-ITET)

Probeklausur: Programmierung WS04/05

Aufgabe 1.1. Wählen Sie jene Variablendeklarationen mit Initialisierungen aus, die in Java hinsichtlich der Typen korrekt sind:

Intensivübung zu Algorithmen und Datenstrukturen

Institut fu r Informatik

Programmiertechnik Methoden, Teil 2

Vorbereitende Aufgaben

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Alle Aufgaben beziehen sich auf Java.

Transkript:

Informatik Seite 1

Funktion Mathematik: Zuordnung Argumentwert(e) => Ergebniswerte Beispiel: f(x,y) = 2*x+y Informatik / Programmierung: Zusammenfassung von Anweisungen die von Argumentwerten abhängen (können) und einen Ergebniswert produzieren (können) oft zur Berechnung mathematischer eingesetzt Beispiele: static double mal2(int x) { return x*2; static int max(int x, int y) { return x > y? x : y; Seite 2

Name Funktionsdefinition Funktions-Kopf Kopf Funktions-Name Funktions-Parameter, (auch formale Funktions-Argumente) Funktions-Körper Funktions-Ergebnis Parameter static double mal2(int x) { return x*2; Ergebnis Körper Funktionsdefinition Funktionsanwendung, Funktionsaufruf Funktions-Name Name Funktions-Argumente, (auch aktuelle Funktions-Parameter) Argument x = mal2(5) Funktionsverwendung (Aufruf) Seite 3

Beispiel Bestimmung des größten von drei Werten a, b, c package hallo; import javax.swing.joptionpane; public class Maximum { static double max(double x, double y, double z) { double max = x > y? x: y; max = z > max? z : max; return max; public static void main(string[] args) { String as = JOptionPane.showInputDialog("Bitte 1-te Zahl eingeben"); String bs = JOptionPane.showInputDialog("Bitte 2-te Zahl eingeben"); String cs = JOptionPane.showInputDialog("Bitte 3-te Zahl eingeben"); double a = Double.parseDouble(aS); double b = Double.parseDouble(bS); double c = Double.parseDouble(cS); JOptionPane.showMessageDialog(null, "Maximum: " + max(a,b,c)); Seite 4

Funktion max als Gehilfe von main Eingabedaten Ausgabedaten String as = JOptionPane.showInputDialog("Bitte 1-te Zahl eingeben"); String bs = JOptionPane.showInputDialog("Bitte 2-te Zahl eingeben"); double a = Double.parseDouble(aS); double b = Double.parseDouble(bS); JOptionPane.showMessageDialog(null, "Maximum: " + max(a,b)); aktuelle Aktion static int max(int x, int y) { return x > y? x : y; x y 3 5 as bs 3 5 a b Los max, jetzt bist Du dran! rrrzzz, rrrzzzzz 3 5 Parameter Ergebnis max main Seite 5

Lokale Variablen und Anweisungen Eine Funktion kann beliebig viele Variablendefinitionen und Anweisungen enthalten. Mit return oder der letzten Anweisung endet sie. static double max(double a, double b, double c, double d) { double max1 = a; double max2 = c; if ( a < b) { max1 = b; if ( c < d ) { max2 = d; return max1 > max2? max1 : max2; Funktionsdefinition mit lokalen Variablen und Anweisungen Seite 6

Überladung: mit unterschiedlichen Parametern dürfen den gleichen Namen tragen Ein Funktionsname kann mit mehreren Bedeutungen überladen werden. Die werden an Hand ihrer Parameter unterschieden. Sie sollten ähnliche Wirkungen haben. static double max(double a, double b) { return a > b? a : b; static double max(double a, double b, double c) { return max(a, max(b, c)); static double max(double a, double b, double c, double d) { return max(a, max(b, c, d)); Mehrere Maximum- Seite 7

Überladung: mit unterschiedlichen Parametern dürfen den gleichen Namen tragen Die werden anhand ihrer Parameter unterschieden. static double max(double a, double b) { return a > b? a : b; static double max(double a, double b, double c) { return max(a, max(b, c)); static double max(double a, double b, double c, double d) { return max(a, max(b, c, d)); Unterscheidung der Seite 8

ohne Ergebnis und/oder ohne Argumente Kein Ergebnis: Kein Argument: Funktion gibt Daten aus Funktion liest Daten ein package hallo; Kein Argument Kein Ergebnis import javax.swing.joptionpane; public class Blubber { static double lieszahlwert() { String zahlstring = JOptionPane.showInputDialog("Bitte Wert eingeben"); return Double.parseDouble(zahlString); static void gibwertaus(double wert) { JOptionPane.showMessageDialog(null, wert); static double f(double x, double y) { return 2*x+y; public static void main(string args[]) { double x = lieszahlwert(); double y = lieszahlwert(); gibwertaus(f(x,y)); Seite 9

zur Strukturierung von Programmen einsetzen! Durch den Einsatz von kann ein Programm in unabhängig von einander planbare, verstehbare, testbare Teile aufgegliedert werden Seite 10

Rekursion können sich selbst aufrufen. Das Prinzip ist aus der Mathematik bekannt. Beispiel : Fakultätsfunktion n! = 1 (n-1)!*n falls n = 0 falls n > 0 oder fak(n) = 1 fak(n) = fak(n-1)*n falls n = 0 falls n > 0 Seite 11

Rekursion Beispiel : Fakultätsfunktion in Java static int fak(int x) { return x == 0? 1 : fak(x-1)*x; oder static int fak(int x) { if (x == 0) { return 1; else { return fak(x-1) * x; Seite 12

Indirekte Rekursion Funktion ruft sich selbst indirekt über eine andere auf Beispiel : Gerade / Ungerade static boolean odd(int n) { return (n == 0)? false : even(n-1); static boolean even(int n) { return (n == 0)? true : odd(n-1); Seite 13

Programmentwurf mit : Schrittweise Verfeinerung Schrittweise Verfeinerung Programmentwicklung durch systematisches Ausarbeiten (Verfeinern) von Teilaufgaben. Prinzip: Schreibe zuerst den Aufruf + Spezifikation einer benötigten Funktion dann die Definition dieser Funktion Wobei innerhalb von dieser (eventuell) weitere zuerst aufgerufen und dann später definiert werden. Seite 14

Programmentwurf mit : Schrittweise Verfeinerung Schrittweise Verfeinerung Beispiel: Primfaktorzerlegung static void faktorisiere(int n) { for (int i = 2; i < n; i++) { if (teilt(n, i) && prim(i)) { System.out.println(i); Start: Beginne mit einer Funktion, delgiere Aufgaben an noch zu schreibende. static boolean prim(int n) { return //? ist n eine primzahl?; Spezifikation (Plan) der noch zu schreibenden static boolean teilt(int x, int y) { return //? ist y ein Teiler von x?; Seite 15

Programmentwurf mit : Schrittweise Verfeinerung Schrittweise Verfeinerung Beispiel: Primfaktorzerlegung static boolean prim(int n) { if (n == 2) { return true; for (int i=2; i<n; i++) { if (teilt(i, n)) { return false; return true; Verfeinerung von prim static boolean teilt(int x, int y) { return x % y == 0; Verfeinerung von teilt Seite 16

Programmentwurf mit : Schrittweise Verfeinerung Schrittweise Verfeinerung Beispiel: Primfaktorzerlegung package hallo; import javax.swing.joptionpane; public class Faktorisierung { static boolean prim(int n) { if (n == 2) { return true; for (int i = 2; i < n; i++) { if (teilt(i, n)) { return false; return true; static boolean teilt(int x, int y) { return x % y == 0; static void faktorisiere(int n) { System.out.println("primfaktoren von "+n); for (int i = 2; i < n; i++) { if (teilt(n, i) && prim(i)) { System.out.println(i); public static void main(string[] args){ String zahlstring = JOptionPane.showInputDialog("Bitte Wert eingeben"); int zahl = Integer.parseInt(zahlString); faktorisiere(zahl); Seite 17

Programmentwurf mit : Schrittweise Verfeinerung Schrittweise Verfeinerung Top-Down Verfahren der Programmentwicklung Vom Gesamtplan Leite Pläne für Komponenten ab: Spezifikation von Verknüpfe Komponenten: Schreibe Algorithmen die diese nutzen Verfahre genauso mit den Komponenten Verfeinere die spezifizierten Seite 18

Programmentwurf Zwei Grundverfahren der Programmentwicklung Top-Down Von einem exakten Plan des Gesamtsystems leite exakte Pläne der Komponenten ab. Tue dies so lange bis alle Komponenten einfach sind und implementiert werden können. Bottom-up Von einem vagen Plan des Gesamtsystems leite Pläne von Komponenten ab und implementiere diese. Konstruiere das Gesamtsystem aus den Komponenten wenn möglich, ansonsten modifiziere Komponenten / Plan des Gesamtsystems. Beide Verfahren werden nicht in Reinform eingesetzt sondern nach Bedarf und Möglichkeiten gemischt. (Top-Down, wenn möglich, Bottom-up wenn nötig) Seite 19

Programmentwurf Komponenten = Schnittstelle / Spezifikation + Implementierung Entwurf Strukturierung eines (Software-) Systems in Komponenten Komponenten-Gedanke Komponenten sind Entwicklungs- und Wartungseinheiten Sie haben Entwickler / Betreuer und Kunden / Benutzer (Entwickler anderer Komponenten) Schnittstelle / Spezifikation und Implementierung Entwickler beschäftigen sind mit der Schnittstelle / Spezifikation und der Implementierung Kunden / benutzer wollen / sollen sich nur mit der Schnittstelle / Spezifikation auseinandersetzen. sind der älteste und immer noch ein extrem wichtiger Komponenten-Typ in der Software-Entwicklung. Seite 20

Programmentwurf : Spezifikation + Implementierung : Spezifikation und Implementierung Beispiel: Komponente /** * Stellt fest ob eine Zahl ist. * @param n : die zu untersuchende Zahl * @return ist n eine Primzahl */ static boolean prim(int n) { Schnittstelle / Spezifikation Implementierung if (n == 2) { return true; for (int i = 2; i < n; i++) { if (teilt(i, n)) { return false; return true; Die Komponente wird durch einen strukturierten Kommentar beschrieben (spezifiziert). Dies erlaubt es ihren Benutzern - sie korrekt zu verwenden - ohne langwierig die Implementierung studieren zu müssen. Seite 21

Programmentwurf : Spezifikation + Implementierung : Spezifikation und Implementierung Beispiel: /** * Faktorisierung einer Zahl. * Diese Funktion gibt alle Primfaktoren einer übergebenen Zahl aus. * @param n : die zu zerlegende Zahl */ static void faktorisiere(int n) { System.out.println("primfaktoren von "+n); for (int i = 2; i < n; i++) { if (teilt(n, i) && prim(i)) { System.out.println(i); Die Definition geeigneter Komponenten und deren Spezifikation ist ein zentrales Anliegen des Software-Engineerings. Seite 22