Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Verschieden Klausur fragen
Hi
ich habe ein parre verschiedene fragen:
klausur 06.08.2009
UML Aufgabe 2
d- welch diagramm muss ich nehmen Interaktion oder Objektdiagramm
Rekursion: aufgabe 3
e- wie verwede ich di initFoo …wie ist den code
Radix :
beim c den erste code “sortPos” kann mir jemand den code schreiben wie er ist?
danke
UML Aufgabe 2 : Ich würde sagen Aktivitäts- oder Kommunikationsdiagramm.
Radix-Sort (sortPos):
int[] tmp = new int[to - from];
for(int i = from; i < to; i++) {
tmp[i - from] = array[i];
}
int arrayPos = 0;
for(int i = 0; i < 10; i++) {
for(int j = 0; j < tmp.length; j++) {
if(getDigit(tmp[j], pos) == i) {
array[arrayPos] = tmp[j];
arrayPos++;
}
}
}
ich denke er tuts - habs nicht ausprobiert
der rest is dann ja nicht mehr so schwer…
anregungen und kritik erwünscht.
Rekursion: aufgabe 3
e- wie verwede ich di initFoo …wie ist den code
Sieht gut aus und funktioniert, aber ich denke es sollte int arrayPos = from; sein. Und falls to und from inklusive sind, muss es new int[to - from + 1]; und i <= to sein. Aber sonst super. Danke.
Aufgabe 3 sollte so gehen (Fehler bitte melden)
public static int foo(int n) {
int ret;
// dynamisch start
if (fooTable[n] != UNKNOWN) {
return fooTable[n];
}
// dynamisch ende
if (n == 0) {
ret = 3;
} else if (n == 1) {
ret = 1;
} else {
ret = foo(n - 1) + bar (n - 2);
}
// dynamisch start
fooTable[n] = ret;
// dynamisch stop
return ret;
}
danke sieht gut aus
für die Laufzeit hab ich O(n) und für den Speicherplatz ebenfalls. kann das wer bestätigen?
Hi,
ich übe Rekursion
Aber ich versteh nicht wie man auf das zeug mit dem fooTable kommt. Das in der Mitte ist klar und hatte ich auch genauso. Aber das andere versteh ich irgendwie nicht.
Hat dazu jemand eine Idee?
Mit Dynamischer Programmierung versucht man, mehrfache Berechnung von (Zwischen)-Ergebnissen zu vermeiden. Das geht zum Beispiel, indem man die Zwischenergebnisse in einer Tabelle ablegt und vor der eigentlichen Funktionsauswertung nachschaut, ob man die Funktion fuer die jeweiligen Argumente schon berechnet hat. Falls ja, liest man den Wert aus der Tabelle aus anstatt ihn erneut zu berechnen (das ist der Teil vor dem rekursiven Code). Falls nein, berechnet man den Wert (mit ganz normaler Rekursion) und speichert ihn vor der Rueckgabe in der Tabelle (damit man ihn beim naechsten Mal einfach auslesen kann; dies ist der Teil nach der Rekursion).
Dabei muss einem klar sein, dass Dynamische Programmierung immer ein Handel von Laufzeit zu Speicherplatz ist. Die Tabelle muss dabei soviele Dimensionen haben, wieviele Argumente die Funktion hat. Die Laenge in den einzelnen Dimensionen entspricht dem Wertebereich.
oh top!
Danke!
Sehr gute Erklärung!
Jetzt ist mir auch das UNKNOWN klar
ich hab mal bei der klausur gleichen klausur zur aufgabe 2 ne frage:
und zwar sind da die vererbungsstiche von einem interface zu einer anderen klasse gegeben. Sind die vererbungspfeile bei einem Interface automatisch dann so, dass ich in die klasse implements reinschreiben muss also z.B.:abstract EierLegend implements Haustier{} weil normalerweise sind ja die Pfeile bei implements so gestrichelt, oder kann man auch von einem interface nur erben also implements eigentlich doch nicht? und muss man dann z.b. bei der klasse schaf auch objekte von schlachtvieh und so reinschreiben oder nur von Wollegebend? und warum ist wenn wollegebend abstract ist in schaf die methode scheren nicht angegeben? oder muss ich die selbst hinzufügen?
Vllt kann mir auch jemand mal die lösung zum vergleichen schreiben
THX
Moin,
normal sind die Pfeile gestrichelt, das ist hier unglücklich, die Semantik ist dennoch die gleiche.
Also
public abstract class EierLegend implements Haustier {
.
.
.
}
Einzige Ausnahme: wenn ein Interface von einem Interface erbt, wie hier MilchErzeugend von Haustier, dann würdest du schreiben
interface Haustier extends Milcherzeugend {
}
Ein Interface kann ein anderes nämlich nicht implementieren.
Für die Klasse Schaf musst du die Methoden aus den Interfaces, die Schaf implementiert übernehmen. Also schlachten() und melken(), die stehen ja schon drin
Wieso Sachen von WolleGebend reinschreiben? Scheren wurde schon in WolleGebend ausprogrammiert und taucht demnach in Schaf nicht mehr auf (wäre die Methode abstract, dann wär sie kursiv geschrieben)
Eine abstrakte Klasse KANN eine Methode ausprogrammieren, oder sie leer lassen. Nur wenn sie leer ist (und abstract) muss die Unterklasse sie implementieren.
Ah danke stimmt
Nur wär das dann nicht eigentlich anders rum nämlich
interface Milcherzeugend extends Haustier {
}
und warum kann es die EIerlegendewollmichsau nicht geben?
liegt das daran, dass diese klasse von mehreren Unterklassen von Haustiere erbt?
und dann noch zu dieser aufgabe ist das wahr oder falsch :
„In Java gibt es generische Klassen, die bei der Instanziierung durch einen generischen
Klassenparameter konkretisiert werden. Als Klassenparameter können dabei sowohl
Klassen als auch Interfaces ¨ubergeben werden.“
ich hätte gesagt es ist falsch, da keine Objekte von Interfaces gebildet werden können
andererseits steht in den folien, dass der Typ einer Objektvariablen von einer Schnittstelle sein kann… mm aber eine Objektvariable ist ja wieder was anderes…
Ja muss andersrum.
interface Milcherzeugend extends Haustier {
}
Das mit den Unterklassen von Haustier ist egal. Das Problem ist aber, dass die EierlegendeWollMilchSau von mehreren Klassen erbt. Das ist in Java nicht möglich.
Du kannst von generischen Typen in einer Klasse generell keine Objekte bilden.
Schau dir eure Klasse Pair<T0, T1> an und versuch mal ein Objekt von T0 innerhalb von Pair zu erzeugen. Das wird nicht funktionieren, schließlich weiß man nicht welche Konstruktoren diese Klasse besitzt (wenn Sie überhaupt welche hat). Diese generischen Typen können auch Interfaces sein und somit ist die Aussage richtig
also wäre meine antwort jetzt richtig, wenn ich falsch ankreuzen würde?
Ah okay aber mehrere interfaces darf eine klasse implementieren oder?
Eine Klassen kann mehrere Interfaces implementieren, aber nicht von mehreren Klassen erben, richtig
So jetzt wollte ich mal anfrgaen, nachdem in dem Prüfungs-wiki dazu keine Lösung vorhanden ist, ob jamand mir von den Ankreuzaufgaben(Klausur 24.2.11 , erste Aufgabe) Lust hat mir mal die Lösungen davon zu verraten…
Ich habs gemacht aber bei manchem weiß ich so gar nicht weiter:
meine Lösungen wären(teilweise eher eine Tendenz was ich nicht wüsste ob ich zu den Sachen dann überhaupt was angekreutzt hätte)
a)falsch
b)richtig
c)richtig
d) f: O(log(n))
g: O(nlog(n))
e) richtig (würd ich etz mal sagen, nach dem es doch für eine einfachverkettete so ist oder)
f) falsch (ich weiß nur, dass es besser als O(n) ist aber wie gut es genau ist wurde uns in der Übung gesagt kann man so nicht sagen)
g)
h) falsch ( es ist ja nur einfachvererbung in Java möglich aber im UML diagramm darf es stehen denk ich mal)
i) mm da ist meine Tendenz eher zu richtig aber ka
Schau mal WS2010, steht irrtümlicherweise da, wenn ich das richtig sehe