You are on page 1of 5

Prof.

Martin Hofmann, PhD


Dr. Steffen Jost

Ludwig-Maximilians-Universitat M
unchen
Institut f
ur Informatik
28. Oktober 2015

2. Ubung
zur Vorlesung

Einfu
hrung in die Programmierung
Hinweise zu den Hausu
bungen:
Die Korrektur Ihrer Haus
ubungen erhalten Sie ungefahr eine Woche nach Ablauf der Abgabfirst ebenfalls u
ber UniworX. Bitte haben Sie dabei etwas Geduld!
Da die Musterl
osung automatisch nach Ablauf der Abgabefrist freigeschaltet wird, konnen
wir leider keine nachtr
aglichen Abgaben akzeptieren. Falls trotz Musterlosung und KorrekturKommentar immer noch Fragen offen bleiben, so wenden Sie sich bitte an Ihren Tutor oder
nutzen Sie die Kommentar Funktion zu Ihrer Korrektur in UniworX. Bitte in jedem Fall die
von UniworX zugewiesen ID-Nummer angeben, damit wir Ihre Abgabe finden konnen.
Wir weisen auch noch mal auf die Angabe von Dateiname und Dateiformat in jeder
Aufgabentitelzeile hin. Abgaben mit anderen Dateinamen oder in anderen Formaten werden

ignoriert! Weitere Hinweise zum Ubungsbetrieb


finden sich auf der Vorlesungshomepage (www.
tcs.ifi.lmu.de/lehre/ws-2015-16/eip).
A2-1 Boolsche Ausdru
cke

Gegeben seien die folgenden Booleschen Java-Ausdr


ucke:

a)

!(b1 && b2)

c)

(!b1) && (b2)

b)

!(b1 || !b2)

d)

(!b1) || (!b2)

Wir nennen zwei solche Booleschen Ausdr


ucke
aquivalent, falls sie den gleichen Wert
haben, egal was wir f
ur b1 und b2 einsetzen.
Welche der obigen vier Booleschen Ausdr
ucke sind zueinander aquivalent?
Hinweis: Eine m
ogliches Vorgehen ist, die Wertetabellen f
ur die einzelnen Ausdr
ucke
aufzustellen und diese dann zu vergleichen. Sollten Sie sich unsicher u
ber
den
Wert
eines

Ausdrucks sein, so k
onnen ein Java-Programm schreiben, um die verschiedenen Werte der
Ausdr
ucke zu u
ufen. F
ur den ersten Ausdruck konnte man folgendermaen beginnen:
berpr
System.out.println(!(false && false));
System.out.println(!(true && false));
...
A2-2 Bankkonto mit PIN
In der Vorlesung am 27.10.15 wurde eine Klasse Bankkonto
entwickelt, welche Sie von der Vorlesungshomepage herunterladen konnen. Die Vorlage besteht
aus 2 Dateien: Bankkonto.java und BankkontoTest.java; letztere dient nur zum testen.
Ihre Aufgabe: Entwickeln Sie ein PIN-gesch
utztes Bankkonto! Schreiben Sie eine Klasse
BankkontoPIN, welche bei der Er
offung eines Bankkontos zusatzlich eine PIN des Typs String
benotigt.
a) Die Klasse soll ansonsten die gleiche Funktionalitat bieten wie Bankkonto, mit dem
Unterschied, dass die Methoden einzahlen und getKonto einen zusatzlichen Parameter

des Typs String anfordern, und nur dann ausgef


uhrt werden, wenn die angegebene PIN
mit der intern gespeicherten PIN u
bereinstimmt. Bei einem positiven Geldbetrag soll
einzahlen jedoch auch mit einer falschen PIN ausgef
uhrt werden!
Da wir Fehlermeldung noch nicht behandelt haben, soll bei einer falschen PIN einzahlen
einfach keine Wirkung haben und getKonto immer 0 zur
uckliefern.
b) Schreiben Sie eine neue Methode neuePin, welche das Auswechseln der PIN erlaubt
nat
urlich nur, wenn auch die alte PIN korrekt angegeben wurde. Diese Methode soll
true zur
uckliefern, falls das Auswechseln der PIN erfolgreich war, und false sonst.

Uberlegen Sie sich zuerst den Kopf der geforderten Methodendefinition (Signatur).
Hinweis: Erweitern Sie auch die main-Methode in BankkontoTest um weitere Kontotransaktionen zu testen. Es geht in dieser Aufgabe um Methoden und If-Statements, d.h. Ihre neue
Klasse BankkontoPIN soll selbst keine Bildschirmausgabe oder Tastatureingabe durchf
uhren.
(Wenn Sie m
ochten, k
onnen Sie jedoch die Konto-Aktivitaten mit System.out.println protokollieren, damit Sie leichter sehen konnen, wie das Konto arbeitet.)
A2-3 Scanner
Bisher haben wir nur Texte ausgegeben. Folgendes Beispiel demonstriert
eine Moglichkeit in Java, um eine Eingabe von der Tastatur einzulesen:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Gib was ein: ");
String input = scanner.nextLine();
System.out.println(input);
}
}
In der ersten Zeile der Methode main wird ein Objekt der Klasse Scanner erzeugt, welches
von System.in einliest.
Schreiben Sie nun ein Programm, welches den Benutzer auffordert, irgendetwas einzutippen. Falls es eine ganze Zahl war, soll Ihr Programm dies bemerken. Beispiel:
Gib bitte eine Zahl ein: null
Das war keine Zahl!
/* Zweite Ausf
uhrung: */
Gibt bitte etwas ein: 7
Du hast die Zahl 7 eingegeben!
Um diese Aufgabe zu l
osen, ben
otigen Sie eine Methode, welche Zahlen erkennen kann. Gl
ucklicherweise bietet dies die Klasse Scanner bereits an! Schlagen Sie also in der Dokumentation der Klasse Scanner nach (http://docs.oracle.com/javase/8/docs/api/java/util/
Scanner.html), und l
osen Sie damit die Aufgabe. Damit Ihr Programm wie im Beispiel oben
ablauft, werden Sie vermutlich zwei Methoden der Klasse Scanner bem
uhen m
ussen!

H2-1 Speicherbild (4 Punkte; Abgabe: H2-1.txt oder H2-1.pdf)


Betrachten Sie folgendenes Programm, welches zwei im Anschlu angegebene selbst-definierte
Klassen benutzt. Analog zur Aufgabe A1-3b bzw. Vorlesungsfolie 1-27 ein Diagramm das den
Zustand unmittelbar vor der Textausgabe am Ende darstellt.
public class Main {
public static void main(String[] args) {
int x = 10;
Prof prof1 = new Prof("Chris",x);
Student student1 = new Student("Alois",1234);
x = x - 1;
Prof prof2 = new Prof("Dora",x);
Student student2 = new Student("Bine",4567);
prof1.adjust(-1);
Student student3 = new Student("Alois",1234);
prof2.swapTeaching(prof1);
System.out.println("Speicherzustand hier!");
}
}
public class Student {
private String name;
private int matrikel;
public Student(String name, int matrikel) {
this.name = name;
this.matrikel = matrikel;
}
}
public class Prof {
private String name;
private int teaching;
public Prof(String name, int teaching) {
this.name = name;
this.teaching = teaching;
}
public void adjust(int i) {
this.teaching = this.teaching + i;
}
public boolean swapTeaching(Prof other) {
int old = this.teaching;
this.teaching = other.teaching;
other.teaching = old;
return true;
}
}

H2-2 Variablen

(4 Punkte; Abgabe: H2-2.txt oder H2-2.pdf)

1 public class MeineKlasse {


2
private int x;
3
4
public MeineKlasse(int x){
5
this.x = x;
6
}
7
8
public int getX() {
9
return x;
10
}
11
12
public int foo(int y) {
13
this.x = x + y;
14
int x = 1 + y;
15
x = this.x + y;
16
return x + y;
17
}
18 }
Benennen Sie alle Zeilen, in denen Variablen deklariert werden, und geben Sie an, um welche
Art von Variable es sich handelt. Geben Sie weiterhin f
ur jede der identifizierten Variablen
auch deren Sichtbarkeitsbereich und Lebensspanne an!
Zur Erinnerung: In der Vorlesung haben wir die Arten Instanzvariable, Parameter und
lokale Variable kennengelernt; die Art ist also etwas anderes als Typ einer Variablen.

H2-3 Arithmetik (4 Punkte; Datei: Arithmetik.java)


Schreiben Sie ein Programm, welches wie in Aufgabe A2-3 Eingaben von der Tastatur einliest.
Der Benutzer wird nacheindander aufgefordert, seinen Vornamen, dann seinen Nachnamen (beide vom Typ String) und zuletzt zwei ganze Zahlen eingeben (Typ int).
Ihr Programm soll danach den Benutzer begr
uen, dabei den Vornamen aber zum ersten
Buchstaben gefolgt von einem Punkt abk
urzen.
Falls die zweite Zahl echt gr
oer als die erste ist, sollen die beiden Zahlen und der
Mittelwert in der gleichen Zeile ausgegeben werden.
Andernfalls, als falls die erste Zahl groer oder gleich zur zweiten Zahl ist, so soll der
Kehrwert der ersten Zahl ausgegeben werden aber nur, wenn beide Zahlen groer als
Null sind.
Ansonsten soll einfach die Summe der beiden Zahlen ausgegeben werden.
In jedem Fall soll Ihr Programm nach Abschlu der Benutzereingabe noch genau eine
Zeile ausgeben!
Beispiele:
F
ur die Eingaben "Christian", "Elegans", "2", "7", soll die Ausgabe
Hallo C. Elegans! Der Mittelwert von 2 und 7 ist
ubrigens 4.5!
lauten, f
ur "Karla", "Ehr-Wert", "7", "3", soll die Ausgabe
Hallo K. Ehr-Wert! Der Kehrwert von 7 ist ungef
ahr 0.143!
sein und f
ur "Gustav", "Enauer", "70", "15", sollte Ihre Programm
Hallo G. Enauer! Der Kehrwert von 70 ist ungef
ahr 0.014285714285714!
ausgeben.

Achten Sie auf eine exakte Ubereinstimmung


Ihrer letzten Textausgabe! Der Kehrwert
muss nicht beliebig genau bestimmt werden, es reicht hier der Java-Datentyp double.

Abgabe: L
osungen zu den Hausaufgaben konnen bis Dienstag, den 3.11.2015, mit UniworX
abgegeben werden. Aufgrund des Klausurbonus m
ussen die Hausaufgaben von Ihnen alleine
gelost werden. Abschreiben bei den Hausaufgaben gilt als Betrug und kann zum Ausschluss

von der Klausur zur Vorlesung f


uhren. Bitte beachten Sie auch die Hinweise zum Ubungsbetrieb auf der Vorlesungshomepage (www.tcs.ifi.lmu.de/lehre/ws-2015-16/eip).