Lukas Fässler, Barbara Scheuner, David Sichau. Programmieren mit Java. Begleitunterlagen. Zum Onlinekurs

Größe: px
Ab Seite anzeigen:

Download "Lukas Fässler, Barbara Scheuner, David Sichau. Programmieren mit Java. Begleitunterlagen. Zum Onlinekurs"

Transkript

1 Lukas Fässler, Barbara Scheuner, David Sichau Programmieren mit Java Begleitunterlagen Zum Onlinekurs

2

3 Programmieren mit Java Begleitunterlagen Zum Onlinekurs Lukas Fässler, Barbara Scheuner, David Sichau iii

4 Trotz sorgfältiger Arbeit schleichen sich manchmal Fehler ein. Die Autoren sind Ihnen für Anregungen und Hinweise per an dankbar! Dieses Material steht unter der Creative-Commons-Lizenz Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International. Um eine Kopie dieser Lizenz zu sehen, besuchen Sie Herstellung und Verlag: BoD Books on Demand, Norderstedt ISBN Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über abrufbar. iv Version: 3, Datum: 18 July 2018, Hash: d2eb005

5 Inhaltsverzeichnis Wie soll dieses Buch verwendet werden? 1 0 Programme erstellen in Java 3 Theorieteil Modulübersicht Schreiben von Computerprogrammen Computerprogramme bestehen aus Daten und Instruktionen Programme müssen übersetzt werden Anweisung Kommentare Variablen und Datentypen 9 Theorieteil Modulübersicht Darstellen von Zahlen und Zeichen im Computer Binäres System Darstellung von Zahlen im binären System Darstellung von Zeichen im binären System Datentypen Variablen und Konstanten Deklaration Initialisierung und Wertzuweisung Konstanten Operatoren und Ausdrücke Operatoren (Teil I) Ausdrücke Weitere Arithmetische Operatoren Der Datentyp String v

6 1.7 Ein- und Ausgabe von Daten Ausgabe in die Konsole Eingabe über die Tastatur Selbstständiger Teil Bremsweg-Berechnung Einführung Aufgabenstellung und Programmanforderungen Zinseszins-Berechnung Einführung Aufgabenstellung und Programmanforderungen Erweiterung Geldautomat Einführung Aufgabenstellung Zwischenschritte Erweiterungen Kontrollstrukturen und Logik 27 Theorieteil Modulübersicht Anweisungen und Blöcke Operatoren (Teil II) Relationale Operatoren Logische Operatoren Verzweigungen Einseitige Verzweigung: bedingte Programmausführung Zweiseitige Verzweigung Mehrstufige Verzweigungen Fallauswahl (Switch) Schleifen (Loops) for-schleife while-schleife do-while Schleife Geschachtelte Schleifen Selbstständiger Teil Notendurchschnitt Aufgabenstellung Programmanforderungen vi

7 2.5.3 Zwischenschritte Zinseszins mit Schleifen Einführung Aufgabenstellung und Programmanforderungen Zwischenschritte Zahlen raten Aufgabenstellung Programmanforderungen Zwischenschritte Erweiterungen Pokern Einführung Ausgangssituation und Programmanforderungen Zwischenschritte Erweiterungen Arrays 47 Theorieteil Modulübersicht Eindimensionale Arrays Arrays deklarieren Arrays erzeugen Arrays initialisieren Auf Array-Elemente zugreifen Array-Durchlauf mit Schleifen Länge eines Arrays bestimmen Zwei- und mehrdimensionale Arrays Initialisieren und Erzeugen eines zweidimensionalen Arrays Werte ins zweidimensionale Array ein- und auslesen Mehrdimensionale Arrays Zeichenketten (Strings) als Arrays Selbstständiger Teil Bowling Einführung Aufgabenstellung Zwischenschritte Erweiterungen Tic Tac Toe Einführung vii

8 3.6.2 Aufgabenstellung Zwischenschritte Erweiterungen Such- und Sortieralgorithmen Einführung Suchalgorithmen Erweiterungen Sortieralgorithmen Methoden und Funktionen 63 Theorieteil Modulübersicht Methoden Methoden ohne Rückgabewert (Prozeduren) Methoden mit Rückgabewert (Funktionen) Methoden mit Parametern Methoden aus der Klasse Math Überladen von Methoden Gültigkeitsbereiche von Variablen Rekursion Beispiel 1: Fakultät Beispiel 2: Fibonacci Fehlerbehandlung mit Exceptions Werfen einer Exception Selbstständiger Teil Erweiterungen Pandemie-Simulation Einführung Setzen der Startbedingungen Erweiterungen Objekte 77 Theorieteil Modulübersicht Klassen und Objekte Klassen Objektvariablen und Methoden Erstellen von Objekten unter Verwendung einer Klasse viii

9 Selbstständiger Teil Hotel-Verwaltung Aufgabenstellung Zwischenschritte Erweiterungen ix

10

11 Wie soll dieses Buch verwendet werden? Das vorliegende Buch enthält alle Begleitunterlagen zum Onlinekurs Programmiergrundlagen mit Java. Für den kostenlosen Kurs können Sie sich über folgende URL registrieren und einschreiben: Der Kurs besteht aus folgenden 6 Modulen: 1. Programme erstellen in Java 2. Variablen und Datentypen 3. Kontrollstrukturen 4. Arrays 5. Methoden 6. Objekte Jedes Modul dauert abhängig von Ihrem Vorwissen 4 bis 8 Arbeitsstunden. Die Materialien in diesem Buch und auf der Webseite begleiten Sie von der Einführung der Begriffe und Konzepte, über deren Verwendung in einfachen Programmier-Beispielen bis hin zur selbstständigen Anwendung der Programmier-Konzepte in kleinen Programmier- Projekten. Jedes Modul ist in folgenden 4 Phasen organisiert: 1. SEE: Kurze Einführung in die wichtigsten Begriffe und Programmier-Konzepte des Moduls. 2. TRY: Computerbasierte Einführung an einfachen Programmier-Beispielen direkt in einer Programmierumgebung. Angeleitet werden Sie dabei von einem elektronischen Tutorial (E.Tutorial ). 3. DO: Selbstständige Umsetzung kleiner Programmier-Projekte. Verknüpfung der neuen Programmier-Konzepte mit den bereits bekannten. 4. EXPLAIN: Diskussion der individuellen Resultate aus Phase 3 mit Fokus auf die neuen Konzepte aus Phase 1. Dieses Buch enthält alle Begleitmaterialien für die Phasen 1 und 3. Das Unterrichtskonzept dieses Kurses wurde 2018 an der ETH Zürich mit dem KITE- Award (Key Innovation in Teaching at ETH ) ausgezeichent. 1

12 Danksagung Wir danken Dennis Komm und Jens Maue für das Korrekturlesen. 2

13 Programmieren mit Java Modul 0 Programme erstellen in Java Theorieteil Autoren: Lukas Fässler, Barbara Scheuner Begriffe Programmiersprache Programm Programmierumgebung Editor Algorithmus Quelltext Compiler Bytecode Klasse Kommentar Syntax Semantik Anweisung 3

14 Theorieteil 0.1 Modulübersicht Die Entwicklung des Computers ermöglicht uns, Rechenarbeit durch Maschinen erledigen zu lassen. Der Computer kann jedoch allein keine Probleme lösen, sondern ihm muss ein Lösungsweg (eine Bearbeitungsvorschrift) gegeben werden. Dieser Lösungsweg wird ihm in Form eines Programms mitgeteilt. Dies geschieht wiederum in einer speziellen Sprache, der Programmiersprache. Eine Bearbeitungsvorschrift zur Lösung einer Aufgabe wird Algorithmus genannt. Hierbei fordern wir, dass ein Algorithmus seine Arbeit immer beendet, also nicht unendlich lange braucht, wenn er ausgeführt wird und für jede Eingabe eine sinnvolle Ausgabe generiert. Algorithmus ist somit ein recht abstrakter Begriff. Wir können z.b. ein Kuchenrezept oder eine Wegbeschreibung als einen Algorithmus verstehen. Wir betrachten hier hingegen nur Alogrithmen, die konkret in einer Programmiersprache ausformuliert worden sind. 0.2 Schreiben von Computerprogrammen Wenn zwei Menschen miteinander kommunizieren, wird dies von vielen Dingen, wie beispielsweise Mimik und Gestik, begleitet. Auf die Frage Wie geht es dir? kann eine Antwort Gut. ganz unterschiedlich interpretiert werden, abhängig davon, wie der Antwortende dies zum Beispiel betont. Menschen besitzen einen Intellekt, der es ihnen ermöglicht, einen Dialog zu interpretieren und in einen Kontext zu setzen. Computer haben diese Fähigkeit nicht. Um mit einem Rechner zu kommunizieren, müssen wir uns exakt ausdrücken. Der Computer weiss nicht, was wir eigentlich gemeint haben, sollten wir uns falsch ausgedrückt haben. Für die ersten Computer war dies eine sehr mühselige Aufgabe, denn die Sprache, die ein Computer versteht, ist für Menschen nicht sehr intuitiv. Deshalb wurden sogenannte Hochsprachen entwickelt, die unserer natürlichen Sprache näher sind. In diesem Kurs werden Sie eine solche Sprache, nämlich Java, verwenden, um Algorithmen als Computerprogramme umzusetzen. 4

15 0.2.1 Computerprogramme bestehen aus Daten und Instruktionen Ein Computerprogramm ist im Wesentlichen eine Auswahl von Daten und eine Folge von Instruktionen, die wenn sie ausgeführt werden jeweils eine bestimmte Funktion erfüllen. Eine Instruktion kann beispielsweise eine Berechnung ausführen. Zum besseren Verständnis können Sie sich, wie oben erwähnt, ein Kochrezept vorstellen. Es enthält als erstes die Mengenangaben der Zutaten (Daten) und danach die Reihenfolge der Schritte (Instruktionen), die man ausführen muss, um ein bestimmtes Gericht zu kochen. Das Grundschema eines Rezepts ist meistens dasselbe: zuerst die Zutaten, danach die einzelnen Arbeitsschritte. Mit einem Computerprogramm verhält es sich ähnlich. Jedes Programm folgt ebenfalls einem Grundschema. Bei der Programmierung spricht man allerdings nicht von Schema, sondern von der Syntax einer Programmiersprache, d.h. von den Regeln, die für den Aufbau eines Programms befolgt werden müssen. Wie bereits erwähnt, gibt es allerdings einen wesentlichen Unterschied zu den Schritten in einem Kochrezept. Bei den Instruktionen müssen wir präzise sein. Vorschriften analog zu nach eigenem Ermessen würzen werden wir hier nicht finden, da der Computer sie nicht eindeutig auswerten kann. Folgende Zeilen zeigen ein sehr einfaches Beispiel für ein Programm in der Programmiersprache Java: public class HalloWelt { public static void main(string[] args) { System.out.println("Willkommen zur Javaprogrammierung."); Unser Programm enthält in diesem Fall ein Grundgerüst, bestehend aus einer Klasse mit dem Namen HalloWelt. Der Name der Klasse muss zwingend mit dem Namen der Datei übereinstimmen, in der das Programm gespeichert ist. Unser Code wird deshalb in der Datei HalloWelt.java gespeichert. Die Klasse enthält eine Methode, die Hauptmethode (main) genannt wird. eine Instruktion in der Hauptmethode (System.out.println() als Anweisung). die Daten (hier den Text Willkommen zur Javaprogrammierung.). Wird dieses Programm nun ausgeführt, wird folgende Zeile in die Konsole ausgegeben: Willkommen zur Javaprogrammierung. 5

16 Das, was ein Programm ausführt, also seine Bedeutung, nennt man die Semantik des Programms Programme müssen übersetzt werden Programme in einer Programmiersprache wie Java sind für uns Menschen lesbar und verständlich. Wie bereits erwähnt, versteht ein Computer sie aber nicht direkt, sondern nur nach einer Umwandlung in Instruktionen für seinen Prozessor. Diese sind für uns nicht nur schwer verständlich, sondern auch wesentlich simpler als die Anweisungen eines Programms in einer Hochsprache wie Java. Das heisst, eine einzelne Instruktion eines Programms führt zu einer Folge mehrerer Prozessor-Instruktionen. Damit nun ein Computer unser Programm ausführen kann, müssen die Anweisungen des Programms in Instruktionen des Computers übersetzt werden. Für das Übersetzen von Programmen aus einer Programmiersprache in eine Folge von Prozessor-Instruktionen gibt es spezielle Computerprogramme, so genannte Kompilierer (Compiler, Übersetzer). Der Vorgang des Übersetzens wird deshalb auch kompilieren genannt. Schreiben und Ausführen eines Java-Programms Programme werden in Dateien gespeichert. Um diese Dateien editieren und abspeichern zu können, brauchen wir einen Editor. Für Java gibt es eine Vielzahl von Editoren und Entwicklungsumgebungen. Nachdem Sie ein Programm geschrieben haben, wird es als Quellcode gespeichert. Dateien, die Java-Quellcode enthalten, haben die Erweiterung.java. Im nächsten Schritt übersetzt der Compiler den Quellcode in ein Format namens Bytecode, das für die Anwenderin oder den Anwender nicht lesbar ist. Dieser bekommt die Endung.class. 0.3 Anweisung Eine Anweisung (statement) ist die kleinste ausführbare Einheit eines Programms. Wie in vielen anderen Programmiersprachen auch, wird eine Anweisung mit einem Strichpunkt oder Semikolon (;) abgeschlossen. Schreibweise: Anweisung; 6

17 Beispiel: System.out.println("Hallo Welt"); 0.4 Kommentare Kommentare sind Lesehilfen für uns Menschen. Sie dienen der Dokumentation des Programmcodes. Es können beliebig viele Kommentare eingefügt werden. Der Compiler liest über die Kommentare hinweg und ignoriert diese vollständig. Es muss festgelegt werden, wo ein Kommentar beginnt und wo er endet. In Java können Kommentare auf zwei Arten geschrieben werden. Einerseits gibt es Zeilenkommentare, welche nur eine Zeile lang sein können (also ohne Zeilenumbruch). Andererseits gibt es Blockkommentare, welche über mehrere Zeilen gehen können und ein einleitendes sowie ein abschliessendes Zeichen besitzen. Schreibweise Zeilenkommentar: Im folgenden Beispiel werden die Zeilen 1 und 3 vom Compiler ignoriert, die 2. Zeile wird hingegen übersetzt. // Dies ist ein Kommentar und wird vom Compiler ignoriert. System.out.println("Zeile wird vom Compiler übersetzt."); // Dies ist ein Kommentar und wird vom Compiler ignoriert. Schreibweise Blockkommentar: Compiler ignoriert. Im folgenden Beispiel werden alle drei Zeilen vom /* Dies ist ein Kommentar und wird vom Compiler ignoriert. Diese Zeile wird vom Compiler ebenfalls ignoriert. Diese Zeile wird vom Compiler ebenfalls ignoriert. */ 7

18

19 Programmieren mit Java Modul 1 Variablen und Datentypen Theorieteil Autoren: Lukas Fässler, Barbara Scheuner, David Sichau Begriffe Binärsystem Bit/Byte Datentyp ASCII-Code Ganzzahl (Integer) Gleitkommazahl (Double) Zeichenkette (String) Variable Deklaration Wertzuweisung Initialisierung Konstante Arithmetische Operatoren Bildschirm Ein- und Ausgabe Typenkonvertierung 9

20 Theorieteil 1.1 Modulübersicht Die beiden Konzepte Variablen und Datentypen sind für jede Programmierung grundlegend. Bei Variablen handelt es sich um Speicherbereiche, in denen Werte gespeichert werden können, und der Datentyp gibt an, welche Werte erlaubt sind (z.b. nur Ganzzahlen). In einem Programm werden Daten verarbeitet, die sich in ihrer Art unterscheiden, z.b. Zeichen, Zahlen oder logische Daten. Digitale Daten werden immer durch Ziffern dargestellt. Daher auch der Name, digit bedeutet Ziffer. 1.2 Darstellen von Zahlen und Zeichen im Computer Um die Darstellung von Zeichen, Zahlen und Texten im Computer zu verstehen, muss man das binäre System verstehen Binäres System Alle Rechner stellen Informationen im binären System dar. Dieses kennt nur zwei Ziffern, nämlich 0 und 1 (im Gegensatz zum Dezimalsystem mit den Ziffern 0 bis 9). Eine solche Ziffer wird als Bit bezeichnet (Abkürzung für Binary Digit, übersetzt Binäre Ziffer ). Ein Bit entspricht dem kleinsten speicherbaren Wert in einem Computer. Jeweils 8 Bit werden zu einem Byte zusammengefasst. Ein Byte kann somit 2 8 = 256 verschiedene Sequenzen von je 8 Bit speichern Darstellung von Zahlen im binären System Betrachten wir die Zahl 91, die binär mit 8 Bit als dargestellt wird (siehe Tabelle 1.1). Wir reden deswegen in diesem Zusammenhang von der Binärdarstellung von 91 (und nicht von der Dezimaldarstellung, die für uns lesefreundlicher ist). Eine 8-Bit-Zahl, wie in unserem Beispiel, kann Werte zwischen (0 im Dezimalsystem) und (255 im Dezimalsystem) speichern. Für die Umrechnung vom 10

21 Bit Binärwert Wertigkeit 2 7 = = = = = = = = 1 Dezimalwert = 91 Tabelle 1.1: Binäre Darstellung der Dezimalzahl 91. Details siehe Text. Binär- in den Dezimalwert multiplizieren wir für jedes Bit den Binärwert mit der Wertigkeit des Bits (0 oder 1) und summieren diese auf. Ist die Zahl, die wir darstellen wollen, grösser, muss ein grösserer Speicherbereich als 8 Bits bereitgestellt werden Darstellung von Zeichen im binären System Für die Darstellung von Zeichen im Computer wurde der so genannte ASCII-Code entwickelt. ASCII steht für American Standard Code for Information Interchange, was übersetzt so viel heisst wie Amerikanische Standardcodierung für den Datenaustausch. Mit Hilfe des 7-Bit-ASCII-Codes können 128 verschiedene Zeichen (2 7 ) dargestellt werden oder umgekehrt wird jedem Zeichen ein Bitmuster aus 7 Bit zugeordnet (siehe Tabelle 1.2). Die Zeichen entsprechen weitgehend einer Computertastatur. Der ASCII-Code wurde später auf 8 Bit erweitert, was die Darstellung von 256 Zeichen (2 8 ) erlaubt. Die ASCII-Tabelle enthält auch nicht darstellbare Zeichen (wie etwa ein Zeichen, das einen Zeilenumbruch repräsentiert). Die wichtigsten sind in Tabelle 1.3 dargestellt. 1.3 Datentypen Der Datentyp gibt an, welche Daten in einem Programm gespeichert werden können. Programmiersprachen besitzen vordefinierte Datentypen, die sich in der Art der Interpretation der gespeicherten Daten und in der Grösse unterscheiden. Die meisten Programmiersprachen unterscheiden folgende Datentypen: Typ für Zahlenwerte Typ für Zeichenwerte Typ für Wahrheitswerte (siehe Modul 2) Tabelle 1.4 gibt einen Überblick über die wichtigsten Datentypen, die in vielen Programmiersprachen vorkommen. 11

22 Dez Zeichen Dez Zeichen Dez Zeichen Dez Zeichen 0 NUL 32 SP 96 1 SOH 33! 65 A 97 a 2 STX B 98 b 3 ETX 35 # 67 C 99 c 4 EOT 36 $ 68 D 100 d 5 ENQ 37 % 69 E 101 e 6 ACK 38 & 70 F 102 f 7 BEL G 103 g 8 BS 40 ( 72 H 104 h 9 HT 41 ) 73 I 105 i 10 LF 42 * 74 J 106 j 11 VT K 107 k 12 FF 44, 76 L 108 l 13 CR M 109 m 14 SO N 110 n 15 SI 47 / 79 O 111 o 16 DLE P 112 p 17 DC Q 113 q 18 DC R 114 r 19 DC S 115 s 20 DC T 116 t 21 NAK U 117 u 22 SYN V 118 v 23 ETB W 119 w 24 CAN X 120 x 25 EM Y 121 y 26 SUB 58 : 90 Z 122 z 27 ESC 59 ; 91 [ 123 { 28 FS 60 < 92 \ GS 61 = 93 ] RS 62 > 94 ˆ 126 ~ 31 US 63? 95 _ 127 DEL Tabelle 1.2: ASCII-Tabelle. 12

23 Dez Zeichen Bedeutung 8 BS Backspace. Linkes Zeichen löschen 10 NL New Line. Neue Zeile beginnen 32 SP Space. Leerzeichen 127 DEL Delete. Rechtes Zeichen löschen Tabelle 1.3: Nicht darstellbare Zeichen der ASCII-Tabelle. Typ Beschreibung Grösse Wertebereich in Bit boolean Wahrheitswert 1 true oder false char Zeichen 16 Unicode-Zeichen byte Ganzzahl ( ) short Ganzzahl ( ) int Ganzzahl ( ) long Ganzzahl ( ) float Gleitkommazahl 32 +/ double Gleitkommazahl 64 +/ Tabelle 1.4: Die wichtigsten Datentypen in Java. 13

24 1.4 Variablen und Konstanten Variablen können wir uns als Behälter zur Aufbewahrung von Werten vorstellen. Sie haben einen Namen, über den sie aufgerufen werden können, und speichern einen konkreten Wert. Der Wert der Variablen kann sich während der Ausführung des Programms ändern (er kann variieren, daher der Name). Um eine Variable in einem Programm verwenden zu können, sind folgende Operationen notwendig: 1. Deklaration 2. Initialisierung Deklaration Bevor eine Variable in einem Programm verwendet werden kann, muss sie deklariert werden. Das heisst, dass Sie als Programmiererin oder Programmierer einen Speicherbereich für einen bestimmten Datentyp belegen und diesem Speicherplatz einen Namen geben. Über diesen Namen kann der Speicherbereich während des Programmablaufs aufgerufen werden. Namen von Variablen beginnen in Java gemäss Konvention jeweils mit einem Kleinbuchstaben, sie dürfen keine Leerzeichen enthalten und sollten möglichst aussagekräftig sein. Schreibweise: Datentyp name; Beispiel: // Variable a vom Typ Integer. int a; // Variable b vom Typ Double. double b; // Variable c vom Typ Character. char c; Mehrere Variablen vom gleichen Typ können auch wie in folgendem Beispiel in einer gemeinsamen Deklaration geschrieben werden: // 3 Variablem vom Typ Integer. int meinezahl1, meinezahl2, meinezahl3; 14

25 1.4.2 Initialisierung und Wertzuweisung Das Speichern von Werten geschieht mit dem Zuweisungsoperator. In Java wird hierfür ein Gleichheitszeichen (=) verwendet. Dabei wird der Wert des Ausdrucks rechts des Zuweisungsoperators der Variablen auf der linken Seite zugewiesen. Wenn einer Variable das erste Mal ein Wert zugewiesen wird, spricht man von ihrer Initialisierung. Schreibweise: variable = wert; Beispiel: meinezahl = 4; // meinezahl hat den Wert 4. Wie erwähnt kann sich der Wert einer Variablen während der Ausführung eines Programms ändern. In folgendem Beispiel wird in der Variablen meinezahl zuerst der Wert 4 gespeichert, der dann in einer weiteren Zeile mit dem Wert 6 überschrieben wird: meinezahl = 4; // Wert von meinezahl ist 4. meinezahl = 6; // Wert von meinezahl ist 6. Bei einer Zuweisung handelt es sich also immer um einen schreibenden Zugriff auf eine Variable mit dem Resultat, dass sich deren Wert ändern kann. Der alte Wert wird überschrieben. Damit einer Variablen ein Wert zugewiesen werden kann, darf die Variable nicht als Konstante definiert sein (siehe nächster Abschnitt) und der Typ der Variablen muss mit dem Typ des Werts kompatibel sein. Auf jeden Fall kompatibel sind Variablen und Werte desselben Datentypes. Wenn die Datentypen nicht übereinstimmen, nimmt Java eine implizite Typkonvertierung vor. Dies ist jedoch eine häufige Fehlerquelle und sollte daher vermieden werden. Bei der impliziten Typkonvertierung in Java werden nur dann eine Typkonvertierung durchgeführt, wenn sie ohne Informationsverlust erfolgen kann, also wenn der Zieldatentyp einen gleichen oder grösseren Wertebereich hat als der Ausgangsdatentyp. 15

26 Beispiel: // Variable ganzezahl vom Typ Integer. int ganzezahl; // Variable kommazahl vom Typ Double. double kommazahl; ganzezahl = 4; kommazahl = ganzezahl; // Variable kommazahl wird zum Typ Integer konvertiert. Ein Wert vom Typ int kann einer Variablen vom Typ double zugewiesen werden: Möchte man eine Zuweisung machen, bei der der Zieldatentyp einen kleineren Wertebereich hat, muss eine explizite Typenkonvertierung durchgeführt werden, das sogenannte Typecasting. Die Programmiererin/der Programmierer ist dabei selber dafür verantwortlich, dass die Zuweisung möglich ist. Beispiel: // Variable d vom Typ Double. double d = 1.3; float f = (float)d; // Variable d muss explizit zum Typ Float konvertiert werden. Eine Variable kann in einem Programm nur in einem bestimmten Bereich des Programms gelten. Weiteres dazu erfahren Sie in einem späteren Modul Konstanten Konstanten werden wie Variablen mit einem Namen bezeichnet. Sie enthalten während der gesamten Programmausführung einen konstanten Wert. Es kann also nach der Initialisierung keine weitere Wertzuweisung vorgenommen werden. Konstanten können jedoch Teil einer Wertzuweisung an Variablen sein. Eine Konstante wird zusätzlich zu Namen und Datentyp mit dem Schlüsselwort final deklariert. Schreibweise: final Datentyp name; 16

27 Beispiel: // Deklaration und Initialisierung der Konstante k. final int k = 4; 1.5 Operatoren und Ausdrücke Operatoren (Teil I) Um in einem Programm Berechnungen durchzuführen zu können, stehen diverse arithmetische Operatoren zur Verfügung, die in Tabelle 1.5 gezeigt sind. Operator Ausdruck Beschreibung Liefert + a + b Addition Summe - a - b Subtraktion Differenz a b Multiplikation Produkt / a / b Division Quotient % a % b Modulo Ganzzahliger Rest einer Division Tabelle 1.5: Arithmetische Operatoren in Java. Weitere Operatoren (logische und Vergleichsoperatoren) lernen Sie in Modul 2 kennen Ausdrücke Ausdrücke (expressions) sind in einer Programmiersprache Teil der kleinsten ausführbaren Einheiten eines Programms. Dabei handelt es sich um Verarbeitungsvorschriften, die sich aus Variablen, Konstanten und Operatoren zusammensetzen können und ein Resultat ergeben. Variablen und Konstanten, die mit einem Operator verknüpft werden, nennt man Operanden. Ein Ausdruck kann auch aus einer einzelnen Variablen bestehen. Folgendes Beispiel zeigt einen Ausdruck, der aus einer Variablen i, einem Operator + und einer Konstanten 5 besteht. Somit sind i und 5 Operanden. i

28 Das Resultat des Ausdrucks kann wieder in einer Variablen gespeichert werden. In folgendem Beispiel nutzen wir hierzu die Variable i. Der vorherige Wert von i wird dadurch überschrieben. i = i + 5; Die Reihenfolge, in der Ausdrücke bearbeitet werden, kann durch die Wahl des Operators und durch Klammern beeinflusst werden. Hierfür gelten die mathematischen Regeln, wie wir sie in der Schule gelernt haben, also Klammern zuerst, dann Punkt vor Strich. Beispiel: 5 * (2 + 10) Die Klammern erzwingen, dass die Addition vor der Multiplikation ausgeführt wird Weitere Arithmetische Operatoren Es gibt in Java noch weitere arithmetische Operatoren. Zuweisungsoperator: i += 1; // entspricht i = i + 1; i -= 1; // entspricht i = i - 1; i *= 1; // entspricht i = i * 1; i /= 1; // entspricht i = i / 1; i %= 1; // entspricht i = i % 1; Die Zuweisungsoperatoren dienen dazu die Anweisungen kompakter darzustellen, da man weniger Zeichen benötigt. Increment und Decrement Operatoren: i++; // entspricht i = i + 1; i--; // entspricht i = i - 1; Diese Operatoren sind meistens in sogenannten for-schleifen anzutreffen, wo sie einen Zähler hochzählen (siehe Modul 2). 18

29 1.6 Der Datentyp String Der Datentyp String unterscheidet sich von den bisher thematisierten Datentypen insofern, dass er eine Zusammenfassung von mehreren gleichartigen Variablen darstellt. Dieser Datentyp ist auch kein primitiver Datentyp mehr, da er mehrere Elemente zusammenfasst. Er speichert nämlich alle Buchstaben einzeln in je einer char-variablen. Wie diese Zusammenfassung der einzelnen Buchstaben funktioniert, lernen Sie, wenn es um die Objektorientierung geht. Die Deklaration und Initialisierung der Variablen funktioniert jedoch wie in und beschreiben. Bei der Initialisierung von String-Variablen muss der Wert zwischen Anführungszeichen (") angegeben werden. Beispiel: // Deklaration des Strings vorname. String vorname; // Initialisierung mit dem Wert "Paul". vorname = "Paul"; Da ein String mehrere char-variablen enthält, kann dem String auch ein einzelner char zugewiesen werden. Beispiel: String name; name = "a"; Mehrere Strings können mit einem Plus-Operator (+) verbunden werden. So entsteht aus mehreren Einzelteilen ein neuer Text. Beispiel: String text; text = "Hallo, " + "das " + "sind " + "mehrere " + "Wörter."; 1.7 Ein- und Ausgabe von Daten Oft möchte man, dass die Benutzerin oder der Benutzer des Programms mit diesem interagieren kann. Das bedeutet, dass die Benutzerin oder der Benutzer etwas eingeben kann 19

30 (zum Beispiel über die Tastatur) oder das Programm eine Ausgabe macht (zum Beispiel das Resultat einer Berechnung oder einen Text). Um dies zu realisieren verwenden wir Funktionalitäten, welche von Java zur Verfügung gestellt werden Ausgabe in die Konsole Damit die Benutzerin oder der Benutzer sieht, was im Programm berechnet wurde, kann im Programmcode angegeben werden, dass ein bestimmter Text oder der Wert einer Variablen ausgegeben wird. Beispiel: Ausgabe eines vorgegebenen Texts System.out.println("Das Programm hat geendet."); Im obigen Beispiel wird der Text Das Programm hat geendet. in der Konsole ausgegeben. Der Text, der ausgegeben wird, steht zwischen einem Paar von Anführungs- und Schlusszeichen, die nicht mit ausgegeben werden. Man möchte aber nicht immer nur vorgegebenen Text ausgeben, sondern z.b. das Resultat einer Berechnung, das in einer Variablen (z.b. ganzezahl) gespeichert ist. Beispiel: Ausgabe des Wertes einer Variablen System.out.println(ganzeZahl); Diese Anweisung gibt den Wert der Variablen ganzezahl in der Konsole aus. Variablenwerte und Text können in Java mit einem Plus-Zeichen (+) verbunden werden. Beispiel: Ausgabe von Text und Variablenwert System.out.println("Es wurde " + ganzezahl + " berechnet."); Eingabe über die Tastatur Oft möchte man den Wert einer Variablen durch die Benutzerin oder den Benutzer eines Programms bestimmen lassen. Eine häufige Form der Eingabe ist über die Tastatur der Benutzerin oder des Benutzers. Der Programmablauf wird solange gestoppt, wie die Benutzerin oder der Benutzer über die Tastatur eine Eingabe macht, welche mit der Return-Taste beendet wird. Eine Benutzereingabe ist in Java etwas aufwändiger als bei anderen Programmiersprachen. Sie beinhaltet folgende zwei Schritte: 20

31 Schritt 1: Paket einbinden Schritt 2: Werte einlesen Schritt 1: Paket einbinden Mit folgender Importanweisung zu Beginn unseres Java- Programms muss zunächst die Klasse Scanner des Pakets util eingebunden werden: import java.util.scanner; Schritt 2: Werte einlesen Mit folgenden zwei Zeilen können wir Werte in Form von Zeichenketten (String) vom Konsolenfenster einlesen und einer Variablen (z.b. wert) zuweisen: Scanner eingabe = new Scanner(System.in); String wert = eingabe.next(); Nun weisen wir den eingelesenen Wert unserer Variablen wert zu. Hierfür muss der eingelesene Text noch in einen Integer umgewandelt werden: Integer.parseInt(wert); Beispiel: Mit den folgenden Anweisungen übergeben wir eine Eingabezahl von der Konsole an die Variable x vom Typ Integer: int x; Scanner eingabe = new Scanner(System.in); String wert = eingabe.next(); x = Integer.parseInt(wert); Einlesen von Datentypen Für das Einlesen der Standard-Datentypen (siehe Tabelle 1.4) bietet Scanner auch Möglichkeiten, diese direkt einzulesen. Beispiel: int ganzezahl; double kommazahl; ganzezahl= eingabe.nextint(); kommazahl= eingabe.nextdouble(); 21

32 Selbstständiger Teil 1.8 Bremsweg-Berechnung Einführung Der Anhalteweg ist die Strecke, die ein Fahrzeug vom Zeitpunkt des Auftretens eines Hindernisses bis zum Stillstand zurücklegt. Der Anhalteweg setzt sich aus dem Reaktionsweg und dem Bremsweg zusammen: Anhalteweg = Reaktionsweg + Bremsweg Reaktionsweg und Bremsweg lassen sich vereinfacht mit folgenden Formeln berechnen (Reaktionsweg und Bremsweg in Metern; Geschwindigkeit in km/h): Reaktionsweg = 3 Geschwindigkeit 10 Bremsweg = Geschwindigkeit 10 Geschwindigkeit Aufgabenstellung und Programmanforderungen Schreiben Sie ein Java-Programm, welches den Reaktionsweg, den Bremsweg und den Anhalteweg (in Metern) für eine eingegebene Geschwindigkeit berechnet und auf dem Bildschirm ausgibt. 1.9 Zinseszins-Berechnung Einführung Wir möchten berechnen, wie viel Geld wir auf dem Konto haben, wenn wir 2000 Franken bei 2% für 10 Jahre anlegen. 22

33 1.9.2 Aufgabenstellung und Programmanforderungen Schreiben Sie ein Java-Programm, welches für jedes Jahr angibt, wie viel Zins hinzugekommen ist, und wie hoch der Betrag nach der Zinsgutschrift auf dem Konto ist. Die Ausgabe soll für jedes Jahr so aussehen: Im x. Jahr gibt es xx Fr. Zins. Neuer Kontostand: xxx Fr Erweiterung Die Benutzerin oder der Benutzer soll als Parameter eingeben können, wie viel Geld sie oder er zu wie viel Prozent angelegen möchte Geldautomat Einführung Bei dieser Aufgabe geht es um das Speichern und Überschreiben von Werten in Variablen. Zudem kommen zwei verschiedene Divisions-Operatoren zum Einsatz Aufgabenstellung In dieser Aufgabe sollen Sie einen Geldautomaten simulieren. Die Kundin oder der Kunde soll eingeben können, wie viel Geld er oder sie abheben möchte. Der Geldautomat soll dann berechnen, wie viele und welche Banknoten (100er, 50er, 20er und 10er) er ausgeben soll. Die Anzahl der verwendeten Variablen soll möglichst klein gehalten werden, indem sie wiederverwendet werden. So könnte beispielsweise die Ausgabe für den Betrag 571 aussehen: WILLKOMMEN BEI DER BANK IHRES VERTRAUENS **************************************** Wie viel möchten Sie abheben? 571 Eingegebener Geldbetrag: 571 Fr. 100er 5 50er 1 20er 1 10er 0 Rest: 1 23

34 Zwischenschritte Erstellen Sie eine Benutzereingabe für einen beliebigen Geldbetrag und speichern Sie den Wert in einer Variablen. Hinweis: Beachten Sie den Datentyp. Definieren Sie für jede Art von Banknoten (Hunderter, Fünfziger, Zwanziger, Zehner) je eine Variable. Berechnen Sie, wie viele 100er-Noten herausgegeben werden sollen und geben Sie den Wert auf dem Bildschirm aus. Ganzzahliger Wert einer Division Mit a/100 erhalten Sie den ganzzahligen Wert der Division von a durch 100. Beispiel: 571/100 = 5. Berechnen Sie den Restwert. Ganzzzahliger Rest einer Division Mit a%100 erhalten Sie den Rest einer Division von a und 100. Beispiel: 571%100 = 71 Berechnen Sie analog zu den 100er-Noten Schritt für Schritt die Anzahlen aller anderen Banknoten. Tipp: Kopieren Sie den Anweisungsblock für die 100er-Noten und ändern Sie ihn für die anderen Noten ab Erweiterungen 24

35 Für diese Erweiterungen benötigen Sie Bedingungsprüfungen, die erst im nächsten Modul ausführlich behandelt werden. Bedingte Programmausführung Syntax: Die Anweisungen werden nur ausgeführt, wenn die Bedingung zutrifft: if (Bedingung) { Anweisungen Überprüfen Sie nach der Eingabe des Geldbetrags, ob abgerundet werden muss und informieren Sie den Kunden über den tatsächlich ausbezahlten Betrag. Lassen Sie nur die Banknotenarten anzeigen, die tatsächlich ausgegeben werden. Nehmen Sie an, dass nur ein bestimmter Maximalbetrag abgehoben werden kann. Prüfen Sie deshalb, ob die gewünschte Summe des Kunden dieses Limit nicht überschreitet, und informieren Sie ihn darüber, wenn dies der Fall sein sollte. Es kann sein, dass der Kunde gerne etwas kleinere Noten haben möchte. Fragen Sie ihn deshalb danach (Anwort z.b. mit 0=nein, 1=ja), ob er gemischte Noten wünscht. Überlegen Sie sich zuerst, wie Sie die Noten zusammenstellen wollen. Ändern Sie danach das Programm entsprechend. 25

36

37 Programmieren mit Java Modul 2 Kontrollstrukturen und Logik Theorieteil Autoren: Lukas Fässler, Barbara Scheuner, David Sichau Begriffe Anweisungsblock Anweisungskopf Anweisungskörper logische Operatoren Wahrheitswert relationale Operatoren Verzweigung for-schleife while-schleife do-while-schleife geschachtelte Schleife 27

38 Theorieteil 2.1 Modulübersicht Ein Algorithmus, der als Programm formuliert ist, besteht in der Regel aus mehreren Anweisungen. Diese Anweisungen werden in einer von der Programmiererin oder dem Programmierer festgelegten Reihenfolge abgearbeitet. Diese Abfolge verläuft selten linear. Oft kommt es vor, dass sich eine Programmsequenz (Folge von Anweisungen) in zwei oder mehrere Programmsequenzen verzweigt, wobei jede nur unter bestimmten Bedingungen ausgeführt wird (Verzweigung). Um einen Algorithmus zu vereinfachen, werden oft bestimmte Programmsequenzen wiederholt ausgeführt (Schleifen). Mit Hilfe von Kontrollstrukturen, die in den meisten Programmiersprachen vorkommen, kann der Programmablauf beeinflusst werden. Die Entscheidung, wie der Ablauf gesteuert wird, muss in Bedingungen formuliert werden Anweisungen und Blöcke Wie bereits in Modul 0 erwähnt, werden einzelne Anweisungen durch ein Semikolon abgeschlossen. Mehrere Anweisungen können in einem Anweisungsblock zusammengefasst werden. In Java werden zur Markierung von Anweisungsblöcken geschweifte Klammern { verwendet. { \\ öffnet den Block anweisung1; anweisung2;... \\ schliesst den Block Die Ausführung von Blöcken kann durch Kontrollstrukturen (z.b. Verzweigungen oder Schleifen) gesteuert werden. Diese Kontrollstrukturen bestehen aus einem Kopf (head) und Körper (body). 28

39 { \\ Kopf (head) \\ Körper (body) Bei folgendem Programm wird der Anweisungsblock 1 durch einen Anweisungsblock 2 unterbrochen: \\ Beginn Anweisungsblock 1 Kopf 1 { \\ Körper 1 \\ Beginn Anweisungsblock 2 Kopf 2 { \\ Körper 2 \\ Ende Anweisungsblock 2 \\ Fortsetzung Körper 1 \\ Ende Anweisungsblock Operatoren (Teil II) Die arithmetischen Operatoren sind bereits in Modul 1 beschrieben worden. Im Zusammenhang mit Kontrollstrukturen kommen logische und relationale Operatoren zum Einsatz Relationale Operatoren Relationale Operatoren werden gebraucht, um Werte (Operanden) miteinander zu vergleichen. Sie liefern ein logisches Ergebnis wahr (true) oder falsch (false). Werte, die mit relationalen Operatoren verknüpft sind, nennt man in der Aussagenlogik auch Elementaraussagen. Die relationalen Operatoren in Java sind in Tabelle 2.1 zusammengefasst. 29

40 Operator Ausdruck Beschreibung Liefert wahr (true), wenn... > a > b grösser als a grösser ist als b. < a < b kleiner als a kleiner ist als b. == a == b gleich a und b denselben Wert haben.!= a!= b ungleich a und b ungleiche Werte haben. >= a >= b grösser oder gleich a grösser oder gleich b ist. <= a <= b kleiner oder gleich a kleiner oder gleich b ist. Tabelle 2.1: Relationale Operatoren in Java Logische Operatoren Logische Operatoren verknüpfen Elementaraussagen miteinander. Dabei werden Wahrheitswerte miteinander verglichen. Das Ergebnis ist ebenfalls ein Wahrheitswert, also wahr (true) oder falsch (false). Da dies die Operanden und Operatoren der Boolschen Aussagenlogik sind, heisst der Datentyp Boolean. Die in Java verwendeten logischen Operatoren sind in Tabelle 2.2 dargestellt. Operator Ausdruck Liefert wahr (true), wenn...!!a a falsch ist (NOT). && a && b sowohl a als auch b wahr sind (AND). Ist a falsch, wird b nicht ausgewertet. a b mindestens a oder b wahr sind (OR). Ist a wahr, wird b nicht mehr ausgewertet. ˆ aˆb a und b unterschiedliche Wahrheitswerte haben Tabelle 2.2: Logische Operatoren in Java. 2.3 Verzweigungen Verzweigungen überprüfen einen Zustand des Programms. Je nachdem, ob eine bestimmte Bedingung erfüllt ist oder nicht, fährt das Programm mit unterschiedlichen Blöcken von Anweisungen fort. Verzweigungen werden in Java, so wie in vielen anderen 30

41 Programmiersprachen auch, mit dem Schlüsselwort if eingeleitet. Die Bedeutung des if ist analog zur englischen Sprache. If it is raining, then I will take the bus, otherwise I will walk. Dies könnte in Java wie folgt geschrieben werden: if (rain) {bus else {walk; Falls die Bedingung rain wahr (true) ist, wird der Block mit der Anweisung bus ausgeführt, andernfalls wird der Block mit der Anweisung walk ausgeführt. Allgemein kann mit einer if-anweisung zur Laufzeit entschieden werden, ob eine Anweisung oder ein Anweisungsblock ausgeführt werden soll oder nicht. Um Bedingungen zu formulieren, können sowohl Boolsche Variablen, Relationen wie Gleichheit, grösser oder kleiner als auch logische Operatoren verwendet werden. Je nachdem wie viele Fälle zu unterscheiden sind, ist eine einseitige (2.3.1), zweiseitige (2.3.2) oder mehrstufige Verzeigung (2.3.3) zu wählen Einseitige Verzweigung: bedingte Programmausführung Eine einseitige Verzweigung besteht aus einer Bedingungsabfrage und einem Anweisungsblock, welcher ausgeführt wird oder nicht. Schreibweise: if (Bedingung) { Anweisungsblock; Beispiel: if (rain == true) { System.out.println("Es regnet."); Der Satz "Es regnet." wird nur ausgegeben, wenn die Variable rain den Wert true hat Zweiseitige Verzweigung Bei einer zweiseitigen Verzeigung kann zusätzlich angegeben werden, was im anderen Fall (else), wenn also die Bedingung nicht zutrifft, ausgeführt werden soll. 31

42 Schreibweise: if (Bedingung) { Anweisungsblock1; else { Anweisungsblock2; Beispiel: if (rain == true) { System.out.println("Es regnet."); else { System.out.println("Es regnet nicht."); Hat die Variable rain den Wert true, wird der Satz "Es regnet." ausgegeben, im anderen Fall (false) wird der Satz "Es regnet nicht." ausgegeben Mehrstufige Verzweigungen Mit einer mehrstufigen Verzweigung können mehrere Vergleiche gemacht werden. Das kann nötig sein, wenn Sie unterschiedliche Möglichkeiten in einer bestimmten Reihenfolge prüfen möchten. Schreibweise: if (Bedingung1) { Anweisungsblock1; else if (Bedingung2) { Anweisungsblock2; else if (Bedingung3) { Anweisungsblock3;... 32

43 Beispiel: if (rain == true) { System.out.println("Es regnet."); else if (snow == true) { System.out.println("Es schneit."); else if (sun == true) { System.out.println("Es scheint die Sonne."); else { System.out.println("Die Wetterlage ist unklar."); Hat die Variable rain den Wert true, wird wieder der Satz "Es regnet." ausgegeben. Hat sie hingegen den Wert false, wird als nächstes die Variable snow geprüft. Hat snow den Wert true, wird der Satz "Es schneit." ausgegeben. Hat snow den Wert false, wird als nächstes die Variable sun geprüft. Hat sun den Wert true, wird der Satz "Es scheint die Sonne." ausgegeben. Hat sun auch den Wert false, wird der Satz "Die Wetterlage ist unklar." ausgegeben Fallauswahl (Switch) Eine andere Möglichkeit, während des Programmablaufs zwischen unterschiedlichen Möglichkeiten auszuwählen, ist die switch-anweisung. Dabei wird der Wert einer Variablen mit unterschiedlichen Werten verglichen. Schreibweise: switch (ausdruck){ case constant: Anweisungsblock; default: Anweisungsblock; Im Gegensatz zur if-verzweigung kann mit dem switch-statement nur auf Gleichheit geprüft werden. Vergleiche auf grösser oder kleiner sind nicht möglich. Als Ausdruck im switch-statement sind alle ganzzahligen Datentypen und, seit Java 7, auch String-Typen zugelassen. Zusätzlich werden bei einem switch-statement alle Anweisungen ab dem 33

44 Einstiegspunkt abgearbeitet. Ist dies nicht erwünscht, sollte der Anweisungsblock mit einem break abgeschlossen werden. Beispiel: switch (test) { case 1: System.out.println("Ich wurde ausgewählt."); break; case 2: System.out.println("Du wurdest ausgewählt."); break; case 3: System.out.println("Wir wurden ausgewählt."); break; default: System.out.println("Keiner wurde ausgewählt."); 2.4 Schleifen (Loops) Mit Hilfe von Schleifen (loops) können dieselben Anweisungen wiederholt ausgeführt werden. Wie in anderen Programmiersprachen gibt es auch in Java verschiedene Schleifenarten. Eine Schleife besteht aus einem Schleifenkopf und einem Schleifenkörper. Der Schleifenkörper enthält den zu wiederholenden Anweisungsblock. Der Schleifenkopf steuert die Schleife. Er gibt an, wie oft oder unter welchen Bedingungen die Anweisungen des Schleifenkörpers wiederholt werden sollen for-schleife Bei der zählergesteuerten for-schleife wird die Anzahl der Schleifendurchläufe durch eine Laufvariable von einem Startwert- bis zu einem Endwert durchgezählt. Bei jedem Schleifendurchgang wird der Zähler verändert. 34

45 Schreibweise: for (init; test; update){ Anweisungsblock Initialisierung (init): Deklarieren der Laufvariable und setzen des Startwerts. Logischer Ausdruck (test): Es wird bei jedem Durchlaufen geprüft, ob die Schleife weiterlaufen muss oder der Endwert schon erreicht worden ist. Aktualisierung (update): Die Laufvariable wird nach jedem Durchlaufen der Schleife verändert. Beispiel: Folgende Anweisung gibt die Werte 0 bis 4 am Bildschirm aus: for (int i=0; i<5; i++){ System.out.println(i); Zunächst wird die Laufvariable i deklariert (Datentyp Integer) und auf den Anfangswert 0 gesetzt. Danach wird geprüft, ob i kleiner ist als 5. Ist dies der Fall, werden die Anweisungen des Schleifenkörpers durchlaufen und dann der Wert von i um 1 erhöht while-schleife Es ist nicht immer vorhersehbar, wie oft Anweisungen wiederholt werden müssen, da die Anzahl der Wiederholungen von dem abhängen kann, was im Schleifenkörper passiert. Hier geraten wir bei zählergesteuerten Schleifen an eine Grenze. Bei bedingungsabhängigen Schleifen wird die Anzahl der Wiederholungen nicht von einem Zähler, sondern von einer Bedingung abhängig gemacht. Diese Bedingung wird bei jedem Schleifendurchgang überprüft. While- und do-while-schleifen unterscheiden sich dadurch, ob diese Bedingung vor oder nach dem Anweisungsblock überprüft wird. Schreibweise: Initialisierung der Variablen while (Bedingung){ Anweisungsblock Aktualisierung Initialisierung: Deklarieren einer oder mehrerer Variablen und initialisieren der Startwerte. 35

46 Bedingung: Die Bedingung wird geprüft, sobald die while-schleife erreicht wird. Ist die Bedingung wahr (true), wird der Schleifenkörper ausgeführt. Ist die Bedingung falsch (false), wird die Schleife abgebrochen und die Anweisungen des Schleifenkörpers werden nicht mehr ausgeführt. Nach jedem Durchlaufen der Schleife wird die Bedingung erneut geprüft. Aktualisierung: Innerhalb des Schleifenkörpers müssen sich Werte so verändern, dass die Bedingung irgendwann erreicht wird, sonst droht eine Endlosschleife, was der Definition eines Algorithmus widerspricht (ein Algorithmus muss seine Arbeit immer beenden). Beispiel: Folgende Anweisung gibt die Werte 0 bis 4 am Bildschirm aus: int i=0; while (i<5){ System.out.println(i); i++; Zunächst wird eine Variable i initialisiert und auf 0 gesetzt. Zu Beginn der Schleife wird geprüft, ob i kleiner ist als 5. Ist dies der Fall (true), wird der Schleifenkörper ausgeführt. Ist dies nicht der Fall (false), wird die Schleife abgebrochen. Die Variable i wird innerhalb des Schleifenkörpers jedes Mal um 1 erhöht do-while Schleife Der Schleifenkörper einer do-while-schleife wird im Gegensatz zur while-schleife mindestens einmal ausgeführt, da die Bedingungsprüfung zur Wiederholung jeweils am Ende des Schleifenkopfs erfolgt. Schreibweise: Initialisierung der Variablen do { Anweisungsblock Aktualisierung while (Bedingung); Initialisierung: Deklarieren einer Variable und setzen des Startwerts. Aktualisierung: Innerhalb des Schleifenkörpers müssen sich Werte so verändern, dass die Bedingung irgendwann erreicht wird, sonst droht eine Endlosschleife. 36

47 Bedingung: Die Bedingungsprüfung findet erst statt, nachdem der Schleifenkörper durchlaufen ist. Sie enthält die Bedingung zum Wiederholen der Schleife. Trifft diese Bedingung zu, wird die Schleife erneut durchlaufen, sonst wird sie abgebrochen. Beispiel: Folgende Anweisung gibt die Werte 0 bis 4 am Bildschirm aus: int i=0; do { System.out.println(i); i++; while (i<5); Es wird eine Variable i initialisiert und auf 0 gesetzt. Im Schleifenkörper wird die Variable i um 1 erhöht. Erst jetzt wird geprüft, ob i kleiner ist als 5. Sobald i den Wert 5 erreicht, wird die Schleife abgebrochen Geschachtelte Schleifen Beim Programmieren kommt es oft vor, dass zwei Schleifen ineinander geschachtelt werden (nested loops). Das hat zur Folge, dass eine äussere Schleife eine innere steuert. Dies kann wie folgt dargestellt werden: Äussere Schleife { Innere Schleife { Anweisungsblock Eine Analogie zu den geschachtelten Schleifen findet man bei unserer Erde, die sich um die Sonne dreht. Eine Umkreisung in einem Jahr wäre mit der äusseren Schleife vergleichbar, und eine Drehung der Erde um die eigene Achse innerhalb eines Tages wäre mit der inneren Schleife vergleichbar. In Java könnte ein Programm zur Anzeige von Tagen und Stunden eines Jahres (das kein Schaltjahr ist) mit folgender geschachtelten Schleife geschrieben werden: 37

48 for (int tage=0; tage<365; tage++){ for (int stunden=0; stunden<24; stunden++) { System.out.println("Tag " + tage); System.out.println("Stunde " + stunden); Die ersten drei Ausgaben lauten: Tag 0: Stunde 0 Tag 0: Stunde 1 Tag 0: Stunde 2 Die letzten drei Ausgaben lauten: Tag 364: Stunde 21 Tag 364: Stunde 22 Tag 364: Stunde 23 38

49 Selbstständiger Teil 2.5 Notendurchschnitt Aufgabenstellung Ein Programm soll beliebig viele Noten einlesen können und daraus den Notendurchschnitt berechnen Programmanforderungen Schreiben Sie ein Programm, bei dem der User beliebig viele Noten eingeben kann. Er oder sie soll Noten eingeben können, bis ein bestimmter Wert (z.b. 0) eingegeben wird. In diesem Fall endet die Noteneingabe und es wird der Durchschnitt der eingegebenen Noten berechnet. So könnte die Ausgabe Ihres Programms aussehen: Bitte geben Sie ihre Noten ein (0 für Eingabe beenden): 1. Note: 3 2. Note: Note: 5 4. Note: 6 5. Note: 0 Sie haben 4 Noten eingegeben. Schnitt = Zwischenschritte Schreiben Sie die Noteneingabe für eine Note und speichern Sie den eingegeben Wert in einer Variablen (Datentyp beachten!). Konstruieren Sie eine Schleife zur Eingabe beliebig vieler Noten. Folgende Fragen müssen geklärt werden: Schleifenkopf: Wie wird die Schleife abgebrochen? Schleifenkörper: Welche Anweisungen werden wiederholt? 39

50 Tipp: Eine Möglichkeit besteht darin, so lange nach Noten zu fragen, wie ein definierter Wert (z.b. 0 oder 9) nicht eingegeben wird. Führen Sie weitere Variablen für die Berechnung des Durchschnitts (nächster Schritt) ein: Zähler: Zählt die Anzahl eingegebener Noten. Summe: Enthält die Summe aller eingegebenen Noten. Durchschnitt: Speichert den Notendurchschnitt (Summe/Zähler). Tipp: Es empfiehlt sich zu Testzwecken, die Variablenwerte bei jedem Schleifendurchgang anzuzeigen. So werden Sie allfällige Berechnungsfehler schneller erkennen und beheben können. Berechnen Sie den Durchschnitt und geben Sie das Resultat am Bildschirm aus. 2.6 Zinseszins mit Schleifen Einführung Im vorangegangenen Modul haben Sie eine Aufgabe zur Zinseszins-Berechung gelöst. Das Schleifen-Konzept erlaubt uns nun eine elegantere Lösung dieses Problems Aufgabenstellung und Programmanforderungen Setzen Sie eine Schleife ein, um die gleiche Aufgabenstellung mit einem kürzeren Programm zu lösen. Gestalten Sie das Programm ausserdem flexibler, indem der Nutzer zusätzlich die Anzahl der Anlagejahre als Parameter eingeben kann Zwischenschritte Implementieren Sie das Programm neu unter Anwendung einer for-schleife, die über die vorgegebenen 10 Jahre iteriert. Lassen Sie den Benutzer zu Beginn die Anzahl Jahre über die Konsole eingeben. Das Programm soll nun für die angegebene Anzahl Jahre die Zinseszins-Berechnung durchführen. 40

51 2.7 Zahlen raten Aufgabenstellung Bei dieser Aufgabe ist ein Spiel umzusetzen, bei dem sich der eine Spieler/die eine Spielerin eine Zahl ausdenkt und der/die andere diese Zahl erraten muss Programmanforderungen Eine Spielerin oder ein Spieler soll wiederholt raten, bis er oder sie eine festgelegte Zahl erraten hat. Bei jedem Rate-Versuch soll angegeben werden, ob die gesuchte Zahl grösser oder kleiner ist als die eingegebene Zahl. Zählen sie dabei auch die Anzahl der Versuche mit und geben Sie diese am Ende des Spiels bekannt. So könnte Ihre Ausgabe aussehen (zu erratende Zahl: 52): Gesucht ist eine Zahl zwischen 1 und 100. raten Sie! 4 zu klein raten Sie 94 zu gross raten Sie 52 Erraten! 3 mal geraten Zwischenschritte Legen Sie eine Zahl fest, die erraten werden soll, oder lassen Sie die Zahl von einer Person über die Konsole eingeben. Setzen Sie eine Boolean-Variable auf den Wert false. Schreiben Sie den Schleifenkopf, welcher als Bedingung die Boolean-Variable enthält. Schreiben Sie dann den Code für die Eingabe einer Zahl (zwischen 0 und 100). Prüfen Sie die eingegebene Zahl und teilen Sie dem Spielenden mit, wenn sie zu klein oder zu gross ist. Schreiben Sie die Anweisungen, die ausgeführt werden sollen, falls die Zahl erraten wurde. 41

52 2.7.4 Erweiterungen Wenn die eingegebene Zahl grösser 100 oder kleiner 0 ist, dann soll sie nicht verglichen werden. Stattdessen soll eine Fehlermeldung ausgegeben werden, dass diese Zahlen nicht im Suchbereich liegt. Wie könnte das Programm zum Erraten von Buchstaben abgeändert werden? Wie können Sie auch das Raten automatisieren? Überlegen Sie sich, welche die schnellste Ratestrategie ist. Begründen Sie Ihre Antwort. 2.8 Pokern Einführung Beim Poker-Spiel erhält jede Spielerin oder jeder Spieler fünf Karten, die als Hand bezeichnet werden (siehe Beispiel in Abbildung 2.1). Abbildung 2.1: Beispiel einer Hand beim Pokern. Die vier Farben sind Herz, Karo, Pik und Kreuz. Die 13 Werte sind 2 bis 10, Junge (J), Dame (Q), König (K) und Ass (A). Eine Hand wird nach der Höhe der Karten- Kombination bewertet. In Tabelle 2.1 sind die Wertigkeiten verschiedener Hände der Reihe nach geordnet. Eine Hand mit einer höheren Wertigkeit schlägt jedes Blatt mit einer niedrigeren Wertigkeit Ausgangssituation und Programmanforderungen Bei dieser Aufgabe müssen Sie nicht den ganzen Code von Grund auf neu schreiben. Sie erhalten einen Ausgangs-Code pokern.java, den Sie im Folgenden erweitern werden. Was das Programm schon kann Beim vorgegebenen Programm können Sie bereits fünf Karten einer Hand eingeben (absteigend sortiert). 42

53 Name Bedeutung Beispiel Royal Flush Straight Flush Strasse vom Ass abwärts in einer Farbe Strasse in einer Farbe Four of a Kind Vierling (4 Gleiche) Full House ein Drilling (3 Gleiche) und ein Paar (2 Gleiche) Flush Straight Three of a Kind fünf Karten von einer Farbe Strasse: 5 Karten in einer Reihe (nicht gleiche Farbe) Drilling (3 Gleiche) Two Pairs One Pairs zwei Paare: 2 mal 2 Karten mit dem gleichen Wert ein Paar: 2 Karten mit dem gleichen Wert Tabelle 2.1: Wertigkeiten verschiedener Hände beim Pokern. 43

54 Beispiel: Sie haben eingegeben: Karte 1 (Wert Farbe): 12 1 Karte 2 (Wert Farbe): 9 3 Karte 3 (Wert Farbe): 8 2 Karte 4 (Wert Farbe): 7 3 Karte 5 (Wert Farbe): 4 4 Diese Eingabe würde der Hand in Abbildung 2.1 entsprechen. Was das Programm noch nicht kann Ihre Aufgabe besteht nun darin, das Programm so zu erweitern, dass es aufgrund der eingegebenen fünf Karten der Hand automatisch ausgibt, welche Karten-Kombination der Spieler hat. Beispiel: Sie haben eingegeben: Karte 1 (Wert Farbe): 12 2 Karte 2 (Wert Farbe): 11 2 Karte 1 (Wert Farbe): 10 2 Karte 1 (Wert Farbe): 9 2 Karte 1 (Wert Farbe): 7 2 Sie haben FLUSH Programmieren Sie mindestens die Erkennung von fünf Poker-Blättern Zwischenschritte Laden Sie die Datei poker.java auf Ihren Rechner und öffnen Sie den Ausgangs- Code in Ihrer Programmierumgebung. Studieren Sie den Ausgangs-Code. Geben Sie ein paar Kartenkombinationen ein. Programmieren Sie die Erkennung der Kartenkombinationen. Tipp: Überlegen Sie sich, welche Poker-Hände ähnliche Eigenschaften (z.b. die gleiche Farbe) aufweisen, um den Programmieraufwand für die Bedingungsprüfungen möglichst klein zu halten. 44

55 2.8.4 Erweiterungen Überprüfen Sie, ob die Spielerin/der Spieler die Karten tatsächlich der Grösse nach absteigend eingegeben hat. Wie könnten die Karten absteigend der Reihe nach sortiert werden? 45

56

57 Programmieren mit Java Modul 3 Arrays Theorieteil Autoren: Lukas Fässler, Barbara Scheuner, David Sichau Begriffe Datenstruktur Array Array-Index Array-Element Array-Dimension Array-Länge Array-Durchlauf Zweidimensionales Array 47

58 Theorieteil 3.1 Modulübersicht Mit den Standarddatentypen, die Sie bis hierhin kennen gelernt haben, kann fast jede beliebige Zahl oder jedes beliebige Zeichen dargestellt werden. Oft werden beim Programmieren aber zusammengehörige Daten verwendet (z.b. Lottozahlen, Temperaturen, Abfahrtszeiten). Eine Möglichkeit, eine zusammengehörige Gruppe von Elementen des gleichen Typs abzuspeichern, bieten Arrays (Reihe, Felder). Auf diese Weise muss nicht für jedes Element eine eigene Variable deklariert werden, sondern sie können alle unter einem Bezeichner gespeichert werden. Die Datenstruktur Array kommt in fast jeder modernen Programmiersprache vor. 3.2 Eindimensionale Arrays Eindimensionale Arrays sind die einfachste Form von Arrays. Sie bestehen aus einer geordneten Menge von n Elementen desselben Datentyps. Die Elemente können über einen sogenannten Index angesprochen werden. Dieser gibt die Position eines Elements im Array an. In vielen Programmiersprachen (so auch in Java) hat das erste Element den Index 0, das zweite den Index 1 und das letzte den Index n 1 (siehe Beispiel in Tabelle 3.1). Index Wert Tabelle 3.1: Beispiel für ein eindimensionales Array mit sechs Elementen. Folgende Operationen werden mit Arrays typischerweise ausgeführt: Array deklarieren, erzeugen, Werte in ein Array ein- und auslesen. 48

59 3.2.1 Arrays deklarieren Arrays müssen wie Variablen zunächst deklariert werden. Das heisst, es werden Name und Datentyp festgelegt. Um anzuzeigen, dass nicht nur ein Element in der Variablen gespeichert werden kann, werden in Java eckige Klammern [] verwendet. Zur Zeit der Deklaration ist die Anzahl Elemente noch nicht festgelegt. Schreibweise: Datentyp[] name; Beispiel: Folgende Anweisung deklariert ein Array mit dem Namen zahlen vom Datentyp Integer: int[] zahlen; Arrays erzeugen Um ein Array zu erzeugen, wird der Operator new verwendet. Die Array-Länge (d.h. die Anzahl Elemente) wird in eckigen Klammern [] hinter den Datentyp geschrieben. Ist die Länge einmal festgelegt, kann sie nachher nicht mehr geändert werden. Die Länge des Arrays muss vom Datentyp Integer sein. Die Länge kann mit einer Zahl, einer Konstanten oder einem Ausdruck angegeben werden. Schreibweise: name = new Datentyp[anzahl]; Beispiel: Folgende Anweisung erzeugt sechs Speicherplätze im Array mit dem Namen zahlen, in welchem sechs Elemente von Typ int gespeichert werden können: zahlen = new int[6]; // oder zahlen = new int[4+2]; Bei der Erzeugung des Arrays werden die Elemente mit Default-Werten belegt. Beim Datentyp Integer ist dies der Wert 0. Deklaration und Erzeugen von Arrays kann alternativ auch in einer einzigen Anweisung durchgeführt werden. 49

60 Schreibweise: Datentyp[] name = new Datentyp[anzahl]; Beispiel: Folgende Anweisung erzeugt ein Array mit dem Namen zahlen vom Datentyp Integer mit sechs Elementen: int[] zahlen = new int[6]; Arrays initialisieren Einem Array-Element kann unter Angabe des Indexes ein Wert zugewiesen werden. In Java hat das erste Element den Index 0. Ein Array mit sechs Elementen hat somit die Indizes 0, 1, 2, 3, 4 und 5. Schreibweise: name[index] = Wert; Beispiel: So weisen wir dem ersten Element des Arrays den Wert 12 und dem zweiten den Wert 13 zu: zahlen[0] = 12; zahlen[1] = 13; In Java können bei der Erzeugung des Arrays die Elemente auch direkt initialisiert werden, indem geschweifte Klammern { gesetzt und die einzelnen Werte getrennt mit Kommata (,) eingegeben werden. Die Grösse des Arrays wird durch die Anzahl der Werte festgelegt. Der Operator new entfällt in diesem Fall. Schreibweise: Typ[] name = {wert1, wert2,..., wertn; Beispiel: Deklaration, Erzeugung und Initialisierung des Arrays zahlen mit den sechs Elementen 12, 13, 15, 17, 22 und 32: int[] zahlen = {12, 13, 15, 17, 22, 32; 50

61 3.2.4 Auf Array-Elemente zugreifen Auf einzelne Elemente eines Arrays wird über einen Index (z.b. i) zugegriffen. x[i] liefert somit das Element aus dem Array x an der Position i. Es gilt zu beachten, dass die Indizes bei 0 beginnen und bei einem weniger als der Anzahl der Elemente des Arrays enden. Es können einzelne Elemente oder Bereiche von Arrays aufgerufen werden und es kann mit Elementen von Arrays gerechnet werden. Beispiel: // Array mit 3 Elementen. int[] c = new int[3]; c[0] = 1; c[1] = 2; c[2] = 3; //Aufruf eines Elements (Resultat: 1). System.out.println(c[0]); //Addition zweier Elemente (Resultat: 5). System.out.println(c[1]+c[2]); Array-Durchlauf mit Schleifen Es ist üblich, zur Bearbeitung von Arrays for-schleifen zu verwenden. Der Wert der Laufvariablen entspricht dabei dem Index-Wert des Arrays. Der Aufwand reduziert sich dadurch auf wenige Anweisungen, egal wie viele Elemente ein Array besitzt. Dieser Vorgang wird auch Array-Durchlauf genannt. Beispiel: Mit folgender Anweisung können die sechs Elemente des Arrays zahlen am Bildschirm untereinander ausgegeben werden: for (int i=0; i<6; i++) { System.out.println(zahlen[i]); Die for-schleife zählt von 0 bis 5. Bei jedem Schleifendurchlauf wird die Variable i als Index verwendet, um das Array Element an der entsprechenden Stelle auszugeben. 51

62 3.2.6 Länge eines Arrays bestimmen Jedes Array hat in Java eine Eigenschaft length, mit welcher die Länge des Arrays abgefragt werden kann. Beispiel: for (int i=0; i<zahlen.length; i++) { System.out.println(zahlen[i]); Das ist vor allem beim Durchlaufen des Arrays hilfreich, um die obere Grenze der Schleife auszurechnen. Dies hat den Vorteil, dass bei einer Änderung der Array-Länge die Schleife nicht angepasst werden muss. 3.3 Zwei- und mehrdimensionale Arrays Besteht ein Element eines Arrays selbst wieder aus einem Array, entsteht ein zweidimensionales Array. Man kann es sich als Tabelle mit m mal n Elementen vorstellen, die jeweils über zwei Indizes angesprochen werden (siehe Beispiel in Tabelle 3.2). Index Tabelle 3.2: Beispiel für ein zweidimensionales Array mit drei mal sechs Elementen Initialisieren und Erzeugen eines zweidimensionalen Arrays Schreibweise: Typ[][] name = new Typ[anzahlZeilen][anzahlSpalten]; 52

63 Beispiel: Folgende Anweisung erzeugt ein zweidimensionales Array mit dem Namen zahlen vom Datentyp Integer mit 3 mal 5 Elementen: int[][]zahlen = new int[3][5]; Werte ins zweidimensionale Array ein- und auslesen Um auf ein einzelnes Element eines zweidimensionalen Arrays zuzugreifen, werden die zwei Indizes für die Zeilen- und Spaltennummer angegeben: name[zeilennummer][spaltennummer] = wert; Beispiel: zahlen[0][0] = 22; Um zweidimensionale Arrays iterativ zu bearbeiten, sind geschachtelte Schleifen mit zwei Indexvariablen notwendig. Beispiel: Folgende Zeilen geben alle Elemente des zweidimensionalen Arrays zahlen am Bildschirm aus: for (int i=0; i<3; i++) { for (int j=0; j<6; i++) { System.out.println(zahlen[i][j]); Mehrdimensionale Arrays Ein Array kann auch mehr als zwei Dimensionen haben. Für jede weitere Dimension wird ein weiterer Index für den Zugriff auf die Elemente benötigt. 3.4 Zeichenketten (Strings) als Arrays Wie bereits in Modul 1 erwähnt, ist eine Variable des Types String eine Zusammenfassung mehrerer Variablen des Typs Character (char). In Java wird eine Zeichenkette als Array des Datentyps Character angelegt. Ein String kann somit auch aus einem 53

64 Character-Array erzeugt werden. Auf die einzelnen Buchstaben im String kann somit auch wie beim Array über den Index zugegriffen werden. Beispiel: char[] meintext = { d, e, r,, T, e, x, t ; String meinstring = new String(meinText); char ersteszeichen= meinstring.charat(0); Bei diesem Beispiel wird als erstes ein char-array der Länge 8 erzeugt und direkt mit acht Zeichen initialisiert. Auf Basis dieses Arrays wird dann ein String erzeugt, der den Text der Text enthält. Aus diesem String wird anschliessend das erste Zeichen ausgelesen. Will man alle Zeichen eines Textes auf diese Weise einzeln auslesen, kann man eine Schleife einsetzen: for (int i=0; i<meinstring.length(); i++){ System.out.print(meinString.charAt(i)); 54

65 Selbstständiger Teil 3.5 Bowling Einführung Beim Bowling werden die Resultate typischerweise in einer Tabelle aufgeschrieben und ausgewertet. Aufgeschrieben wird die Anzahl umgeworfener Pins jeder Runde. Es sind somit Zahlen zwischen 0 (keiner getroffen) und 10 (alle getroffen, ein sogenannter Strike) möglich. Spieler Runde Runde Runde Runde Runde Summe Tabelle 3.1: Resultate eines Bowlingspieles Aufgabenstellung Ihr Programm soll die Resultate von 3 Spielenden über 5 Runden hinweg aufnehmen und auswerten (siehe Tabelle 3.1). Zum Speichern der Resultate wird ein zweidimensionales Array und zur Berechnung der Summen ein eindimensionales Array benötigt. 55

66 3.5.3 Zwischenschritte Gehen Sie wie folgt vor: Deklarieren der Variablen: Deklarieren Sie die Variable resultate als zweidimensionales Integer-Array (3 Spieler, 5 Runden) und summen als eindimensionales Integer-Array. Einlesen der Resultate: Lesen Sie die Resultate in das Array resultate ein. Es sollen für jede der 5 Runden die Punkte für jeden der 3 Spieler eingegeben werden können. Berechnen der Resultate: Hier soll im Array summen die Summe der Punkte jedes einzelnen Spielers gespeichert werden. Ausgeben der Resultate: Geben Sie die Punktetabelle (resultate) und die Summen (summen) in tabellarischer Form auf dem Bildschirm aus Erweiterungen Überprüfen Sie, ob die eingegebene Zahl erlaubt ist. Geben Sie am Ende aus, wer wie viele Strikes geschafft hat, und wie oft jede Person keinen Pin getroffen hat. Passen Sie ihr Programm so an, dass die Anzahl der Runden und die Anzahl der Spieler am Anfang eingegeben werden können. Geben Sie aus, wer die meisten Punkte hat. Berechnen Sie, in welcher Runde die jeweiligen Spieler ihren ersten Strike geschafft haben, und geben Sie das Resultat am Bildschirm aus. 3.6 Tic Tac Toe Einführung Beim Tic Tac Toe (auch 3 gewinnt) spielen zwei Spieler gegeneinander. Abwechselnd setzen die Spieler ihr Zeichen (z.b. x oder o) in eines der leeren Felder. Gewonnen hat derjenige Spieler, der eine Spalte, Zeile oder Diagonale mit seinem Zeichen vollständig besetzen kann Aufgabenstellung Zwei Spieler sind abwechslungsweise an der Reihe. Bei jedem Spielzug muss deutlich gemacht werden, welcher der beiden Spieler an der Reihe ist. 56

67 Nach jedem Spielzug soll das aktuelle Spielbrett ausgegeben werden. Es soll angezeigt werden, wenn eine Person gewonnen hat Zwischenschritte Spielen Sie das Spiel zunächst auf Papier. Welche Schritte werden nacheinander ausgeführt? Programmieren Sie dann folgende Schritte: Definieren Sie ein 3 3-Spielbrett vom Typ Character. Fügen Sie eine Variable spieler ein, welche zwei Werte (z.b. 1 und 2) annehmen kann. Setzten Sie alle Werte im Feld auf Leerzeichen (' '). Programmieren Sie eine Ausgabe des Spielfeldes : 2: 3: Spieler 1: Über eine Benutzereingabe soll der Spieler das Feld eingeben können, in welches sein Zeichen gesetzt werden soll. Setzen Sie die jeweiligen Zeichen (z.b. x oder o) in die vom Spieler gewünschten Felder. Wiederholen Sie die Spielzüge, bis das Spielbrett voll ist oder jemand gewonnen hat Erweiterungen Überprüfen Sie, bevor ein Spielzug ausgeführt wird, ob an der gewünschten Stelle bereits ein Zeichen gesetzt worden ist. Steht an dieser Stelle bereits ein Zeichen, soll der Spieler eine neue Eingabe machen müssen. Das gleiche soll passieren, wenn ein Spieler eine Eingabe macht, die ausserhalb des Spielfeldes liegt. 57

68 3.7 Such- und Sortieralgorithmen Einführung Das Suchen in gesammelten Daten und das Sortieren von Daten sind zwei der häufigsten Aufgaben, mit denen sich ein Programmierer konfrontiert sieht. Zu diesen Themen gibt es mittlerweile unzählige Bücher, denn da Such- und Sortieralgorithmen so oft verwendet werden, ist es besonders wichtig, dass sie so effizient wie möglich programmiert werden. Ferner gibt es eine grosse Anzahl von Strategien, die verfolgt werden können, um einen Sortieralgorithmus umzusetzen. In den Entwurf und die Analyse dieser Algorithmen wurde seit Mitte des zwanzigsten Jahrhunderts viel Energie gesteckt. Wir werden hier nur eine kleine Auswahl kennenlernen. Vorbereitendes Laden Sie das Ausgangsprogramm lottozahlen.java auf Ihren Rechner. Studieren Sie das Programm Suchalgorithmen Es gibt, wie oben erwähnt, verschiedene Suchalgorithmen, die sich in ihrem Aufbau und ihrer Effizienz unterscheiden. Die bekanntesten sind die lineare und die binäre Suche. Wir wollen hier die lineare Suche betrachten. So funktioniert die lineare Suche Eine Menge von Elementen (z.b. ein Array) wird nach einem bestimmten Element durchsucht. Die Suche beginnt beim ersten Element, und die Elemente werden in der Reihenfolge durchlaufen in der sie abgespeichert sind. Entspricht das betrachtete Element dem gesuchten Element, wird die Suche beendet, ansonsten wird weiter gesucht. 58

69 Aufgaben Durchsuchen Sie das Array nach dem höchsten Wert und geben Sie den Wert und die Position der Daten in der Konsole aus. So wird nach dem maximalen Wert gesucht Die Position des (momentanen) Maximums wird in der Variable max gespeichert. Zuerst wird das erste Element des Arrays als das Maximum angenommen. Es werden nun alle Elemente des Arrays (ausser des ersten) durchlaufen. Ist der Wert des Feldes an der momentanen Position grösser als das bisher angenommene Maximum, dann wird diese Position in max gespeichert Erweiterungen Suchen Sie im Array auf die gleiche Weise auch das Minimum. Verwenden Sie für beide Suchen eine gemeinsame Schleife. Überlegen Sie sich, was passiert, wenn der gesuchte Wert mehr als einmal vorkommt. Wie müsste ihr Programm darauf reagieren? Wie beurteilen Sie den Suchaufwand? Haben Sie Ideen für eine Optimierung? Sortieralgorithmen Das Ziel von Sortieralgorithmen ist es, die Elemente einer Menge nach einem bestimmten Kriterium zu sortieren. Nach dem Sortieren liegen die Elemente in aufsteigender oder absteigender Reihenfolge vor. Es gibt verschiedene Sortieralgorithmen, die sich in ihrem Aufbau und ihrer Effizienz unterschieden. Bekannte Vertreter sind Bubble-Sort, Insertion-Sort, Merge-Sort und Quick-Sort. 59

70 So funktioniert Bubble-Sort (für eine aufsteigende Sortierung, siehe Abbildung 3.1) 1. Es werden jeweils zwei benachbarte Elemente eines Arrays verglichen. Begonnen wird mit dem Element mit dem Index 0 und 1, dann 1 und 2, dann 2 und 3, etc. 2. Wenn der Wert des linken Elements grösser ist als der Wert des rechten, werden die beiden Werte vertauscht. Hinweis: Vorsicht swap! 3. Mit einem Arraydurchlauf wandert so das grösste Element ans Ende des Arrays. 4. Nun werden die Schritte 1 bis 3 wiederholt, um das zweitgrösste Element an die zweitletzte Position zu bringen. Hinweis: Der Vergleich des zweitletzten mit dem letzten entfällt, da das letzte das grösste ist. 5. Die Schritte 1 bis 4 werden so lange wiederholt, bis die zwei kleinsten Elemente miteinander verglichen werden. Aufgabe Versuchen Sie den Bubble-Sort-Algorithmus zu implementieren! Erweiterungen Wie könnte die Effizienz von Bubble-Sort erhöht werden? 60

71 Abbildung 3.1: Bubble-Sort. Details siehe Text. 61

72

73 Programmieren mit Java Modul 4 Methoden und Funktionen Theorieteil Autoren: Lukas Fässler, Barbara Scheuner, David Sichau Begriffe Methode Subroutine Prozedur Funktion Parameter Rückgabewert Rückgabetyp Sichtbarkeit von Variablen Überladen Rekursion Exception Zufallszahl Modularität 63

74 Theorieteil 4.1 Modulübersicht Durch das Modularitätsprinzip wird ein Gesamtproblem in getrennte Teilprobleme zerlegt. In diesem Modul lernen Sie Möglichkeiten kennen, wie Sie Anweisungen in Unterprogrammen (oder Subroutinen) zusammenfassen können. Unterprogramme sind funktionale Einheiten, die von mehreren Stellen in einem Programm aufgerufen werden können. Auf diese Weise muss ein Programmteil nur einmal entwickelt und getestet werden, wodurch sich der Programmieraufwand verringert und der Programmcode verkürzt. Werden beim Aufrufen des Unterprogramms Daten übergeben, werden diese als Parameter bezeichnet. In vielen Programmiersprachen werden zwei Varianten von Unterprogrammen unterschieden: jene mit einem Rückgabewert (Funktionen) und jene ohne Rückgabewert (Prozeduren). In Java bezeichnet man beide Varianten generell als Methoden, die Parameter und Rückgabewert haben können. 4.2 Methoden In Java besteht eine Methode aus einem Kopf (oder Signatur) mit den Modifikatoren public static 1, dem Rückgabetyp, dem Namen, den Parametern sowie dem Rumpf in geschweiften Klammern {. Die Ausführung einer Java-Applikation startet meist in der Haupt oder main-methode, die sich oft darauf beschränkt, andere Methoden aufzurufen Methoden ohne Rückgabewert (Prozeduren) Methoden ohne Rückgabewert haben Sie bereits verwendet: Zum Beispiel die Methode System.out.println(), welche einen Zeilenumbruch auslöst. Sie können aber auch eigene Methoden schreiben, welche von Ihnen vorgegebene Aufgaben erfüllen. Methoden ohne Rückgabewert sehen wie folgt aus: 1 Die Bedeutung der Modifikationen ergeben sich aus der Objektorientierung von Java und werden in diesem Buch nicht behandelt. 64

75 Schreibweise: void methodenname() { //Signatur der Methode // Anweisungen Das Wort void gibt dabei an, dass kein Rückgabewert erwartet wird. Die leere Klammer () bedeutet, dass keine Parameter übergeben werden. Beispiel: Die folgende Klasse beinhaltet die Haupt-Methode mit dem Namen main und die Methode ausgabe, welche in der main-methode aufgerufen wird: public class ProzedurTest{ public static void main(string[] args){ ausgabe(); public static void ausgabe(){ // Signatur der Methode System.out.println("die Methode wurde ausgeführt"); Methoden mit Rückgabewert (Funktionen) Methoden mit Rückgabewert werden verwendet, um ein Resultat aus den Anweisungen in der Methode zu gewinnen. Der Datentyp des Rückgabewerts steht dabei direkt vor dem Methodennamen. In der Methode selbst muss sichergestellt werden, dass in jedem Fall ein Wert vom entsprechenden Typ zurückgegeben wird. Um einen Wert zurückzugeben, wird das Wort return verwendet. Schreibweise: rückgabetyp methodenname() { // Signatur der Methode // Anweisungen 65

76 Beispiel: Die folgende Klasse beinhaltet eine main-methode und eine weitere Methode getanswer, welche in der main-methode aufgerufen wird: public class ProzedurTest{ public static void main(string[] args){ int wert = getanswer(); public static int getanswer(){ // Signatur der Methode return 42; Der Rückgabewert in obrigen Beispiel ist vom Typ Integer. Bei Methoden mit Rückgabewert muss darauf geachtet werden, dass in jedem Fall, der eintreffen könnte, zwingend ein Wert zurückgegeben wird. Beispiel: boolean hallo(){ int i = 1; if (i == 1){ return true; else { System.out.println("tritt nie ein"); Auch wenn der else-fall in dieser Methode nie eintrifft, muss darauf geachtet werden, dass auch in diesem Fall etwas zurückgegeben würde. Korrekt wäre somit: boolean hallo(){ int i=1; if (i==1){ return true; else { System.out.println("tritt nie ein"); return false; 66

77 4.2.3 Methoden mit Parametern Beide Arten von Methoden (also Prozeduren und Funktionen) können in der Signatur Parameter verlangen. Parameter sind Variablen, deren Initialisierung beim Aufruf der Methode geschieht und die zur Erfüllung der Aufgabe der Methode nötig sind. Beispiel: void addiereundgibaus(int x, int y){ int z = x + y; System.out.println("Summe: "+z); Diese Methode kann nun z.b. mit den Werten 3 und 2 aufgerufen werden mit der Anweisung: addiereundgibaus(3,2); Methoden mit Rückgabewert können nun auch noch einen Wert zurückgeben. Beispiel: int addiere (int x, int y){ int z = x + y; return z; Diese Methode kann nun z.b. aufgerufen werden mit: int resultat = addiere(3,2); Der Rückgabewert wird hier in der Variable resultat gespeichert, deren Datentyp mit dem Rückgabetyp übereinstimmt. 4.3 Methoden aus der Klasse Math Die Klasse Math bietet einige Methoden an, welche mathematische Funktionen realisieren. All diese Methoden sind Funktionen, weil sie einen Rückgabewert (das Resultat der Berechnung) besitzen. Als Übergabeparameter erwarten sie meist eine oder zwei Zahlen. 67

78 Beispiel: public class TestMath{ public static void main(string[] args){ double x= 19.7; double y= 20.3; double groesserezahl = Math.max(x,y); double kleinerezahl = Math.min(x,y); double abrunden = Math.ceil(x); Eine Methode ohne Parameter in der Klasse Math ist die Funktion Math.random(). Diese Funktion gibt eine Zufallszahl zwischen 0 und 1 zurück, wobei die Zahl gleich 0 sein kann, aber immer kleiner als 1 ist. Mit Hilfe dieser Methode kann eine zufällige ganze Zahl zwischen 1 und x erzeugt werden. Dies geschieht in drei Schritten: 1. Erzeugen einer Zufallszahl zwischen 0 und Multiplikation dieser Zahl mit x. Dies ergibt eine Gleitkommazahl Zahl zwischen 0 und x. 3. Runden dieser Zahl. Beispiel: // Generierung ganzer Zahl zwischen 0 und 99 durch abrunden int zufallszahl1 = (int)(math.random()*100); // Generierung ganzer Zahl zwischen 0 und 100 durch runden long zufallszahl2 = Math.round(Math.random()*100); 4.4 Überladen von Methoden Verschiedene Methoden können denselben Namen haben, wenn sie unterschiedliche Parameter erhalten. Unterschiedliche Rückgabewerte alleine sind nicht ausreichend. Haben zwei Methoden denselben Namen, aber erhalten unterschiedliche Typen oder Anzahl von Parameter, nennt man die Methoden überladen. Ein populäres Beispiel, das Sie schon oft verwendet haben, ist die Methode print() bzw. println(). Dieser Methode können Werte von Typ String, int, double, etc. übergeben werden. Für Sie als Benutzer sieht es aus, als würden Sie immer dieselbe Methode aufrufen. Tatsächlich ist es aber so, dass unterschiedliche Methoden entsprechend dem Datentyp aufgerufen werden. 68

79 Wir können also die beiden folgenden Methoden mit identischem Namen linie in der gleichen Klasse schreiben: // Signatur mit einem Parameter public static void linie(int x){ for (int i=0; i<x; i++){ System.out.print( - ); // Signatur mit zwei Parametern public static void linie(int x, char c){ for (int i=0; i<x; i++){ System.out.print(c); Wenn Sie nun die Methode mit nur einem Parameter-Wert aufrufen, wird die erste Methode verwendet, mit zwei entsprechenden Werten die zweite: linie(8); linie(19, - ); 4.5 Gültigkeitsbereiche von Variablen Variablen haben eine beschränkte Lebensdauer. Einige Variablen werden erst mit dem Beenden des Programms gelöscht, andere schon früher. Eine Variable ist immer für den Anweisungsblock (siehe Modul 2) oder eine Klasse gültig, in dem sie deklariert wurde. Eine Variable, welche am Anfang einer Methode deklariert wird, wird auch wieder gelöscht, wenn die Methode beendet wird. Wenn man den Wert dieser Variablen später noch benötigt, muss er an die aufrufende Methode zurückgegeben werden. 69

80 Beispiel: public class VariablenSichtbarkeit{ public static int global = 20; public static void main(string[] args){ System.out.println("Werte zwischen 1 und "+ global); ausgabe(); public static void ausgabe(){ int zufall = 0; for (int i=0; i<30; i++){ zufall = (int) (Math.random() * global) + 1; Die Variable global ist dabei für die ganze Klasse gültig. Die Variable zufall ist hingegen nur innerhalb der Methode ausgabe gültig und die Variable i nur innerhalb der Schleife. 70

81 Beispiel: Folgender Code würde, wenn die kommentierte Zeile verwendet würde, zu einer Fehlermeldung führen, da die Variable zufall in der main-methode nicht gültig ist: public class VariablenSichtbarkeit2{ public static void ausgabe(){ int zufall = (int) (Math.random() * global) + 1; public static void main(string[] args){ ausgabe(); // System.out.println("Werte von 1 bis "+ zufall); 4.6 Rekursion Bei der Rekursion ruft eine Methode sich selber wieder auf. Damit sich die Methode nicht endlos immer wieder selbst aufruft, was die gleichen Konsequenzen wie eine Endlosschleife hätte, benötigt sie eine Abbruchbedingung, welche diese Folge von Selbst-Aufrufen stoppt. Um eine Rekursion zu programmieren, müssen Sie zwei Elemente bestimmen: Basisfall: in diesem Fall ist das Resultat der Berechnung schon bekannt. Dieser Fall ist die Abbruchbedingung der Rekursion. Rekursiver Aufruf: es muss bestimmt werden, wie der rekursive Aufruf geschehen soll Beispiel 1: Fakultät Die Berechnung der Fakultät f(x) = x! von x kann mit einer rekursiven Methode realisiert werden. Basisfall: für die Werte 0 und 1 ist die Fakultät 1. Rekursion: x! = x (x 1)! für x > 1. 71

82 int fakultaet(int x){ if ((x == 0) (x == 1){ // Basisfall return 1; else { return x * fakultaet(x-1); // Rekursiver Aufruf Beispiel 2: Fibonacci Ein weiteres beliebtes Beispiel für Rekursionen ist die Fibonacci-Folge. Diese unendliche Folge von natürlichen Zahlen beginnt mit 0 und 1. Die danach folgende Zahl ergibt sich jeweils aus der Summe der zwei vorangegangenen Zahlen: Die Folge lautet also 0, 1, 1, 2, 3, 5, 8,... Bei der Fibonacci-Folge sind bei jedem Schritt zwei rekursive Aufrufe nötig: f(n) = f(n 1) + f(n 2) für n 2 mit den Anfangswerten f(1) = 1 und f(0) = 0. Basisfall: Für den Fall, dass n gleich 0 oder 1 ist, wissen wir, dass 0 bzw. 1 zurückgegeben werden muss. Rekursion: Für alle anderen Fälle rufen wir die Funktion wieder auf, wobei wir den übergebenen Wert um jeweils 1 und 2 verringern. int fibonacci(int n) { if (n == 0){ // Basisfall 1 return 0; else if (n == 1){ // Basisfall 1 return 1; else { // zwei Mal rekursiver Aufruf return (fibonacci(n-1) + fibonacci(n-2)); Beachten Sie, dass Funktion fibonacci in Beispiel 2 sich selbst gleich zweimal aufruft. Man spricht auch von kaskadenförmiger Rekursion. In Beispiel 1 erfolgt nur ein einzelner Selbstaufruf, was man als lineare Rekursion bezeichnet. 72

83 4.7 Fehlerbehandlung mit Exceptions Exceptions (Ausnahmen) werden durch Ausnahmesituationen bei der Programmausführung ausgelöst. Dadurch sollen Programmabbrüche verhindert werden. In Java ermöglicht die try-catch-anweisung das Auffangen und Behandeln von Exceptions innerhalb einer Methode. Beispiel: Vielleicht wollten Sie schon einmal aus Versehen einen Text jk in eine Zahl umwandeln oder in einem Array auf einen Index zugreifen, der ausserhalb des Arrays liegt. Exceptions müssen nicht zwingend bis zum Benutzer durchdringen (d.h. auf der Konsole erscheinen). Man kann sie auch abfangen (catch) und eine Lösung für das Problem suchen. Abgefangen können die Exceptions mit: try { // Irgendetwas, dass einen Fehler auslösen könnte catch (Exception c) { // Lösung des Problems Beispiel: Hier könnte der Benutzer anstelle einer ganzen Zahl zum Beispiel ein Zeichen eingeben. Diese Fehlereingabe kann z.b. wie folgt behandelt werden: public static void main(string[] args) { Scanner scan = new Scanner(System.in); int zahl = 0; System.out.println("Bitte eine ganze Zahl eingeben"); String wert = scan.nextline(); try { zahl = Integer.parseInt(wert); catch (Exception e){ System.out.println("Das ist keine ganze Zahl"); Zahl = 0; Werfen einer Exception Sie können das Konstrukt der Exception auch selber verwenden. Wenn Sie in einer eigenen Methode einen Fehler kommunizieren wollen, dann können Sie dort eine Exception werfen 73

84 (throw). Mit der Anweisung throw new Exception() lösen Sie einen Fehler aus. Die Signatur einer Methode, welche eine Exception auslösen kann, muss noch durch den Zusatz throws Exception (heisst so viel wie wirft Fehlermeldungen) ergänzt werden. Beispiel: public class ExceptionTester{ public static void main(string[] args) { try { tester(-3); catch (Exception e) { System.out.println(e.getMessage()); public static void tester(int x) throws Exception{ if (x < 0){ throw new Exception(); 74

85 Selbstständiger Teil 4.8 Erweiterungen Pandemie-Simulation Einführung Erweitern Sie Ihre Pandemie-Simulation aus dem E.Tutorial wie folgt: Setzen der Startbedingungen: Dauer der Simulation, Ansteckungswahrscheinlichkeit, etz. Die Person, welche am Anfang krank ist, könnte zufällig ausgewählt werden. Die Ansteckungswahrscheinlichkeit könnte auch zufällig sein Setzen der Startbedingungen Lassen Sie vor dem Start der Simulation den User die Startbedingungen setzen: Wie lange soll die Simulation dauern? Wie ansteckend ist die Krankheit? Die Ansteckungswahrscheinlichkeit x = 1/n soll mit einer ganzen Zahl n angegeben werden können. Beachten Sie bei jedem Punkt, ob die Variable global oder lokal definiert werden soll. Die Benutzereingabe kann wie gewohnt mit dem Scanner über die Konsole vorgenommen werden Erweiterungen Implementieren Sie eine der folgenden Ideen: Vergrössern Sie die Simulation (z.b ). Lassen Sie den Nutzer die Grösse der Simulation auswählen. Die Zahlen könnten noch farbig gestaltet werden (siehe Viele Krankheiten sind zu Beginn ansteckender als am Ende. Machen Sie die Ansteckungswahrscheinlichkeit abhängig von der Dauer der Krankheit der bereits Erkrankten. 75

86 Geben Sie eine Tabelle aus, in welcher die wichtigsten Kennzahlen ersichtlich sind, z.b.: Simulationsschritt: 20 Noch nicht erkrankte Personen: 40 Kranke Personen: 64 Geheilte Personen: 36 Wenn viele Nachbarn krank sind, soll die Wahrscheinlichkeit grösser sein, dass eine gesunde Person angesteckt wird. Geheilte Personen sind nur eine gewisse Zeit immun gegen die Krankheit. Passen Sie Ihre Simulation so an, dass geheilte Personen nach einer gewissen Zeit (z.b. 4 Tagen) wieder angesteckt werden können. 76

87 Programmieren mit Java Modul 5 Objekte Theorieteil Autoren: Lukas Fässler, Barbara Scheuner, David Sichau Begriffe Klassen Objekte Objekt-Eigenschaft Attribut Objekt-Methode Referenztypen 77

Programme erstellen in Java

Programme erstellen in Java Programmieren mit Java Modul 0 Programme erstellen in Java Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Schreiben von Computerprogrammen 3 2.1 Computerprogramme bestehen aus Daten und Instruktionen.......

Mehr

Kontrollstrukturen und Logik

Kontrollstrukturen und Logik Programmieren mit Java Modul 2 Kontrollstrukturen und Logik Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 1.1 Anweisungen und Blöcke........................... 3 2 Operatoren (Teil II) 4 2.1 Relationale

Mehr

Variablen und Datentypen

Variablen und Datentypen Programmieren mit Java Modul 1 Variablen und Datentypen Selbstständiger Teil Inhaltsverzeichnis 1 Bremsweg-Berechnung 3 1.1 Einführung.................................. 3 1.2 Aufgabenstellung und Programmanforderungen..............

Mehr

Variablen und Datentypen

Variablen und Datentypen Programmieren mit Java Modul 1 Variablen und Datentypen Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Darstellen von Zahlen und Zeichen im Computer 3 2.1 Binäres System................................

Mehr

Variablen und Datentypen

Variablen und Datentypen Programmieren mit Python Modul 1 Variablen und Datentypen Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Schreiben von Computerprogrammen 3 2.1 Computerprogramme bestehen aus Daten und Instruktionen.......

Mehr

Variablen und Datentypen

Variablen und Datentypen Programmieren mit Python Modul 1 Variablen und Datentypen Selbstständiger Teil Inhaltsverzeichnis 1 Überblick 3 2 Teil A: Geldautomat 3 2.1 Einführung.................................. 3 2.2 Aufgabenstellung...............................

Mehr

Kontrollstrukturen und Logik

Kontrollstrukturen und Logik Programmieren mit Java Modul 2 Kontrollstrukturen und Logik Selbstständiger Teil Inhaltsverzeichnis 1 Notendurchschnitt 3 1.1 Aufgabenstellung............................... 3 1.2 Programmanforderungen...........................

Mehr

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3 Programmieren mit Java Modul 3 Arrays Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Eindimensionale Arrays 3 2.1 Arrays deklarieren.............................. 3 2.2 Arrays erzeugen................................

Mehr

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3 Programmieren mit Java Modul 5 Objekte Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Klassen und Objekte 3 2.1 Klassen.................................... 4 2.2 Objektvariablen und Methoden.......................

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

Kontrollstrukturen und Logik

Kontrollstrukturen und Logik Programmieren mit Python Modul 2 Kontrollstrukturen und Logik Selbstständiger Teil Inhaltsverzeichnis 1 Überblick 3 2 Teil A: Zahlen raten 3 2.1 Einführung.................................. 3 2.2 Programmanforderungen...........................

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 05.10.2016 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2016

Mehr

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

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

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

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff. Gedächtnis Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet Hauptspeicher 38265 Telefon CPU Gedächtnis Vorlesender Zugriff Verarbeitungseinheit

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Wiederholung Anweisungen durch Methodenaufrufe Ausgabe

Mehr

Java I Vorlesung Imperatives Programmieren

Java I Vorlesung Imperatives Programmieren Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.

Mehr

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

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 05.10.2017 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2017

Mehr

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

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Hello World! Eine Einführung in das Programmieren Variablen

Hello World! Eine Einführung in das Programmieren Variablen Hello World! Eine Einführung in das Programmieren Variablen Görschwin Fey Institute of Embedded Systems Hamburg University of Technology Slide 2 Wie werden Daten in Programmen gespeichert und manipuliert?

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Anweisungen mit Variablen Wiederholung Deklaration

Mehr

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

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue Java - Schleifen Bedingung wiederhole ja Anweisung Anweisung Anweisung Leibniz Universität IT Services Anja Aue Anweisung int zahl; zahl = 2; zahl = zahl * 10; int zahl; ; Jede Anweisung endet mit einem

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Literalkonstanten Übersicht 1 Ganzzahlige Konstanten 2 Gleitkommakonstanten 3 Zeichenkonstanten 4 Zeichenketten 5 Boolsche Konstanten 6 null Referenz Literalkonstanten Literalkonstanten

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 20 Einstieg in die Informatik mit Java Literalkonstanten Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Ganzzahlige Konstanten 2 Gleitkommakonstanten 3 Zeichenkonstanten

Mehr

JAVA-Datentypen und deren Wertebereich

JAVA-Datentypen und deren Wertebereich Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).

Mehr

Programmiervorkurs Einführung in Java Tag 1

Programmiervorkurs Einführung in Java Tag 1 Programmiervorkurs Einführung in Java Tag 1 Sebastian Glutsch SS 2018 namen Inhaltsübersicht Vorkurs Tag 1:,, en,, Einführung Tag 2: Boolesche Ausdrücke,, If-Abfragen, Switch-Case Tag 3: Arrays, (Do-)While-Schleife,

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen

Mehr

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen. Themen der Übung Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 9.10.01 1 Bedingte Anweisungen Vergleiche und logische Operatoren 3 Fallunterscheidungen 4 Zeichen und Zeichenketten

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 06: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

Methoden und Funktionen

Methoden und Funktionen Programmieren mit Java Modul 4 Methoden und Funktionen Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Methoden 3 2.1 Methoden ohne Rückgabewert (Prozeduren)................ 3 2.2 Methoden mit Rückgabewert

Mehr

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy PROCESSING EINE ZUSAMMENFASSUNG Created by Michael Kirsch & Beat Rossmy INHALT 1. Typen und Operatoren 1. Datentypen 3. Klassen und Objekte 1. Klassen und Objekte 2. Operatoren 2. Konstruktor 3. Typkonversion

Mehr

Informatik I - Einstiegskurs

Informatik I - Einstiegskurs Informatik I - Einstiegskurs Dr. Henrik Brosenne Georg-August-Universität Göttingen Institut für Informatik Basiert auf dem Einstiegskurs im Wintersemester 2009/10 von Markus Osterhoff Wintersemester 2012/13

Mehr

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08 Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Wiederholung Kapitel 4 ZAIK Universität zu Köln WS 07/08 1 / 23 2 Datentypen Arten von Datentypen Bei der Deklaration einer Variablen(=Behälter für

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen } } Beispiele für Anweisungen Wiederholung Ausgabe

Mehr

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp ZAIK Universität zu Köln WS 07/08 1 / 6 Datentypen Arten von Datentypen

Mehr

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems 4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um

Mehr

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1 Fachhochschule Stralsund Fachbereich Maschinenbau Lehrgebiet Informatik Prof. Dr.-Ing. Ch.Wahmkow Arbeitsblätter für die Lehrveranstaltung OOP I. Aufbau eines Java-Programmes JAVA 1 Escape-Sequenzen zur

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 30 Einstieg in die Informatik mit Java Datentypen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 30 1 Überblick 2 Ganzzahlige Typen 3 Gleitkommatypen 4 Zeichen, char

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

Algorithmen und ihre Programmierung

Algorithmen und ihre Programmierung Veranstaltung Pr.-Nr.: 101023 Algorithmen und ihre Programmierung Veronika Waue WS 07/08 Einführung Definition: Algorithmus Ein Algorithmus ist eine genau definierte Folge von Anweisungen zur Lösung eines

Mehr

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems 4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um

Mehr

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

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert

Mehr

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme Schwerpunkte Vollständige und unvollständige Auswertung 8. Ausdrücke, Operatoren (einfache Typen) Teil 1 Seiteneffekte Overloading: Überladung von Operatoren Implizite und explizite (cast) Typumwandlung

Mehr

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

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage

Mehr

Programmiervorkurs. Wintersemester 2013/2014

Programmiervorkurs. Wintersemester 2013/2014 Programmiervorkurs Wintersemester 2013/2014 Programmiervorkurs Wintersemester 2013/2014 Organisation: Tutoren: Steffen Gebert, Alexander Wolff Johannes Grohmann, Anna Seufert, Anna Aumann, Nicolas Färber,

Mehr

Tag 3 Repetitorium Informatik (Java)

Tag 3 Repetitorium Informatik (Java) Tag 3 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Typkonvertierung

Mehr

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

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016

Mehr

Wie entwerfe ich ein Programm?

Wie entwerfe ich ein Programm? Wie entwerfe ich ein Programm? Welche Objekte brauche ich? Flussdiagramme für Programmablauf Vorcode Testcode Hauptcode Wir spielen Lotto! Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 5 +

Mehr

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe Was sind Operatoren Ein Operator ist eine in die Programmiersprache eingebaute Funktion, die

Mehr

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Übungen zur Vorlesung Wissenschaftliches Rechnen I Übungen zur Vorlesung Wissenschaftliches Rechnen I Nicolas Gauger, René Lamour, Hella Rabus Wintersemester 2007/2008 Programmierung - Einführung Programmierung - Einführung Berechnung einer Formel y =

Mehr

Variablen, Konstanten und Datentypen

Variablen, Konstanten und Datentypen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Variablen, Konstanten und Datentypen Überblick

Mehr

Einführung in die Programmierung Wintersemester 2011/12

Einführung in die Programmierung Wintersemester 2011/12 Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Kontrollstrukturen Inhalt Wiederholungen - while

Mehr

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

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken Aufgabe 1.60 a) Welchen Wert erhält die boolesche Variable z in folgendem Beispiel? int i = 2, j = 5; boolean

Mehr

Projekt 3 Variablen und Operatoren

Projekt 3 Variablen und Operatoren Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 25.4.07, Anweisungen Übersicht 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung, Vorbereitungen 4 Verbundanweisung 5 Bedingte Anweisung 6 Auswahlanweisung 7 for

Mehr

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2 Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Tutoraufgabe 1 (Zweierkomplement): a) Sei x eine ganze Zahl. Wie unterscheiden sich die Zweierkomplement-Darstellungen

Mehr

3. Anweisungen und Kontrollstrukturen

3. Anweisungen und Kontrollstrukturen 3. Kontrollstrukturen Anweisungen und Blöcke 3. Anweisungen und Kontrollstrukturen Mit Kontrollstrukturen können wir den Ablauf eines Programmes beeinflussen, z.b. ob oder in welcher Reihenfolge Anweisungen

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 1 - Variablen und Kontrollstrukturen main Methode Startpunkt jeder Java Anwendung String[] args ist ein Array aus Parametern, die beim Aufruf über die Kommandozeile

Mehr

Java Anweisungen und Ablaufsteuerung

Java Anweisungen und Ablaufsteuerung Informatik 1 für Nebenfachstudierende Grundmodul Java Anweisungen und Ablaufsteuerung Kai-Steffen Hielscher Folienversion: 24. Januar 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Einführung in die Programmierung by André Karge Übung - Operatoren, Methoden, Primitives 25. Oktober 2018 Einführung in die Programmierung WS18/19 André Karge 1/29 Notizen Standard Linux Befehle: http://images.linoxide.com/linux-cheat-sheet.pdf

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Weitere Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick 2 Verbundanweisung 3 Bedingte Anweisung 4 Auswahlanweisung

Mehr

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

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage

Mehr

Lukas Fässler, Dennis Komm, Markus Dahinden, David Sichau. Programmiereinführung mit Python und MATLAB. Begleitunterlagen.

Lukas Fässler, Dennis Komm, Markus Dahinden, David Sichau. Programmiereinführung mit Python und MATLAB. Begleitunterlagen. Lukas Fässler, Dennis Komm, Markus Dahinden, David Sichau Programmiereinführung mit Python und MATLAB Begleitunterlagen Zum Onlinekurs Programmiereinführung mit Python und MATLAB Begleitunterlagen Zum

Mehr

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2011/2012 1 / 25 Operatoren für elementare Datentypen Bedingte Schleifen 2 / 25 Zuweisungsoperator Die Zuweisung von Werten an Variablen

Mehr

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

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen Gehe nach links oder rechts Gehe solange geradeaus... Leibniz Universität IT Services Anja Aue Programmabläufe grafisch abbilden

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,

Mehr

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme Institut für Computational Science Prof. Dr. H. Hinterberger Praxismodul 1 Einführung in die Programmierung Erste Programme Einführung in die Programmierung 2 Institut für Computational Science, ETH Zürich,

Mehr

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

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 29 Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente

Mehr

Programmieren und Problemlösen Java-Sprachkonstrukte. Java-Sprachkonstrukte. Übung Altersberechner. Namen und Bezeichner. Namen und Bezeichner

Programmieren und Problemlösen Java-Sprachkonstrukte. Java-Sprachkonstrukte. Übung Altersberechner. Namen und Bezeichner. Namen und Bezeichner Übung Altersberechner Dennis Komm Programmieren und Problemlösen public class AgeCalc { public static void main(string[] args) { Out.print("Enter your year of birth: ")... } } Ausgabe: "In 2020, you will

Mehr

Informatik Vorkurs - Vorlesung 2

Informatik Vorkurs - Vorlesung 2 Informatik Vorkurs - Vorlesung 2 Variablen, Arrays, Zahlensysteme Torben Achilles, 9. Oktober 2018 Inhalt Variablen & Datentypen Arrays Zahlensysteme 9. Oktober 2018 Torben Achilles Informatik Vorkurs

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

System.out.println("TEXT");

System.out.println(TEXT); Inhaltsübersicht - Erstes Beispiel - Datentypen - Ausdrücke und Operatoren - Schleifen / Bedinungen - Struktogramme - Grundgerüst eines Programms in JAVA - Einlesen von Daten Erstes Beispiel public class

Mehr

Kapitel 3: Variablen

Kapitel 3: Variablen Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber

Mehr

Übungsblatt 1. Java Vorkurs (WS 2017)

Übungsblatt 1. Java Vorkurs (WS 2017) Übungsblatt 1 Java Vorkurs (WS 2017) Aufgabe 1 Hallo-Welt Erstelle ein neues Projekt mit dem Namen HelloJava. Erzeuge in diesem Projekt eine neue Klasse HelloJava. (a) Schreibe die main-methode in die

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2017/18 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Wiederholungen - while - do-while - for

Mehr

Einführung in die Programmierung mit VBA

Einführung in die Programmierung mit VBA Einführung in die Programmierung mit VBA Vorlesung vom 07. November 2016 Birger Krägelin Inhalt Vom Algorithmus zum Programm Programmiersprachen Programmieren mit VBA in Excel Datentypen und Variablen

Mehr

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

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg Sprachkonstrukte Einführung in Java Folie 1 von 20 12. Mai 2011 Ivo Kronenberg Inhalt Kommentare Identifier (Bezeichner) Variablen Numerische Ausdrücke und Typen Kontrollstrukturen Verzweigungen Bedingungen

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung C Sprachelemente für Übung 2 Typumwandlungen (type casts) Bei Ausdrücken, in denen Operanden mit unterschiedlichem Typ vorkommen, werden diese vom Compiler vor der Ausführung automatisch in einen gemeinsamen

Mehr

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3 Michael Jugovac Dominik Kopczynski Jan Quadflieg Till Schäfer Stephan Windmüller Dortmund, den 30. Oktober 2014 Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3 Es können 12 (+5

Mehr

2 Programmieren in Java I noch ohne Nachbearbeitung

2 Programmieren in Java I noch ohne Nachbearbeitung 1 2 Programmieren in Java I noch ohne Nachbearbeitung 2.1 Was sind Programme? Eingabe = Verarbeitung = Ausgabe Die Eingabe kann sein Konstanten im Quelltext; Kommandozeilenparameter oder interaktive Eingabe

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Eine Einführung mit anschaulichen Beispielen aus der Java-Welt apl. Prof. Dr. Achim Ebert Inhalt Kapitel 3: Kontrollstrukturen Einfache Anweisungen Anweisungsblöcke Steuerung

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 04: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

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

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15 EINI LW/ Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15 Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@tu-dortmund.de

Mehr

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Java Übung Übung 2 Universität Duisburg-Essen Kommedia, Übung EinPro SS06, 19. April 2006 (UniDUE) 19. April 2006 1 / 13 Java Programme Java Programme bestehen aus (meist mehreren) Klassen. In den Klassen

Mehr

if ( Logischer Operator ) { } else { Anweisungen false

if ( Logischer Operator ) { } else { Anweisungen false if ( Logischer Operator ) { Anweisungen true else { Anweisungen false Bedingte Anweisungen Operatoren verknüpfen Variable zu neuen Ausdrücken, wir unterscheiden Arithmetische Operatoren Berechnung von

Mehr

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax Einführung in die Programmierung für NF Algorithmen, Datentypen und Syntax Ziele Begriffsbildungen: InformaCk, Algorithmus, Programm, Compiler und andere Einordnung von Java Ein einfaches Java- Programm

Mehr

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm

Mehr

GI Vektoren

GI Vektoren Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung

Mehr

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient.

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient. Strings Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient. Beispiel: String zeile = "Cusanus-Gymnasium Wittlich";

Mehr

2 Teil 2: Nassi-Schneiderman

2 Teil 2: Nassi-Schneiderman 2 Teil 2: Nassi-Schneiderman Wie kann man Nassi-Schneiderman in einer objektorientierten Sprache verwenden? Jedes Objekt besitzt Methoden, welche die Attribute des Objektes verändern. Das Verhalten der

Mehr