Softwareentwicklung 1 UE-Stunde 01 - Algorithmen

Ähnliche Dokumente
Softwareentwicklung 1

Softwareentwicklung 1

Schleifen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 45

Softwareentwicklung 1

Simulation und Testen von Algorithmen

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

Sprechen Sie Java? Hanspeter Mössenböck. Tm\ dpunkt.verlag. Eine Einführung in das systematische Programmieren

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

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Informatik Algorithmen und Programme

Javakurs für Anfänger

Vorkurs Informatik WiSe 16/17

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

Martin Unold INFORMATIK. Geoinformatik und Vermessung

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

Grundlagen der Programmierung Prof. H. Mössenböck. 4. Schleifen

3. Grundanweisungen in Java

Java I Vorlesung Imperatives Programmieren

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...

Vorkurs Informatik WiSe 17/18

2 Eine einfache Programmiersprache

I) Grundlagen der Programmierung. II) Erweiterte Grundlagen der Programmierung

Javakurs für Anfänger

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache

Martin Unold INFORMATIK. Geoinformatik und Vermessung

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

I) Grundlagen der Programmierung. II) Erweiterte Grundlagen der Programmierung

Grundlagen der Programmierung Prof. H. Mössenböck. 2. Einfache Programme

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

Einstieg in die Informatik mit Java

JAVA-Datentypen und deren Wertebereich

2 Eine einfache Programmiersprache

Grundlagen der Informatik I (Studiengang Medieninformatik)

Martin Unold INFORMATIK. Geoinformatik und Vermessung

2 Programmieren in Java I noch ohne Nachbearbeitung

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

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

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

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

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Vorbereitende Aufgaben

Algorithmen und Datenstrukturen (für ET/IT)

Einführung in die Programmierung mit VBA

2.2 Syntax, Semantik und Simulation

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

Übungen zur Vorlesung Wissenschaftliches Rechnen I

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

Welche Informatik-Kenntnisse bringen Sie mit?

2. Algorithmenbegriff

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

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

Übung Grundlagen der Programmierung WS 2008/09. Übung 04: Methoden. Abgabetermin: Prosabeschreibung Java-Programm.

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

Inhalt. n Algorithmus. n Euklidscher Algorithmus. n Sortieren. n Programmiersprachen. n Entwicklungsschritte eines Programms.

Intensivübung zu Algorithmen und Datenstrukturen

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

Einstieg in die Informatik mit Java

Allgemeines zu Programmieren I

System.out.println("TEXT");

Algorithmen. Beispiele: Beispiele: Algorithmen zum Test auf Primzahl. Programmieren - Java I WS 2001

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

6. Iteration (Schleifenanweisungen)

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

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

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Inhaltsverzeichnis. 1 Grundlagen 1. 2 Einfache Programme 21

Einstieg in die Informatik mit Java

Eine JAVA Einführung ... Quellcode:... COMA Übung 3. T.Bosse. A.Griewank. Vorschau JAVA Programme Sprachen Kate

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

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

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

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Bru ckenkurs Programmieren

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

4.Grundsätzliche Programmentwicklungsmethoden

6. Iteration (Schleifenanweisungen)

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

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

Transkript:

Softwareentwicklung 1 UE-Stunde 01 - Algorithmen Dr. Herbert Prähofer Institut für Systemwissenschaften Johannes Kepler Universität Linz Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 1 Worum geht es? Programmieren ein Problem so exakt beschreiben, dass es ein Computer lösen kann kreative Tätigkeit Ingenieurtätigkeit Nur wenige Leute können gut programmieren Programm = Daten + Befehle Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 2

Von-Neumann Architektur eines Computers aus: A. Ferscha, Skriptum Softwareentwicklung 1, JKU Linz Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 3 Wiederholung von der VL: RISC-Programm aus: A. Ferscha, Skriptum Softwareentwicklung 1, JKU Linz Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 4

Typische Befehle load: store: move: Laden von Daten aus Hauptspeicher Schreiben von Daten in Hauptspeicher Speicheroperationen add, sub, mult, : Arithmetsiche Operationen cmp: Vergleichsoperationen: Vergleich auf 0 jmp, jeq; Sprünge und bedingte Sprünge im Ablauf Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 5 Daten und Befehle Daten Menge adressierbarer Speicherzellen x y z 17 4 21 Name Wert Daten sind binär gespeichert (z.b. 17 = 10001) Binärspeicherung ist universell (Zahlen, Texte, Bilder, Ton,...) 1 Byte = 8 Bit 1 Wort = 2 Byte (oder 4 Byte) 1 Doppelwort = 2 Worte Befehle Operationen mit den Speicherzellen Maschinensprache ACC x ACC ACC + y z ACC // Lade Zelle x // Addiere Zelle y // Speichere Ergebnis in Zelle z Hochsprache z = x + y; Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 6

Variablen Programme arbeiten mit Variablen. Sind benannte Behälter für Werte. x y 99 3 Variablen können ihren Wert ändern x x + 1 x 100 Beispiel: byte x = 10 Charakterisiert durch Name oder Bezeichner Wert Adresse (im Hauptspeicher) Datentyp int, char, byte, float,... Adresse 99 100 101 10 x Wert (byte) Datentyp Name Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 7 Datentypen Variablen haben einen Datentyp == Menge erlaubter Werte Variablentyp Zahl Zeichen Werte 17 54... 'a' 'x'... Typ Form - in eine Zahlenvariable passen nur Zahlen - in eine Zeichenvariable passen nur Zeichen Beispiele von Datentypen: char (1 Byte) int (4 Byte) boolean [ a-z][a-z][0-9][sonderzeichen] ~-2,147 Mrd. ~+2,147 Mrd. true, false float 3.14159265259 Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 8

Algorithmus Ein Algorithmus ist ein endliches, schrittweises Verfahren zur Berechnung gesuchter aus gegebenen Größen, in dem jeder Schritt aus einer Anzahl eindeutig ausführbarer Operationen und einer Angabe über den nächsten Schritt besteht. Berechnungsvorschrift schrittweise endlich ausführbare Operationen Angabe der Reihenfolge der Schritte (Der Name Algorithmus ist abgeleitet von Al Chwarizmi, arabischer Mathematiker, ca. 800 n.chr.) Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 9 Beispiel: Algorithmus Sum Algorithmus Sum zum Berechnen der Summe einer Zahlenfolge Aufgabenstellung: Gegeben: Eine Zahl n größer 0 Gesucht: Die Summe dieser Zahlen von 1 bis n Algorithmus: 1. Addiere alle Zahlen von 1 bis n 2. Gib das Ergebnis aus Diese Formulierung ist für einen Computer noch zu wenig genau! Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 10

Algorithmus Sum als Verfahren in mehreren Schritten Name Parameter Ergebnis Sum ( n, sum) 1. sum 0 2. zahl 1 3. Wiederhole, solange zahl n 3.1 sum sum + zahl 4.2 zahl zahl + 1 Folge von Schritten Diese Formulierung ist einem Computerprogramm schon sehr nahe. Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 11 Anweisungen: Wertzuweisung und Sequenz Wertzuweisung Variable x x + 1 Ausdruck 1. werte Ausdruck aus 2. weise seinen Wert der Variablen zu Anweisungsfolge (auch Sequenz) "Ablaufdiagramm" x 3 y 4 z x + y x == 3, y == 4, z == 7 Assertion Assertion (Zusicherung) Aussage über den Zustand des Algorithmus an einer bestimmten Stelle Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 12

Anweisungen: Verzweigung Auswahl (auch Verzweigung, Abfrage, Selektion) j x < y? n x y min x min y min == Minimum von x und y Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 13 Anweisungen: Wiederholung Wiederholung (auch Schleife, Iteration) Alternative Darstellung d 1 n > 9? j n d 1 n > 9 n n / 10 d d + 1 n n / 10 d d + 1 n < 10 d == Anzahl der Ziffer von n n < 10 d == Anzahl der Ziffer von n Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 14

Anweisungen: Wiederholung Wiederholung (auch Schleife, Iteration) n 0 x > 1? j n x x / 2 n n + 1 x 1 n = log2 x n 0 x > 1 x x / 2 n n + 1 Alternative Darstellung x 1 n = log2 x Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 15 Struktogramm: Sequenz und Verzweigung Sequenz x=a+b x= x+1 Verzweigung x<0 j x = -x j min=x max=y x<y n min=y max=x Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 16

Struktogramm: Abweis-/Durchlaufschleife Abweisschleife while i<x i=i+1 f=f*i Durchlaufschleife i=i+1 f=f*i while i<x Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 17 Programmanfang/-ende Ablaufdiagramm Struktogramm Name(Parameter) : : -- Comment Name(Parameter) -- Comment /* Comment */ : : Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 18

Algorithmus "Sum" Ablaufdiagramm Sum() sum = 0 read( number) while number>0 sum = sum + number read( number) Struktogramm Sum() sum = 0 read( number) while number>0 sum = sum + number read( number) write( number) write( sum) Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 19 Beispiel: Vertauschen zweier Variableninhalte Swap (x, y) Schreibtischtest h = x x = y y = h x y h 3 2 3 2 3 Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 20

Beispiel: Maximum dreier Zahlen bestimmen Max ( a, b, c, max) j a > b? n a b j n j n a > c? b > c? c a > b a b c max a max c max b max c Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 21 Beispiel: Euklidscher Algorithmus Berechnet den größten gemeinsamen Teiler zweier Zahlen x und y GGT ( x, y, ggt) rest Rest von x / y rest 0 x y y rest rest Rest von x / y ggt y rest = 0 Schreibtischtest x y rest 28 20 8 20 8 4 8 4 0 Warum funktioniert dieser Algorithmus? (ggt teilt x) & (ggt teilt y) ggt teilt (x - y) ggt teilt (x - q*y) ggt teilt rest GGT(x, y) = GGT(y, rest) Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 22

Algorithmenschreibweisen Ablaufdiagramm (schon bekannt) Struktogramm GGT ( x, y, ggt) rest Rest von x / y while rest 0 x y y rest rest Rest von x / y + erzwingen strukturiertes Programmieren (ohne beliebige Sprünge) - aufwendig zu zeichnen schwer zu ändern ggt y Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 23 Beispiel: Quadratwurzel von x berechnen 1. Näherung: -root (a x / + 2root) / 2 -a x // root a 2 root 2 0 a x 1 root 1 x SquareRoot ( x, root) root x / 2 a x / root a root root (root + a) / 2 a x / root a * root == x a * root == x Schreibtischtest x root a 10 5 2 3.5 2.85714 3.17857 3.14607 3.16232 3.16223 3.16228 3.16228 a * root == x & a == root root * root == x Kommazahlen sind meist nicht exakt gleich, daher besser a - root > 0.0000001 Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 24

Algorithmenschreibweisen Stilisierte Prosa GGT ( x, y, ggt) S1 S2 S3 S4 Bilde Rest. Dividiere x durch y und nenne den Rest rest Ende? Wenn rest null ist, gehe zu S4 Ersetze. Ersetze x durch y und y durch rest Gehe nach S2 Fertig. Das Ergebnis ggt ist y + größtmögliche Freiheit in der Formulierung - schreibaufwendig - unpräzise - Ablaufstrukturen (Schleifen, Verzweigungen) nicht sichtbar Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 25 Algorithmenschreibweisen Java-Programm + vom Computer lesbar und verarbeitbar + eindeutig und präzise + von Menschen lesbar - exakt, ohne Freiheitsgrade - aufwendig zu schreiben & )!"!!"! #$%"& ' (" % **+, %""- +. / + ) ** / ) )**" Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 26

Algorithmen und Programmierung Programm Ein für die Lösung einer bestimmten Aufgabe mit einer Datenverarbeitungsanlage geeigneter Algorithmus d.h. Elementare Operationen sind die durch den Computer ausführbaren Befehle Programm muss in einer für den Computer lesbaren Form definiert sein (==> Programmiersprache) Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 27 Programmerstellung Idee Mensch Spezifikation Aufgabenstellung Algorithmus Lösungsverfahren Programm Codiertes Lösungsverfahren Compiler Maschinenprogramm Lader Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 28

Schritte des Algorithmenentwurfs und der Programmierung Problem erfassen und beschreiben Lösungsidee erarbeiten und niederschreiben Lösungsidee in einen schrittweisen Ablauf überführen (= Algorithmus) Algorithmus so weit verfeinern und konkretisieren, dass Umsetzung in Java direkt möglich ist Programmierung in Java Überlegen von Testfällen (dabei alle möglichen Sonderfälle, Grenzfälle betrachten) Testen und Verbessern Dokumentieren der Ergebnisse Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 29 Java: Deklaration von Variablen In Java müssen alle Variablen vor der Verwendung deklariert werden Deklaration von Variablen Angabe des Datentyps Angabe des Namens (eindeutig) [Angabe eine Anfangswertes (optional)] int i; int j = 0, k; boolean positive = false; float x; char ch = ' '; Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 30

Java: Zuweisungsoperation x = 1 + 2; x = a + b; x = x + b; x = x + 1; Weist einer Variable einen Wert zu. Wichtig! Zuweisung ungleich Gleichheitsoperator (==) Der Wert der Variablen auf der rechten Seite geht dabei nicht verloren. Der Zuweisungsoperator ist nicht mit der Gleichheitsrelation der Mathematik zu verwechseln. Die Hauptanwendung des Zuweisungsoperators liegt in der Zuweisung eines Ergebnisses eines Ausdruckes an eine Variable. Verschiedene Schreibweisen in unterschiedlichen PrgmSprachen m = n C/C++, Java, FORTRAN, Basic,... m < n m := n APL Pascal, Algol, Modula-2 Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 31 Java: Sequenz int number; number = readint(); number = number + 1; writeint(number);... Folge von Anweisungen werden nacheinander (sequentiell) ausgeführt Ist nichts anderes spezifiziert, werden Anweisungen immer nacheinander - man sagt sequentiell - ausgeführt Während der Ausführung werden Werte von Variablen verändert Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 32

Java: Verzweigungen Eine Verzweigung führt Anweisungen in Abhängigkeit einer Bedingung aus. Bedingung Einseitig: wenn x < 0 ist, dann x = -x Anweisungen Zweiseitig: wenn x < y ist, dann min = x, max = y sonst /* x >= y */ min = y, max = x Java if (x < 0) { x = -x if (x < y) { min = x; max = y; else { /* x >= y */ min = y; max = x; Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 33 Java: Schleifen Schleifen führen Anweisungen in Abhängigkeit einer Bedingung kein- oder mehrmals aus. Beispiel: Berechnung der Fakultät Abweiseschleife Bedingung x = 3, i = 1, f = 1 solange i < x ist, wiederhole i = i + 1, f = f * i Durchlaufschleife x = 3, i = 1, f = 1; wiederhole f = f * i, i = i + 1 solange i <= x Anweisungen Java x = 3; i = 1; f = 1; while (i < x) { i = i + 1; f = f * i; x = 3; i = 1; f = 1; do { f = f * i; i = i + 1; while (i <= x); Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 34

Grundstruktur von Java-Programmen class ProgramName { public static void main (String[] arg) {... // Deklarationen... // Anweisungen Text muß in einer Datei namens ProgramName.java stehen main-methode stellt den Anfang des Programms dar Beispiel: class Sample { public static void main (String[] arg) { Out.print("Geben Sie 2 Zahlen ein:"); int a = In.readInt(); int b = In.readInt(); Out.println("Summe = " + (a + b)); Text steht in Datei Sample.java Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 35 Algorithmenschreibweisen Java-Programm + vom Computer lesbar und verarbeitbar + eindeutig und präzise + von Menschen lesbar - exakt, ohne Freiheitsgrade - aufwendig zu schreiben )!"!!"! #$%"& ' (" % & **+, %""- +. / + ) ** / ) )**" Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 36

Java-Programm "Sum" (Sum.java) public class Sum { public static void main(string[] args) { int sum = 0; int number; Out.print("Bitte Zahlen eingeben: "); number = In.readInt(); while (number > 0) { sum = sum + number; number = In.readInt(); Out.print("Die Summe ist:"); Out.printLn(sum); Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 37 Einige Hinweise Es ist wichtig, klar und einfach zu denken Hat man das Problem einmal richtig erfasst (niederschreiben), so ist meist auch die Lösung klar. Die besten Lösungen sind (fast immer) die einfachsten und kürzesten. Sonderfälle und Grenzfälle betrachten (z.b. Division durch 0) Fehler treten meist bei den Sonderfällen und Grenzfällen auf; an diese denken und im Algorithmus vorsehen. Der Mensch berücksichtigt Sonderfälle meist intuitiv; Intuition fehlt dem Computer aber völlig. Java-Programme müssen absolut exakt, verständlich und übersichtlich sein Keine Syntaxfehler Klare Namensgebung Genaue Konventionen für das Format und die Zeichensetzung (Einrückungen, Leerzeichen etc.) Kommentare für Verständnis wichtig Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 38