EiP_Uebung02

Embed Size (px)

DESCRIPTION

informatik

Citation preview

  • Prof. Martin Hofmann, PhD Ludwig-Maximilians-Universitat MunchenDr. Steffen Jost Institut fur Informatik

    28. Oktober 2015

    2. Ubung zur Vorlesung

    Einfuhrung in die Programmierung

    Hinweise zu den Hausubungen:

    Die Korrektur Ihrer Hausubungen erhalten Sie ungefahr eine Woche nach Ablauf der Abgab-first ebenfalls uber UniworX. Bitte haben Sie dabei etwas Geduld!

    Da die Musterlosung automatisch nach Ablauf der Abgabefrist freigeschaltet wird, konnenwir leider keine nachtraglichen Abgaben akzeptieren. Falls trotz Musterlosung und Korrektur-Kommentar immer noch Fragen offen bleiben, so wenden Sie sich bitte an Ihren Tutor odernutzen Sie die Kommentar Funktion zu Ihrer Korrektur in UniworX. Bitte in jedem Fall dievon UniworX zugewiesen ID-Nummer angeben, damit wir Ihre Abgabe finden konnen.

    Wir weisen auch noch mal auf die Angabe von Dateiname und Dateiformat in jederAufgabentitelzeile hin. Abgaben mit anderen Dateinamen oder in anderen Formaten werdenignoriert! Weitere Hinweise zum Ubungsbetrieb finden sich auf der Vorlesungshomepage (www.tcs.ifi.lmu.de/lehre/ws-2015-16/eip).

    A2-1 Boolsche Ausdrucke Gegeben seien die folgenden Booleschen Java-Ausdrucke:

    a) !(b1 && b2)

    b) !(b1 || !b2)

    c) (!b1) && (b2)

    d) (!b1) || (!b2)

    Wir nennen zwei solche Booleschen Ausdrucke aquivalent, falls sie den gleichen Werthaben, egal was wir fur b1 und b2 einsetzen.

    Welche der obigen vier Booleschen Ausdrucke sind zueinander aquivalent?Hinweis: Eine mogliches Vorgehen ist, die Wertetabellen fur die einzelnen Ausdrucke

    aufzustellen und diese dann zu vergleichen. Sollten Sie sich unsicher uber den Wert einesAusdrucks sein, so konnen ein Java-Programm schreiben, um die verschiedenen Werte derAusdrucke zu uberprufen. Fur den ersten Ausdruck konnte man folgendermaen beginnen:

    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 Bankkontoentwickelt, welche Sie von der Vorlesungshomepage herunterladen konnen. Die Vorlage bestehtaus 2 Dateien: Bankkonto.java und BankkontoTest.java; letztere dient nur zum testen.

    Ihre Aufgabe: Entwickeln Sie ein PIN-geschutztes Bankkonto! Schreiben Sie eine KlasseBankkontoPIN, welche bei der Eroffung eines Bankkontos zusatzlich eine PIN des Typs Stringbenotigt.

    a) Die Klasse soll ansonsten die gleiche Funktionalitat bieten wie Bankkonto, mit demUnterschied, dass die Methoden einzahlen und getKonto einen zusatzlichen Parameter

  • des Typs String anfordern, und nur dann ausgefuhrt werden, wenn die angegebene PINmit der intern gespeicherten PIN ubereinstimmt. Bei einem positiven Geldbetrag solleinzahlen jedoch auch mit einer falschen PIN ausgefuhrt werden!

    Da wir Fehlermeldung noch nicht behandelt haben, soll bei einer falschen PIN einzahleneinfach keine Wirkung haben und getKonto immer 0 zuruckliefern.

    b) Schreiben Sie eine neue Methode neuePin, welche das Auswechseln der PIN erlaubt naturlich nur, wenn auch die alte PIN korrekt angegeben wurde. Diese Methode solltrue zuruckliefern, 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 Kontotransak-tionen zu testen. Es geht in dieser Aufgabe um Methoden und If-Statements, d.h. Ihre neueKlasse BankkontoPIN soll selbst keine Bildschirmausgabe oder Tastatureingabe durchfuhren.(Wenn Sie mochten, konnen Sie jedoch die Konto-Aktivitaten mit System.out.println pro-tokollieren, damit Sie leichter sehen konnen, wie das Konto arbeitet.)

    A2-3 Scanner Bisher haben wir nur Texte ausgegeben. Folgendes Beispiel demonstrierteine 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, welchesvon System.in einliest.

    Schreiben Sie nun ein Programm, welches den Benutzer auffordert, irgendetwas einzutip-pen. Falls es eine ganze Zahl war, soll Ihr Programm dies bemerken. Beispiel:

    Gib bitte eine Zahl ein: null

    Das war keine Zahl!

    /* Zweite Ausfuhrung: */

    Gibt bitte etwas ein: 7

    Du hast die Zahl 7 eingegeben!

    Um diese Aufgabe zu losen, benotigen Sie eine Methode, welche Zahlen erkennen kann. Gluck-licherweise bietet dies die Klasse Scanner bereits an! Schlagen Sie also in der Dokumenta-tion der Klasse Scanner nach (http://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html), und losen Sie damit die Aufgabe. Damit Ihr Programm wie im Beispiel obenablauft, werden Sie vermutlich zwei Methoden der Klasse Scanner bemuhen mussen!

  • H2-1 Speicherbild (4 Punkte; Abgabe: H2-1.txt oder H2-1.pdf)Betrachten Sie folgendenes Programm, welches zwei im Anschlu angegebene selbst-definierteKlassen benutzt. Analog zur Aufgabe A1-3b bzw. Vorlesungsfolie 1-27 ein Diagramm das denZustand 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 welcheArt von Variable es sich handelt. Geben Sie weiterhin fur jede der identifizierten Variablenauch deren Sichtbarkeitsbereich und Lebensspanne an!

    Zur Erinnerung: In der Vorlesung haben wir die Arten Instanzvariable, Parameter undlokale 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 Nachna-men (beide vom Typ String) und zuletzt zwei ganze Zahlen eingeben (Typ int).

    Ihr Programm soll danach den Benutzer begruen, dabei den Vornamen aber zum erstenBuchstaben gefolgt von einem Punkt abkurzen.

    Falls die zweite Zahl echt groer als die erste ist, sollen die beiden Zahlen und derMittelwert in der gleichen Zeile ausgegeben werden.

    Andernfalls, als falls die erste Zahl groer oder gleich zur zweiten Zahl ist, so soll derKehrwert der ersten Zahl ausgegeben werden aber nur, wenn beide Zahlen groer alsNull sind.

    Ansonsten soll einfach die Summe der beiden Zahlen ausgegeben werden.

    In jedem Fall soll Ihr Programm nach Abschlu der Benutzereingabe noch genau eineZeile ausgeben!

    Beispiele:Fur die Eingaben "Christian", "Elegans", "2", "7", soll die Ausgabe

    Hallo C. Elegans! Der Mittelwert von 2 und 7 ist ubrigens 4.5!

    lauten, fur "Karla", "Ehr-Wert", "7", "3", soll die Ausgabe

    Hallo K. Ehr-Wert! Der Kehrwert von 7 ist ungefahr 0.143!

    sein und fur "Gustav", "Enauer", "70", "15", sollte Ihre Programm

    Hallo G. Enauer! Der Kehrwert von 70 ist ungefahr 0.014285714285714!

    ausgeben.

    Achten Sie auf eine exakte Ubereinstimmung Ihrer letzten Textausgabe! Der Kehrwertmuss nicht beliebig genau bestimmt werden, es reicht hier der Java-Datentyp double.

    Abgabe: Losungen zu den Hausaufgaben konnen bis Dienstag, den 3.11.2015, mit UniworXabgegeben werden. Aufgrund des Klausurbonus mussen die Hausaufgaben von Ihnen alleinegelost werden. Abschreiben bei den Hausaufgaben gilt als Betrug und kann zum Ausschlussvon der Klausur zur Vorlesung fuhren. Bitte beachten Sie auch die Hinweise zum Ubungsbe-trieb auf der Vorlesungshomepage (www.tcs.ifi.lmu.de/lehre/ws-2015-16/eip).

    A2-1 Boolsche AusdrckeA2-2 Bankkonto mit PINA2-3 ScannerH2-1 Speicherbild (4)H2-2 Variablen (4)H2-3 Arithmetik (4)