Einführung in das Programmieren Probeklausur Lösungen

Ähnliche Dokumente
JAVA für Nichtinformatiker - Probeklausur -

Objektorientierung (OO)

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Vorkurs Informatik WiSe 15/16

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

Erste Java-Programme (Scopes und Rekursion)

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

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

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Musterlösung Stand: 5. Februar 2009

Java Zusammenfassung. Basisdatentypen ganzzahlig: Byte, Short, Integer, Long Fließkomma: Float, Double Zeichen: Character Wahrheitswerte: Boolean

Polymorphie. 15. Java Objektorientierung II

JAVA - Methoden - Rekursion

Polymorphie. 15. Java Objektorientierung II

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015. Musterlösung

Algorithmen und Datenstrukturen 07

2 Programmieren in Java I noch ohne Nachbearbeitung

Repetitorium Informatik (Java)

Fakultät IV Elektrotechnik/Informatik

Listing 1: Cowboy. Listing 2: Woody

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einstieg in die Informatik mit Java

Tag 8 Repetitorium Informatik (Java)

Universität Karlsruhe (TH)

Fragen zur OOP in Java

Probeklausur: Programmierung WS04/05

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Kurzskript zur Veranstaltung Programmieren Prof. Dipl.-Ing. Jirka R. Dell'Oro-Friedl 2012

Einstieg in die Informatik mit Java

JAVA - Methoden

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

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

Programmierung für Mathematik HS11

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

AuD-Tafelübung T-B5b

1 Klassen anlegen und Objekte erzeugen

Einstieg in die Informatik mit Java

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Java Vererbung. Inhalt

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Propädeutikum Programmierung in der Bioinformatik

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

4. Vererbung Die Klasse Object. Die Klasse Object

Klassenvariablen, Klassenmethoden

Tafelübung 07 Algorithmen und Datenstrukturen

Algorithmen und Programmierung II

Grundlagen der Objektorientierten Programmierung - Methoden -

Elementare Konzepte von

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Einführung in C# Teil 3. Matthias Nübling

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Erste Java-Programme (Java Wiederholung & Vererbung)

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Objektorientierte Programmierung Studiengang Medieninformatik

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

1 Klassen anlegen und Objekte erzeugen

Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt.

Programmieren in Java

Konstruktor. public Rational(int i) { Zaehler = i; Nenner = 1; }

Vererbung, Polymorphie

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Einführung in die Programmierung für NF. Übung

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten

Einführung in die Programmierung Blockkurs Java

Vorkurs Informatik WiSe 16/17

Programmieren in Java -Eingangstest-

Kapitel 10. Verweise und Referenzen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Universität zu Lübeck Institut für Telematik. Prof. Dr. Stefan Fischer

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Kleines Java-Glossar zum Praktikum Einführung in das Programmieren

Praxis der Programmierung

Klausur Grundlagen der Programmierung

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018

public static void main(string[] args) {

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Java Grundlagen 2 - OOP

Vorkurs Informatik WiSe 17/18

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Tücken der dynamischen Bindung

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen

1 Klassen und Objekte

FAKULTÄT FÜR INFORMATIK

Fragenkatalog ESOP WS 16/17

Programmiertechnik Übungen zu Klassen & -methoden

Einstieg in die Informatik mit Java

Programmierung WS17/18 Lösung - Präsenzübung 09./

Transkript:

Einführung in das Programmieren Probeklausur Lösungen Frederik Kanning 01.07.2013

Aufgabe 1 b/c) void definiert Methode ohne Rückgabewert return beendet aktuellen Methodenaufruf wenn Rückgabetyp nicht void: legt zusätzlich Rückgabewert fest muss angegeben werden

Aufgabe 1 b/c) Beispiel Methode ohne Rückgabe 1 void printnum(int num) { 2 if(num < 0) return; 3 Std.out.println(num); 4 } Methode mit Rückgabe 1 int half(int num) { 2 return num / 2; 3 // Compiler-Fehler; wird niemals erreicht: 4 Std.out.println(num); 5 }

Aufgabe 1 d) extends definiert Klasse als Unterklasse von bereits vorhandener Klasse Zugriff auf alle Methoden und Variablen der Oberklasse (außer private) Objekte können in Variablen mit Typ der Oberklasse gespeichert werden Unterklasse hat auch den Typ der Oberklasse ( zuweisungskompatibel ) Methoden mit gleicher Signatur (Name, Parameter) werden ersetzt ersetzte Methoden können mit super weiter aufgerufen werden

Aufgabe 1 d) Beispiel Vererbung mit extends 1 class Vogel { 2 int alter; 3 void ruf() { 4 Std.out.println("mein alter ist " + alter); 5 } 6 } 7 8 class Ente extends Vogel { 9 // ersetzt ruf(), Zugriff auf Vogel.alter 10 void ruf() { 11 Std.out.println("quak " + alter); 12 } 13 }

Aufgabe 1 d) Fortsetzung Beispiel Verwendung von Ente und Vogel 1 Ente e = new Ente(); 2 // Zuweisung möglich, Ente auch vom Typ Vogel 3 Vogel v = e; 4 // Alter der Ente festlegen 5 e.alter = 42; 6 7 // Ausgabe: quak 42 8 // und nicht mein alter ist 42 9 e.ruf(); 10 11 // Fehler, nicht jeder Vogel ist eine Ente 12 Ente e2 = new Vogel();

Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false;

Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false; 3 4 // g = false ((1 * 5) == 5) 5 g = g (--a * b == b);

Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false; 3 4 // g = false ((1 * 5) == 5) 5 g = g (--a * b == b); 6 // geändert: g = true, a = 1

Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false; 3 4 // g = false ((1 * 5) == 5) 5 g = g (--a * b == b); 6 // geändert: g = true, a = 1 7 // if(true) b = 5 + (1 + 3) 8 if (g) b += a + 3;

Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false; 3 4 // g = false ((1 * 5) == 5) 5 g = g (--a * b == b); 6 // geändert: g = true, a = 1 7 // if(true) b = 5 + (1 + 3) 8 if (g) b += a + 3; 9 // geändert: b = 9

Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false; 3 4 // g = false ((1 * 5) == 5) 5 g = g (--a * b == b); 6 // geändert: g = true, a = 1 7 // if(true) b = 5 + (1 + 3) 8 if (g) b += a + 3; 9 // geändert: b = 9 10 11 a = b;

Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false; 3 4 // g = false ((1 * 5) == 5) 5 g = g (--a * b == b); 6 // geändert: g = true, a = 1 7 // if(true) b = 5 + (1 + 3) 8 if (g) b += a + 3; 9 // geändert: b = 9 10 11 a = b; 12 // geändert: a = 9 13 14 b = a;

Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false; 3 4 // g = false ((1 * 5) == 5) 5 g = g (--a * b == b); 6 // geändert: g = true, a = 1 7 // if(true) b = 5 + (1 + 3) 8 if (g) b += a + 3; 9 // geändert: b = 9 10 11 a = b; 12 // geändert: a = 9 13 14 b = a; 15 // da b bereits 9, keine Änderung mehr

Aufgabe 2 1 int a = 2, b = 5; 2 boolean g = false; 3 4 // g = false ((1 * 5) == 5) 5 g = g (--a * b == b); 6 // geändert: g = true, a = 1 7 // if(true) b = 5 + (1 + 3) 8 if (g) b += a + 3; 9 // geändert: b = 9 10 11 a = b; 12 // geändert: a = 9 13 14 b = a; 15 // da b bereits 9, keine Änderung mehr 16 // Ergebnis: a = 9, b = 9, g = true

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3]

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1 vec[1] = vec[1] * vec[0] //=2 Ergebnis:

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1 vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5}

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1 vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} 4 0

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1 vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} 4 0 Array unverändert

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1 vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} 4 0 Array unverändert 5 1

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1 vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} 4 0 Array unverändert 5 1 vec[3] = vec[3] * vec[2] //=12 Ergebnis:

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1 vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} 4 0 Array unverändert 5 1 vec[3] = vec[3] * vec[2] //=12 Ergebnis: vec = {1,2,3,12,5}

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1 vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} 4 0 Array unverändert 5 1 vec[3] = vec[3] * vec[2] //=12 Ergebnis: vec = {1,2,3,12,5} 6 0

Aufgabe 3 1 int [] vec = {1,2,3,4,5}; 2 for (int i = 3; i < 7; i++) { 3 if (i%2 == 0) continue; 4 vec[i - 2] *= vec[i - 3]; 5 } i i % 2 Anweisung vec[i - 2] *= vec[i - 3] 3 1 vec[1] = vec[1] * vec[0] //=2 Ergebnis: vec = {1,2,3,4,5} 4 0 Array unverändert 5 1 vec[3] = vec[3] * vec[2] //=12 Ergebnis: vec = {1,2,3,12,5} 6 0 Array unverändert Endergebnis: vec = {1,2,3,12,5}

Aufgabe 4 a) 1 public int quadrate() { 2 Std.out.print("Bitte...: n="); 3 int n = Std.in.readInt() 4 Std.out.print("Die... " n " Quadrat...: "); 5 for (i = 0; i < n; i++); 6 Std.out.print(i*i + " "); 7 }

Aufgabe 4 b) 1 public void quadrate() { 2 Std.out.print("Bitte...: n="); 3 int n = Std.in.readInt(); 4 Std.out.print("Die... "+n+" Quadrat...: "); 5 for (int i = 1; i <= n; i++) 6 Std.out.print(i*i + " "); 7 }

Aufgabe 5 a) For-Schleife for(int i = 1; i <= n; i++) {... } Äquivalente While-Schleife

Aufgabe 5 a) For-Schleife for(int i = 1; i <= n; i++) {... } Äquivalente While-Schleife

Aufgabe 5 a) For-Schleife for(int i = 1; i <= n; i++) {... } Äquivalente While-Schleife 1 void zahlen_while(int n) { 2 int i = 1; 3 while(i <= n) { 4 Std.out.println(i); 5 i++; 6 } 7 }

Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3

Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3)

Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2)

Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) zahlen_rek(1)

Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) zahlen_rek(1) zahlen_rek(0) -- Abbruch

Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) zahlen_rek(1) -- println(1) zahlen_rek(0) -- Abbruch

Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) zahlen_rek(2) -- println(2) zahlen_rek(1) -- println(1) zahlen_rek(0) -- Abbruch

Aufgabe 5 b) Lösung 1 void zahlen_rek(int n) { 2 if(n > 0) { 3 zahlen_rek(n - 1); 4 Std.out.println(n); 5 } 6 } Beispiel, n = 3 zahlen_rek(3) -- println(3) zahlen_rek(2) -- println(2) zahlen_rek(1) -- println(1) zahlen_rek(0) -- Abbruch

Aufgabe 6 a) Fibonacci-Zahlen f 0 = 0, f 1 = 1, f n = f n 1 + f n 2

Aufgabe 6 a) Fibonacci-Zahlen f 0 = 0, f 1 = 1, f n = f n 1 + f n 2 Berechnung von f 6 n f n 0 0 1 1 2

Aufgabe 6 a) Fibonacci-Zahlen f 0 = 0, f 1 = 1, f n = f n 1 + f n 2 Berechnung von f 6 n f n 0 0 1 1 2 1 3

Aufgabe 6 a) Fibonacci-Zahlen f 0 = 0, f 1 = 1, f n = f n 1 + f n 2 Berechnung von f 6 n f n 0 0 1 1 2 1 3 2 4 3 5 5 6 8

Aufgabe 6 b) Fibonacci-Zahlen f 0 = 0, f 1 = 1, f n = f n 1 + f n 2 Rekursive Lösung 1 int fib_rek(int n) { 2 if(n == 0) 3 return 0; 4 if(n == 1) 5 return 1; 6 return fib rek(n-1) + fib rek(n-2); 7 }

Aufgabe 6 b) Fibonacci-Zahlen f 0 = 0, f 1 = 1, f n = f n 1 + f n 2 Rekursive Lösung 1 int fib_rek(int n) { 2 if(n == 0) 3 return 0; 4 if(n == 1) 5 return 1; 6 return fib rek(n-1) + fib rek(n-2); 7 }

Aufgabe 6 c) Iterative Lösung 1 int fib_it(int n) {

Aufgabe 6 c) Iterative Lösung 1 int fib_it(int n) { 2 int a = 0; // n - 2 3 int b = 1; // n - 1

Aufgabe 6 c) Iterative Lösung 1 int fib_it(int n) { 2 int a = 0; // n - 2 3 int b = 1; // n - 1 4 for(int i = 1; i <= n; i++) { 5 int t = b; // b zwischenspeichern 6 b = a + b; // f n+1 = f n + f n 1

Aufgabe 6 c) Iterative Lösung 1 int fib_it(int n) { 2 int a = 0; // n - 2 3 int b = 1; // n - 1 4 for(int i = 1; i <= n; i++) { 5 int t = b; // b zwischenspeichern 6 b = a + b; // f n+1 = f n + f n 1 7 a = t; 8 } 9 return a; 10 }

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl?

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator)

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 1 = 2634, 2634 % 10 = 4 Summe: 4

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 10 = 263, 263 % 10 = 3 Summe: 4 + 3

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 100 = 26, 26 % 10 = 6 Summe: 4 + 3 + 6

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 1000 = 2, 2 % 10 = 2 Summe: 4 + 3 + 6 + 2

Aufgabe 7 Mögliches Verfahren Integer: direkter Zugriff auf Ziffern nicht möglich letzte Ziffer einer Zahl? Rest von Divison durch 10, Beispiel: 42 : 10 = 4, Rest 2 in Java: int rest = 42 % 10 (Modulo-Operator) immer die zu addierende Ziffer zur letzten Stelle machen mittels ganzzahliger Division durch 1, 10, 100..., bis alle Stellen verrechnet ist der Fall, wenn Division nur noch Null ergibt Beispiel: Quersumme von a = 2634 a : 10000 = 0, Abbruch Summe: 4 + 3 + 6 + 2 = 15

Aufgabe 7 Code 1 int quersumme(int n) {

Aufgabe 7 Code 1 int quersumme(int n) { 2 int sum = 0;

Aufgabe 7 Code 1 int quersumme(int n) { 2 int sum = 0; 3 while(n > 0) {

Aufgabe 7 Code 1 int quersumme(int n) { 2 int sum = 0; 3 while(n > 0) { 4 sum += n % 10;

Aufgabe 7 Code 1 int quersumme(int n) { 2 int sum = 0; 3 while(n > 0) { 4 sum += n % 10; 5 n /= 10; 6 }

Aufgabe 7 Code 1 int quersumme(int n) { 2 int sum = 0; 3 while(n > 0) { 4 sum += n % 10; 5 n /= 10; 6 } 7 return sum; 8 }

Aufgabe 8 a) Ausgabe: Erzeuge A- Objekt Erzeuge A- Objekt Erzeuge B- Objekt Erzeuge A- Objekt Erzeuge B- Objekt Erzeuge C- Objekt 2500-2 5

Aufgabe 8 a) Erläuterung I A a = new A(1); ruft Konstruktor von A auf, Ausgabe Erzeuge A- Objekt setzt Objektvariable x auf 1 Konstruktoren haben denselben Namen wie ihre Klasse und keinen Rückgabetyp (auch kein void!)

Aufgabe 8 a) Erläuterung I A a = new A(1); ruft Konstruktor von A auf, Ausgabe Erzeuge A- Objekt setzt Objektvariable x auf 1 Konstruktoren haben denselben Namen wie ihre Klasse und keinen Rückgabetyp (auch kein void!) B b = new B(0); ruft Konstruktor von B auf da B von A abgeleitet, wird durch super(x); zuerst Konstruktor von A aufgerufen Ausgabe: Erzeuge A- Objekt Erzeuge B- Objekt

Aufgabe 8 a) Erläuterung II C c = new C(5); ruft Konstruktor von C auf da C von B, und B von A abgeleitet, werden analog die Konstruktoren A, B, C nacheinander aufgerufen Verkettung über beliebig viele Vererbungsstufen möglich Ausgabe: Erzeuge A- Objekt Erzeuge B- Objekt Erzeuge C- Objekt

Aufgabe 8 a) Erläuterung III b.foo(50); B definiert keine Methode foo(int x) daher wurde A.foo vererbt und wird jetzt ausgeführt: zwei verschachtelte For-Schleifen, jeweils n mal Methode berechnet daher effektiv x = x + n*n Ausgabe: 2500

Aufgabe 8 a) Erläuterung IV c.foo(50); foo(int x) wurde in Klasse C neu definiert zählt Objektvariable x so lange runter, bis x-- < 0 Post-Decrement: gibt erst aktuellen Wert zurück und zählt dann runter (bei --x genau umgekehrt) -1 erster Wert, der Bedingung nicht mehr erfüllt danach wird noch einmal runtergezählt: x hat nach Schleife den Wert -2 Ausgabe: -2

Aufgabe 8 a) Erläuterung V 1 public static void increment(int y) { 2 y++; 3 } 4 int y = 5; 5 increment(y); b.increment(y);

Aufgabe 8 a) Erläuterung V 1 public static void increment(int y) { 2 y++; 3 } 4 int y = 5; 5 increment(y); b.increment(y); zählt die lokale Variable y innerhalb der Methode foo() hoch beide Variablen heißen gleich, existieren aber getrennt voneinander Änderung wirkt sich nicht auf das y in TestABC.main aus! einzige Verbindung: beim Aufruf wird der Wert von main-y nach foo-y kopiert Ausgabe: 5

Aufgabe 8 b) B.increment greift nicht auf nicht-statische Methoden oder Variablen ihrer Klasse zu kann daher als einzige Methode statisch deklariert werden

Aufgabe 8 b) B.increment greift nicht auf nicht-statische Methoden oder Variablen ihrer Klasse zu kann daher als einzige Methode statisch deklariert werden Achtung: Zugriffe auf nicht-statische Teile der Klasse, die sich auf ein Objekt beziehen, sind erlaubt:

Aufgabe 8 b) Beispiel B.increment greift nicht auf nicht-statische Methoden oder Variablen ihrer Klasse zu kann daher als einzige Methode statisch deklariert werden Achtung: Zugriffe auf nicht-statische Teile der Klasse, die sich auf ein Objekt beziehen, sind erlaubt: 1 class X { 2 int k; 3 static void f() { 4 // nicht erlaubt: k = 42; 5 // aber: 6 X x = new X(); 7 x.k = 42; 8 } 9 }

Aufgabe 8 b) statisch vs. nicht-statisch I

Aufgabe 8 b) statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt

Aufgabe 8 b) statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden

Aufgabe 8 b) statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden Achtung: in nicht-statischen Methoden existiert immer ein Objekt, this

Aufgabe 8 b) statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden Achtung: in nicht-statischen Methoden existiert immer ein Objekt, this statische Methoden und Variablen sind lediglich Klassengebunden

Aufgabe 8 b) statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden Achtung: in nicht-statischen Methoden existiert immer ein Objekt, this statische Methoden und Variablen sind lediglich Klassengebunden existieren automatisch genau einmal pro Klasse

Aufgabe 8 b) statisch vs. nicht-statisch I nicht-statische Methoden (und Variablen) gehören zu einem Objekt können nur mit einem Objekt verwendet werden Achtung: in nicht-statischen Methoden existiert immer ein Objekt, this statische Methoden und Variablen sind lediglich Klassengebunden existieren automatisch genau einmal pro Klasse sind ohne Objekt benutzbar

Aufgabe 8 b) statisch vs. nicht-statisch II Beispiel 1 // f() statisch; wird an der Klasse aufgerufen 2 X.f();

Aufgabe 8 b) statisch vs. nicht-statisch II Beispiel 1 // f() statisch; wird an der Klasse aufgerufen 2 X.f(); 3 4 // k ist nicht statisch 5 X y = new X(); 6 //... 7 y.k = 73;

Aufgabe 8 b) statisch vs. nicht-statisch II Beispiel 1 // f() statisch; wird an der Klasse aufgerufen 2 X.f(); 3 4 // k ist nicht statisch 5 X y = new X(); 6 //... 7 y.k = 73; 8 9 // auch zulässig, aber zu vermeiden 10 y.f();

Aufgabe 8 b) this this ist immer das aktuelle Objekt

Aufgabe 8 b) this Beispiel this ist immer das aktuelle Objekt 1 class X { 2 //... 3 void g() { 4 this.k = 23; 5 // oder, wenn k nicht auch lokal 6 // innerhalb von g() definiert: 7 k = 23; 8 } 9 }

Aufgabe 8 b) this Beispiel this ist immer das aktuelle Objekt 1 class X { 2 //... 3 void g() { 4 this.k = 23; 5 // oder, wenn k nicht auch lokal 6 // innerhalb von g() definiert: 7 k = 23; 8 } 9 } 10 X x1 = new X(), x2 = new X();

Aufgabe 8 b) this Beispiel this ist immer das aktuelle Objekt 1 class X { 2 //... 3 void g() { 4 this.k = 23; 5 // oder, wenn k nicht auch lokal 6 // innerhalb von g() definiert: 7 k = 23; 8 } 9 } 10 X x1 = new X(), x2 = new X(); 11 x1.g(); // this ist hier x1

Aufgabe 8 b) this Beispiel this ist immer das aktuelle Objekt 1 class X { 2 //... 3 void g() { 4 this.k = 23; 5 // oder, wenn k nicht auch lokal 6 // innerhalb von g() definiert: 7 k = 23; 8 } 9 } 10 X x1 = new X(), x2 = new X(); 11 x1.g(); // this ist hier x1 12 x2.g(); // hier this = x2

Aufgabe 9 I 1 public double area() { 2 return Math.PI * r * r; 3 } 4 5 public double perimeter() { 6 return 2 * Math.PI * r; 7 } 8 9 public double diameter() { 10 return 2 * r; 11 }

Aufgabe 9 II 1 public boolean overlap(circle that) { 2 return Math.sqrt ( 3 (this.x - that.x) * (this.x - that.x) 4 + (this.y - that.y) * (this.y - that.y) 5 ) <= this.r + that.r; 6 } 7 8 public double distance(circle that) { 9 if (overlap(that)) 10 return 0; 11 return Math.sqrt ( 12 (this.x - that.x) * (this.x - that.x) 13 + (this.y - that.y) * (this.y - that.y) 14 ) - this.r - that.r; 15 }

Aufgabe 9 III 1 public void draw(turtle t) { 2 double b = 2*r * Math.sin(Math.PI / 2 / 180); 3 t.setposition(x, y); 4 t.lt(90); 5 t.fd(r); 6 t.rt(90); 7 t.pd(); 8 for (int i = 0; i < 360; i++) { 9 t.rt(1); 10 t.fd(b); 11 } 12 t.pu(); 13 }

Aufgabe 10 1 private Color c; 2 // Konstruktor 3 public ColoredCircle(double x, double y, 4 double r, Color c) { 5 // Wichtig: Oberklassen-Konstruktor vor 6 // allem anderen aufrufen, sonst Fehler 7 super(x, y, r); 8 // Farbe speichern 9 this.c = c; 10 } 11 // Methode aus Oberklasse überschreiben 12 public void draw(turtle t) { 13 t.setpencolor(c); 14 // überschriebene Methode aufrufen 15 super.draw(t); 16 }

Fragen bis hierhin?