Softwareentwicklung Sequenz, Verzweigungen, Schleifen

Ähnliche Dokumente
Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

3. Anweisungen und Kontrollstrukturen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Java Anweisungen und Ablaufsteuerung

Kapitel 3: Anweisungen

Programmiertechnik Kontrollstrukturen

2.5 Programmstrukturen Entscheidung / Alternative

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

Javakurs für Anfänger

2 Teil 2: Nassi-Schneiderman

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

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

System.out.println("TEXT");

Martin Unold INFORMATIK. Geoinformatik und Vermessung

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Vorlesung Programmieren

Grundlagen der Programmierung Teil1 Einheit III Okt. 2009

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

Einstieg in die Informatik mit Java

Vorlesung Programmieren

Arithmetik in der tcsh

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

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

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Java: Eine kurze Einführung an Beispielen

Einführung in die Programmierung II. 3. Kontrollstrukturen

Einführung in die Programmierung Wintersemester 2011/12

Einstieg in die Informatik mit Java

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Objektorientierte Programmierung OOP Programmieren mit Java

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 25

Vorkurs Informatik WiSe 16/17

Martin Unold INFORMATIK. Geoinformatik und Vermessung

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

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

Herzlich willkommen!

Einführung in die Programmierung

Java: Syntax-Grundlagen III

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

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

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

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

Intensivübung zu Algorithmen und Datenstrukturen

Primitive Datentypen

Schleifen: Immer wieder dasselbe tun

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

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

9 Anweisungen und Kontrollstrukturen

5. Elementare Befehle und Struktogramme

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

C-Propädeutikum Anweisungen

4.4 Imperative Algorithmen Prozeduren

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

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

Objektorientierte Programmierung

3. Grundanweisungen in Java

Ausdrücke und Anweisungen Übungen

C- Kurs 04 Anweisungen

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben

1.8.5 Wiederholungen. Beispiele Unendliche Schleife: 1.8 Kontrollstrukturen 75. ( Bedingung ) AnweisungOderBlock. ja Anweisung. Bedingung erfüllt?

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Eine kleine Befehlssammlung für Java Teil1

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Schleifen in C/C++/Java

3. Kontrollstrukturen Grundlagen der Programmierung 1 (Java)

Softwareentwicklung Java allgemein, Kommentare, Datentypen, Variablen, Konstanten

C++ - Einführung in die Programmiersprache Schleifen

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

6. Iteration (Schleifenanweisungen)

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Java für Anfänger Teil 4: Anweisungen. Programmierkurs Manfred Jackel

Wo sind wir? Kontrollstrukturen

Kontrollstrukturen. Wo sind wir? Anweisung mit Label. Block. Beispiel. Deklarationsanweisung

Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

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

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Tag 3 Repetitorium Informatik (Java)

Funktionen nur wenn dann

Schleifen Datenfelder (Arrays) Verzweigungen

INP (05) Prof. Dr.-Ing. S. Gössner. University of Applied Sciences Lippe & Höxter

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

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

Labor Software-Entwicklung 1

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

Thomas Gewering Benjamin Koch Dominik Lüke. (geschachtelte Schleifen)

6. Iteration (Schleifenanweisungen)

Arbeitsblätter für Algorithmierung und Strukturierung

Transkript:

Mag. iur. Dr. techn. Michael Sonntag Softwareentwicklung Sequenz, Verzweigungen, Schleifen E-Mail: sonntag@fim.uni-linz.ac.at http://www.fim.uni-linz.ac.at/staff/sonntag.htm Institut für Informationsverarbeitung und Mikroprozessortechnik (FIM) Johannes Kepler Universität Linz, Österreich Michael Sonntag 2004

??? Fragen? Bitte gleich stellen!??? Michael Sonntag 2004

Java Sequenz Michael Sonntag Sequenz, Verzweigungen, Schleifen 3

Sequenz in Java Einzelne Anweisungen müssen durch ";" getrennt werden In einer Zeile oder in mehreren Zeilen ist egal Der Beistrich, fügt mehrere Anweisungen zu einer einzigen zusammen Nur in besonderen Fällen möglich» Z. B. Variablen-Initialisierung, Startanweisung der for-schleife Ansonsten nicht verwenden; wird nicht gebraucht und führt leicht zu Mißverständnissen! Sequenz.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 4

{ Blöcke in Java } Mehrere Anweisungen können mit geschweiften Klammern zu einer einzigen Anweisung zusammengefaßt werden Blöcke können beliebig verschachtelt werden, aber nicht verzahnt! Schleifen, Verzweigung, etc. gelten immer nur für eine einzige Anweisung! Sollen mehrere hineingesetzt werden, so müssen diese als Block zusammengefaßt werden. Sichtbarkeit von Variablen (siehe später bei Methoden) Kann jederzeit auch so beliebig eingesetzt werden» Eher vermeiden; Programm wird schwerer lesbar! Konventionen: Der Inhalt eines Blockes wird eingerückt» 2-4 Leerzeichen oder ein Tabulator Position von { und } je nach Vorliebe, aber konstant Michael Sonntag Sequenz, Verzweigungen, Schleifen 5

{ Blöcke in Java } Beispiele Beispiel 1: { int x=0; x=y/2+4; y=x+z; } Beispiel 2: public static void main(string[] args) { System.out.println("Hello World\n"); } Bloecke.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 6

Java Verzweigungen Michael Sonntag Sequenz, Verzweigungen, Schleifen 7

Verzweigung in Java "if (" Boolscher Ausdruck ")" Anweisung else Anweisung Der "else" Zweig kann auch weggelassen werden Immer nur eine einzelne Anweisung möglich» Mehrere gewünscht: Block! Z. B.: {Anweisung;Anweisung;} Die Bedingung (der Ausdruck) muß in Klammern stehen» Muß ein echter Ausdruck sein; d. h. kein automatisches "!=0" wie bei C! Vergleiche mit dem Konditional-Operator! Konventionen: Beide Anweisungen beginnen in einer neuen Zeile Beide Anweisungen werden eingerückt Verzweigung.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 8

Verzweigung in Java Beispiele: if(x<y) min=x; else min=y; if(temp>35.0) System.out.println("Alarm!"); if(temp>30.0) { System.out.println("Heiß!"); hitzefrei=true; } Michael Sonntag Sequenz, Verzweigungen, Schleifen 9

Verzweigung in Java Dangling else Werden zwei "if" geschachtelt, so stellt sich die Frage wozu ein else gehört: Innen oder außen? Beispiel: if(temp<21) if(temp<0) System.out.println("Frost"); else System.out.println("Kalt"); Ergebnisse: temp=-3 "Frost", temp=13????, temp=25??? Festgelegt: else gehört immer zum innersten if Daher: temp=13 "Kalt", temp=25 Keine Ausgabe Besser: IMMER Blöcke definieren! Dangling.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 10

Verzweigung in Java Kurzschlußauswertung-Bsp. Siehe Kurzschlußauswertung oben! if(y!=0 && x/y>10) Wird nie einen Fehler ausgeben, daß durch 0 dividiert wird, da in diesem Fall keine Division berechnet wird if(count>0 && --count>0) Wenn count vorher mindestens 2 war; sinkt nicht unter 0 ab if(c!=' ' (c=in.getchar())!=' ') Wenn c ein Leerzeichen ist, wird noch ein Zeichen eingelesen, ansonsten jedoch nicht» Praxis: Ähnliches wird in while-schleifen verwendet (siehe später) Michael Sonntag Sequenz, Verzweigungen, Schleifen 11

Verzweigung in Java Kaskade Mehrere Abfragen hintereinander werden nicht mehr eingerückt: if (a<0) // a<0 else if (a==10) // a=10 else if (a==13) // a=13 else // a>=0 && a!=10 && a!=13 Letzter Zweig (else) gehört zwar zum letzten if, wird aber für alles ausgeführt, was unter keine Bedingung fällt Genau durchdenken; entspricht obigem Standard & dangling else! Michael Sonntag Sequenz, Verzweigungen, Schleifen 12

Verzweigung in Java Switch "switch (" Ausdruck ") {" Labels "}" Ausdruck: Muß char, byte, short oder int ergeben Labels: "case " Konstante ":"» Wenn der Ausdruck gleich dem Label ist, wird dieser Teil ausgeführt oder "default:" (Optional, kann auch fehlen)» Wird ausgeführt, falls kein Fall passt Alle Labels müssen vom Typ int und unterschiedlich sein Sprung zum Ende von "switch" mittels break Sonst wird einfach beim nächsten "case" weiter ausgeführt» Genannt "falling through"» SEHR GENAU AUFPASSEN! Selbe Bedeutung wie Kaskade: Mehrweg-Verzweigung Geringe praktische Bedeutung! Michael Sonntag Sequenz, Verzweigungen, Schleifen 13

Verzweigung in Java Switch-Beispiel switch(month) { } Falling through case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; Weiter NACH "}" case 4: case 6: case 9: case 11: days=30; break; case 2: days=28; break; default: month<1 month>12 System.out.println("Fehler!"); TageProMonat.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 14

Java Schleifen Michael Sonntag Sequenz, Verzweigungen, Schleifen 15

Schleifen in Java Überblick Alle Schleifenarten sind vorhanden While: while (Bedingung) Anweisung Repeat: do Anweisung while (Bedingung);» Achtung: Gleicher Namen, unterschiedlicher Aufbau! For: for(anweisung;anweisung;anweisung) Anweisung Loop: Durch jede der obigen realisierbar» while (true) Anweisung» do Anweisung while (true);» for(;;) Anweisung Immer nur für eine einzige Anweisung: Blöcke verwenden! Michael Sonntag Sequenz, Verzweigungen, Schleifen 16

Schleifen in Java While while (" Boolscher Ausdruck ")" Anweisung Solange der Ausdruck als Ergebnis "true" liefert, wird die Anweisung ausgeführt Der Ausdruck wird vor dem ersten Durchlauf und nach jedem weiteren komplett neu berechnet Keine Werte werden zwischengespeichert, etc. Kurzschlußauswertung beachten! Anzahl der Ausführungen: 0..n Wenn Ausdruck vor dem ersten Mal "false": Anweisung wird gar nicht ausgeführt Potentiell endlos: Der Ausdruck muß irgendwann "false" ergeben While.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 17

Schleifen in Java While-Beispiel Prüft, ob kand durch eine ganze Zahl von 2... kand-1 ohne Rest dividierbar ist, d. h. eine Primzahl ist int j = 2; while ((j < kand) && (kand % j!= 0)) j++; boolean isprim=j>=kand; Durchdenken: Wie oft wird die Schleife durchlaufen? Für: kand=2, kand=3, kand=4, kand=5 Prim.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 18

Einschub: Eingabe mehrerer Textzeilen Einlesen von der Konsole: Durchgehender "Stream", d. h. eine Folge von Zeichen Wird meistens aber zeilenweise gelesen Ende durch Eingabe von Ctrl+Z (=EOF; End Of File) Beispiel: String line; BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); line = in.readline(); while (line!= null) { System.out.println("\""+line+"\""); line = in.readline(); } LineCount.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 19

Einschub: Eingabe-/Ausgabe-Umleitung Damit man nicht jedesmal alles neu eingeben muß: Eine Datei kann als Eingabe für das Programm verwendet werden "java " Programmname " <" Eingabedatei Genau gleich kann auch die Ausgabe in eine Datei umgeleitet werden Achtung: Datei wird überschrieben! "java " Programmname " >" Ausgabedatei Kombinieren ist auch möglich: "java " Programmname " <" Eingabedatei " >" Ausgabedatei Vergleichen von zwei Ausgaben: DOS/Windows: "fc " Datei1 Datei2 PrimFaktoren.java Prim2.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 20

Schleifen in Java Repeat "do" Anweisung while (" Boolscher Ausdruck ")" Solange der Ausdruck als Ergebnis "true" liefert, wird die Anweisung ausgeführt Gegensatz zur klassischen repeat-schleife: Ausdruck ist Negation» "do X while (i==1);" entspricht "repeat X until (i!=1);" Der Ausdruck wird nach jedem Durchlauf komplett neu berechnet Keine Werte werden zwischengespeichert, etc. Kurzschlußauswertung beachten! Anzahl der Ausführungen: 1..n Unabhängig vom Ausdruck (Prüfung erst nachher!) wird die Anweisung zumindest ein mal ausgeführt Potentiell endlos: Der Ausdruck muß irgendwann "false" ergeben Repeat.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 21

Schleifen in Java Repeat-Beispiel Kopiert eine Datei komplett von src nach dst do { len=einlesen von src nach buffer; if(len>0) schreiben von buffer mit Länge len nach dst } while(len>0); Durchdenken: Wie oft wird die Schleife durchlaufen? len ist sofort 0; len ist beim zweiten Mal 0 Wie könnte man dies noch schreiben (while)? Michael Sonntag Sequenz, Verzweigungen, Schleifen 22

Schleifen in Java While Repeat Jede while-schleife, kann durch eine repeat-schleife ersetzt werden Grundsatz: Bedingung bleibt gleich (klassische repeat-schleife: Bedingung negieren; d. h. "!" davorsetzen) Um die Möglichkeit der Niemals-Ausführung zu sichern muß ein if eingesetzt werden: Verdopplung der Bedingung if( Bedingung ) { do { Anweisung } while( Bedingung ); } Michael Sonntag Sequenz, Verzweigungen, Schleifen 23

Schleifen in Java Repeat While Jede repeat-schleife, kann durch eine while-schleife ersetzt werden Grundsatz: Bedingung bleibt gleich (klassische repeat-schleife: Bedingung negieren; d. h. "!" davorsetzen) Damit die Anweisung auf jeden Fall zumindest einmal ausgeführt wird, muß sie verdoppelt und vor die Schleife geschrieben werden Anweisung; while( Bedingung ) { Anweisung; } Michael Sonntag Sequenz, Verzweigungen, Schleifen 24

Schleifen in Java For "for(" StartA ";" AB ";" SchleifenA ")" Anweisung StartA (Startanweisung): Wird ein Mal vor dem Betreten der Schleife ausgeführt, dann nie wieder» Hier können lokale Variablen für die Schleife definiert werden» Kann leer bleiben AB (Ausführungsbedingung): Die Schleife wird solange wiederholt, als dieser boolsche Ausdruck "true" ergibt. Der Ausdruck wird vor dem ersten Betreten und nach jedem Durchlauf neu berechnet» Fehlt dieser Ausdruck, wird er als "true" betrachtet» Endlosschleife: for(;;) Anweisung; Abbruch durch break (siehe unten) SchleifenA (Schleifenanweisung): Wird nach jedem Schleifendurchlauf ausgeführt (nach Anweisung und vor AB)» Kann leer bleiben Eigentlich eine generalisierte while-schleife! For.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 25

Schleifen in Java For-Beispiel Zählschleife: 10 Mal ausführen der Anweisung for(int i=0;i<10;i++) Anweisung Ausführen mit den Werten i=0..9 for(int i=1;i<=10;i++) Anweisung Ausführen mit den Werten i=1..10 for(int i=0,j=10;i<10;i++,j--) Anweisung Ausführen mit den Werten i=0..9 und j=10..1 (i+j=10 gilt immer) Doppelte Schleife: Anweisung insgesamt 100x ausführen for(int i=0;i<10;i++) for(int j=0;j<10;j++) Anweisung Ausführen mit den Werten j=0..9 für jeden Wert von i=0..9 Tripel.java Michael Sonntag Sequenz, Verzweigungen, Schleifen 26

Schleifen in Java For-Ersetzen durch While Jede For-Schleife ist eigentlich eine while-schleife Die Startanweisung wird vor die Schleife gezogen Die Ausführungsbedingung wird die Schleifenbedingung Die Schleifenanweisung wird an das Schleifenende gestellt Beispiel: for(int i=0;i<10;i++) x+=i; Alternative Version: int i=0; while(i<10) { x+=i; i++; } Michael Sonntag Sequenz, Verzweigungen, Schleifen 27

Schleifen in Java Randbedingungen Bei Schleifen immer genau überlegen: Mindestens ein Mal oder vielleicht auch gar nicht durchführen? Vielleicht anders formulieren um Code-Verdopplung zu vermeiden? Ein einziges "if" als Inhalt der Schleife? Schleifenbedingung prüfen! "break" oder "continue" verwendet? Komplett von vorne beginnen! Bei Schleifen immer genau die "Ränder" überprüfen: Welche Werte gelten beim ersten Durchlauf bzw. davor? Welche Werte gelten beim letzten Durchlauf? Welche Werte gelten nach dem letzten Durchlauf? Hier schleichen sich Fehler ganz heimlich aber sehr oft ein! Michael Sonntag Sequenz, Verzweigungen, Schleifen 28

Schleifen in Java Abbruch: Break & Continue Vorzeitiges verlassen einer Schleife: break; NIEMALS verwenden außer bei switch! Ganz schlechter Stil und bringt NUR Probleme! Programmablauf wird bei der ersten Anweisung nach der innersten Schleife fortgesetzt Vorzeitiges springen zum Prüfen der Schleifenbedingung: continue Programmablauf wird mit dem Prüfen der Schleifenbedingung fortgesetzt; alle Anweisungen dazwischen werden ignoriert NIEMALS verwenden! Ganz schlechter Stil und bringt NUR Probleme! Beide Konstrukte sind Anzeichen für schlechte Überlegung Es geht immer auch ohne (Ausnahme: switch)! Michael Sonntag Sequenz, Verzweigungen, Schleifen 29