AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fibonacci-Zahlen (iterativ)

Ein Thema von Piwi · begonnen am 29. Nov 2003 · letzter Beitrag vom 18. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Piwi

Registriert seit: 22. Jan 2003
Ort: Trier
15 Beiträge
 
Delphi 5 Standard
 
#1

Fibonacci-Zahlen (iterativ)

  Alt 29. Nov 2003, 20:46
Hallo Delphi-Gemeinde,

ich habe in diesem Programmtext irgend einen Denkfehler drin, der mir nicht auffallen will. Es geht darum, die Fibonacci-Zahl an der Stelle n in der Fibonacci-Reihe darzustellen.

Fibonacci-Zahlen

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Die nächste Zahl in der Reihe ergibt sich also immer aus der Summe seiner beiden Vorgänger. Rekursiv ist das ganze relativ einfach darzustellen, iterativ wohl auch, aber dort ist ein Denkfehler in meinem Programmtext:

Delphi-Quellcode:
function TForm1.fibonit(n:integer):integer;
var x,y,z,i:integer;
begin
 x:=1;
 y:=1;
 i:=0;
 repeat
 i:=i+1;
 z:=x+y;
 y:=x;
 x:=z;
 until i=(n-1);
end;


procedure TForm1.iterativbuttonClick(Sender: TObject);
var n:integer;
begin
n:=strtoint(edit1.text);
listbox1.items.add(inttostr(fibonit(n)));
end;
Er trägt in die Listbox nach ca. zehnsekündiger Berechnungsphase (!!) eine relativ hohe Zahl ein, selbst wenn ich n=1 wähle. Wo ist der Fehlerteufel?

DANKE IM VORAUS!
  Mit Zitat antworten Zitat
Kamil

Registriert seit: 17. Aug 2002
178 Beiträge
 
#2

Re: Fibonacci-Zahlen (iterativ)

  Alt 29. Nov 2003, 21:04
Bei der Fuktion Fehlt ein Ergebnis (result:=x)

Entweder so:

Delphi-Quellcode:
procedure TForm1.fibonit(n:integer);
var
  x,y,z,i:integer;
begin
  x:=1;
  y:=1;
  listbox1.items.add(inttostr(x));
  listbox1.items.add(inttostr(y));
  i:=0;
  repeat
    i:=i+1;
    z:=x+y;
    listbox1.items.add(inttostr(z));
    y:=x;
    x:=z;
  until i=(n-1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  n: integer;
begin
  n:=strtoint(edit1.text);
  fibonit(n);
end;
oder so:
Delphi-Quellcode:
function TForm1.fibonit(n:integer): integer;
var
  x,y,z,i:integer;
begin
  x:=1;
  y:=1;
  i:=0;
  repeat
    i:=i+1;
    z:=x+y;
    y:=x;
    x:=z;
  until i=(n-1);
  result:=z;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  n: integer;
begin
  n:=strtoint(edit1.text);
  listbox1.items.add(inttostr(fibonit(n)));
end;
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Fibonacci-Zahlen (iterativ)

  Alt 29. Nov 2003, 21:21
Zitat von Kamil:
Bei der Fuktion Fehlt ein Ergebnis (result:=x)

Entweder so:

Delphi-Quellcode:
procedure TForm1.fibonit(n:integer);
var
  x,y,z,i:integer;
begin
  x:=1;
  y:=1;
  listbox1.items.add(inttostr(x));
  listbox1.items.add(inttostr(y));
  i:=0;
  repeat
    i:=i+1;
    z:=x+y;
    listbox1.items.add(inttostr(z));
    y:=x;
    x:=z;
  until i=(n-1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  n: integer;
begin
  n:=strtoint(edit1.text);
  fibonit(n);
end;
oder so:
Delphi-Quellcode:
function TForm1.fibonit(n:integer): integer;
var
  x,y,z,i:integer;
begin
  x:=1;
  y:=1;
  i:=0;
  repeat
    i:=i+1;
    z:=x+y;
    y:=x;
    x:=z;
  until i=(n-1);
  result:=z;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  n: integer;
begin
  n:=strtoint(edit1.text);
  listbox1.items.add(inttostr(fibonit(n)));
end;


Delphi-Quellcode:
    
    y:=x;
    x:=z;
Wozu? Warum nich gleich y := z; ?
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Kamil

Registriert seit: 17. Aug 2002
178 Beiträge
 
#4

Re: Fibonacci-Zahlen (iterativ)

  Alt 29. Nov 2003, 21:24
Zitat von sharkx:
Delphi-Quellcode:
    
    y:=x;
    x:=z;
Wozu? Warum nich gleich y := z; ?
Weil Fibonacci Zahlen aus den zwei vorherigen Zahlen gebildet werden:

Fib(1)=1
Fib(2)=1
Fib(x)=Fib(x-1)+Fib(x-2)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: Fibonacci-Zahlen (iterativ)

  Alt 29. Nov 2003, 21:37
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

Mit freuntlichen Grüßen von Daniel B und mir:
Fibonacci


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MCeddy
(Gast)

n/a Beiträge
 
#6

Re: Fibonacci-Zahlen (iterativ)

  Alt 29. Nov 2003, 21:38
Hi Piwi. So eine Aufgabe mit Fibonzahlen hatte ich gestern in meiner Info-Klausur auch drann gehabt. Ich hab das Problem dort mit einem Array gelöst. Hier der Code für Turbo Pascal:

Delphi-Quellcode:
program Fibonacci_Zahlen;

uses
  crt;

const
  MAX = 25;

var
  zahlen : array[0..MAX] of longint;
  i : integer;

begin
  zahlen[0] := 0;
  zahlen[1] := 1;
  for i := 2 to MAX do
    zahlen[i] := zahlen[i-1] + zahlen[i-2];
  for i := 0 to MAX do
    writeln('fibo(', i, ') = ', zahlen[i]);
  readln;
end.
viele Grüße

MCeddy02
  Mit Zitat antworten Zitat
sharkx

Registriert seit: 25. Feb 2003
Ort: St. Ingbert
211 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Fibonacci-Zahlen (iterativ)

  Alt 30. Nov 2003, 08:05
Zitat von Kamil:
Zitat von sharkx:
Delphi-Quellcode:
    
    y:=x;
    x:=z;
Wozu? Warum nich gleich y := z; ?
Weil Fibonacci Zahlen aus den zwei vorherigen Zahlen gebildet werden:

Fib(1)=1
Fib(2)=1
Fib(x)=Fib(x-1)+Fib(x-2)

Ja aber du tust doch nach dem oberen Code einfach die Variablen bzw deren Result an eine andere Weitergeben. y :=x; x := z; .. Da passiert doch nichts mehr mit addieren, multiplizieren oder sonstwas.
Programming today is a race between Software Engineers striving to build bigger and better idiot-proof Programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning!
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Fibonacci-Zahlen (iterativ)

  Alt 30. Nov 2003, 09:51
Wenn du genau hinsiehst, wirst du sehen, dass x zu Beginn der Schleife wieder gelesen wird.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
MCeddy
(Gast)

n/a Beiträge
 
#9

Re: Fibonacci-Zahlen (iterativ)

  Alt 30. Nov 2003, 13:08
Hi ich bin's nochmal. Habe jetzt mal als meiner Lösung eine Funktion zusammen gebastelt bei der die Fibonacci-Zahlen an der stelle n mit Hilfe von einem Array erzeugt werden können:

Delphi-Quellcode:
function fibonacci(n : byte) : longint;
const
  MAX = 40;
var
  zahlen : array[0..MAX] of longint;
  i : integer;
begin
  zahlen[0] := 0;
  zahlen[1] := 1;
  for i := 2 to n do
    zahlen[i] := zahlen[i-1] + zahlen[i-2];
  result := zahlen[n];
end;
tschau und noch ein schönes Wochenende allen DP-Usern

MCeddy02
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#10

Re: Fibonacci-Zahlen (iterativ)

  Alt 30. Nov 2003, 17:23
http://www.FrankNStein.de/Smiley-Wolke.gif Hallöle,

hier mal eine Version ohne Array und mit Fehlerbehandlung.

Liefert die Fibonacci-Zahlen im Bereich von 0 bis 92 (0 bis 7540113804746346429).

Delphi-Quellcode:
Function Fibonacci(N: Byte): Int64;
  Var I1, I2, Ix: Int64;
    I: Integer;

  Begin
    I1 := 0;
    I2 := 1;
    For I := 1 to N do Begin
      Ix := I1;
      I1 := I2;
      I2 := Ix + I2;
    End;
    If N <= 1 Then Result := N
    Else If N <= 92 Then Result := I1
    Else Result := -1; {Fehler}
  End;

http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz