| 
| Autor | Beitrag |  
| Fiete 
          Beiträge: 617
 Erhaltene Danke: 364
 
 W7
 Delphi 6 pro
 
 | 
Verfasst: Mo 24.07.23 16:31 
 
Moin,
 das Programm berechnet die N-te Fibonaccizahl, N=1 bis 999999.
   Die Langzahlunit enthält die folgenden Methoden:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 
 | type TFeld=Array of Int64;
 procedure LangInt(var A:TFeld;B:Integer);
 function LangKleiner(A,B:TFeld):Boolean;  function LangGleich(A,B:TFeld):Boolean;   procedure LangRead(Zahl:String;var Z:TFeld);  procedure LangIntToStr(Zahl:TFeld;var Erg:String);  procedure LangAdd(var S:TFeld;A,B:TFeld);   procedure LangSub(var D:TFeld;A,B:TFeld);   procedure LangMul(var E:TFeld;A,B:TFeld);   procedure LangDivision(var E,R:TFeld;A,B:TFeld);
 procedure LangAusgabe(LMemo:TMemo;S:TFeld);  procedure LangSqrt(var XA:TFeld;A:TFeld);  procedure LangPotenz(var E:TFeld;B:TFeld;Expo:Cardinal);
 |  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 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Mo 14.08.23 01:22 
 
Das funktioniert sehr gut.    Wie wäre es, wenn du die Langzahlarithmetik als "echten" Zahlentyp umsetzt? (Quelltext siehe Anhang)
 Dann sieht das nämlich statt so:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 
 | varA1, A2, Summe: TFeld;
 ...
 LangInt(A1,0);LangInt(A2,1);
 if N>1 then LangInt(Summe,1) else LangInt(Summe,0);
 for K:=3 to N do
 begin
 A1:=A2;A2:=Summe;
 LangAdd(Summe,A1,A2);
 end;
 |  So aus:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 
 | varA1, 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  
          Beiträge: 617
 Erhaltene Danke: 364
 
 W7
 Delphi 6 pro
 
 | 
Verfasst: Mo 14.08.23 17:11 
 
Moin jaenicke,
 habe versucht den Quelltext mit D6pro zu compilieren, leider fehlgeschlagen.
 Meldung vom Compiler:
 		                       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 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: 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  
          Beiträge: 617
 Erhaltene Danke: 364
 
 W7
 Delphi 6 pro
 
 | 
Verfasst: Di 15.08.23 15:08 
 
Moin Sebastian,
 in meinem Archiv habe ich noch eine Formel zur Berechnung der N-ten Fibonacci-Zahl gefunden.
   der Delphiquelltext dazu:
  		                       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 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: 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
 |  |  |  |