Berechnung der F_{n} < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 19:35 So 16.04.2006 | Autor: | Fahnder |
Aufgabe | Betrachten Sie nun die Definition folgender Zahlenfolge: [mm] (F_{n})
[/mm]
[mm] F_{1}=1 [/mm] , [mm] F_{2}=2 [/mm] , $ [mm] F_{n}=F_{n-1} [/mm] $+$ [mm] F_{n-2} (n\ge3) [/mm] $
Schreiben Sie ein Javaprogramm zur Berechnung der $ [mm] F_{n}. [/mm] $. Nennen Sie Ihre Klasse "Aufgabe3", ausgegeben werden soll lediglich das jeweilige $ [mm] F_{n}. [/mm] $ zur Eingabe n, weiter nichts |
Hi,
leider hatte ich in der Schule kein Informatik, muss diese Übungsaufgabe, aber am Dienstag abgeben und leider habe ich keine Ahnugn, wie ich beginnen soll. Wäre schön, wenn mir jemand mal erklären könnte, wie man was beginnt, also ich kenne die Begriffe und Zeichen, aber ich weiss nicht genau wie man die in den zusammenhang bringt.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Fahnder
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:04 So 16.04.2006 | Autor: | sirprize |
Hi Fahnder!
Was genau ist denn das Problem? Weisst du nicht, wie du das Java-Programm anfangen sollst? Oder verstehst du nicht genau, was denn mit diesen [mm] $F_{n}$ [/mm] gemeint ist? Oder ist es der rekursive Aufruf, der dir Schwierigkeiten bereitet?
Viele Grüße und frohe Ostern,
Michael
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:16 So 16.04.2006 | Autor: | Fahnder |
Hi,
also mir ist das mathemische Vorgehen klar. Ich weiss auch, dass ich eine class Aufgabe 3 erstellen soll, wo anhand eines Algorithmus das Ergebnis der [mm] F_{n} [/mm] erscheinen soll für gewissene n, wobei die Anfangswerte in den Algorithmus eingebaut werden. Was ich aber nicht kann, ist das mathematische in die Informatik zu übertragen, ich weiss nicht wie ich beginnen soll, obwohl mir die wichtigsten Begriffe bekannt sind, weiss aber nicht wie sie im Zusammenhang stehen.
|
|
|
|
|
Hi,
also gut, hier mal ein paar Tipps:
- In der Klasse Aufgabe3 sollte irgendwo eine Funktion vorkommen, die die Berechnung durchführt. Nennen wir sie mal f. Das ganze sieht dann so aus:
// muss nicht public sein
public class Aufgabe3 {
// ...
// verschiedenes Zeug ...
// ...
// die Funktion f ist public (d.h. von jeder anderen Klasse aus aufrufbar)
// static (d.h. man muss kein Objekt der Klasse Aufgabe3 erzeugen)
// sie bekommt einen int als Parameter (der in der Funktion als n bekannt sein wird)
// sie liefert einen int zurück (nämlich das Ergebnis)
public static int f (int n) {
// hier kommt der Berechnungscode rein
}
}
- Die beiden Startwerte können (und sollten auch!) fest einprogrammiert sein. Daher muss in der Funktion etwas ähnliches wie das drin sein:
if(n < 3)
return n;
- In Java können Funktionen rekursiv aufgerufen werden. Das bedeutet, die Funktion f verwendet sich selbst (mit anderen Parametern) zur Berechnung des Endergebnisses. Das ganze könnte also so aussehen:
return f(n-1) + f(n-2);
Das wars im Prinzip. Jetzt noch das ganze zusammenschreiben, die Ein- und Ausgabefunktionen sowie die main-Funktion hinzufügen, und schon hast du deine Aufgabe
Viele Grüße,
Michael
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:05 Mo 17.04.2006 | Autor: | Fahnder |
Hi, also ich habe jetzt versucht, daraus was zu basteln. weiss aber nicht, ob es richtig ist.
public class Aufgabe3 {
public static void main (String[]arg){
//F ist public
//static
//sie bekommt einen int als Parameter
//sie liefert einen int zurück
static int f (int n)= In.readInt()
int n=1
if (n<3) return 1
else (n>=3) return f(n-1)+f(n-2)
Out.printIn()
}
}
Ich habe die Frage in keinem anderem Forum gestellt.
Fahnder
|
|
|
|
|
Hi Fahnder,
nicht ganz
So kanns ja gar nicht funktionieren. Das lässt sich so bestimmt nicht kompilieren. Funktionen in Java kannst du als eine Art "Blackbox" sehen. Du gibst irgendwelche Daten rein (die Parameter) und bekommst nach der Verarbeitung eine Antwort (den Rückgabe- oder return-Wert). Und die Funktion f musst du als eine solche Blackbox betrachten. Daher sollte dort die Ein- und Ausgabe aus der Funktion f entfernt werden. Als Ergebnis sollte sowas herauskommen:
die Funktion f:
static int f(int n) {
if (n<3)
return n; // return 1 wäre falsch, da für n==2 auch 2 zurückgeliefert werden muss
else // beim else darf man keine Extrabedingung schreiben - dazu ist "else if" da
return f(n-1)+f(n-2);
}
Die main-Funktion muss so ähnlich aussehen. Natürlich musst du liesEineZahlEin() und gibAus() durch passende Funktionen ersetzen:
public static void main (String[] args) {
int zahl = liesEineZahlEin();
gibAus( f(zahl) );
}
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 19:51 Mo 17.04.2006 | Autor: | Fahnder |
Hi,
danke erst mal, dass du dich so schnell darum gekümmert hast, naja mir ist ein kleiner Fehler bei der Eingabe unterlaufen, habe ich nach deiner Antwort entdeckt. Für n = 2 ergibt der Wert von F auch 1, daher return 1
Ich habe das jetzt mal so eingeben, wie du es zum teil aufgeschrieben hast, aber fehlt da noch was? das sieht ziemlich kurz aus
public class Aufgabe3 {
public static void main (String[]arg){
int n;
return f(n);
//f ist public
//static
if (n<3) return 1
else return f(n-1)+f(n-2)
}
}
Ich habe die Frage in keinem anderen Internetforum gestellt.
Fahnder
|
|
|
|
|
Hi,
die Funktion f muss neben der main-Funktion exisitieren. Das ganze sieht also etwa so aus:
public class Aufgabe3 {
public static void main (String[] args) {
int zahl = liesEineZahlEin();
gibAus( f(zahl) );
}
public static int f(int n) {
if (n<3)
return 1;
else
return f(n-1)+f(n-2);
}
}
Wenn du noch liesEineZahlEin() und gibAus() durch richtige Funktionsaufrufe ersetzt, ist das sogar die komplette Lösung
Verstanden? Hast du jemanden, der dir das ggf. persönlich erklären kann?
Viele Grüße,
Michael
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 07:46 Do 20.04.2006 | Autor: | Fahnder |
Hi,
ich danke euch allen für eure Zeit, mir zu helfen. Habe die volle Punktzahl bekommen.
Fahnder
|
|
|
|