Übungsblatt 6

Werbung
Informatik I WS2003/2004
Informatik I WS2003/2004
Ausgegeben am: 4.12.2003
Prof. Dr. W. May
Übungsblatt 6
Dipl.-Inform. Kerstin Richter
Abgabe bis:
16.12.2003 (Theorie)
18.12.2003 (Praktisch)
Dipl.-Inform. Oliver Fritzen
Java: Speicherorganisation, Sichtbarkeit, Rekursion
Die theoretischen Übungen sind bis zum 16.12.2003, 12. 55 Uhr in die
Info-I-Briefkästen im Erdgeschoss der NAM einzuwerfen. Sämtliche praktischen
Übungen sind bis zum 18.12.2003 in Ihrer Tutorengruppe zu testieren.
Aufgabe 1 (Praktisch - 20 Punkte):
Erweitern der Lottozahlen-Klasse
Aus der Vorlesung sind die Klassen "Lotto" und "LottoTest" bekannt (beide zu finden unter
http://user.informatik.uni-goettingen.de/~info1/java.html ).
Erweitern Sie die Klasse Lotto um eine Methode
public int vergleiche(int[] getippte_zahlen) { . . . },
die eine Folge von n getippten Zahlen mit der Folge von n Lottozahlen vergleicht und zurück gibt, wieviele Zahlen aus
beiden Folgen übereinstimmen.
Die Zahlen sind innerhalb der Folgen nicht sortiert.
Zahlen können in einer Folge mehrmals vorkommen.
Duplikate bei den Lottozahlen sind erlaubt; es soll gezählt werden, wieviele der Lottozahlen von der eigenen
Auswahl "abgedeckt" wurden (siehe Beispiel)
Die Lottozahlen (1,4,9,16,16,25) und der eigene Tipp (1,4,9,16,32,25) soll 6 Übereinstimmungen liefern, da mit dem
eigenen Tipp alle 6 Lottozahlen abgedeckt wurden. Die eigene 16 hat zwei der Lottozahlen - die beiden 16en - abgedeckt.
Anmerkung: Duplikate beim eigenen Tipp sind zwar erlaubt, aber sinnlos, da man damit eine Abdeckmöglichkeit
verschenkt.
Aufgabe 2 (Theorie - 20 Punkte):
Sichtbarkeit in Java
Gegeben seien die Klassen "Person":
public class Person {
private String name;
private String vorname;
public Person() { }
public Person(String n) {
name = n;
// MARKE 3
}
public Person(String thename) {name=thename;}
public void setName(String thename){ name = thename; }
public String getName() {return name;}
public void printName(){ System.out.println(name); }
}
und die Testklasse "TwoPersons":
public class TwoPersons{
public static void main (String[] args){
// MARKE 1
Person p1 = new Person("Meier");
1 of 2
Informatik I WS2003/2004
p1.printName();
// MARKE 2
Person p2 = new Person("Mueller");
p2.printName();
}
}
Beide Klassen sind aus der Vorlesung bekannt. Beide Klassen existieren in der selben Laufzeitumgebung.
Geben sie jeweils an, welche Aufrufparameter, lokale Variablen, Klassen, Objekte, Klassenvariablen, Instanzvariablen,
Klassenmethoden und Instanzmethoden jeweils an den Punkten MARKE 1, MARKE 2 und MARKE 3 sichtbar sind.
Aufgabe 3 (Theorie - 25 Punkte):
Fakultät rekursiv berechnen
Gegeben seien die Klassen "FakultaetRek" und "FakultaetRekTest" (beide zu finden
unterhttp://user.informatik.uni-goettingen.de/~info1/java.html ).
1. Vollziehen Sie den Aufruf von "FakultaetRek.berechnen(3);" und von "FakultaetRek.berechnen(8)" von Hand nach.
2. Vollziehen sie den Inhalt des Aufrufstacks für diese beiden Berechnungen nach.
Aufgabe 4 (Theorie - 20 Punkte):
Rekursion: Fibonacci
In der Vorlesung wurden die Fibonacci-Zahlen besprochen und eine Java-Klasse vorgestellt, die die Fibonacci-Zahlen
berechnet.
{
public static long berechneRekursiv(int n)
{
if ((n==0) | (n==1)) return 1;
else return(berechneRekursiv(n-1) + berechneRekursiv(n-2));
}
}
public class FibonacciTest
{
public static void main(String args[])
{
int i = KeyBoard.readInteger ("Geben Sie eine natuerliche Zahl ein: ");
System.out.println(Fibonacci.berechneRekursiv(i));
}
}
Beschreiben Sie den Aufrufstack für i=4.
Hinweis "Inhalt der Aufruf-Datenblätter" in Kapitel 3.6.
Aufgabe 5 (Praktisch - 15 Punkte):
Rekursion - ggT (Vorlesungsskript)
Implementieren Sie den Euklidischen Algorithmus und vervollständigen Sie damit die "Rational"-Klasse (zu finden in
"Rational.java" auf der Java-Seite unter http://user.informatik.uni-goettingen.de/~info1/java.html).
Lassen Sie ihre Lösung in ihrer Tutorengruppe testieren.
2 of 2
Herunterladen