Einführung in die Java-Programmierung. Tassilo Horn WiSe 2014/2015

Größe: px
Ab Seite anzeigen:

Download "Einführung in die Java-Programmierung. Tassilo Horn horn@uni-koblenz.de WiSe 2014/2015"

Transkript

1 Einführung in die Java-Programmierung Tassilo Horn WiSe 2014/2015 1

2 Organisatorisches Vorlesung täglich bis zum 17. Oktober jeweils von 08:15-09:30 Raum M201 Übungen 15:30-17:30 Uhr Treffpunkt heute: 15:30 auf dem Mikadoplatz Rechnerräume: A003, A015 Seminarräume (Teilnehmer mit eigenem Laptop): F312, F313 und F314 2

3 Organisatorisches Hat schon jeder eine Rechnerkennung? Falls nicht: Beantragung über Laptops im Ergeschoss des A-Gebäudes Folien, Beispiele und aktuelle Meldungen auf der Homepage der Veranstaltung 3

4 Los geht s! Wenn ihr etwas nicht versteht, fragt sofort! Wir haben viel Zeit. 4

5 Programmieren Das Niederschreiben eines Algorithmus zur Lösung eines Problems in einer Programmiersprache (wie Java). 5

6 Programmiersprache Eine Programmiersprache ist eine formale Sprache zur Formulierung von Datenstrukturen und Algorithmen, d. h. von Rechenvorschriften, die von einem Computer ausgeführt werden können. Sie setzen sich aus Anweisungen nach einem vorgegebenen Muster zusammen, der sogenannten Syntax. 6

7 Programmieren Programmieren lernt man weder durch Vorlesungen noch durch Bücher. Programmieren lernt man nur durch's Programmieren! Kommt in die Übungen! 7

8 Die drei Schritte der Java-Programmierung 8

9 Eclipse Wir benutzen hier Eclipse für die Programmierung in Java Eclipse ist eine IDE (Integrated Development Environment) Eclipse übernimmt die einzelnen Schritte für uns Wir schreiben unseren Programmtext Eclipse kompiliert diesen automatisch und zeigt eventuelle Fehler an Über der Run-Knopf können wir Programme auch direkt ausführen 9

10 Eclipse Editor Window Outline Package Explorer Miscellaneous Views 10

11 Eclipse: Package Explorer Zeigt alle Projekte im Workspace an Beim ersten Start von Eclipse muss man ein Verzeichnis als Workspace auswählen. Neue Projekte werden dann immer hier angelegt. Projekte sind normale Verzeichnisse mit einigen speziellen Dateien (.project,.classpath) Java-Projekte haben ein kleines J über dem Verzeichnissymbol 11

12 Eclipse: Editor Window Man kann beliebig viele Dateien geöffnet haben Diese werden wie im Browser mittels Tabs angezeigt Der Eclipse-Editor verfügt über viele Shortcuts, z.b. Strg-Space: angefangenes Wort komplettieren bzw. Abkürzung expandieren Shift-Strg-F: Quellcode formatieren Syntaxfehler und andere Probleme werden unterkringelt, und häufig schlägt Eclipse Lösungen vor (Glühbirnensymbol mit Achtungzeichen) 12

13 Eclipse: Outline Zeigt die Bestandteile der im Editor geöffneten Datei Bei Java: alle Klassen in der Datei je Klasse alle definierten Felder und Methoden (kommt später in der Vorlesung) 13

14 Eclipse: Miscellaneous Views Verschiedene Tabs für unterschiedliche Zwecke Können über Window > Show View hinzugefügt werden Console: Zeigt Ausgaben und Fehler bei der Programmausführung Problems: Zeigt alle Warnungen und Fehler im Projekt Javadoc: Zeigt Dokumentation des selektierten Elements Search: Zeigt die Ergebnisse der letzten Suche 14

15 Eclipse: Programm starten Play-Symbol: Programm normal starten Käfer-Symbol: Programm im Debugging-Modus starten (später mehr dazu) 15

16 Demo: HelloWorld.java Ein Java-Projekt in Eclipse anlegen 1. File > New > Java Project 2. Projektname angeben 3. Finish drücken Eine Programm im Projekt anlegen 1. New > Class 2. Klassenname angeben 3. [x] bei public static void main(string[] args) 4. Finish 16

17 Anatomie eines Java-Programms Java-Programme bestehen aus Klassen Klassen- und Dateinamen korrespondieren: Klasse HelloWorld ==> HelloWorld.java Klassen enthalten Methoden (Funktionen, Prozeduren) Methoden enthalten die eigentlichen Anweisungen Die Programmausführung beginnt bei der Methode main() Fürs erste ignorieren wir die Schlüsselworte public, static, void Klassen können in Paketen zusammengefasst werden Paket- und Verzeichnisnamen korrespondieren: Paket javakurs.vorlesung01 ==> javakurs/vorlesung01/ 17

18 Übungen Es gibt ein Aufgabenblatt mit Aufgabenteilen A bis G A: Einfache lineare Programme B: Programme mit Verzweigungen C: Programme mit Schleifen D: Ein wenig Mathe E: Array-Aufgaben F: Rekursive Programme G: Objektbasierte Programme Alle Aufgaben sind mit Schwierigkeitsgrad gekennzeichnet (* = leicht, ** = mittel, *** = schwer) Ziel sollte es sein zumindest alle mittelschweren Aufgaben aus den Kategorien A bis F selbstständig lösen zu können 18

19 Übungen: Vorschlag zur Projektstruktur Nur ein Eclipse Java-Projekt für alle Aufgaben Je Aufgabenkategorie ein Paket Je Aufgabe eine Klasse 19

20 Exkurs: Projekte aus Eclipse exportieren Wenn ihr ein existierendes Projekt (z.b. euer Übungsprojekt) exportieren wollt, dann geht das so: 1. Rechtsklick auf das Projekt 2. Export General > Archive File 4. Einen Dateinamen eingeben (z.b. Javakurs-Übungen.zip) 5. Finish 20

21 Exkurs: Projekte in Eclipse importieren Wenn ihr ein existierendes Projekt (z.b. die Programme, die wir hier in der Vorlesung schreiben) importieren wollt, dann geht das so: 1. File > Import General > Existing Project into workspace 3. Im folgenden Dialog entweder Archiv oder Verzeichnis auswählen 4. Finish 21

22 1 Datentypen, Variablen und Ausdrücke 22

23 Zahlen Aus der Mathematik kennt ihr die Mengen der natürliche Zahlen: ganze Zahlen: rationale Zahlen: reelle Zahlen: Problem: Diese Mengen sind unendlich und Zahlen beliebig groß ℕ ℤ ℚ ℝ Extremfall: Irrationale Zahlen (z.b. PI) können mit endlichem Speicherplatz nicht repräsentiert werden In Java gibt es statt dieser Mengen verschiedene Datentypen Die einfachen Zahlen-Datentypen entsprechen den ganzen Zahlen bzw. den reellen Zahlen mit Einschränkungen bzgl. des Wertebereichs und der Genauigkeit 23

24 Datentypen in Java Typ int Wertebereich ganze Zahlen, 32bit, von -2^31 bis 2^31-1 long ganze Zahlen, 64bit, von -2^63 bis 2^63-1 double Fließkommazahlen, 64bit, ~16 Dezimalstellen genau boolean Wahrheitswerte: true oder false String Zeichenketten Standardwert Beispiele 0-100, 17, l, -13l , , false false, true Hallo Welt! 24

25 Variablen in der Mathematik In der Mathematik haben Variablen einen Namen eine Grundmenge einen Wert 25

26 Variablen in der Mathematik Mathematische Variablen sind nicht änderbar, sondern sie sind Namen für eine Zahl 26

27 Variablen in Java Variablen in Programmen haben einen Namen einen Datentyp einen über die Zeit veränderbaren Wert Wichtig: Vor der Benutzung muss eine Variable deklariert werden! 27

28 Variablendeklaration Eine Variablendeklaration besteht aus dem Datentyp (z.b. int, long, oder double) dem Namen optional einer Wertzuweisung int x; // x hat Standardwert 0 long y = 17; Durch eine Deklaration wird Speicherplatz für genau einen Wert dieses Typs reserviert In Programmen sind Variablen Namen für einen Speicherplatz 28

29 Zuweisungen Der Wert einer Variable kann durch eine Zuweisung (=) verändert werden Erst wird der Wert der rechten Seite berechnet und dann der Variablen auf der linken Seite zugewiesen int x = 17; x = 18; int x = 19: // // // // // Deklaration & Zuweisung Erneute Zuweisung Fehler, man darf nicht 2 Variablen mit dem gleichen Namen haben. 29

30 Ausdrücke Ein Ausdruck ist ein Literal, eine Variable oder eine Operation auf Ausdrücken Ein Ausdruck liefert ein Ergebnis int x = 11; // Deklaration 17 x x + 19 // Ausdruck: int-literal // Ausdruck: Variable // Ausdruck: Operation 30

31 Einfache Textausgabe Zur Ausgabe beliebiger Werte auf der Standardausgabe (System.out) gibt es in Java die Methoden: // Wert von <Ausdruck> ausgeben System.out.print(<Ausdruck>); // Wert von <Ausdruck> gefolgt von // einem Zeilenumbruch ausgeben System.out.println(<Ausdruck>); 31

32 Operationen auf Zahlen Auf allen Zahlentypen definiert: die arithmetischen Operationen Addition, Subtraktion, Multiplikation und Division // // * 10 // / 3 // / 3.0 //

33 Operationen auf Zahlen Auf ganzen Zahlen (int, long) definiert: Rest einer Ganzzahldivision (Modulo) 17 % 4 // 1-4 % 3 // -1 5 % -3 // 2 33

34 Automatische Konvertierung Der größte Zahlentyp in einem Ausdruck bestimmt den Typ des Ergebnisses Regel: double > long > int // int + int = int 1 + 1l // int + long = long // double + int = double 3 / 2 // int + int = int 3.0 / 2 // double + int = double 34

35 Zeichenketten Zur Darstellung von Zeichenketten (Texten) kennt Java den Datentyp String Strings werden durch doppelte Anführungzeichen eingeschlossen: Hello World! Innerhalb eines Strings kann man einige Escape-Sequenzen benutzen \ doppeltes Anführungszeichen: String mit \ drin \n Zeilenumbruch: Zeile1\nZeile2 \t Tabulator: Spalte1\tSpalte2 \\ Backslash: C:\\Programme\\Java\\ 35

36 Operationen auf Zeichenketten Verkettung (Konkatenation) "Hallo" + " Welt" + "!" // "Hallo Welt!" Werte anderer Typen werden automatisch konvertiert "Bitte " " Bier!" // "Bitte 3 Bier" 36

37 Demo: Operationen.java Aufgabe: Lasst uns ein Programm schreiben, das jeweils 2 Variablen der Typen int, long und double definiert für verschiedene Kombinationen der Variablen die Zahlenoperationen benutzt die Werte der Ausdrücke auf der Konsole ausgibt 37

38 Nochmal Zuweisungen & Ausdrücke Der Ausdruck auf der rechten Seite einer Zuweisung darf die Variable der linken Seite enthalten Der Ausdruck wird dann mit dem alten Wert berechnet und danach als neuer Wert zugewiesen x = 2; x = x * x; // x = 2 * 2 // x hat den Wert 4 38

39 Zuweisungskurzformen int x = 10; x += 5; // x = x + 5: 15 x -= 7; // x = x 7: 8 x *= 2; // x = x * 2: 16 x /= 2; // x = x / 2: 8 x++; // x = x + 1: 9 x--; // x = x 1: 8 39

40 Wahrheitswerte Für Wahrheitswerte gibt es in Java den Datentyp boolean Die einzigen möglichen Wahrheitswerte sind false (falsch) und true (wahr) 40

41 Operationen auf Wahrheitswerten Negation (!): negiert einen Wahrheitswert!true!false // false // true 41

42 Operationen auf Wahrheitswerten Logisches UND (&&): Ergebnis ist genau dann wahr, wenn beide Operanden wahr sind a b a && b false false false false true false true false false true true true 42

43 Operationen auf Wahrheitswerten Logisches ODER ( ): Ergebnis ist genau dann wahr, wenn mindestens ein Operand wahr sind a b a b false false false false true true true false true true true true 43

44 Operationen auf Wahrheitswerten Exklusives ODER (^): Ergebnis ist genau dann wahr, wenn genau ein Operand wahr sind a b a ^ b false false false false true true true false true true true false 44

45 Vergleichsoperationen Für alle Zahlen definiert, liefern einen Wahrheitswert (boolean) == und!= funktionieren auch für Wahrheitswerte 45

46 Vergleichsoperationen für Strings Strings sollte man niemals mit == vergleichen! Vergleich zweier Zeichenketten: Hallo.equals( Hallo ) ==> true hallo.equals( Hallo ) ==> false Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung Hallo.equalsIgnoreCase( Hallo ) ==> true hallo.equalsignorecase( Hallo ) ==> true hi!.equalsignorecase( Hallo ) ==> false 46

47 Demo: Operationen.java Aufgabe: Lasst uns Operationen.java erweitern, um Zuweisungskurzformen Operationen auf Zeichenketten Operationen auf Wahrheitswerten Vergleichsoperationen 47

48 Operatorpräzedenzen Java kennt die üblichen Rechenregeln wie Punkt- vor Strichrechnung Die Auswertung von binären Operatoren ist linksassoziativ (von links nach rechts) Ratschlag: Macht trotzdem durch Klammerung die Reihenfolge deutlich * 3 2 * 2 9 / 3 // 1 + (2 * 3) ==> 7 // (2 * 2) (9 / 3) // ==> 7 48

49 Ein- und Ausgabe mit JConsole JConsole ermöglich die einfache Ein- und Ausgabe von Zahlen und Strings: // JConsole starten JConsole.start(); // Eingabe (Benutzer fragen) int i = JConsole.readInt( Ein int: ); long l = JConsole.readLong( Ein long: ); double d = JConsole.readDouble( Ein double: ); String s = JConsole.readString( Ein String: ); // Ausgabe System.out.println( i = + i +, l = + l, d = + d +, s = + s); 49

50 JConsole in Eclipse einbinden Kopiere die Datei org.riediger.jconsole-1.5.jar ins Eclipse Java-Projekt 1. Rechtsklick auf's Java-Projekt 2. Properties auswählen 3. Java Build Path auswählen 4. Libraries-Tab auswählen 5. Add JARs... auswählen 6. Datei org.riediger.jconsole-1.5.jar auswählen und Ok 50

51 Demo: Greeting.java Aufgabe: Lasst uns ein Programm schreiben, welches den Benutzer nach seinem Namen fragt und ihn dann persönlich begrüßt Vorüberlegung: EVA Was ist die Eingabe? Wie erfolgt die Verarbeitung? Was ist die gewünschte Ausgabe? 51

52 Genug für heute. Bis morgen! Mit dem jetzigen Wissen könnt ihr theoretisch alle Aufgaben im Aufgabenteil A lösen. 52

53 Rückblick Datentypen ganze Zahlen: int, long Fließkommazahlen: double Zeichenketten: String Wahrheitswerte: boolean Variablen Deklaration Zuweisung Operationen arithmetische Operationen (und ihre Kurzformen) logische Operationen (!, &&,, ^) Konkatenation von Strings Vergleichsoperationen (== bzw. equals() bei Strings) 53

54 Mathematische Konstanten & Funktionen Die in Java enthaltene Klasse java.lang.math enthält mathematische Konstanten und viele Funktionen Math.PI // Approx. PI Math.E // Approx. e (Basis des nat. Log.) Math.sqrt(9) // Wurzel: 3.0 Math.round(1.5) // Runden: 2 Math.round(1.49) // Runden: 1 Math.pow(2, 3) // Exponent: 8 Math.abs(-18) // Absolutwert: 18 Math.random() // Zufallszahl in [0, 1[ 54

55 Methoden-Signaturen lesen Eine Methoden-Signatur legt den Datentyp des Rückgabewerts, den Methodennamen und die Datentypen der Eingabewerte fest: // R: double, N: sqrt, E: double double sqrt(double a) // R: double, N: pow, E: double, double double pow(double a, double b) 55

56 Demo: Pythagoras.java Aufgabe: Lasst uns ein Programm schreiben, welches die Länge der Katheten a und b vom Benutzer abfragt und dann die Länge der Hypotenuse berechnet und ausgibt a + b =c 2 2 c= a + b 56

57 2 Verzweigungen 57

58 Motivation Aufgabe: Wir wollen ein Programm schreiben, welches eine quadratische Gleichung löst. (Nullstellenbestimmung der Parabel) 2 ax +bx + c=0, ( a 0) Lösung mit p q Formel : b c x + px+ q=0, p=, q= a a 2 p p x= ± D, D=( ) q

59 Demo: QuadGleichung.java Eine quadratische Gleichung kann 2, eine, oder garkeine reelle Lösung haben, je nach Wert der Diskriminante D Statt tue dies tue das tue jenes brauchen wir: 2 Lsg.... berechne D eine Lsg. keine Lsg. 59

60 Verzweigungen Für Fallunterscheidungen gibt es die if-anweisung: if (<Test-Ausdruck>) { // Anweisungen für true } else { // Anweisungen für false // (der else-teil ist optional) } 60

61 Verzweigungen Beispiel: Was wird ausgegeben? if (1 < 2) { System.out.println("Math works!"); } else { System.out.println("Math is broken!"); } 61

62 Verzweigungen Beispiel: Was wird ausgegeben? if ((1 >= 2) (7 % 4 == 3)) { System.out.println("Ja!"); } else { System.out.println("Nein!"); } 62

63 Verzweigungen Beispiel: Was wird ausgegeben? if (!((9 <= 10) && (8 > 4))) { System.out.println("Ja!"); } System.out.println("Fertig"); 63

64 Blöcke Die von { } eingeschlossene Sequenz von Anweisungen bezeichnet man als einen Block Variablen, die in einen Block deklariert wurden, sind nur in diesem Block sichtbar int x = 10; int y = 5; if (x > y) { int z = x + y; } System.out.println(z); // Fehler! 64

65 Demo: QuadGleichung.java Aufgabe: Lasst uns ein Programm schreiben, welches eine quadratische Gleichung löst. (Nullstellenbestimmung der Parabel) 2 ax +bx + c=0, ( a 0) Lösung mit p q Formel : b c x + px+ q=0, p=, q= a a 2 p p x= ± D, D=( ) q

66 3 Häufige Fehler 66

67 Fehler & Fallstricke Viele Fehler im Programm werden schon beim Kompilieren gefunden und in Eclipse rot unterkringelt Syntaxfehler, Datentypfehler, etc. Wenn man mit der Maus auf die Unterkringelung zeigt, dann wird eine genaue Fehlermeldung angezeigt 67

68 Syntaxfehler <something> cannot be resolved Ihr versucht auf eine nicht deklarierte Variable, Klasse oder Methode zuzugreifen int x1 = int x2 = x = x1 + // x ist 10; 20; x2; nicht deklariert JConsole.start(); // JConsole nicht importiert 68

69 Syntaxfehler Duplicate variable <something> Ihr versucht eine schon existierende Variable nochmal zu deklarieren int x1 = 10, x2 = 20; //... int x1 = x1 + x2; 69

70 Typfehler The operator <x> is undefined for the argument type(s) boolean, int Ihr wendet einen Operator auf falsche Typen an int a = 10, b = 20, c = 30; if (a < b < c) { // irgendwas } 70

71 Typfehler Type mismatch: cannot convert from <x> to <y> In einer Zuweisung ist der Typ der Variable (x) kleiner als der des Werts des zugewiesenen Ausdrucks Ihr verwendet eine Zuweisung (=) und wollt eigentlich einen Vergleich (==) machen long a = 1; int b = a + 1; if (a = 2) { ;; irgendwas } 71

72 Böse Fehler Manche Fehler werden nicht vom Compiler erkannt, sondern sie drücken sich nur in (aus Sicht des Programmierers) falschen Ergebnissen aus Ohne Erfahrung schwer zu finden Z.B. Typkonvertierungen, Überläufe, Rundungsfehler 72

73 Demo: BoeseFehler.java Bei Zuweisungen wird zuerst der Wert des Ausdrucks auf der rechten Seite berechnet und erst danach der Variable auf der linken Seite zugewiesen und ggf. konvertiert Zahlen können nicht beliebig groß sein: siehe auch BigInteger, BigDecimal Gleitkommazahlen sind nicht beliebig genau 73

74 Exkurs: Der Eclipse-Debugger Mit dem Käfersymbol kann man ein Programm im Debugging-Modus starten Die Programmausführung pausiert dann an vorher per Doppelklick auf den Zeilennummern definierten Breakpoints Jetzt kann man das Programm schrittweise ausführen und dabei die aktuellen Variablenwerte überwachen 74

75 Genug für heute. Bis morgen! Mit dem jetzigen Wissen könnt ihr theoretisch alle Aufgaben im Aufgabenteil B lösen. (Aufgabe B5 allerdings nur ohne Definition eigener Methoden.) 75

76 Rückblick Verzweigung (if-anweisung) Böse Fehler Überläufe Rundungsfehler bzw. Fehler aufgrund ungenauer Fließkommadarstellung Der Eclipse-Debugger 76

77 4 Schleifen 77

78 Die while-schleife Schleifen dienen der Wiederholung von Anweisungen. Ob wiederholt wird, wird durch eine Bedingung bestimmt Die einfachste Art der Schleife ist die while-schleife while (<Bedingung>) { // Schleifenrumpf: Anweisungen } 78

79 Die while-schleife 79

80 Demo: WhileSchleifeGGT.java Aufgabe: Lasst uns ein Programm schreiben, welches 2 ganze Zahlen vom Benutzer einliest und deren ggt bestimmt Lösungsansatz: Wiederholt die kleinere von der größeren Zahl abziehen Wird eine der Zahlen 0, so ist die andere der ggt Klappt nur für nicht-negative Zahlen (aber für den ggt können wir sowieso Absolutwerte nehmen) 80

81 Demo: Zinsen.java Aufgabe: Lasst und ein Programm schreiben, welches den Kontostand bei fester Verzinsung nach beliebig vielen Jahren berechnet Der Anfangsbetrag, der Zinssatz und die Laufzeit werden vom Benutzer eingelesen Nach jedem Jahr muss der Kontostand neu berechnet werden (auf Basis des alten Standes und dem Zinswert) Nach Berechnung der Gesamtlaufzeit muss der Endkontostand ausgegeben werden 81

82 Die do-while-schleife Neben der normalen while-schleife, gibt es noch die do-while-schleife Der Rumpf wird hier zuerst ausgeführt, und erst dann wird die Bedingung überprüft do { // Schleifenrumpf: Anweisungen } while (<Bedingung>); 82

83 do-while-schleife 83

84 Demo: SummeDurchschnitt.java Aufgabe: Schreibe ein Programm, welches beliebig viele Zahlen vom Benutzer einliest und dann die Summe und den Durchschnitt ausgibt Der Benutzer signalisiert durch die Eingabe von 0, dass alle Zahlen eingelesen sind 84

85 Exkurs: Explizite Typkonvertierung Oftmals möchte man eine Fließkommazahl in einen int oder long konvertieren, indem man einfach alle Nachkommastellen abschneidet Dazu gibt es in Java explizite Typkonvertierung (Casting) long x = (long) 1.67 // x = 1 int y = (int) (10.0 / 3) // y = 3 85

86 Demo: ZahlRaten.java Aufgabe: Lasst uns ein Programm schreiben, welches zufällig eine Zahl zwischen 0 und 99 auswählt Der Benutzer soll diese Zahl erraten Das Programm gibt nach jedem Versuch entweder einen Tipp (größer, kleiner), oder es bestätigt den richtigen Tipp und gibt die Anzahl der benötigten Versuche aus Hinweis: Die Methode Math.random() liefert einen zufälligen double-wert zwischen 0.0 (inkl.) und 1.0 (exkl.) 86

87 Zählschleifen Häufig benötigt man Schleifen, die von 0..n zählen (oder n..m) Dazu gibt es die for-schleife for (int i = 0; i < 10; i++) { // Rumpf } Jede for-schleife lässt sich auch als while-schleife schreiben int i = 0; while (i < 10) { // Rumpf i++; } 87

88 Demo: Quadratzahlen.java Aufgabe: Schreibe ein Programm, welches die Quadratzahlen von 1 bis n (wird vom Benutzer eingegeben) ausgibt, und benutze dabei eine for-schleife 88

89 Demo: QuadratzahlenWhile.java Aufgabe: Schreibe ein Programm, welches die Quadratzahlen von 1 bis n (wird vom Benutzer eingegeben) ausgibt, und benutze dabei eine whileschleife 89

90 Demo: Fakultaet.java Aufgabe: Schreibe ein Programm, welches die Fakultät von einer natürlichen Zahl n (wird vom Benutzer eingegeben) ausgibt 90

91 Genug für heute! Im Prinzip könnt ihr jetzt die Aufgabenteile C und D machen. 91

92 Rückblick Schleifen ermöglichen die wiederholte Ausführung von Anweisungen Wir haben drei verschiedene Schleifenvarianten kennen gelernt while-schleife do-while-schleife for-schleife while und for sind abweisende (kopfgesteuerte) Schleifen, do-while ist eine annehmende (fußgesteuerte) Schleife 92

93 Rückblick: while-schleife int i = 0; while (i < 10) { System.out.println(i); i++; } 93

94 Rückblick: for-schleife for (int i = 0; i < 10; i++) { System.out.println(i); } 94

95 Rückblick: do-while-schleife int i = 0; do { System.out.println(i); i++; } while (i < 10); 95

96 Aus Schleifen ausbrechen Es gibt 2 mögliche Anweisungen, um vorzeitig aus einer Schleife auszubrechen continue beendet nur den aktuellen Durchlauf break beendet die gesamte Schleife while (<Bedingung>) { // break; // continue; // } 96

97 Demo: BreakAndContinue.java Aufgabe: Schreibe ein Programm, welches alle ganzen Zahlen von 1 an ausgibt, es sein denn die Zahl ist durch 2 oder 3 teilbar, dann soll diese Zahl übersprungen werden die Zahl ist 123, dann soll die gesamte Schleife beendet werden 97

98 Geschachtelte Schleifen Alle Arten von Schleifen können auch geschachtelt werden while (<b1>) { for (int a = 100; a > 0; a--) { do { // mach was } while (<b2>); } } 98

99 Demo: EinMalEins.java Aufgabe: Schreibe ein Programm, welches das kleine Einmal-Eins in tabellarischer Form ausgibt Die erste Spalte/Zeile sind jeweils die Zahlen 1 bis 10 Die Zellen der Tabelle sind jeweils die Produkte aus Spalte/Zeile Tipp: Der String "\t" druckt einen Tabulator (Einrückung zu einem festen Punkt) 99

100 Demo: XhochK.java Aufgabe: Schreibe ein Programm, welches zwei natürliche Zahlen x und k einliest und dann x hoch k berechnet (Numerikaufgabe 3a) Math.pow() darf nur zum Testen der Lösung verwendet werden! Auch die Multiplikation * darf nicht benutzt werden. 100

101 5 Methoden 101

102 Methoden Bislang haben wir unsere Programme einfach in die main()-methode gepackt Zur Strukturierung von etwas komplexeren Programmen bietet es sich an, eigene Methoden zu definieren Diese können dann immer wieder aufgerufen werden, statt jedes mal den Code einzufügen (Wiederverwendung) 102

103 Methoden Wir haben schon viele Methoden benutzt, z.b.: Math.sqrt() // Wurzel Math.pow() System.out.println() // Textausgabe JConsole.readInt() // Potenz // int-wert lesen Um eine Methode zu benutzen, muss man deren Signatur kennen: Typ des Ergebnisses (void, falls kein Ergebnis) Name der Methode Typen und Anzahl der Parameter double Math.sqrt(double x) 103

104 Methoden als BlackBox Es ist dokumentiert, was eine Methode macht, aber (i.d.r.) nicht wie sie es macht Prints the given string to standard out. Promtps the user for a int value. String String JConsole.readInt System.out.println int Kein Ergebnis Returns the correctly rounded positive square root of a double value. double Math.sqrt double Returns the value of the first argument raised to the power of the second argument. double double Math.pow double 104

105 Methodenaufrufe Methoden werden über Methodenaufrufe benutzt Die Anzahl und Typen der aktuellen Parameter müssen zu den der formalen Parameter passen double exp = Math.pow(17, -0.4); // Ok! double exp = Math.pow(17); // Falsch! double exp = Math.pow("17", 2); // Falsch! 105

106 Methoden-Definitionen Einfach so mit MyMath.pow(x, y) aufrufbar public class MyMath { formale Parameter Aufrufbar aus anderen Klassen public static double pow(double x, double k) { // Verarbeitung } } double double Math.pow double 106

107 Ergebnis liefern Methoden, die ein Ergebnis berechnen, müssen dieses mit der return-anweisung zurückgeben public static int foo(int x) { // berechne int ergebnis return ergebnis; } //Irgendwo anders in derselben Klasse int x = foo(17); 107

108 Demo: Rechner.java Aufgabe: Erstelle eine Klasse Rechner, die eine Methode add() zum Addieren zweier ganzer Zahlen hat Spaßeshalber: Man darf den +-Operator nicht verwenden, nur ++ bzw

109 Demo: Rechner.java Aufgabe: Erweitert den Rechner um die Methode sub() und mul() Spaßeshalber: Bei sub() ist der Operator verboten, bei mul() ist der Operator * verboten Nutzt stattdessen unsere add()-methode! 109

110 Genug für heute! Damit könnt ihr Aufgabenteile A-D vollständig erledigen. (Jetzt auch mit Methoden) 110

111 Rückblick Methoden definieren public static int foo(int a, int b) { // Berechnung return ergebnis; } Methoden aufrufen int x = foo(1, 2); 111

112 Demo: Rechner.java Aufgabe: Erweitert den Rechner um die Methoden div() und modulo() div(): Ganzzahldivision modulo(): Rest der Ganzzahldivision Spaßeshalber: Bei div() ist der Operator / verboten, bei modulo() ist der Operator % verboten 112

113 Demo: Wurzel.java Aufgabe: Schreibe eine Methode, die genau wie Math.sqrt() die Quadratwurzel einer positiven, reellen Zahl zieht (bzw. eine Abschätzung berechnet) Math.sqrt() darf natürlich nicht benutzt werden! 113

114 Demo: Wurzel.java Idee: Annäherungslösung durch Intervallschachtelung 114

115 Java-Namenskonventionen Klassennamen sind i.d.r. Substantive und werden in CamelCase geschrieben Methodennamen sind i.d.r. Verbalphrasen (Verb und Objekt) oder mathematische Funktionen und werden in camelcase geschrieben EinMalEins, JConsole, Rechner printvalue(), readint(), sqrt(), sin(), cos(), wurzel() Variablennamen sind i.d.r. Substantive in camelcase oder im Falle von mathematischen Funktionen die Formelzeichen: zaehler, obereschranke, x, y Will man Programme weitergeben, so empfielt es sich alle Bezeichner englisch zu schreiben Java unterstützt Unicode, aber man sollte für Bezeichner besser nur 115 ASCII-Zeichen benutzen

116 6 Arrays 116

117 Arrays Viele mathematische Probleme müssen Vektoren (oder Matrizen) verarbeiten Vektoren im zweidimensionalen Raum (R²) bestehen aus einem x- und einem y-wert Vektoren im dreidimensionalen Raum (R³) bestehen aus einem x-, einem y- und einem z-wert (Länge, Höhe, Breite) 117

118 Arrays Beispiel: Sei p1 ein Punkt im zweidimensionalen Raum mit den Koordinaten (1, 2) und p2 ein Punkt mit den Koordinaten (3, 4) Mit dem bisher bekannten Stoff können wir einen Punkt mit jeweils 2 einzelnen Variablen darstellen: int p1_x = 1; int p1_y = 2; // Punkt p1 int p2_x = 3; int p2_y = 4; // Punkt p2 // Punkte p1 und p2 addieren int p3_x = p1_x + p2_x; int p3_y = p1_y + p2_y; Noch schlimmer wird es, wenn wir viele Punkte in der Berechnung oder höhere Dimensionen benötigen. Für einen Punkt aus dem R^n benötigen wir hier n Variablen 118

119 Arrays Ein weiteres Problem: Wir können keine Methode schreiben, die 2 Vektoren/Punkte addiert static??? add2dpoints(int p1_x, int p1_y, int p2_x, int p2_y) { int p3_x = p1_x + p2_x; int p3_y = p1_y + p2_y; return???; } Was ist der Ergebnistyp dieser Methode? Man müsste ja eigentlich 2 Werte zurückgeben, aber das geht in Java nicht. 119

120 Arrays Die Lösung sind Arrays (Felder) Ein Array ist eine nummerierte Sammlung von Werten genau eines Typs (alle Komponenten haben den selben Typ) Die einzelnen Komponenten werden über ihren Index angesprochen Der Index beginnt bei 0 und endet bei der Länge des Arrays 1 Die Länge eines Arrays ist mit der Deklaration festgelegt und kann nicht verändert werden 120

121 Arrays Beispiel: Ein Array der Länge 10 (Typ unbekannt) 121

122 Arrays deklarieren Arrays werden wie Variablen deklariert, wobei dem Element-Typ ein [] nachgestellt wird // Uninitialisierte Arrays, Länge // noch nicht festgelegt int[] intarray; long[] longarray; double[] doublearray; 122

123 Arrays deklarieren und initialisieren Wie Variablen können Arrays direkt bei der Deklaration initialisiert werden Jedes Array kennt seine Länge (array.length) int[] p1 = {1, 2}; System.out.println(p1.length) // 2 double[] p2 = {3.3, 7.9, -1.0}; System.out.println(p2.length) // 3 123

124 Index-Zugriff Auf die einzelnen Elemente des Arrays wird per Index zugegriffen Ist der Index nicht gültig, d.h. kleiner als 0 oder größer oder gleich der Array-Länge, wird eine ArrayIndexOutOfBoundsException geworfen double[] p = {3.3, 7.9, -1.0}; // p[0] = 3.3 // p[1] = 7.9 // p[2] =

125 Demo: ArrayUtils.java Aufgabe: Schreibe eine Klasse ArrayUtils, die 3 Methoden void printarray(int[] a) void printarray(long[] a) void printarray(double[] a) enthält. Diese Methoden sollen das übergebene Array einfach in der Form {1, 2, 3, 4} auf der Standardausgabe ausgeben. 125

126 Arrays zur Laufzeit initialisieren In den meisten Programmen wollen wir zur Laufzeit Arrays beliebiger Länge erzeugen, d.h. die Anzahl der Elemente soll nicht schon vom Programmierer festgelegt sein. int x = 3; int[] myarray = new int[x]; // // // // Speicher zuweisen, Array-Länge Nach der Speicherzuweisung haben alle Komponenten den Standartwert des jeweiligen Datentyps, also 0 bei int. myarray[0] = 1; // Eigene Werte zuweisen myarray[1] = 2; myarray[2] = 3; 126

127 Demo: ArrayUtils.java Aufgabe: Füge der Klasse ArrayUtils die 3 Methoden int[] readintarray(int n) long[] readlongarray(int n) double[] readdoublearray(int n) hinzu. Diese Methoden sollen mittels JConsole n Werte des jeweiligen Typs einlesen und als Array zurückliefern. 127

128 Referenztyp Array Sei unten das ein int-array der Länge 10, so besteht das Array aus zehn direkt aufeinanderfolgenden Speicherbereichen Arrays sind Referenztypen, d.h. die Array-Variable x in int[] x = {1, 2, 3}; ist eine Referenz, die auf die erste Komponente des Arrays im Speicher zeigt 128

129 Referenztyp Array Da ein Array ein Referenztyp ist, wird durch eine Zuweisung keine Kopie angefertigt: int[] x = {1, 2, 3}; int[] y = x; // y ist Alias für x, d.h. y zeigt auf // den selben Speicherbereich wie x. 129

130 Referenztyp Array Auch die Verwendung als Methodenparameter erzeugt nur einen Alias public static void main(string[] args) { int[] y = {1, 2, 3}; foo(y); printarray(y); // Welche Ausgabe??? } public static void foo(int[] x) { // x ist das selbe Array wie y x[1] = 17; } 130

131 Referenztyp Array Implikationen: Wird ein Array als Methodenparameter übergeben und ändert die Methode das Array, dann sind die Änderungen auch für den Aufrufer sichtbar Will man ein Array kopieren, so muss man ein neues Array gleichen Typs und gleicher Länge erzeugen und dann alle Komponenten einzeln kopieren siehe Übungsaufgabe E.5 131

132 Demo: ReferenztypArray.java Aufgabe: Schreibe eine Methode loeschearray(), die ein int-array als Parameter erhält und alle Komponenten auf -1 setzt Die Methode soll keinen Rückgabewert haben, da das übergebene Array direkt modifiziert wird Teste die Methode, um zu zeigen, dass das übergebene Array tatsächlich modifiziert wurde 132

133 Exkurs: Referenztyp String Auch Strings sind in Java Referenztypen Im Gegensatz zu Arrays können Strings aber nicht modifiziert werden Für alle Referenztypen gilt, == vergleicht nicht den Inhalt sondern nur die Referenz (d.h. die Speicheradresse) Strings kann man mit der equals()-methode vergleichen, für Arrays muss man eine eigene Methode schreiben 133

134 Demo: ArrayUtils.java Aufgabe: Erweitere die Klasse ArrayUtils um drei Methoden arrayequals(), die jeweils 2 gegebene int-, long- bzw. double-arrays inhaltlich vergleichen 134

135 Genug für heute! Damit könnt ihr die Aufgaben aus den Aufgabenteilen A-E lösen. 135

136 Rückblick: Arrays Arrays sind nummerierte Sammlungen von einer festen Anzahl von Elementen genau eines Typs Der Zugriff auf die einzelnen Komponenten erfolgt über ihren Index (0 bis Länge-1) Arrays erzeugen int[] a = {1, 2, 3}; // Als Literal int[] b = new int[3]; // dynamisch b[0] = 1; b[1] = 2; b[2] = 3; 136

137 Rückblick: Arrays Arrays sind Referenztypen Schreibt man int[] a = ; int[] b = a; zeigen a und b auf das selbe Array im Speicher. (b ist nur ein Alias für a, keine Kopie) Vergleich mit == testet auf Identität, nicht Wertegleichheit 137

138 Demo: VektorRechnung.java Aufgabe: Schreibe eine Methode multiplyvector(), welche enen gegebenen Vektor (double-array) mit einem Skalar (double) multipliziert und das Ergebnis als neues double-array liefert Der übergebene Vektor sollen nicht modifiziert werden Der Vektorraum darf eine beliebige Dimension haben, d.h. der Eingabevektor darf beliebig lang sein 138

139 Demo: VektorRechnung.java Aufgabe: Schreibe eine Methode addvectors(), welche zwei gegebene Vektoren (double-arrays) addiert und den Ergebnisvektor als neues double-array liefert Die beiden übergebenen Vektoren sollen nicht modifiziert werden Der Vektorraum darf eine beliebige Dimension haben, d.h. die Vektoren dürfen beliebig lang sein, müssen aber gleich lang sein 139

140 Demo: VektorRechnung.java Aufgabe: Erweitere die Klasse VektorRechnung um eine Methode distance(), die einem die Entfernung zweier gegebener Punkte berechnet 140

141 Demo: Fibonacci.java Aufgabe: Schreibe eine Methode fibonacci() die einen int n als Parameter erhält und dann ein int-array mit den ersten n Fibonacci-Zahlen zurückgibt Die erste Fibonacci-Zahl ist 0 Die zweite Fibonacci-Zahl ist 1 Die n-te Fibonacci-Zahl ist die Summe der (n-2)-ten und (n-1)-ten Fibonacci-Zahl 141

142 Demo: Permutation.java Aufgabe: Lasst uns eine Methode permutation() schreiben, die 2 ints m und n (mit m <= n) als Parameter erhält und dann ein int-array der Länge m mit zufälligen Werten aus dem Intervall [1, n] liefert. Das Array darf keine Duplikate enthalten! Beispiel: Eine normale Lottoziehung 6 aus 49 kann dann mit permutation(6, 49) erfolgen 142

143 Genug für heute! Damit könnt ihr die Aufgaben aus den Aufgabenteilen A-E lösen. 143

144 7 Rekursive Methoden 144

145 Rekursive Methoden Methoden können sich auch selbst aufrufen (Rekursion) Viele mathematischen Funktionen sind rekursiv definiert, z.b. die Fakultät: 145

146 Rekursive Methoden Eine rekursive Definition hat immer mindestens einen nicht-rekursiven Basisfall (Abbruchbedingung) 146

147 Rekursive Methoden 4! = 4 * 3! = 4 * 3 * 2! = 4 * 3 * 2 * 1! = 4 * 3 * 2 * 1 * 0! = 4 * 3 * 2 * 1 * 1 = 4 * 3 * 2 * 1 = 4 * 3 * 2 = 4 * 6 = 24 Rekursionstiefe 147

148 Demo: Rekursion.java Aufgabe: Schreibe eine Methode fact(), welche die Fakultät einer gegebenen natürlichen Zahl n rekursiv berechnet 148

149 Rekursive Methoden Rekursion und Schleifen sind äquivalent in ihrer Mächtigkeit Jedes Programm mit Schleifen kann in ein rekursives Programm ohne Schleifen überführt werden Jedes rekursive Programm kann in ein Programm ohne Rekursion mit Schleifen überführt werden Es gibt einige Programmiersprachen, die tatsächlich keine Schleifen enthalten, funktionale Sprachen: Haskell, Scheme,

150 Rekursive Methoden Beim Aufruf einer rekursiven Methode wird die Aufrufstelle (Rücksprungadresse), die aktuellen Parameter und die Werte der lokalen Variablen der Methode auf dem AufrufStack der Java-Maschine gespeichert Je höher die Rekursionstiefe, desto mehr Speicher wird dadurch verbraucht Ab einer gewissen Rekursionstiefe (~1500) wirft die JavaMaschine einen StackOverflowError Für die meisten Programme ist das aber kein Problem z.b. erhalten wir bei fact(21) schon falsche Werte wegen einem Überlauf obwohl wir noch weit von der maximal möglichen Rekursionstiefe entfernt sind 150

151 Exkurs: Endrekursive Methoden Ist in einer rekursiven Methode der rekursive Aufruf die letzte Anweisung, so nennt man die Methode endrekursiv (tail-recursive) Solche endrekursiven Algorithmen lassen sich einfach in eine Iteration (Schleife) umwandeln, die nur konstant viel Speicher auf dem Aufruf-Stack benötigt und somit beliebige Rekursionstiefen erlaubt Viele funktionale Sprachen machen diese Umformung automatisch, Java leider nicht. :-( Prinzipiell kann jedes rekursive Programm in ein endrekursives Programm umgeformt werden (aber nicht immer ist das einfach) 151

152 Demo: Rekursion.java Aufgabe: Schreibe eine Methode facttailrecursive(), welche die Fakultät einer gegebenen natürlichen Zahl n endrekursiv berechnet 152

153 Demo: Rekursion.java Aufgabe: Schreibe eine Methode facttailrecursive2(), in welcher die Endrekursion durch eine Schleife ersetzt wurde. 153

154 Demo: Produkt.java Aufgabe: Schreibe eine Methode produktvonbis() die zwei Ganzzahlen a und b erhält und das Produkt aller Zahlen von a bis b zurückgibt. Schreibe eine äquivalente Methode produktvonbisrekursiv(), welche das gleiche Produkt mittels Rekursion berechnet. 154

155 Wechselseitige Rekursion Eine Funktion kann auch rekursiv sein, ohne sich selbst direkt aufzurufen Demo: GeradeUngerade.java: 0 ist eine gerade Zahl n ist gerade, wenn n-1 ungerade ist n ist ungerade, wenn n-1 gerade ist 155

156 Demo: Hofstadter.java Aufgabe: Schreibe ein Klasse Hofstadter mit zwei Methoden male() und female(), die jeweils einen long n erhalten und dann die n-te Zahl der jeweiligen Folge zurückgibt 156

157 Für die Mittagspause 157

158 Genug für heute! Damit könnt ihr jetzt auch Aufgabenteil F lösen. 158

159 8 Mehrdimensionale Arrays 159

160 Mehrdimensionale Arrays Ein Array kann auch mehr als eine Dimension haben Ein mehrdimensionales Array ist ein Array, dessen Komponenten wieder Arrays sind Beispiel: Eine Matrix ist ein zweidimensionales Array Das Array an sich repräsentiert die Zeilen der Matrix, die einzelnen Komponenten-Arrays sind die Spalten 160

161 Mehrdim. Arrays: Deklaration Bei der Deklaration gibt die Anzahl der [] die Dimension an int[] l; // 1-dim. Array int[][] m; // 2-dim. Array int[][][] n; // 3-dim. Array int[][][][] o; // 4-dim. Array 161

162 2-dim. Arrays: Erzeugung Auch mehrdimensionale Arrays können in der Literalform notiert werden: int[][] m = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // Frage: was ist m[1][2]? 162

163 Mehrdim. Arrays: Erzeugung Genau wie eindimensionale Arrays erfolgt die Erzeugung mit new: int[] l = new int[10]; // m ist eine 2x3-Matrix int[][] m = new int[2][3]; // n ist ein Würfel der Breite 2, // Länge 3, und noch undef. Höhe int[][][] n = new int[2][3][]; 163

164 Demo: Matrix.java Aufgabe: Schreibe eine Methode printmatrix(), die ein zweidimensionales int-array erhält und in der gewohnten Form ausgibt, also z.b. {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} 164

165 Demo: Matrix.java Aufgabe: Schreibe eine Methode readintmatrix(), die zwei int-werte z und s erhält und dann eine zxs-matrix vom Benutzer einliest und zurückgibt 165

166 Demo: Matrix.java Aufgabe: Schreibe eine Methode einheitsmatrix(), die eine natürliche Zahl n erhält und eine nxn-matrix zurückgibt, auf deren Diagonalen überall der Wert 1 ist, und alle anderen Werte 0 sind 166

167 2-dimensionale Arrays Ein zweidimensionales Array muss nicht notwendigerweise rechteckig, d.h. eine Matrix, sein int[][] x = {{1}, {1, 2}, {1, 2, 3}}; 167

168 Demo: DreiecksArray.java Aufgabe: Schreibe eine Methode dreiecksarray(), die eine natürliche Zahl n erhält und dann ein dreieckiges, zweidimensionales Array in der Form {{1}, {1, 2}, {1, 2, 3}} zurückgibt. 168

169 Genug für heute! Damit könnt ihr jetzt auch die Matrix- und 2D-Array-Aufgaben im Aufgabenteil E lösen. 169

170 9 Objektorientierte bzw. objektbasierte Programmierung 170

171 Objektorientierte Programmierung Motivation: Wir erinnern uns, dass Fließkommazahlen (double) nicht beliebig präzise sind // = Es ist aber 2.05 = 41/20, 0.05 = 1/20, so dass wir präzise mit den Brüchen rechnen können 41/20 1/20 = 40/20 = 2/1 = 2 Leider gibt es in Java keinen Datentyp für rationale Zahlen :-( 171

172 Rationale Zahlen Analog zur Darstellung von Punkten mittels mehrerer Variablen, könnten wir auch Brüche mit 2 Variablen darstellen int int int int a_z b_z c_z c_n = = = = 41; int a_n = 20; 1; int b_n = 20; a_z b_z; a_n; 172

173 Rationale Zahlen Blöd wird es, wenn die Nenner nicht gleich sind: int a_z = 41; int a_n = 3; int b_z = 1; int b_n = 4; // Wir müssen auf Nenner 12 erweitern int c_z = a_z * b_n b_z * a_n; int c_n = a_n * b_n; 173

174 Rationale Zahlen Ein wenig besser wird es, wenn wir Brüche als Arrays der Länge 2 auffassen int[] a = {41, 3}; int[] b = {1, 4}; // Wir müssen auf Nenner 12 erweitern int[] c = {a[0] * b[1] b[0] * a[1], a[1] * b[1]}; // Die Rechnung an sich ist immer noch // unübersichtlich! 174

175 Rationale Zahlen Was wir eigentlich sagen wollen, ist in etwa: Rational a = 41/3; Rational b = 1/4; // Um richtiges erweitern wollen wir uns // nicht selbst kümmern müssen! Rational c = a b; System.out.println(c); //??? 175

176 Wunsch Wir möchten einen eigenen Datentyp Rational definieren Wir wollen alle arithmetischen Operationen mit Werten dieses Typs nutzen können Wir (als Programmierer, die diesen Typ benutzen) wollen uns nicht um Nebensächlichkeiten wie Erweitern, Kürzen, etc. kümmern 176

177 Klassen & Objekte Eine Klasse ist ein (Referenz-)Datentyp Eine Klasse beschreibt die Eigenschaften, die Werte dieses Datentyps haben Zunächst beschränken wir uns darauf, dass eine Eigenschaft eine Variable (Attribut) ist Frage: Welche Eigenschaften hat eine rationale Zahl? Einen Wert vom Typ einer Klasse nennt man Objekt oder Instanz der Klasse 177

178 Klassen & Objekte Ohne es zu wissen, haben wir schon die ganze Zeit mit Klassen und Objekten gearbeitet String ist eine Klasse "Alice" ist ein Objekt der Klasse String Im Gegensatz dazu sind alle klein geschriebenen Typen (int, long, double, boolean) keine Klassen, sondern sog. primitive Typen Nicht wichtig, aber der Vollständigkeit halber: Ein Array ist auch ein Objekt 178

179 Demo: Rational.java Aufgabe: Schreibe eine Klasse Rational, welche die Eigenschaften (Bestandteile) einer rationalen Zahl als Attribute deklariert Aus welchen Bestandteilen besteht eine rationale Zahl? Grundgerüst einer Klasse: public class MyClass { // Deklaration der Bestandteile // als Attribute } 179

180 Erzeugung von Objekten Um ein Objekt einer Klasse zu erzeugen, muss die Klasse einen Konstruktor definieren Ein Konstruktor ist eine spezielle Methode, die genau wie die Klasse heißt und keinen Return-Typ deklariert Beispiel: public class MyClass { public MyClass(double x, int y) { // Initialisiere Attribute anhand // von den gegebenen Parametern } } 180

181 Demo: Rational.java Aufgabe: Definiere einen Konstruktor für unsere Klasse Rational Welche Parameter sollte dieser Konstruktor bekommen? Gibt es ungültige Parameterwerte? 181

182 Erzeugung von Objekten Definiert eine Klasse einen Konstruktor, so kann man ein Objekt dieser Klasse mit dem von Arrays bekannten new-operator erzeugen Beispiel: MyClass mc = new MyClass(1.4, 17); 182

183 Demo: Rational.java Aufgabe: Erstelle in unserer Rational-Klasse eine main()-methode und erzeuge dort ein paar Rational-Objekte Gib die erzeugten Objekte mit System.out.println() aus 183

184 Ein Ausgabeformat definieren Falls ein Objekt (für die Ausgabe) in einen String konvertiert wird, dann ruft Java automatisch eine Methode tostring() auf Möchte man ein eigenes Ausgabeformat definieren, dann kann man in seiner eigenen Klasse einfach eine tostring()-methode definieren public class MyClass { // kein static: diese Methode ist nur für // Objekte der Klasse! public String tostring() { // Ausgabe-String x berechnen return x; } } 184

185 Demo: Rational.java Aufgabe: Definiere eine tostring()methode für unsere Rational-Klasse Ist der Nenner gleich 1, dann soll einfach der Zähler (als String) zurückgegeben werden Ansonsten soll die übliche Form "Zähler/Nenner" verwendet werden 185

186 Demo: Kürzen! Prima, bis jetzt können wir rationale Zahlen erzeugen (Konstruktor mit new aufrufen) ausgeben (da tostring() geeignet definiert wurde) Aufgabe: Verbessere unsere Rational-Klasse derart, dass alle rationalen Zahlen automatisch gekürzt werden! System.out.println(new Rational(2, 4)); // Es soll 1/2 statt 2/4 ausgegeben werden 186

187 Demo: Kürzen! Aufgabe: Verbessere unsere Rational-Klasse derart, dass alle rationalen Zahlen (Brüche) automatisch gekürzt werden! Idee: Direkt bei der Initialisierung von Zähler und Nenner im Konstruktor kürzen Regel zum Kürzen: Bestimme den ggt von Zähler und Nenner Dividiere Zähler und Nenner durch den ggt 187

188 Demo: Multiplizieren Aufgabe: Ergänze unsere Rational-Klasse um eine Methode mul(), mit der wir eine rationale Zahl mit einer anderen rationalen Zahl multiplizieren können Die Methode soll unser Rational-Objekt nicht verändern, d.h. dessen Attribute ändern, sondern es soll ein neues Rational-Objekt zurückgegeben werden 188

189 Demo: Dividieren Aufgabe: Ergänze unsere Rational-Klasse um eine Methode div(), mit der wir eine rationale Zahl durch eine anderen rationalen Zahl dividieren können Es soll wieder ein neues Rational-Objekt zurückgegeben werden Frage: Wie dividiert man rationale Zahlen (Brüche)? 189

190 Demo: Dividieren Aufgabe: Ergänze unsere Rational-Klasse um eine Methode div(), mit der wir eine rationale Zahl durch eine anderen rationalen Zahl dividieren können Es soll wieder ein neues Rational-Objekt zurückgegeben werden Frage: Wie dividiert man rationale Zahlen (Brüche)? Einfach mit dem Kehrwert multiplizieren 190

191 Demo: Addieren Aufgabe: Ergänze unsere Rational-Klasse um eine Methode add(), mit der rationale Zahlen addieren können Es soll wieder ein neues Rational-Objekt zurückgegeben werden Frage: Wie addiert man rationale Zahlen (Brüche)? 191

192 Demo: Addieren Aufgabe: Ergänze unsere Rational-Klasse um eine Methode add(), mit der rationale Zahlen addieren können Es soll wieder ein neues Rational-Objekt zurückgegeben werden Frage: Wie addiert man rationale Zahlen (Brüche)? Man muss die Brüche auf den gleichen Nenner bringen (erweitern)! 192

193 Demo: Subtrahieren Aufgabe: Ergänze unsere Rational-Klasse um eine Methode sub(), mit der rationale Zahlen voneinander subtrahiert werden können Es soll wieder ein neues Rational-Objekt zurückgegeben werden Frage: Wie subtrahiert man rationale Zahlen (Brüche)? 193

194 Demo: Subtrahieren Aufgabe: Ergänze unsere Rational-Klasse um eine Methode sub(), mit der rationale Zahlen voneinander subtrahiert werden können Es soll wieder ein neues Rational-Objekt zurückgegeben werden Frage: Wie subtrahiert man rationale Zahlen (Brüche)? Na klar, einen der Brüche negieren und dann addieren 194

195 Demo: Vergleichen Soweit können wir rationale Zahlen erzeugen ausgeben und damit Rechnen Was uns noch fehlt ist eine Möglichkeit, rationale Zahlen zu vergleichen Klassen sind Referenztypen, bei denen man mit equals() einen inhaltlichen Vergleich macht 195

196 Demo: Vergleichen Aufgabe: Füge der Rational-Klasse eine equals()-methode hinzu, mit der man zwei Rationalzahlen vergleichen kann 196

197 Demo: Nach double konvertieren Aufgabe: Füge der Rational-Klasse eine todouble()methode hinzu, die eine Fließkommarepräsentation der rationalen Zahl liefert 197

198 Für die Übung Wer in der Übung gerne eine OO-Aufgabe lösen möchte, der kann gerne die folgende Aufgabe bearbeiten Aufgabe: Erstelle nach dem Muster der Klasse Rational eine Klasse Complex, mit der sich komplexe Zahlen darstellen lassen Die Rechenregeln sind einfacher als bei Rational und sind auf der Wikipedia gut beschrieben 198

199 Das war's... Danke für die Teilnahme! Jetzt machen wir noch ein kurze Evaluationsrunde! 199

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Der hat die früher handschriftlichen Folien lesbar gemacht. Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Heutige Themen Hello World!

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Rückblick Datentypen (int, long, double, boolean, String) Variablen und Variablendeklarationen

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Rückblick Schleifen while do-while for Methoden Verfahren: Intervallschachtelung 2 Wo

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

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

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand, Marcel Preuß, Iman Kamehkhosh, Marc Bury, Diana Howey Übungsblatt

Mehr

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

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

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

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3. Hello World Javakurs 2014, 1. Vorlesung Sebastian Schuck basierend auf der Vorlage von Arne Kappen wiki.freitagsrunde.org 3. März 2014 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

Diana Lange. Generative Gestaltung Operatoren

Diana Lange. Generative Gestaltung Operatoren Diana Lange Generative Gestaltung Operatoren Begriffserklärung Verknüpfungsvorschrift im Rahmen logischer Kalküle. Quelle: google Operatoren sind Zeichen, die mit einer bestimmten Bedeutung versehen sind.

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

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

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

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

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace. Starten Sie Eclipse: Abgesehen vom Kommandozeilenfenster, auf welches wir später eingehen, öffnet sich ein Dialog (in der FH vermutlich nicht, überspringen Sie in diesem Fall): Hier tragen sie Ihr Arbeitsverzeichnis

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

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

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz 4.5. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz 4.5. www.kit.edu. Institut für Angewandte Informatik Programmieren I Kontrollstrukturen Heusch 8 Ratz 4.5 KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Arten von Kontrollstrukturen

Mehr

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

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

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

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

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

Datentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache Agenda für heute, 4. März, 2010 Zusammengesetzte if-then-else-anweisungen Datentypen Pascal ist eine streng typisierte Programmiersprache Für jeden Speicherplatz muss ein Datentyp t (Datenformat) t) definiert

Mehr

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

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

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

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Carla Delgado-Battenfeld Fatih Gedikli Tobias Marschall Benjamin Schowe

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 4 Einführung in die Programmiersprache Java (Teil II)... 4-2 4.4 Strukturierte Programmierung... 4-2 4.4.1 Strukturierung im Kleinen... 4-2 4.4.2 Addierer (do-schleife)... 4-3 4.4.3 Ein- Mal- Eins

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen 1. Quadratische Gleichungen Quadratische Gleichungen lassen sich immer auf die sog. normierte Form x 2 + px + = 0 bringen, in

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Wintersemester 2010/11, 17. Februar 2011 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt)

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Java-Programmierung mit NetBeans

Java-Programmierung mit NetBeans Java-Programmierung mit NetBeans Steuerstrukturen Dr. Henry Herper Otto-von-Guericke-Universität Magdeburg - WS 2012/13 Steuerstrukturen Steuerstrukturen Verzweigungen Alternativen abweisende nichtabweisende

Mehr

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering und Optimierungsanwendungen in der Thermodynamik Software-Engineering 5 Programmentwicklung und Debuggen mit IDE und CASE-Tools Übungen Prof. Dr. Rolf Dornberger OPTSWE_SWE: 5 Programmentwicklung

Mehr

VisualBasic - Variablen

VisualBasic - Variablen Typisch für alle Basic-Dialekte ist die Eigenschaft, dass Variablen eigentlich nicht deklariert werden müssen. Sobald Sie einen Bezeichner schreiben, der bisher nicht bekannt war, wird er automatisch angelegt

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Die Programmiersprache C99: Zusammenfassung

Die Programmiersprache C99: Zusammenfassung Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach

Mehr

7 Rechnen mit Polynomen

7 Rechnen mit Polynomen 7 Rechnen mit Polynomen Zu Polynomfunktionen Satz. Zwei Polynomfunktionen und f : R R, x a n x n + a n 1 x n 1 + a 1 x + a 0 g : R R, x b n x n + b n 1 x n 1 + b 1 x + b 0 sind genau dann gleich, wenn

Mehr

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

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung. Lineare Gleichungen mit einer Unbekannten Die Grundform der linearen Gleichung mit einer Unbekannten x lautet A x = a Dabei sind A, a reelle Zahlen. Die Gleichung lösen heißt, alle reellen Zahlen anzugeben,

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03 Reihungen Martin Wirsing in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03 2 Ziele Die Datenstruktur der Reihungen verstehen: mathematisch und im Speicher Grundlegende Algorithmen auf Reihungen

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

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

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;

Mehr

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

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7 Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife Praktikum Ingenieurinformatik Termin 2 Verzweigungen (if-else), printf und scanf, while-schleife 1 1. Import/Export von Eclipse-Projekten 2. Verzweigungen (if-else-anweisung) 3. printf und scanf 4. Übungsaufgaben

Mehr

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.

Mehr

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens SS2013 Inhalt Projekt Vorlesung: praktische Implementierung üben Ein und

Mehr

Kontrollstrukturen und Funktionen in C

Kontrollstrukturen und Funktionen in C Kontrollstrukturen und Funktionen in C Lernziele: Vertiefen der Kenntnisse über Operatoren, Kontrollstrukturen und die Verwendung von Funktionen. Aufgabe 1: Quickies: Datentypen in C a) Was sind die elementaren

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Mehr

Erstellen von x-y-diagrammen in OpenOffice.calc

Erstellen von x-y-diagrammen in OpenOffice.calc Erstellen von x-y-diagrammen in OpenOffice.calc In dieser kleinen Anleitung geht es nur darum, aus einer bestehenden Tabelle ein x-y-diagramm zu erzeugen. D.h. es müssen in der Tabelle mindestens zwei

Mehr

Zeichen bei Zahlen entschlüsseln

Zeichen bei Zahlen entschlüsseln Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren

Mehr

Excel Funktionen durch eigene Funktionen erweitern.

Excel Funktionen durch eigene Funktionen erweitern. Excel Funktionen durch eigene Funktionen erweitern. Excel bietet eine große Anzahl an Funktionen für viele Anwendungsbereiche an. Doch es kommt hin und wieder vor, dass man die eine oder andere Funktion

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

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

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen Grundlagen der Programmierung Prof. H. Mössenböck 3. Verzweigungen If-Anweisung n > 0? j n if (n > 0) x = x / n; ohne else-zweig x x / n j max x x > y? n max y if (x > y) max = x; else max = y; mit else-zweig

Mehr

Delegatesund Ereignisse

Delegatesund Ereignisse Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Konstruktor, Statische Methoden Packages Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Initialisierung von Datenstrukturen

Mehr

5.4 Klassen und Objekte

5.4 Klassen und Objekte 5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen

Mehr

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

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien. Java 1 Einführung Grundlegende Übungsaufgaben Arbeitsauftrag 1.1 1. Formulieren Sie den Algorithmus nach den oben genannten Kriterien. Beispiel: Bedienung eines Getränkeautomaten

Mehr

5. Übung: PHP-Grundlagen

5. Übung: PHP-Grundlagen 5.1. Erstes PHP-Programm 1. Schreiben Sie PHP-Programm innerhalb einer Webseite, d.h. innerhalb eines HTML-Dokument. Ihr PHP-Programm soll einen kurzen Text ausgeben und Komentare enthalten. Speichern

Mehr

Mediator 9 - Lernprogramm

Mediator 9 - Lernprogramm Mediator 9 - Lernprogramm Ein Lernprogramm mit Mediator erstellen Mediator 9 bietet viele Möglichkeiten, CBT-Module (Computer Based Training = Computerunterstütztes Lernen) zu erstellen, z. B. Drag & Drop

Mehr

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik-

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik- Informatik Studiengang Chemische Technologie Michael Roth michael.roth@h-da.de Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013 Inhalt Teil VII Einstieg in Java I Michael Roth (h_da) Informatik

Mehr

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Hinweise zur Übung Benötigter Vorlesungsstoff Ab diesem Übungskomplex wird die Kenntnis und praktische Beherrschung der Konzepte

Mehr

Wir arbeiten mit Zufallszahlen

Wir arbeiten mit Zufallszahlen Abb. 1: Bei Kartenspielen müssen zu Beginn die Karten zufällig ausgeteilt werden. Wir arbeiten mit Zufallszahlen Jedesmal wenn ein neues Patience-Spiel gestartet wird, muss das Computerprogramm die Karten

Mehr

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2)

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2) DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2) Aufgabe 3 Bankkonto Schreiben Sie eine Klasse, die ein Bankkonto realisiert. Attribute für das Bankkonto sind der Name und Vorname des Kontoinhabers,

Mehr

FB Informatik. Fehler. Testplan

FB Informatik. Fehler. Testplan Fehler #include int i,n,summe; int summe (int); cout 0) cin>n; i=summme(n); cout

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Institut für Programmierung und Reaktive Systeme 26. April 2013. Programmieren II. 10. Übungsblatt

Institut für Programmierung und Reaktive Systeme 26. April 2013. Programmieren II. 10. Übungsblatt Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 26. April 2013 Programmieren II 10. Übungsblatt Hinweis: Insgesamt werden in diesem Semester fünf

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

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

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

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

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse Übung 05: Arrays Abgabetermin: xx.xx.xxxx Name: Name, Vorname Matrikelnummer: 0XXXXXX Gruppe: G1 (Prähofer) G2 (Wolfinger) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch

Mehr

IT-Basics 2. DI Gerhard Fließ

IT-Basics 2. DI Gerhard Fließ IT-Basics 2 DI Gerhard Fließ Wer bin ich? DI Gerhard Fließ Telematik Studium an der TU Graz Softwareentwickler XiTrust www.xitrust.com www.tugraz.at Worum geht es? Objektorientierte Programmierung Konzepte

Mehr

Lineare Gleichungssysteme

Lineare Gleichungssysteme Brückenkurs Mathematik TU Dresden 2015 Lineare Gleichungssysteme Schwerpunkte: Modellbildung geometrische Interpretation Lösungsmethoden Prof. Dr. F. Schuricht TU Dresden, Fachbereich Mathematik auf der

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm

Mehr

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen Wir wollen, dass ihr einfach für eure Ideen und Vorschläge werben könnt. Egal ob in ausgedruckten Flyern, oder in sozialen Netzwerken und

Mehr

Java Einführung Operatoren Kapitel 2 und 3

Java Einführung Operatoren Kapitel 2 und 3 Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig

Mehr

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich 13 OOP MIT DELPHI Delphi war früher "Object Pascal". Dieser Name impliziert eine Funktionalität, welche in der Welt der Programmierung nicht mehr wegzudenken ist: die objektorientierte Programmierung,

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

Mehr

Einführung in die Programmierung (EPR)

Einführung in die Programmierung (EPR) Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.

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

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Mathematischer Vorbereitungskurs für Ökonomen

Mathematischer Vorbereitungskurs für Ökonomen Mathematischer Vorbereitungskurs für Ökonomen Dr. Thomas Zehrt Wirtschaftswissenschaftliches Zentrum Universität Basel Gleichungen Inhalt: 1. Grundlegendes 2. Lineare Gleichungen 3. Gleichungen mit Brüchen

Mehr

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Wenn der Name nicht gerade www.buch.de oder www.bmw.de heißt, sind Internetadressen oft schwer zu merken Deshalb ist es sinnvoll, die Adressen

Mehr

Übung 9 - Lösungsvorschlag

Übung 9 - Lösungsvorschlag Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe

Mehr

AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung

AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung Problem: Um AutoCAD abwechselnd auf mehreren Rechnern einsetzen zu können konnte man bis AutoCAD 2000 einfach den Dongle umstecken. Seit AutoCAD 2000i

Mehr

Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten!

Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten! Mathefritz 5 Terme und Gleichungen Meine Mathe-Seite im Internet kostenlose Matheaufgaben, Skripte, Mathebücher Lernspiele, Lerntipps, Quiz und noch viel mehr http:// www.mathefritz.de Seite 1 Copyright

Mehr