Beispiel: Schriftliche Addition 1 1 1 0 Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) Zwischen werte Ausgabe 12037 Eingabe 5892 6145 WS 09/10 18 2. Grundlagen der Programmierung 2.1 Einfache Programme Der lange Weg von der Idee zum Programm Spezifikation Algorithmus Rainer Feldmann Universität Paderborn Computer Ausführung Compiler Computerprogramm Maschinenprogramm • Am Anfang steht die Idee, etwas berechnen zu wollen. • Überlegen sie ganz genau, was Sie berechnen wollen: Was ist die Eingabe und was ist die Ausgabe ? • Entwerfen Sie einen Algorithmus für ihr Problem. Entwicklungsumgebung Eclipse Programm Mensch Idee • Schreiben Sie ein Java-Programm, das Ihren Algorithmus implementiert. • Lassen Sie das Java-Programm von einem Compiler (=Übersetzer) in ein maschinenlesbares Programm übersetzen. • Führen Sie das maschinenlesbare Programm auf einem Computer aus. Testen Sie Ihr Programm ausgiebig, insbesondere auf Eingaben, zu denen Sie das korrekte Ergebnis kennen. Technische Informatik für Ingenieure (TIFI) WS 09/10 19 Beispiel: Fakultätsberechnung Problem Factorial: geg: n ∈ N ges: die Fakultät von n 1: berechne n! Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 20 Beispiel: Fakultätsberechnung Problem Factorial: geg: n ∈ N ges: die Fakultät von n 1: berechne n! Qn 2: berechne i=1 i Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 20 Beispiel: Fakultätsberechnung Problem Factorial: geg: n ∈ N ges: die Fakultät von n 1: berechne n! Qn 2: berechne i=1 i 3: berechne 1 · 2 · 3 · . . . · n Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 20 Beispiel: Fakultätsberechnung Problem Factorial: geg: n ∈ N ges: die Fakultät von n 4: Multipliziere alle Zahlen von 1 bis n miteinander. 1: berechne n! Qn 2: berechne i=1 i 3: berechne 1 · 2 · 3 · . . . · n Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 20 Beispiel: Fakultätsberechnung Problem Factorial: geg: n ∈ N ges: die Fakultät von n 4: Multipliziere alle Zahlen von 1 bis n miteinander. 5: Multipliziere alle Zahlen von 1 bis n in aufsteigender Reihenfolge miteinander. 1: berechne n! Qn 2: berechne i=1 i 3: berechne 1 · 2 · 3 · . . . · n Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 20 Beispiel: Fakultätsberechnung Problem Factorial: geg: n ∈ N ges: die Fakultät von n 4: Multipliziere alle Zahlen von 1 bis n miteinander. 5: Multipliziere alle Zahlen von 1 bis n in aufsteigender Reihenfolge miteinander. 6: 1: berechne n! Qn 2: berechne i=1 i 3: berechne 1 · 2 · 3 · . . . · n Rainer Feldmann Universität Paderborn Faculty() { input(n); /* lese Zahl n ein */ i = 1; /* init Laufvariable */ x = 1; /* init Ausgabewert */ solange i nicht größer ist als n x = x · i; /* multipl.mit i */ i = i + 1; /* nächstes i */ output(x); /* gebe x = n! aus */ } Technische Informatik für Ingenieure (TIFI) WS 09/10 20 Beispiel: Fakultätsberechnung Problem Factorial: geg: n ∈ N ges: die Fakultät von n 4: Multipliziere alle Zahlen von 1 bis n miteinander. 5: Multipliziere alle Zahlen von 1 bis n in aufsteigender Reihenfolge miteinander. 6: 1: berechne n! Qn 2: berechne i=1 i 3: berechne 1 · 2 · 3 · . . . · n Faculty() { input(n); /* lese Zahl n ein */ i = 1; /* init Laufvariable */ x = 1; /* init Ausgabewert */ solange i nicht größer ist als n x = x · i; /* multipl.mit i */ i = i + 1; /* nächstes i */ output(x); /* gebe x = n! aus */ } » ¾ Wir haben uns langsam eine immer genauere Vorstellung von dem Algorithmus gemacht, den wir benutzen wollen. ½ Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 ¼ 20 Beispiel: Fakultätsberechnung in Java public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Das Programm liest n, berechnet n! in der Variable erg und gibt n! aus. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 21 Beispiel: Fakultätsberechnung in Java mit Kommentaren public class Fakultaet { public static void main (String[] args) { // Eingabeaufforderung Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); /* Eingabewert von Tastatur */ int erg = 1; /* Initialisierung des Ergebnisses */ while (n > 0) { erg = erg * n; n = n - 1; } /* solange n noch nicht 0 ist ... */ /* multipliziere Ergebnis mit n */ /* erniedrige n um 1 */ Out.println("Das Ergebnis ist "+ erg +"."); } // end of main } // end of Fakultaet Kommentare sind rot markiert. Beachten Sie die zwei verschiedenen Kommentararten. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 21 Beispiel: Fakultätsberechnung in Java: Programmname public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Das Programm hat einen Namen. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 22 Beispiel: Fakultätsberechnung in Java: Klassendeklaration und Main-Methode public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Die orange markierten Anweisungen sind notwendig. Wir erläutern sie aber erst viel später. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 23 Beispiel: Fakultätsberechnung in Java: Eingabe und Ausgabe public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Eingabe und Ausgabe des Programms Fakultaet ist orange markiert. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 24 Beispiel: Fakultätsberechnung in Java: Rechnung public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Die Rechnung ist orange markiert. Sie transferiert die Eingabe n in die Ausgabe n! Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 25 Beispiel: Fakultätsberechnung in Java: Konstanten public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Numerische Konstanten und Textkonstanten sind orange markiert. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 26 Beispiel: Fakultätsberechnung in Java: Variablen public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Variablen sind orange markiert. Variablen sind Behälter“ für Werte! ” Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 27 Beispiel: Fakultätsberechnung in Java: Variablendeklarationen public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Variablen müssen vor Benutzung definiert werden! Sie bekommen Namen und Wertebereich. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 28 Beispiel: Fakultätsberechnung in Java: Ausdrücke public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); /* spezieller Ausdruck. Später! */ int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Ausdrücke sind Berechnungsvorschriften, die Operatoren (Zahlen, Texte) miteinander verknüpfen. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 29 Beispiel: Fakultätsberechnung in Java: Zuweisungen public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Zuweisungen legen das Ergebnis der Auswertung eines Ausdrucks in einer Variablen ab. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 30 Beispiel: Fakultätsberechnung in Java: Ablaufsteuerung public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Ablaufsteuerung bestimmt, ob und in welcher Reihenfolge Anweisungen durchlaufen werden. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 31 Beispiel: Fakultätsberechnung in Java: Schlüsselwörter public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Schlüsselwörter dürfen nicht als Namen für Variablen verwendet werden. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 32 Beispiel: Fakultätsberechnung in Java: Trennzeichen public class Fakultaet { public static void main (String[] args) { Out.print("Geben Sie eine natuerliche Zahl ein: "); int n = In.readInt(); int erg = 1; while (n > 0) { erg = erg * n; n = n - 1; } Out.println("Das Ergebnis ist "+ erg +"."); } } Das Trennzeichen ; trennt Anweisungen voneinander. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 33 Zusammenfassung • Das Programm kann numerische Konstanten und Textkonstanten verwenden. Ihre Werte können sich nicht ändern. • Variablen sind Behälter für Werte. Ihre Inhalte können sich ändern. • Variablen müssen vor Benutzung definiert werden. Sie bekommen Namen und Wertebereich. • Ausdrücke sind Berechnungsvorschriften, die Operatoren (Zahlen, Texte) miteinander verknüpfen. • Zuweisungen legen das Ergebnis der Auswertung eines Ausdrucks in einer Variablen ab. • Die Ablaufsteuerung bestimmt, ob und in welcher Reihenfolge Anweisungen durchlaufen werden. • Schlüsselwörter dürfen nicht als Namen für Variablen verwendet werden. • Anweisungen werden durch ; voneinander getrennt. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/10 34