Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fibonacci-Zahlen (iterativ) (https://www.delphipraxis.net/12562-fibonacci-zahlen-iterativ.html)

Illuminator-23-5 30. Nov 2003 17:27

Re: Fibonacci-Zahlen (iterativ)
 
fibonacci geht meiner meinung so am einfachsten:
Delphi-Quellcode:
var
  alt, uralt, neu, i: integer;
begin
  alt := 0;
  neu := 1;
  for i := 2 to j do begin
    uralt := alt;
    alt := neu;
    neu := uralt + alt;
  end;
  return neu;
und das am schnellsten:
Delphi-Quellcode:
var
  a, b, c, d, n, r: integer;
begin
  n := StrToInt(Edit1.Text);
  asm
    MOV a, EAX
    MOV b, EBX
    MOV c, ECX
    MOV d, EDX

    MOV EDX, n
    SUB EDX, 1
    MOV EAX, 0  //alt
    MOV EBX, 1  //neu
    JZ @@end
    @@1:
    MOV ECX, EAX
    MOV EAX, EBX
    MOV EBX, EAX
    ADD EBX, ECX
    SUB EDX, 1
    CMP EDX, 1
    JAE @@1
    @@end:
    MOV r, EBX

    MOV EAX, a
    MOV EBX, b
    MOV ECX, c
    MOV EDX, d
  end;
  return r;

Freekill 18. Sep 2007 16:12

Re: Fibonacci-Zahlen (iterativ)
 
Zitat:

Zitat von Piwi
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? :angle:

DANKE IM VORAUS! :spin:

Auch wenn der letzte Beitrag hier schon eine ganze Weile her ist, wage ich es den Quelltext für zukünftige Besucher zu korrigieren. Die Abbruchbedingung für die Repeat-Schleife stimmt nicht ganz. Ich musste im Rahmen des Informatiksunterricht selbst die Fibonaccizahlen Iterativ programmieren. Dabei ist mir bei dieser Variante aufgefallen, dass die Abbruchbedingung nicht "until i=(n-1)" sondern "until i=(n-2)" heißen muss. Ansonsten verschieben sich die Zahlen um eine Stelle nach vorn und die Reihe stimmt nicht mehr.

pstruh 18. Sep 2007 16:15

Re: Fibonacci-Zahlen (iterativ)
 
Hallo :?:
erstaunlich, dass überhaupt ein Ergebnis kommt. Wo wird denn das Funktionsergebnis zugewiesen???
Gruß

patti 18. Sep 2007 16:32

Re: Fibonacci-Zahlen (iterativ)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es gibt übrigens auch eine Funktion zum Berechnen der Fibonacci-Zahlen:

Im Anhang die Formel als JPG-Bild!

Damit sollte sich das Problem vielleicht auch hinkriegen lassen!

P@Tti

EDIT 1: Okay, der erste Beitrag ist von 2003...
EDIT 2: @pstruh: Das wird wahrscheinlich der Grund sein, warum er immer ne hohe Zahl als Ergebnis bekommen hat, selbst bei n=1

negaH 18. Sep 2007 22:53

Re: Fibonacci-Zahlen (iterativ)
 
schau mal hier

http://www.delphipraxis.net/internal...ct.php?t=51660
http://www.delphipraxis.net/internal...ight=fibonacci

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz