Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Fibonacci-Folge - HELP


Fibonacci - Fr 19.06.09 08:20
Titel: Fibonacci-Folge - HELP
Guten Morgen!
Wir sitzen hier gerade im Infounterricht und sind mehr oder weniger am verzweifeln.... ;-)
Wir haben viel verpasst und haben nun große Probleme mit Delphi ... da nun bald Ferien sind, haben wir das große Vergnügen die Fibonaccifolge zu programmieren.
Haben uns viel im Internet informiert & auch einige nützliche Codes gefunden... aber so richtig funzen will irgendwie nichts ;-)
Kann uns einer den kompletten Quelltext programmieren?
Wir wissen wie dreist das klingt, aber wir sitzen schon echt lange dran, und es ist wirklich zum verzweifeln! xD
Für irgendwelche Lösungsansätze oder Tipps wären wir auch sehr dankbar!
Wir brauchen es einmal Iterativ und Dynamisch...
Lieben Gruß


Gausi - Fr 19.06.09 08:25

Hallo und :welcome: in der Entwickler-Ecke,

wie sehen denn die Codes aus, die nicht funktionieren? Und wie zeigt es sich, dass die nicht funktionieren? Denn man kann da sicherlich drauf aufbauen und die Fehler finden, was euch deutlich mehr bringen dürfte als einen fertigen Code zu bekommen. :D


Krischa - Fr 19.06.09 08:30

Hi,
man muss schon sehr viel verpasst haben damit man die Fibo-Folge nicht hin bekommt. Kompletten Code wird es höchst wahrscheinlich nicht geben oder wenn dann nur gegen bezahlung. Hier gibt es nur Hilfe wenn beim SELBER-PROGRAMMIEREN Probleme auftauchen. Also versucht es lieber selber und bei Fragen einfach mal euren Code posten.


Fibonacci - Fr 19.06.09 08:37

Danke für die Antworten ^^


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  feldtyp=array[1..9of integer;
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    function Fibonacci (Index: Integer): Int64;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Index: Integer;


implementation

{$R *.dfm}


function Fibonacci (Index: Integer): Int64;
 function Fibonaccihelp (f1, f2, n: Integer): Integer;
  begin
   if n=0 then
   Result := f1
    else
   Result:=Fibonaccihelp (f2, f1+f2, n-1);
  end;
 begin
  case Index of
  1,2: Result :=1;
   else
  Result := Fibonaccihelp (0,1,Index);
 end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var 
    ausgabe:feldtyp;
    i:integer;
 begin
  for i:=1 to 9 do
   ausgabe:=Fibonacci(Index);
  for i:=1 to 9 do
   begin
    memo1.Lines.Add(inttostr(ausgabe[i])) ;
   end;
 end;
end.


Nicht lachen! :O :P

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


Gausi - Fr 19.06.09 08:48

Da gibt es nichts zu lachen. ;-)

Der Hauptteil ist ja richtig - die Berechnung der Fibonacci-Zahlen (in der rekursiven Variante, ach ne, das ist ja iterativ. Imho zwar etwas umständlich so, aber es geht.). Was -äh- etwas kreativ ist, ist die Ausgabe. Da könnte man einfach so machen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
var index:integer;
begin
  for Index:=1 to 9 do
      memo1.Lines.Add(inttostr( Fibonacci(Index) ) );
end;


Krischa - Fr 19.06.09 08:51

Und wenn man es besonders schön machen will liest man die Länge der Fibonacci-Folge aus einem Edit-Feld ein und ersetzt das Ende der Schleife durch diesen Wert.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
var index,ende:integer;
begin
  ende:=strtoint(edit1.text);
  for Index:=1 to ende do
      memo1.Lines.Add(inttostr( Fibonacci(Index) ) );
end;


Fibonacci - Fr 19.06.09 08:58

Hey, nochmal vielen Dank für eure Antworten!
Wir haben noch ein bisschen rumgebastelt (bzw nochmal neu angefangen :D), und es funktioniert <3


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Fibonacci(n:integer);
    procedure Button1Click(Sender: TObject);
private
 { Private declarations }
public
 { Public declarations }
 end;

var
 Form1: TForm1;

implementation
 {$R *.dfm}

procedure Tform1.Fibonacci(n:integer);
 var  k, Fletzte, Fvorletzte, Faktuell:integer;

 begin
  Fvorletzte:=1;
  Fletzte:=1;
  for k:=1 to n do
   begin
    Faktuell:=Fletzte+Fvorletzte;
    Fletzte:=Fvorletzte;
    Fvorletzte:=Faktuell;
    memo1.lines.add(inttostr(Faktuell));
  end;
 end;


procedure TForm1.Button1Click(Sender: TObject);
 var ausgang:integer;


 begin
  ausgang:=  StrToInt(Edit1.Text);
  Fibonacci(ausgang);
end;


end.


Nun brauchen wir es rekursiv... Hilfe!? :D
Gruß

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt


Gausi - Fr 19.06.09 09:08

Pseudocode, n bissel was tun sollt ihr schon noch. ;-)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Funktion Fib(n: GanzeZahl): GanzeZahl;
Start
  wenn (n = 0) dann
    ergebnis := 0 // oder 1, je nach dem
  sonst 
    wenn (n = 1) dann
      ergebnis := 1 
    sonst    
      ergebnis := (wie lautet die Rekursionsformel?) Fib(...) + Fib(...);
Ende;


elundril - Fr 19.06.09 13:29

is die rekursionsformel für Fib nicht x_n = x_n-1 + x_n-2??


Gausi - Fr 19.06.09 13:54

Mir ist das klar, aber das wollte ich heute morgen nicht auch noch verraten. :angel:


elundril - Fr 19.06.09 14:15

:oops: scusi! Wir sind in der Vorlesung grad bei Rekursionsformeln (eig. ja Differenzengleichungen) und da wollt ich mal mein Wissen überprüfen. Sorry!


Fibonacci - Fr 26.06.09 07:42

Danke euch nochmal,
wir haben gerade wieder Info und setzen uns mal ran ^^
Lieben Gruß