Software Entwicklung 1

Ähnliche Dokumente
Begriffsklärung: (Effizienz) (2) Begriffsklärung: (deterministisch) Beispiel: (nicht-deterministischer Algorithmus) (2)

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

Objektorientierte Programmierung

Einfache Rechenstrukturen und Kontrollfluss II

3. Anweisungen und Kontrollstrukturen

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

C- Kurs 04 Anweisungen

2.5 Programmstrukturen Entscheidung / Alternative

Präzedenz von Operatoren

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

Kapitel 5. Programmierkurs. Kontrollstrukturen. Arten von Kontrollstrukturen. Kontrollstrukturen Die if-anweisung Die switch-anweisung

6. Iteration (Schleifenanweisungen)

5. Elementare Befehle und Struktogramme

Vorlesung Programmieren

Entwurf von Algorithmen - Kontrollstrukturen

4. Ablaufsteuerung (Kontrollstrukturen)

3. Algorithmenentwurf und JAVA. Informatik II für Verkehrsingenieure

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik

Objektorientierte Programmierung OOP Programmieren mit Java

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

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Grundlagen der Informatik I (Studiengang Medieninformatik)

Einführung in die Informatik 1

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

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

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

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

ModProg 15-16, Vorl. 5

Prinzipielle Ausführungsvarianten I

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

BKTM - Programmieren leicht gemacht.

Abstrakte Algorithmen und Sprachkonzepte

Schleifen in C/C++/Java

Programmieren für Wirtschaftswissenschaftler SS 2015

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

Welche Informatik-Kenntnisse bringen Sie mit?

Einführung in die Informatik Algorithms

Flussdiagramm / Programmablaufplan (PAP)

5. Tutorium zu Programmieren

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

1.8 Kontrollstrukturen 73. default : ziffer = 0; if (ziffer > 0) { cout << "Ziffer = " << ziffer; else { cout << "keine römische Ziffer!

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Blöcke. Beispiel: Variablen in Blöcken

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

Werkzeuge zur Programmentwicklung

Syntax von LOOP-Programmen

C.3 Funktionen und Prozeduren

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Java Einführung ABLAUFSTEUERUNG Kapitel 3 und 4

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Grundlagen der Programmierung

Annehmende Schleife do while

Programmieren I + II Regeln der Code-Formatierung

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Die Programmiersprache C Eine Einführung

Webbasierte Programmierung

Repetitorium Informatik (Java)

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

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

Einführung in die Java- Programmierung

Einstieg in die Informatik mit Java

2. Programmierung in C

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

JAVA - Methoden

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

11. Rekursion, Komplexität von Algorithmen

Grundlagen der Programmierung

Großübung zu Einführung in die Programmierung

Einführung in die Informatik I (autip)

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

Informatik B von Adrian Neumann

Einführung in die Programmierung

VBA-Programmierung: Zusammenfassung

Objektorientierte Programmierung OOP Programmieren mit Java

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

Grundlagen der Programmierung in C++ Kontrollstrukturen

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

Propädeutikum zur Programmierung

Vom Problem zum Programm

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

Tutorium für Fortgeschrittene

Fallunterscheidung: if-statement

Einstieg in die Informatik mit Java

Kleine Anekdote. Schleifen in C

Java I Vorlesung Objektorientiertes Programmieren

Informatik I Übung, Woche 40

JAVA - Methoden - Rekursion

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 3: Variablen

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

Korn-Shell: Einführung in Shellscripte 1. Übersicht: Einführung - 2. Die Kornshell im Detail - 3.Grundlagen der Programmierung

Schleifen dienen dazu, bestimmte Anweisungen immer wieder abzuarbeiten.

RO-Tutorien 3 / 6 / 12

Java-Programmierung mit NetBeans

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

Dr. Monika Meiler. Inhalt

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

Schleifenanweisungen

Transkript:

Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern

Der Begriff des Algorithmus Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 48

Der Begriff des Algorithmus I Zentrale Begriffe der algorithmischen Vorgehens: Algorithmus Variablen zur Speicherung von Werten Ausführungszustand = Speicherzustand + Steuerungszustand Zustandsänderung Aktion Ablauf Determinismus, Determiniertheit Bieniusa/Poetzsch-Heffter Software Entwicklung 1 3/ 48

Der Begriff des Algorithmus II Die prozedurale Modellierung und Programmierung baut auf den klassischen Algorithmusbegriff auf. Eine Berechnung dabei wird als zustandsändernder Ablauf betrachtet. Damit orientiert sie sich am Berechnungskonzept von Rechnern, das auch auf der Beschreibung von Abläufen basiert, in denen sich in jedem Schritt der Ausführungszustand ändern kann. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 4/ 48

Begriffsklärung: Algorithmus Ein Algorithmus ist ein Verfahren zur schrittweisen Ausführung von (Berechnungs-) Abläufen, das sich präzise und endlich beschreiben lässt, so dass: die Beschreibung auf wohlverstandenen, ausführbaren ( effektiven ) Einzelschritten basiert; in jedem Schritt eine oder mehrere Aktionen (ggf. parallel) ausgeführt werden; jede Aktion von einem Zustand in einen Nachfolgezustand führt. Man sagt, die Ausführung eines Algorithmus terminiert, wenn sie nach endlich vielen Schritten beendet ist; andernfalls spricht man von einer nicht-terminierenden Ausführung. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 5/ 48

Beispiel: Algorithmus, der erste I Verdoppeln nach Adam Riese (1574): Dupliren: Lehret wie du ein zahl zweyfaltigen solt. Thu ihm also Schreib die zahl vor dich / mach ein Linien darunder / heb an zu forderst / Duplir die erste Figur. Kompt ein zahl die du mit einer Figur schreiben magst / so setz die unden. Wo mit zweyen / schreib die erste/ Die ander behalt im sinn. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 6/ 48

Beispiel: Algorithmus, der erste II Darnach duplir die ander / und gib darzu/ das du behalten hast / und schreib abermals die erste Figur / wo zwo vorhanden / und duplir fort biß zur letzsten / die schreibe gantz auß / als folgende Exempel außweisen:... Bieniusa/Poetzsch-Heffter Software Entwicklung 1 7/ 48

Beschreibung eines Algorithmus Algorithmen lassen sich mit unterschiedlichen Sprachmitteln beschreiben: umgangssprachlich mit mathematischer Sprache in graphischer Notation mit programmiersprachlichen Mitteln Ein Algorithmus ist unabhängig von der verwendeten Beschreibungstechnik bzw. Sprache. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 8/ 48

Algorithmus in Umgangssprache Berechnung des größten gemeinsamen Teilers: Seien m, n, v Variablen für Integer-Werte. Lese die Werte w1 und w2 ein, für die der ggt berechnet werden soll und weise w1 an m und w2 an n zu. Solange der Wert von m größer als 0 ist, tue Folgendes und prüfe danach wieder die Bedingung: Berechne n mod m und weise das Ergebnis an v zu; Weise den Wert von m an n zu; Weise den Wert von v an m zu; Gebe den Wert aus, den n enthält. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 9/ 48

Algorithmus als Flussdiagramm Bieniusa/Poetzsch-Heffter Software Entwicklung 1 10/ 48

Algorithmus als Java-Programm public class GGT { // Berechnet ggt fuer 2 gelesene Werte public static void main ( String [] args ){ int m, n, v; m = Integer. parseint ( args [0]) ; n = Integer. parseint ( args [1]) ; } while ( m >0 ) { v = n % m; n = m; m = v; } System. out. println ( " ggt :" + n ); Bieniusa/Poetzsch-Heffter Software Entwicklung 1 11/ 48

Begriffsklärung: Speichervariablen I Um die Zustände zwischen den Schritten präziser fassen zu können, führt man Variablen ein, die Werte speichern können. Variablen stellen wir graphisch durch Rechtecke dar: v: true v enthält/speichert den Wert true x: 7 x enthält/speichert den Wert 7 Bieniusa/Poetzsch-Heffter Software Entwicklung 1 12/ 48

Begriffsklärung: Speichervariablen II Eine Speichervariable (oder einfach nur Variable) ist ein Speicher/Behälter für Werte. Charakteristische Operationen auf einer Variablen v: Zuweisen eines Werts w an v; Lesen des Wertes, den v enthält/speichert/hat. Der Zustand einer Variablen v ist undefiniert, wenn ihr noch kein Wert zugewiesen wurde; andernfalls ist der Zustand von v durch den gespeicherten Wert charakterisiert. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 13/ 48

Begriffsklärung: Zustände Jeder Schritt bei der Ausführung eines Algorithmus führt von einem Ausführungszustand zum Nachfolgezustand. Ein Ausführungszustand ist gekennzeichnet durch den Speicherzustand (im Wesentlichen der Zustand der Variablen); den Steuerungszustand (vereinfacht gesagt, die Stelle im Programm, an der die Ausführung angekommen ist). Ein Ausführungsschritt führt zu einer Zustandsänderung, also einer Veränderung von Speicher- und/oder Steuerungszustand. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 14/ 48

Begriffsklärung: Aktion In einem Ausführungsschritt wird üblicherweise eine Aktion ausgeführt. Aktionen sind insbesondere: Zuweisungen an Variablen Prüfen von Bedingungen [Kommunikation mit der Umgebung (Ein- und Ausgabe)] Die Aktion bestimmt nachfolgende Steuerungszustände bzw. die Terminierung des Algorithmus. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 15/ 48

Begriffsklärung: Ablauf Der Ablauf eines Algorithmus zu gegebenen Eingaben wird charakterisiert durch die Sequenz der Ausführungszustände die Sequenz der ausgeführten Aktionen Bieniusa/Poetzsch-Heffter Software Entwicklung 1 16/ 48

Begriffsklärung: deterministisch Ein Algorithmus heißt deterministisch, wenn für alle Eingabedaten der Ablauf des Algorithmus eindeutig bestimmt ist. Andernfalls heißt er nicht-deterministisch. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 17/ 48

Beispiel: nicht-deterministischer Algorithmus I Aufgabe: Erkenne, ob eine Eingabezeichenreihe über Kleinbuchstaben eines der Worte otto, toto, total enthält. Eingabe: Eingabezeichenreihe über Kleinbuchstaben Ausgabe: ja/nein Nicht-deterministischer Algorithmus: Seien z die Eingabe und prefixlen = { 0,..., länge(z) 4 } Bieniusa/Poetzsch-Heffter Software Entwicklung 1 18/ 48

Beispiel: nicht-deterministischer Algorithmus II Solange prefixlen, tue folgendes: Wähle ein x aus prefixlen aus; prefixlen = prefixlen\{x}; w = z ohne die ersten x Buchstaben ; Prüfe, ob w mit otto, toto, total beginnt ; Falls ja, terminiert der Algorithmus mit ja ; andernfalls fahre mit dem nächsten Durchlauf der Schleife fort. Terminiere mit nein. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 19/ 48

Begriffsklärung: determiniert Ein Algorithmus heißt determiniert, wenn er bei gleichen zulässigen Eingabewerten stets das gleiche Ergebnis liefert. Andernfalls heißt er nicht-determiniert. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 20/ 48

Beispiele: Determiniertheit Jeder Algorithmus, der eine math. Funktion berechnet, ist determiniert. Der nicht-deterministische Algorithmus des obigen Beispiels ist determiniert. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 21/ 48

Anweisungen in Java Bieniusa/Poetzsch-Heffter Software Entwicklung 1 22/ 48

Begriffsklärung: Anweisung Anweisungen (engl. statements) sind programmiersprachliche Beschreibungsmittel. Einfache Anweisungen beschreiben Aktionen. Zusammengesetzte Anweisungen beschreiben, wie mehrere Aktionen auszuführen sind. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 23/ 48

Wiederholung: Ausdruck Ausdrücke sind das Sprachmittel zur Beschreibung von Werten. Ein Ausdruck (engl. expression) in Java ist (u.a.) ein Literal, ein Bezeichner (Variable, Name), die Anwendung einer Operation auf einen oder mehrere Ausdrücke, oder aufgebaut aus Sprachmitteln, die erst später behandelt werden. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 24/ 48

Unterschied: Anweisung / Ausdruck Die Auswertung von Ausdrücken liefert ein Ergebnis. Die Ausführung von Anweisungen verändert den Zustand. Im Allgemeinen liefern sie kein Ergebnis. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 25/ 48

Beispiele für Anweisungen in Java Variablendeklaration < Typbezeichner > < Variablenbezeichner > ; Zuweisungen 1 < Variable > = < Ausdruck > ; 1 In Java ist eine Zuweisung syntaktisch ein Ausdruck, liefert also einen Wert und zwar das Ergebnis der Auswertung von der rechten Seite der Zuweisung. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 26/ 48

Begriffsklärung: L-/R-Wert In einer Zuweisung (und anderen Sprachkonstrukten) kann eine Variable v mit zwei Bedeutungen vorkommen: L-Wert a = 7 + a; R-Wert 1 Das Vorkommen links vom Zuweisungszeichen meint die Variable. Man spricht vom L-Wert (engl. l-value) des Ausdrucks v. 2 Das Vorkommen rechts vom Zuweisungszeichen meint den in v gespeicherten Wert. Man spricht vom R-Wert (engl. r-value) des Ausdrucks v. Die Unterscheidung wird wichtiger, wenn auch links des Zuweisungszeichens komplexere Ausdrücke stehen. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 27/ 48

Anweisungsblöcke Ein Anweisungsblock (engl. block statement) ist eine Liste bestehend aus Deklarationen und Anweisungen. Syntax in Java: { < DeklAnweisListe > } < DeklAnweisListe > ε < Deklaration > < DeklAnweisListe > < Anweisung > < DeklAnweisListe > Semantik: Stelle den Speicherplatz für die Variablen bereit und führe die Anweisungen der Reihe nach aus. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 28/ 48

Beispiel Anweisungsblock: { int i; i = 7; int a; a = 27 % i; } Üblicherweise schreibt man Deklarationen und Anweisungen untereinander, so dass ein Textblock entsteht. { } int i; int x; i = 34; x = i * 5; Bieniusa/Poetzsch-Heffter Software Entwicklung 1 29/ 48

Kontrollfluss: Verzweigungen und Schleifen Bieniusa/Poetzsch-Heffter Software Entwicklung 1 30/ 48

Verzweigungsanweisungen Verzweigungsanweisungen (engl. branch statements / conditionals) stellen Bedingungen an die Ausführung einer Anweisung oder wählen einen von mehreren Zweigen zur Ausführung aus. Wir betrachten hier zunächst zwei Arten von Verzweigungsanweisungen: Bedingte Anweisung Fallunterscheidung Bieniusa/Poetzsch-Heffter Software Entwicklung 1 31/ 48

Bedingte Anweisung Syntax in Java: if ( <boolscherausdruck> ) <Anweisung> Semantik: Werte den boolschen Ausdruck aus. Ist das Ergebnis true, führe die Anweisung aus. Beispiel: Wir gehen in diesen Beispielen davon aus, dass die Variablen x,y,z bereits deklariert und initialisiert worden sind. // Absolutwert if (x < 0) { x = -x; } // Testet, ob Divisor null ist if (x!= 0) { z = y/x; } // Sortieren von x und y: x soll kleiner als y sein if (x > y) { int t = x; x = y; y = t; } Bieniusa/Poetzsch-Heffter Software Entwicklung 1 32/ 48

Fallunterscheidung Syntax in Java: if ( < boolscherausdruck > ) < Anweisung1 > else < Anweisung2 > Semantik: Werte den boolschen Ausdruck aus. Ist das Ergebnis true, führe Anweisung1, andernfalls Anweisung2 aus. Beispiel: Münzwurf if ( Math. random () < 0.5) { System. out. println (" Kopf "); } else { System. out. println (" Zahl "); } Math.random() liefert eine Zufallszahl aus dem Bereich [0.0, 1.0) Bieniusa/Poetzsch-Heffter Software Entwicklung 1 33/ 48

Beispiel: Maximumsberechnung I Beispiel: Maximum zweier Zahlen // Maximum von x und y int x, y; int max ; x =...; // Initialisieren von x y =...; // Initialisieren von y if ( x > y ) { max = x; } else { max = y; } Frage: Wie ermittelt man das Maximum dreier Zahlen (x,y,z)? Bieniusa/Poetzsch-Heffter Software Entwicklung 1 34/ 48

Beispiel: Maximum dreier Zahlen Eine mögliche Implementierung: int x, y; int max ; x =...; // Initialisieren von x y =...; // Initialisieren von y if ( x > y ) { if ( x > z ) { max = x; } else { max = z; } } else { if ( y > z ) { max = y; } else { max = z; } } Bieniusa/Poetzsch-Heffter Software Entwicklung 1 35/ 48

Schleifenanweisungen Schleifenanweisungen (engl. loop statements) steuern die iterative, d.h. wiederholte Ausführung von Anweisungen/Anweisungsblöcken. Wir betrachten hier die folgenden Schleifenanweisungen: while-anweisung do-anweisung Zählanweisung (for-anweisung) ( nächste Vorlesung) Bieniusa/Poetzsch-Heffter Software Entwicklung 1 36/ 48

while-anweisung Syntax in Java: while ( < boolscherausdruck > ) < Anweisung > Semantik: Werte den boolschen Ausdruck aus, die sogenannte Schleifenbedingung. Ist die Bedingung erfüllt, führe die Anweisung aus, den sogenannten Schleifenrumpf, und wiederhole den Vorgang. Andernfalls beende die Ausführung der Schleifenanweisung. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 37/ 48

Beispiel: ggt Aus der Prozedur zur Berechnung des ggt: while ( m > 0 ) { v = n % m; n = m; m = v; } Bemerkung: while ( m > 0 ) { v = n % m; n = m; m = v; } Der Schleifenrumpf ist in den meisten Fällen ein Anweisungsblock. Syntaktisch korrekt ist aber auch z.b.: while ( true ) System. out. println (i); Bieniusa/Poetzsch-Heffter Software Entwicklung 1 38/ 48

Beispiel: Berechnung von Zweierpotenzen /* * Berechnet die Tabelle aller Zweierpotenzen, * die kleiner als 2^ n sind. * Der Wert von n wird dabei als Befehlszeilenargument * uebergeben. */ public class Zweierpotenz { public static void main ( String [] args ) { int n = Integer. parseint ( args [0]) ; int v = 1; int i = 0; } } while (i < n) { System. out. println (i + " " + v); v = 2 * v; i = i + 1; } Bieniusa/Poetzsch-Heffter Software Entwicklung 1 39/ 48

Terminierung Durch Programmierfehler ergeben sich bisweilen Situationen, in denen eine Schleife unendlich oft ausgeführt wird ( Endlosschleife ). Ein Programmierer muss sich daher immer die folgende Frage stellen: Wird die Ausführung der Schleife irgendwann abgebrochen? Welche Werte müssen die Variablen in der Schleifenbedingung annehmen, damit diese nicht mehr erfüllt ist? Wie verändern sich die Werte dieser Variablen in jedem Schleifendurchlauf? Wird die Schleifenbedingung daher irgendwann nicht mehr erfüllt? Als Hilfestellung kann man sich überlegen, welche Werte die Variablen annehmen, nachdem die Schleife das erste Mal, das zweite, etc., das letzte Mal durchlaufen wird. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 40/ 48

Beispiel: Zweierpotenz Die Schleifenbedingung ist nicht mehr erfüllt, wenn die Variable i größer oder gleich der Eingabe n ist. In jedem Schleifendurchlauf wird der Wert der Variablen i um 1 erhöht, der Wert von n verändert sich nicht. Fallunterscheidung: 1. Fall n 0: Da Variable i mit 0 initialisiert wird, wird die Schleifenbedingung nie erfüllt, und der Schleifenrumpf nicht ausgeführt. 2. Fall n > 0: Da i mit 0 initialisiert wird und in jedem Schleifendurchlauf um 1 erhöht wird, gilt nach dem k-ten Schleifendurchlauf, dass i den Wert k hat. Nach dem n-ten Schleifendurchlauf hat i also den Wert n, und die Schleifenbedingung ist dann nicht mehr erfüllt. Diese beiden Fälle decken alle möglichen Eingabewerte für n ab; daher terminiert die Ausführung für alle Eingaben. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 41/ 48

do-anweisung Syntax in Java: do < Anweisung > while ( < boolscherausdruck > ) ; Semantik: Führe die Anweisung aus. Werte danach den booleschen Ausdruck aus. Ist die Bedingung erfüllt ist, wiederhole den Vorgang. Andernfalls beende die Ausführung der Schleifenanweisung. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 42/ 48

Bemerkung Die do-anweisung ist immer dann sinnvoll, wenn man einen Vorgang mindestens einmal ausführen muss. In solchen Situationen spart man sich gegenüber der Verwendung der while-schleife die anfänglich unnötige Auswertung der Bedingung. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 43/ 48

Sprung- und Auswahlanweisungen Bieniusa/Poetzsch-Heffter Software Entwicklung 1 44/ 48

Sprunganweisungen Sprunganweisungen (engl. jump statements) legen eine Fortsetzungsstelle der Ausführung fest, die möglicherweise weit von der aktuellen Anweisung entfernt liegt. Wir betrachten hier nur Sprünge, die der Programmstruktur folgen. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 45/ 48

Abbruchanweisung Syntax in Java: break; Semantik: Die Ausführung wird mit der Anweisung fortgesetzt, die nach der umfassenden zusammengesetzen Anweisung kommt. Typische Einsatzgebiete: 1 In Auswahlanweisung: siehe unten. 2 In Schleifenanweisungen: while ( true ) {... if( < Abbruchbedingung > ) break ;... } Bieniusa/Poetzsch-Heffter Software Entwicklung 1 46/ 48

Auswahlanweisung Auswahlanweisungen erlauben es, in Abhängigkeit vom Wert eines Ausdrucks direkt in einen von endlich vielen Fällen zu verzweigen. In Java gibt es dafür die switch-anweisung. Beispiel: String eingabe = args [0]; switch ( eingabe ) { case "a": System. out. println ("A wie Apfel "); break ; case "b": System. out. println ("B wie Banane "); break ; case "c": System. out. println ("C wie Clementine "); break ; default : System. out. println (" Falsches Eingabezeichen "); } Bieniusa/Poetzsch-Heffter Software Entwicklung 1 47/ 48

Übersicht: Anweisungen Einfache Anweisungen (Zuweisung, Prozeduraufruf) Anweisungsblöcke Schleifenanweisungen (while-, do-, for-anweisungen) Verzweigungsanweisungen: bedingte Anweisung Fallunterscheidung Auswahlanweisung Sprunganweisungen (Abbruchanweisung) Weitere Arten von Anweisungen werden im Verlauf der Vorlesung noch behandeln. Bieniusa/Poetzsch-Heffter Software Entwicklung 1 48/ 48