Dr. Monika Meiler. Inhalt



Ähnliche Dokumente
Dr. Monika Meiler. Inhalt

Übersicht Programmablaufsteuerung

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

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Angewandte Mathematik und Programmierung

Kontrollstrukturen, Strukturierte Programmierung

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

Erwin Grüner

Einführung in die Programmierung

C/C++ Programmierung

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

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierkurs Java

Einführung in die Programmierung (EPR)

1 Vom Problem zum Programm

5. Tutorium zu Programmieren

Fallunterscheidung: if-statement

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

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

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Java-Programmierung mit NetBeans

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Projektverwaltung Problem Lösung: Modulare Programmierung

Einführung in die C++ Programmierung für Ingenieure

Entwurf von Algorithmen - Kontrollstrukturen

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Einführung in die C++ Programmierung für Ingenieure

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

Einführung in die Programmierung

Tutorium Rechnerorganisation

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

FB Informatik. Fehler. Testplan

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Repetitionsaufgaben: Lineare Gleichungen

Bevor lineare Gleichungen gelöst werden, ein paar wichtige Begriffe, die im Zusammenhang von linearen Gleichungen oft auftauchen.

Übungen Programmieren 1 Felix Rohrer. Übungen

Programmiervorkurs WS 2012/2013. Schleifen und Methoden

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Delegatesund Ereignisse

Primitive Datentypen

Klausur in Programmieren

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Kontrollstrukturen und Funktionen in C

Überblick. Lineares Suchen

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Grundlagen der Videotechnik. Redundanz

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Beispiel(unten ist der Spielfeldrand):

Summenbildung in Bauteiltabellen mit If Then Abfrage

Zeichen bei Zahlen entschlüsseln

Einführung in die Java- Programmierung

SWE1 / Übung 2 ( )

public class SternchenRechteckGefuellt {

P r o g r a m m a b l a u f s t e u e r u n g

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Rationale Zahlen. Weniger als Nichts? Ist Null nichts?

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Software Engineering I

Diana Lange. Generative Gestaltung Operatoren

25 kann ohne Rest durch 5 geteilt werden! ist wahr

Kontrollstrukturen - Universität Köln

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Objektorientierte Programmierung

Klassenarbeit zu linearen Gleichungssystemen

Prüfung Computation, Programming

KV Software Engineering Übungsaufgaben SS 2005

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Eine Logikschaltung zur Addition zweier Zahlen

Hochschule München, FK 03 FA SS Ingenieurinformatik

Übung Programmierung WS 2007/08 - Blatt 5

Das Modul ARTIKEL-BARCODE ermöglicht den Druck von Barcode-Etiketten der EAN-Codes 8 und 13.

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Lua Grundlagen Einführung in die Lua Programmiersprache

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Simplex-Umformung für Dummies

Einführung in die Java- Programmierung

Modellierung und Programmierung 1

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Lineare Gleichungssysteme

Informationsblatt Induktionsbeweis

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

LU-Zerlegung. Zusätze zum Gelben Rechenbuch. Peter Furlan. Verlag Martina Furlan. Inhaltsverzeichnis. 1 Definitionen.

Wir arbeiten mit Zufallszahlen

Tipp III: Leiten Sie eine immer direkt anwendbare Formel her zur Berechnung der sogenannten "bedingten Wahrscheinlichkeit".

Aufgabensammlung Bruchrechnen

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

Software Engineering Interaktionsdiagramme

Graphic Coding. Klausur. 9. Februar Kurs A

Lineare Gleichungssysteme

Professionelle Seminare im Bereich MS-Office

Datenbanken Microsoft Access 2010

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

ZAHLUNGSAVIS. Im Zahlungsprogrammteil automatisch erstellen

Transkript:

Inhalt 4 Anweisungen... 4-2 4.1 Strukturierte Programmierung... 4-2 4.1.1 Geschichte... 4-2 4.1.2 Strukturierung im Kleinen... 4-2 4.2 Einige Beispielanwendungen... 4-4 4.2.1 Addierer (do-schleife)... 4-4 4.2.2 Ein- Mal- Eins (for-schleife, if-anweisung)... 4-5 4.2.3 Linaere Gleichung (if-else-anweisung)... 4-6 4.2.4 Einfacher Rechner (switch-anweisung)... 4-8 4.2.5 Summieren (break, continue)... 4-10 Modellierung und Programmierung (Vorlesung) 4-1 /10

4 Anweisungen 4.1 Strukturierte Programmierung 4.1.1 Geschichte In der Anfangszeit des Programmierens, bis in die sechziger Jahre des 20. Jh. hinein, gab es keine Programmiermethodik, keine Techniken und keine Regeln für das fachmännische Schreiben größerer Programme. Jeder Programmierer hatte vielmehr seine eigene Vorgehensweise. Dabei wurden zu dieser Zeit bereits enorm große Programme geschrieben. Die Komplexität dieser großen Programme wuchs ihren Entwicklern über den Kopf. Ein durchaus üblicher Programmquelltext von 100 000 Anweisungen ergibt einen Programmtext von 2 000 Seiten, wenn man eine Anweisung pro Zeile und die Seite mit 50 Zeilen ansetzt. Dabei werden erläuternde Kommentare, die bei der Größe solch eines Programms unabdingbar sind, noch nicht einmal berücksichtigt. Die Fehlerhäufigkeit war groß. Bei der Beseitigung der gefundenen Fehler schlichen sich neue ein. Chaos Ende der sechziger Jahre fanden zwei von der NATO ausgerichtete Tagungen zu diesem Thema statt: 1968, Working Conference on Software Engineering in Garmisch 1969, Working Conference on Software Engineering Techniques in Rom Auf ihnen wurden erstmalig die Probleme der Entwicklung großer Programme explizit benannt und diskutiert. Man stellte fest, dass Software das Ergebnis von Ingenieurtätigkeit ist und, wie jedes industrielle Produkt, der methodischen Planung, Entwicklung, Herstellung und Wartung bedarf. So entstand ein neues Wissenschaftsgebiet, welches heute unter dem Begriff Software Engineering bzw. Softwaretechnik läuft. 4.1.2 Strukturierung im Kleinen Die Gestaltung der Ablaufstruktur von Algorithmen in der Programmierung lässt sich auf zwei elementare Konstruktionen zurückführen: 1. Einfache Aktionen (Wertzuweisungen, Prozeduraufrufe,...) 2. Binäre Verzweigungen zur Ablaufsteuerung (bedingte Sprünge) Viele Probleme bei der Programmierung konnten auf die Freiheit der Verwendung von Verzweigungen zurückgeführt werden. Deshalb war man bemüht, diese einzuschränken. EDSGER W. DIJKSTRA [1930-2002], ein niederländischer Informatiker, führte 1968 in einem Artikel Go To Statement Considered Harmful 1 aus: die Qualität eines Programms sei umgekehrt proportional zu der Anzahl der darin enthaltenen goto - Sprünge. Er schlug deshalb vor, dass man sich auf 5 Muster in den Sprachkonstrukten beschränken soll, die sogenannten D-Diagramme. 1 http://www.acm.org/classics/oct95/ Modellierung und Programmierung (Vorlesung) 4-2 /10

D-Diagramm 1. Eine einfache Aktion ist ein D-Diagramm. Wertzuweisung 2. Wenn A und B D-Diagramme sind und c eine Bedingung (condition) ist, so sind auch die folgenden Anweisungen D-Diagramme: A B Anweisungssequenz if c then A end Auswahlanweisungen if c then A else B end while c do A end Schleifenanweisung 3. Nichts sonst ist ein D-Diagramm. Damit war der Anfang der modernen Softwareentwicklung markiert. Statt wilder Sprünge durch goto-befehle sollten if und while den Programmfluss strukturieren. Die Beschränkung auf D-Diagramme wird als goto-lose-programmierung bezeichnet. Fortan galten Programme mit goto als sogenannte Spaghetti-Programme verwerflich. In den modernen Programmiersprachen findet man heute mehrere Formen von Auswahl- und Schleifenanweisungen. Hinzu sind auch noch einige explizite strukturbezogene Sprunganweisungen gekommen. Diese Erweiterung zur Ablaufsteuerung sieht man als unbedenklich an. Unverkennbar erfüllt unser Modellrechner die Bedingungen von Dijkstra. Java-Anweisungen: Einfache Aktionen: Ausdrucksanweisungen Ausdrucksanweisungen zusammengesetzte Anweisungen Schleifenanweisungen Auswahlanweisungen strukturbezogene Sprunganweisungen Ausdruck; Ablaufsteuerung: zusammengesetzte Anweisungen Anweisung Anweisung... Anweisung Auswahlanweisungen: if( Bedingung ) Anweisung if( Bedingung ) Anweisung else Anweisung switch(ausdruck ) case Konstante: Anweisung Anweisung... case Konstante: Anweisung Anweisung...... default: Anweisung Anweisung... Schleifenanweisungen: while( Bedingung ) Anweisung do Anweisung while( Bedingung ); for( Ausdruck 1; Ausdruck 2; Ausdruck 3) Anweisung strukturbezogene Sprunganweisungen: continue; return; Modellierung und Programmierung (Vorlesung) 4-3 /10

4.2 Einige Beispielanwendungen 4.2.1 Addierer (do-schleife) Wiederholtes Summieren von zwei Dezimalzahlen: Zunächst wird aus der Aufgabenstellung die Grobstrukturierung unter Verwendung des EVA-Prinzips entwickelt. EinfacherAddierer.java (Grobstruktur) public class EinfacherAddierer char weiter; // j oder n do // Eingabe der Summanden // Berechnen der Summe // Ausgabe der Summe // Weiter while( weiter == 'j'); Ein Programm entsteht aus der Grobstruktur durch schrittweise Verfeinerung. EinfacherAddierer.java // EinfacherAddierer.java MM 2009 import Tools.IO.*; // Eingaben * Einfacher Addierer, * addiert beliebig oft zwei Dezimalzahlen. public class EinfacherAddierer * Eingabe der Summanden, * Berechnen und Ausgabe der Summe; * Abbruch auf Wunsch des Nutzers. char weiter; // j oder n do // Eingabe der Summanden double summand1 = IOTools.readDouble( "Summand1 = "); double summand2 Modellierung und Programmierung (Vorlesung) 4-4 /10

= IOTools.readDouble( "Summand2 = "); // Berechnen der Summe double summe = summand1 + summand2; // Ausgabe der Summe System.out.println ( summand1 + " + " + summand2 + " = " + summe); // Weiter weiter = IOTools.readChar( "Weiter(j/n)? "); while( weiter == 'j'); System.out.println( "Programm beendet"); 4.2.2 Ein- Mal- Eins (for-schleife, if-anweisung) Das kleine Einmaleins mit strukturierter Ausgabe: EinMalEins.java (Grobstruktur) public class EinMalEins // Zeile for( int z = 1; z <= 10; z++) // Spalte in der Zeile for( int s = 1; s <= 10; s++) // Abstand // Produkt // Zeilenvorschub EinMalEins.java //EinMalEins.java MM 2009 * Das kleine 1 x 1. public class EinMalEins Modellierung und Programmierung (Vorlesung) 4-5 /10

* Zeilenweise Ausgabe des kleinen 1x1. // Zeile for( int z = 1; z <= 10; z++) // Spalte in der Zeile for( int s = 1; s <= 10; s++) // Abstand if( z * s < 10) System.out.print( " "); if( z * s < 100) System.out.print( " "); // Produkt System.out.print( " " + z * s); // Zeilenvorschub System.out.println(); EinMalEins.out 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 4.2.3 Linaere Gleichung (if-else-anweisung) Lösen der Gleichung ax b 0. Testbeispiele: 3 4 0 L 4, 3 0 x 3 x 0 L, 0 2 0 x L, 0 0 x R L. LinGleichung.java (Grobstruktur) public class LinGleichung public static void main( String args[]) // Einlesen der Parameter a und b // Berechnen und Ausgabe, Fallunterscheidung Modellierung und Programmierung (Vorlesung) 4-6 /10

if( a == 0) if( b == 0) else else // unendlich viele Loesungen // keine Loesung // 1 Loesung LinGleichung.java //LinGleichung.java MM 2003 import Tools.IO.*; // Eingaben * Berechnen der linearen Gleichung ax + b = 0. public class LinGleichung * Eingabe der Parameter a und b, * Berechnen und Ausgabe der Loesung. // Eingabe der Parameter a und b System.out.println( "Loesung ax + b = 0"); double a = IOTools.readDouble( "a = "); double b = IOTools.readDouble( "b = "); // Berechnen und Ausgabe, Fallunterscheidung if( a == 0) if( b == 0) // unendlich viele Loesungen System.out.println("L = R"); else // keine Loesung System.out.println("L = "); else // 1 Loesung System.out.println("L = " + -b/a + ""); /* ------------------------------------------------- // Testbeispiel 3.0x + 4.0 = 0 // L = -1.3333333333333333 // Testbeispiel 3.0x + 0.0 = 0 // L = -0.0!!! // Testbeispiel 0.0x + 2.0 = 0 // L = // Testbeispiel 0.0x + 0.0 = 0 Modellierung und Programmierung (Vorlesung) 4-7 /10

// L = R 4.2.4 Einfacher Rechner (switch-anweisung) Rechner führt Grundrechenarten +, -, * und / aus: Operanden und Operator werden eingegeben, Ergebnis wird ausgegeben. Division durch Null wird abgefangen. EinfacherRechner.java (Grobstruktur) public class EinfacherRechner char weiter; // j oder n do // Aufgabe // Berechnen und Ausgabe des Ergebnisses switch (op) case '+': // Addition case '-': // Subtraktion case '*': // Multiplikation case '/': // Division default: System.out.println( "Fehlerhafte Eingabe"); // Weiter while( weiter == 'j'); Einfacher Rechner.java // EinfacherRechner.java MM 2009 import Tools.IO.*; // Eingaben * Einfacher Rechner, * fuehrt Grundrechenarten fuer Dezimalzahlen aus. public class EinfacherRechner * Eingabe der Aufgabe (Operand1 Operator Operand2), * Berechnen und Ausgabe des Ergebnisses; * Abbruch auf Wunsch des Nutzers. Modellierung und Programmierung (Vorlesung) 4-8 /10

char weiter; // j oder n do // Aufgabe double operand1 = IOTools.readDouble( "Operand1 = "); char op = IOTools.readChar( "Operator (+, -, *, /) "); double operand2 = IOTools.readDouble( "Operand2 = "); // Berechnen und Ausgabe des Ergebnises double ergebnis; switch (op) case '+': // Addition ergebnis = operand1 + operand2; System.out.print ( operand1 + " + " + operand2 + " = "); System.out.println( ergebnis); case '-': // Subtraktion ergebnis = operand1 - operand2; System.out.print ( operand1 + " - " + operand2 + " = "); System.out.println( ergebnis); case '*': // Multiplikation ergebnis = operand1 * operand2; System.out.print ( operand1 + " * " + operand2 + " = "); System.out.println( ergebnis); case '/': // Division if( operand2!= 0) ergebnis = operand1 / operand2; System.out.print ( operand1 + " / " + operand2 + " = "); System.out.println( ergebnis); else System.out.println( "Division durch 0"); default: System.out.println( "Fehlerhafte Eingabe"); Modellierung und Programmierung (Vorlesung) 4-9 /10

// Weiter weiter = IOTools.readChar( "Weiter(j/n)? "); while( weiter == 'j'); System.out.println( "Programm beendet"); 4.2.5 Summieren (break, continue) Aufsummieren beliebig vieler natürlicher Zahlen. EndlosSchleifen.java //EndlosSchleifen.java MM 2009 import Tools.IO.*; // Eingaben * Aufsummieren beliebig vieler natuerlicher Zahlen. public class EndlosSchleifen * Liest natuerliche Zahlen ein und addiert diese, * Abbruch mit -1. int zahl = 0, summe = 0; do zahl = IOTools.readInteger ( "Naechste natuerliche Zahl (Abbruch mit -1): "); if( zahl < 0) if( zahl == 0) continue; // Schleifenabbruch // Durchlaufabbruch summe += zahl; System.out.println( "Zahl = " + zahl); System.out.println( "Summe = " + summe); while( true); // Formale Endlosschleife Modellierung und Programmierung (Vorlesung) 4-10 /10