Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Logarithmus in Delphi (https://www.delphipraxis.net/102423-logarithmus-delphi.html)

kischiman 28. Okt 2007 18:43


Logarithmus in Delphi
 
Hallo!
Ich bin hier ganz neu im Forum und habe eine ziemlich wichtige und dringende Frage.
Eine Antwort auf sie, die ich auch praktisch nachvollziehen kann habe ich bisher nirgendwo gefunden, daher schreibe ich mein Problem hier mal rein:
Also ich habe eine Aufgabe, die die folgende Gleichung vorsieht:

lg A - lg B
------------ = D
lg C

Nun weiß ich zwar (u.a. aus http://www.dsdt.info/), wie ein Logarithmus Naturalis aussehen soll, aber ich weiß damit nichts anzufangen, bzw. wie ich ihn in diese Gleichung einbauen kann.
Hier fand ich die Zeile, die einen ln beschreibt, aber ich hab keine Ahnung, was ich damit anfangen soll.

Ich habe ein Programm zur Aufgabe, welches aus dem Zinssatz und dem Startkapital die Zeit berechnen soll, in der man auf das Endkapital (= 1.000.000) kommt.
Es gibt zwei Eingabefelder (Zinssatz und Starkapital) und einen Auslösebutton. Aber das ist ja kein Problem, mein Problem ist die Rechnung, die dabei geschehen muss... Jeder Tipp ist super-hilfreich, ich hoffe also, ihr könnt mir helfen!
Danke!
:dp:

kischiman

Jelly 28. Okt 2007 18:55

Re: Logarithmus in Delphi
 
Herzlich willkommen hier im Forum,

leider verstehe ich nicht, was du nicht verstehst... Wo hast du die Formel her? Was ist A, B, C und D?

Ln ist der natürliche Logarythmus, mit der Basis e. e ist die Eulersche Zahl und hat den Wert 2,718... ln(e) ist dementsprechend wieder 1. Und die Umkehrfunktion ist in dem Fall die Exponentialfunktion e^x.

mkinzler 28. Okt 2007 18:56

Re: Logarithmus in Delphi
 
In deinem Fall wäre eher der Logarithmus zur Basis 10 der richtige:
http://www.dsdt.info/referenz/kategorie/?id=16

Delphi-Quellcode:
d := (log10(a) * log10(b)) / log10(c);

omata 28. Okt 2007 19:04

Re: Logarithmus in Delphi
 
Wenn du die Math-Unit nicht einbinden willst kannst du auch den natürlichen Logarithmus nehmen...
Code:
lg10(x) = ln(x) / ln(10)
also
Delphi-Quellcode:
function D(a,b,c:real):real;

  function lg10(x:real):real;
  begin
    Result:=ln(x) / ln(10);
  end;

begin
  Result:=(lg10(a) - lg10(b)) / lg10(c);
end;
Gruss
Thorsten

kischiman 28. Okt 2007 19:20

Re: Logarithmus in Delphi
 
Wow!
Ihr seid schneller, als ich erwartet habe!
Vielen Dank für die Antworten!
Ich habe das Math-Unit eingebunden und es so gemacht, wie mkinzler beschrieben hat.

Das ganze sieht bei mir jetzt so aus:

Delphi-Quellcode:
zahl1:=StrToFloat(Edit1.Text);
zahl2:=StrToFloat(Edit2.Text);
gesamt:=(log10(1000000) * log10(zahl1)) / log10(zahl2);
label6.caption:=floattoStrF(gesamt,ffcurrency,7,2);
Wobei aus der Gleichung oben
a = 1000000
b = zahl1
c = zahl2
d = gesamt
entspricht.
Ich habe es erst bloß mit Variablen abgekürzt, damit es für euch einfacher zu verstehen ist.
Doch irgendwie habe ich das Gefühl, dass irgendwas nicht richtig funktioniert.
Ich versuche es nochmal auf die Art, wie omata es beschrieb, also mit dem ln, vielleicht führt das zu realistischeren Ergebnissen...
Wer sich die Mühe machen und sich das ansehen will, ich habs auf meinen Server hochgeladen:
www.kischiman.de/delphi/projekt2.rar
Ich danke euch nochmal vielmals für die Hilfe!!!

EDIT: Also wenn ich das jetzt mit dem Logarithmus Naturalis mache, meckert Delphi bei function. (Anweisung erwartet, aber function gefunden) Ich habs bestimmt falsch hingesetzt, aber egal wo, es passt ihm nicht...

mkinzler 28. Okt 2007 19:30

Re: Logarithmus in Delphi
 
Zitat:

Ich versuche es nochmal auf die Art, wie omata es beschrieb, also mit dem ln, vielleicht führt das zu realistischeren Ergebnissen...
Da sollte das selbe rauskommen, weil seine Funktion den log10 auf Basis von ln implementiert.
Zitat:

Doch irgendwie habe ich das Gefühl, dass irgendwas nicht richtig funktioniert.
Inwiefern? Was kommt raus und welches Ergebnis erwartest du? Was berechnet die Formel?

kischiman 28. Okt 2007 19:54

Re: Logarithmus in Delphi
 
Also wenn in dieser Rechnung:
Delphi-Quellcode:
gesamt:=(log10(1000000) * log10(zahl1)) / log10(zahl2);
zahl1 = 5000
zahl2 = 5
ist,
bekomme ich als
gesamt
1,13
als Ergebnis...

Ich hab jetzt leider keine Möglchkeit, das mathematisch zu überprüfen, aber schau dir doch bitte, wenn es keine Umstände macht, das Programm an:
www.kischiman.de/delphi/projekt2.rar
(Form2 ist die entscheidende, bzw. die "Zeitberechnung")
Danke dir!

mkinzler 28. Okt 2007 20:05

Re: Logarithmus in Delphi
 
Wenn du uns nicht verrätst was die formel macht, kann man dir auch nicht sagen, ob die Rechnung richtig ist.

kischiman 28. Okt 2007 20:13

Re: Logarithmus in Delphi
 
Oh, achso, entschuldigt...
Also es geht um Zinsrechnung.
Das Programm soll berechnen, wie lange man braucht, um auf 1.000.000€ zu kommen, mit dem gewünschten Startkapital (zahl1) und Zinssatz (zahl2).
Mathematisch ausgedrückt würde die Formel so aussehen:
t=(lg(1.000.000) - lg (Startkapital)) / lg (Zinssatz + 1)
t ist logischwerweise die Zeit, also das Ergebnis...
Ou man, ich dreh durch, ich blick das überhaupt nicht durch in Delphi... :/

mkinzler 28. Okt 2007 20:16

Re: Logarithmus in Delphi
 
Sorry hatte dein . als * gelesen, muß also:
Delphi-Quellcode:
gesamt:=(log10(1000000) - log10(zahl1)) / log10(zahl2);
heißen.

kischiman 28. Okt 2007 20:34

Re: Logarithmus in Delphi
 
Also genau so habe ich das jetzt auch stehen und bekomme das hier raus:
http://kischiman.de/delphi/bild1.JPG
Stimmt das etwa?

3_of_8 28. Okt 2007 20:37

Re: Logarithmus in Delphi
 
Nein, stimmt überhaupt nicht.

Du brauchst deutlich mehr als 1,3 Jahre, um bei 5% und 5000€ Startkapital auf 1 Mio. € zu kommen.

EDIT: Genaugenommen brauchst du etwa 108,59 Jahre.

Die Formel dafür:
Zeit=ln(Endsumme/Startkapital)/ln(1+Zinssatz)

Herleitung:
Endsumme=Startkapital*(1+Zinssatz)^Zeit
(1+Zinssatz)^Zeit=Endsumme/Startkapital
Zeit=log_(1+Zinssatz) (Endsumme/Startkapital)
Zeit=ln(Endsumme/Startkapital)/ln(1+Zinssatz)

Also in diesem speziellen Fall:
Zeit=ln(1000000/5000)/ln(1+5%)=ln(200)/ln(1.05)=108,59

In Delphi sieht das dann so aus:
Delphi-Quellcode:
zeit:=ln(endsumme/startkapital)/ln(1+zins/100);
Im Übrigen rate ich dir davon ab, deine Variablen "zahl1", "zahl2" usw. zu nennen. Gib ihnen sinnvolle Namen.

kischiman 28. Okt 2007 20:43

Re: Logarithmus in Delphi
 
Eben, und ich verstehe nicht, was an der Rechnung falsch ist, das ist das, was mich aufregt :wall:

3_of_8 28. Okt 2007 20:48

Re: Logarithmus in Delphi
 
Siehe Edit oben.

Im Übrigen ist der Fehler höchstwahrscheinlich, dass du den Zinssatz direkt übernimmst, d.h. du machst aus 5% einfach 5. Aber 5 entspricht dann einem Zinssatz von 400%. Du musst den eingegebenen Zinssatz in Prozent erst durch 100 teilen und dann 1 addieren, also einfach: 1+zins/100

kischiman 28. Okt 2007 21:17

Re: Logarithmus in Delphi
 
Argh, jetzt ist es eine andere Zahl, aber immer noch falsch >.<

Delphi-Quellcode:
begin
Speedbutton3.visible:=true;
Speedbutton4.visible:=false;
label6.visible:=true;
label7.visible:=true;
startkapital:=StrToFloat(Edit1.Text);
zinssatz:=StrToFloat(Edit2.Text);
zeit:=ln(1000000/startkapital)/ln(1+(zinssatz/100));
label6.caption:=floattoStrF(zeit,ffcurrency,7,2);
end;
Als Ergebnis zeigt er nun 3.10 an...

Khabarakh 28. Okt 2007 21:19

Re: Logarithmus in Delphi
 
Zitat:

Zitat von 3_of_8
Die Formel dafür:
Zeit=ln(Endsumme/Startkapital)/ln(1+Zinssatz)

Was nach den Logarithmengesetzen absolut äquivalent zur bisher gennanten Formel ist ;) . Schöner ist sie allerdings :mrgreen: .

3_of_8 28. Okt 2007 21:24

Re: Logarithmus in Delphi
 
Und - wenn ich mich jetzt grade beim Durchsehen der Math.pas nicht verschaut habe - ein kleines bisschen schneller. ;)

kischiman 29. Okt 2007 09:18

Re: Logarithmus in Delphi
 
Also ich verstehe nicht, was ich da falsch mache -.-
Wie muss ich denn die Variablen bestimmen? Also bei mir sind jetzt alle Real, aber damit ändert sich die Zahl nur auf ein paar Zehntel...
Ich hoffe, ihr könnt mir noch helfen! Ich danke euch aber trotzdem wirklich für die Hilfe, ihr habt mich auf jeden Fall weitergebracht, als ich war!

3_of_8 29. Okt 2007 09:52

Re: Logarithmus in Delphi
 
Du verwendest den Zinssatz als Startkapital und vice versa. ;)

Statt 5000€ zu 5% nimmst du 5€ zu 5000%.

kischiman 29. Okt 2007 13:55

Re: Logarithmus in Delphi
 
Ja!! Das hab ich jetzt auch gemerkt, Schande über mein Haupt! Danke euch allen vielmals!!! Es funktioniert jetzt, ich hab die Edit-Felder einfach umgetauscht und und schon funktioniert es! (Das ganze Projekt war eine Gruppenarbeit und das Design habe nicht ich gemacht und der Depp, der das gemacht hat, hat "zahl1" auf das "Edit2" zugewiesen und "zahl2" auf "Edit1", das brachte mich natürlich durcheinander -.-)
Daher, vielen Dank nochmal, dank euch verstehe ich jetzt das System der Logarithmen in Delphi!
:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 Uhr.

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