Autor Beitrag
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 603
Erhaltene Danke: 340

W7
Delphi 6 pro
BeitragVerfasst: Mo 24.07.23 16:31 
Moin,
das Programm berechnet die N-te Fibonaccizahl, N=1 bis 999999.
Fibo999999
Die Langzahlunit enthält die folgenden Methoden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
type TFeld=Array of Int64;

 // IntegerVariable B umwandeln in ein Array vom Typ TFeld
 procedure LangInt(var A:TFeld;B:Integer);
 function LangKleiner(A,B:TFeld):Boolean; // A<B ?
 function LangGleich(A,B:TFeld):Boolean;  // A=B ?
 procedure LangRead(Zahl:String;var Z:TFeld); // Zahl eingeben
 procedure LangIntToStr(Zahl:TFeld;var Erg:String); // Liste --> String wandeln
 procedure LangAdd(var S:TFeld;A,B:TFeld);  // A+B
 procedure LangSub(var D:TFeld;A,B:TFeld);  // A-B
 procedure LangMul(var E:TFeld;A,B:TFeld);  // A*B
 procedure LangDivision(var E,R:TFeld;A,B:TFeld);
 procedure LangAusgabe(LMemo:TMemo;S:TFeld); // Ergebnis ausgeben
 procedure LangSqrt(var XA:TFeld;A:TFeld); // W=trunc(sqrt(A))
 procedure LangPotenz(var E:TFeld;B:TFeld;Expo:Cardinal); // E=B^Exponent

Viel Spaß beim Testen!

Gruß Fiete
Einloggen, um Attachments anzusehen!
_________________
Fietes Gesetz: use your brain (THINK)

Für diesen Beitrag haben gedankt: Andreas_500, jaenicke, mandras, Mathematiker, Narses
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 14.08.23 01:22 
Das funktioniert sehr gut. :zustimm:

Wie wäre es, wenn du die Langzahlarithmetik als "echten" Zahlentyp umsetzt? (Quelltext siehe Anhang)

Dann sieht das nämlich statt so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  A1, A2, Summe: TFeld;
...
   LangInt(A1,0);LangInt(A2,1);
   if N>1 then LangInt(Summe,1else LangInt(Summe,0);
   for K:=3 to N do
    begin
     A1:=A2;A2:=Summe;
     LangAdd(Summe,A1,A2);
    end;


So aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  A1, A2, Summe: TVeryLongInt;
...
  A1 := 0;
  A2 := 1;
  if N>1 then
    Summe := 1
  else
    Summe := 0;
  for K:=3 to N do
  begin
    A1 := A2;
    A2 := Summe;
    Summe := A1 + A2;
  end;
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Fiete
Fiete Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 603
Erhaltene Danke: 340

W7
Delphi 6 pro
BeitragVerfasst: Mo 14.08.23 17:11 
Moin jaenicke,

habe versucht den Quelltext mit D6pro zu compilieren, leider fehlgeschlagen.

Meldung vom Compiler:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
[Fehler] LangZahlRechnenInt64_2.pas(11): 'END' erwartet, aber 'CLASS' gefunden
[Fehler] LangZahlRechnenInt64_2.pas(11): ';' erwartet, aber '(' gefunden
[Fehler] LangZahlRechnenInt64_2.pas(11): ';' erwartet, aber ')' gefunden
[Fehler] LangZahlRechnenInt64_2.pas(11): '=' erwartet, aber ';' gefunden
[Fehler] LangZahlRechnenInt64_2.pas(12): PROCEDURE oder FUNCTION erwartet
[Fehler] LangZahlRechnenInt64_2.pas(30): 'IMPLEMENTATION' erwartet, aber ';' gefunden
[Fehler] LangZahlRechnenInt64_2.pas(42): ';' erwartet, aber 'IMPLEMENTATION' gefunden
[Fataler Fehler] FiboLang.pas(7): Verwendete Unit 'LangZahlRechnenInt64_2.pas' kann nicht compiliert werden


Gruß Fiete

_________________
Fietes Gesetz: use your brain (THINK)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 14.08.23 18:40 
Stimmt, das geht erst ab Delphi 2006. Ich habe nicht darüber nachgedacht und nicht nachgeschaut, welche Version du verwendest.

Mit der kostenlosen Community Edition funktioniert es aber.
Fiete Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 603
Erhaltene Danke: 340

W7
Delphi 6 pro
BeitragVerfasst: Di 15.08.23 15:08 
Moin Sebastian,
in meinem Archiv habe ich noch eine Formel zur Berechnung der N-ten Fibonacci-Zahl gefunden.
FiboFormel
der Delphiquelltext dazu:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var Erg,W5,Nenner:Extended;
 begin
  N:=Eingabe.Value;
  inc(N);
  W5:=sqrt(5);Nenner:=W5*Power(2,N);
  Erg:=(power(1+W5,N)-power(1-W5,N))/Nenner;
  Ausgabe.Items.Add(Format('%0.0f',[Erg]));
 end;

Mir fehlt jetzt die Kenntnis wie ich die Zeilen auf beliebig große RealZahlen erweitere.

Vielleicht hast Du eine Idee.

Gruß Fiete
Einloggen, um Attachments anzusehen!
_________________
Fietes Gesetz: use your brain (THINK)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 16.08.23 07:27 
Für die Formel von Moivre-Binet wirst du analog zu deinen Langzahlen eine Berechnungsmöglichkeit mit der entsprechenden Präzision benötigen. Das gibt es alles fertig, z.B. hier:
github.com/rvelthuis/DelphiBigNumbers
Allerdings funktionieren diese Bibliotheken wohl alle nicht mit Delphi 6. Diese funktioniert z.B. ab XE2.

Für diesen Beitrag haben gedankt: Fiete