Programmierung Ralph Steyer Grundlagen 3. Ausgabe, Juli 2015 ISBN: 978-3-86249-429-3 PG 7 Programmierung - Grundlagen 7.2 Bedingungen und Kontrollstrukturen Was sind Bedingungen? Durch eine Bedingung (engl. condition) wird der Ablauf eines Programms beeinflusst. Es wird ein logischer Ausdruck ausgewertet. Für die Formulierung solcher Bedingungen stehen die Vergleichsoperatoren und die logischen Operatoren zur Verfügung. Eine Bedingung kann entweder mit "Ja" beantwortet werden (true bzw. wahr) oder mit "Nein" (false bzw. falsch). Vom Ergebnis der Bedingung ist abhängig, welche Anweisungen des Programms danach abgearbeitet werden und welche nicht. Beispiele Es wird mithilfe des Modulo-Operators geprüft, ob eine Zahl gerade ist: (Zahl % 2) == 0 Es wird geprüft, ob eine Zahl zwischen 100 und 500 liegt (ohne die Werte 100 und 500): (Zahl > 100) && (Zahl < 500) Es wird geprüft, ob ein Zeichen eine Ziffer ist: (Zeichen >= '0') Es wird geprüft, ob der Mitarbeiter "Meier" seine 30 Urlaubstage bereits angebrochen hat: (Mitarbeiter == "Meier") && (Urlaubstage < 30) && (Zeichen <='9') Kontrollstrukturen im Überblick Sollen Programmteile mehrmals oder gar nicht ausgeführt werden, werden Sprachelemente benötigt, mit denen der Programmablauf gesteuert werden kann, sogenannte Kontrollstrukturen. Die Entscheidung, nach welchen Kriterien der Ablauf gesteuert wird, wird in Bedingungen formuliert. Es werden zwei Gruppen von Kontrollstrukturen unterschieden: Verzweigungen Es werden alternative Programmteile angeboten, in die – abhängig von einer Bedingung – beim Programmablauf verzweigt wird. Schleifen (Wiederholung) Ein Programmteil kann – abhängig von einer Bedingung – mehrmals durchlaufen werden (Schleife = engl.: loop) oder gar nicht. 7.3 Grundlagen zu Verzweigungen Eine Verzweigung kann eine der folgenden Ausprägungen besitzen: Bedingte Anweisung ("Einseitige" Verzweigung) 76 Je nachdem, ob eine Bedingung erfüllt ist oder nicht, wird ein Programmteil ausgeführt oder übersprungen. Verzweigung In Abhängigkeit vom Ergebnis einer Bedingung wird ein Programmteil oder ein anderer Programmteil ausgeführt. Geschachtelte Verzweigung Innerhalb der alternativen Programmteile einer bedingten Anweisung oder einer Verzweigung wird eine weitere Verzweigung integriert. Mit einer solchen geschachtelten Verzweigung lassen sich mehrere Alternativen bereitstellen. © HERDT-Verlag 7 Kontrollstrukturen Mehrfache Verzweigung 7.4 Es wird ein Ausdruck ausgewertet. Je nachdem, welchem Wert der Ausdruck entspricht, verzweigt das Programm fallweise (case) in einen entsprechenden Programmteil. Eine solche Kontrollstruktur kann somit ebenfalls mehrere Alternativen bereitstellen. Bedingte Anweisung Die bedingte Anweisung ist dadurch gekennzeichnet, dass nach einer Bedingungsabfrage durch einen Ausdruck eine Anweisung oder ein Anweisungsblock (mehrere Anweisungen) ausgeführt wird oder nicht. Wenn die Bedingung mit "Ja" (true) beantwortet wird, dann wird die Anweisung (statement) ausgeführt. Wird die Bedingung mit "Nein" beantwortet (false), erfolgt keine Aktion des Programms. In beiden Fällen wird nach dem Ende der Alternative mit der nächsten Anweisung fortgesetzt. Die bedingte Anweisung entspricht in den meisten Programmiersprachen einer ifAnweisung mit alternativem Zweig. PAP Struktogramm Syntax zur bedingten Anweisung in Java D Eine bedingte Anweisung wird mit dem Schlüsselwort if eingeleitet. D Nach dem Schlüsselwort if wird in Klammern ( ) als Bedingung ein logischer if (condition) statement Ausdruck angegeben, dessen Auswertung true oder false sein muss. D Ist die Bedingung erfüllt (true), wird die folgende Anweisung bzw. der folgende in geschweiften Klammern eingeschlossene Anweisungsblock ausgeführt. D Die Anweisungen innerhalb des Blocks werden eingerückt, um die Programmstruktur besser zu verdeutlichen. Beispiel: Discount.java Wenn (if) ein Kunde einen Auftrag höher als 1000,- EUR erteilt, bekommt er 3 % Rabatt und der neue Preis wird berechnet. Bei Aufträgen bis 1000,- EUR wird kein Rabatt gewährt. Die Überprüfung der Bedingung kann nur das Ergebnis "ja" bzw. "nein" ergeben, in Java entsprechend true oder false. 7.5 if (condition) { statement ... } ... double price = 1497.56; if ( price > 1000) price = price * (1 - 0.03); ... Java Verzweigung Bei einer sogenannten Verzweigung (auch Alternative genannt) wird einer von zwei möglichen Anweisungsblöcken in Abhängigkeit von einer Bedingung ausgeführt. Wenn die Bedingung erfüllt ist, dann wird Anweisungsblock A (statement1) ausgeführt, sonst wird Anweisungsblock B (statement2) ausgeführt. Die Verzweigung entspricht in den meisten Programmiersprachen der if-Anweisung mit else-Zweig. © HERDT-Verlag PAP 77 7 Kontrollstrukturen Was bedeutet …? mehrfache Verzweigung (Fallauswahl) In Abhängigkeit von einem Variablenwert wird einer von mehreren möglichen Auswahlblöcken einmal ausgeführt. FALLAUSWAHL...FALL A...FALL B... SONST FALL... in Java: switch (...) {case a: ... break; case b: ... break; ... default ...} zählergesteuerte Schleife Es ist im Voraus bekannt oder berechenbar, wie oft ein Anweisungsblock wiederholt werden soll. Eine Zählvariable wird automatisch erhöht (oder vermindert). FÜR...BIS...(MIT DER SCHRITTWEITE...) in Java: for (...;...;...) {...} kopfgesteuerte Schleife Die Anweisungen in der Schleife werden in Abhängigkeit von einer oder mehreren Bedingungen 0...n mal ausgeführt. Die Bedingung wird am Anfang der Schleife geprüft. SOLANGE... DURCHLAUFE SCHLEIFE in Java: while (...) {...} fußgesteuerte Schleife Die Anweisungen in der Schleife werden in Abhängigkeit von einer oder mehreren Bedingungen 1...n mal abgearbeitet. Die Bedingungsprüfung findet am Ende der Schleife statt. DURCHLAUFE SCHLEIFE...SOLANGE... in Java: do {...} while (...); 7.13 Übungen Übung 1: Verzweigung Übungsdatei: -- Ergebnisdatei: uebung07.pdf, Maximum.java 1. Erstellen Sie ein Struktogramm, um die Zahlen 543 und 246 zu vergleichen und die größere von beiden auszugeben. 2. Setzen Sie das Struktogramm in Java-Code um. Übung 2: Geschachtelte Verzweigung Übungsdatei: -1. Ergebnisdatei: uebung07.pdf, Letter.java Für eine Nachricht soll von einem Programm automatisch die Anrede formuliert werden. Folgende Variablen existieren: D name: Name D sex: Geschlecht D currentHour: Uhrzeit (Stundenangabe) Die Anrede soll je nach Tageszeit mit "Guten Morgen" (0 - 9 Uhr), "Guten Tag" (10 - 17), "Guten Abend" (18 0 Uhr) beginnen und anschließend mit "Herr xxx" bzw. "Frau xxx" fortgesetzt werden. Für xxx soll der entsprechende Name eingesetzt werden. Schreiben Sie ein entsprechendes Struktogramm. © HERDT-Verlag 89 7 Programmierung - Grundlagen 2. Erstellen Sie aus dem Struktogramm ein Java-Programm. Für Zeichenketten stellt Java den Datentyp String zur Verfügung. Übung 3: Kopfgesteuerte bedingte Schleife Übungsdatei: DivideBy5.java 1. Ergebnisdateien: uebung07.pdf, DivideBy5.java Schreiben Sie ein Programm, das zu einer eingelesenen Integer-Zahl ermittelt, wie oft mit dieser Zahl eine Division durch 5 durchgeführt werden kann. Die ermittelte Anzahl wird ausgegeben. Initialisieren Sie die einzulesende Integer-Zahl wie folgt: int number = readInt("Zahl: "); Dazu können Sie die Funktion readInt()der Übungsdatei DivideBy5.java verwenden, die eine Zahl über die Standardeingabe einliest. 2. Warum ist die Verwendung einer fußgesteuerten Schleife in Aufgabe 1 ungünstig? 3. Für folgendes Problem ist ein Algorithmus aufzustellen. Eine Firma hat mehrere Filialen, und in jeder Filiale werden Waren aus verschiedenen Warengruppen verkauft. Die Firma verwaltet die Daten in einer Datenbank. Ein Angestellter der Firma gibt die Daten (Filialnummer, Warengruppe, Stueck und Verkaufsdatum) ein, die dann in der Datenbank gespeichert werden. Während der Eingabe soll das Programm ermitteln, wie viele Produkte der Warengruppe 7 in der Filiale 9 verkauft wurden. Übung 4: Verzweigungen und Schleifen Übungsdatei: -1. 90 Ergebnisdateien: Days.java Erstellen Sie ein Programm, das mit dem gegebenen letzten Tag des Vorjahres alle Sonntage ausgibt, die auf den ersten Tag eines Monats fallen. Verwenden Sie Zahlen von 1 (Montag) bis 7 (Sonntag) für die Tage und 1 (Januar) bis 12 (Dezember) für die Monate. © HERDT-Verlag