Nachhilfe/Musterlösung

blackpage

Grünschnabel
Hallo,

ich suche spontane Nachhilfe für heute. Hilfreich wäre auch eine Musterlösung.

Ich schreibe bald Klausur und komme bei einer Aufgabe nicht klar. Brauche dringend Hilfe.


In dieser Aufgabe sollen Sie ein Programm implementieren, das für Funktionen, die einen bestimmten
Aufbau haben, zählt wieviele Basisoperationen die Ausführung kostet. Für alle Teilaufgaben
gilt:
• Schreiben Sie eine Methode, die die Anzahl der Basisoperationen für bestimmte Parameter
berechnet.
• Bei bedingten Anweisungen wird eine Basisoperation für das Auswerten des Ausdrucks gezählt.
• Bei for-Schleifen wird je eine Basisoperation für Initialisierung, Inkrement und Vergleich
gezählt. Jeweils sooft die einzelnen Teile wirklich ausgeführt werden müssen.
• Bei Unterfunktionen ist im Kommentar angegeben, wieviele Basisoperationen sie kosten. Die
Variablen, die dabei verwendet werden, sind Parameter, die der Methode, welche Sie implemetieren
müssen mit gleichen Namen, übergeben werden.
• Für alle Parameter gilt, dass man nur mit nicht-negativen Werten rechnen kann. Wenn der
Methode trotzdem nagative Werte übergeben werden, muss die Methode -1 zurückgeben.
• Wenn der Rückgabewert der Methode den Wertebereich des Rückgabetyps übersteigen würde,
muss Ihre Funktion -2 zurückgeben.



hoch-k Funktionen:
Die Funktionen g bestehen aus k vielen verschachtelten Schleifen. Jede Schleife benötigt n
Durchläufe. Auf jeder Ebene wird zunächst eine Funktion aufgerufen und dann eine Schleife
abgearbeitet. Im Schleifenrumpf beginnt die nächste Ebene. In der tiefsten Schachtelung wird
im Schleifenrumpf nur eine Funktion aufgerufen.
Code:
void g(int n){
x_0(); // Kostet a_0 Basisoperationen
for (int i_1 = 0; i_1 < n; ++i_1){
x_1(); // Kostet a_1 Basisoperationen
for(int i_2 = 0; i_2 < n; ++i_2){
....
for(int i_k = 0; i_k < n; ++i_k){
x_k(); // Kostet a_k Basisoperationen
}
....
}
}
}
Die Werte {a_0, a_1, ..., a_k} werden Ihnen als Array a übergeben. Dieses kann leer
sein (Array mit Länge 0), was bedeutet, dass in der Funktion g nichts gerechnet wird. Ergänzen
Sie die Funktion countPowerK in der Datei OperationCount.java. Achten Sie
darauf, dass Ihr Programm weder für die Laufzeit noch den Speicherverbrauch den Aufwand
O(k) übersteigt.
c) Rekursive Funktionen:
Die Funktionen h sind rekursive Funktionen
Code:
void h(int n){
if(n == 0){
y(); // Kostet b Operationen
return; // Dafuer keine Basisoperation zaehlen
}
x(); // Kostet a Operationen
for (int i = 0; i < c; ++i){ // c ist Parameter Ihrer Methode
h(n - 1); // kostet rekursive viele Basisoperationen
}
}
DieWerte für a, b, c und n werden Ihrer Funktion countRek übergeben. Die Basisoperationen
der rekursiven Aufrufe müssen mitgezählt werden. Ergänzen Sie die Funktion countRek in
der Datei OperationCount.java. Achten Sie darauf, dass Ihr Programm für die Laufzeit
den Aufwand O(n) und für den Speicherverbrauch den Aufwand O(1) nicht übersteigt.



Wer glaubt das oder auch nen Teil davon zu schaffen, schreibt mir bitte eine PN mit preisvorstellung. Ich bräuchte dazu dann natürlich auch eine Erklärung, weil mir das ganze sonst nichts brint. Aber es reicht auch schon kommentare im Code.

Hab auch selbst schon was geschrieben, was aber nicht funktioniert wie es soll.

lass euch das auch gerne per mail oder so zukommen, genau wie das vorgebenene quellcodegerüst.

Danke und liebe Grüße!
 
Zurück