![]() |
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 ![]() ![]() 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 |
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. |
Re: Logarithmus in Delphi
In deinem Fall wäre eher der Logarithmus zur Basis 10 der richtige:
![]()
Delphi-Quellcode:
d := (log10(a) * log10(b)) / log10(c);
|
Re: Logarithmus in Delphi
Wenn du die Math-Unit nicht einbinden willst kannst du auch den natürlichen Logarithmus nehmen...
Code:
also
lg10(x) = ln(x) / ln(10)
Delphi-Quellcode:
Gruss
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; Thorsten |
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:
Wobei aus der Gleichung oben
zahl1:=StrToFloat(Edit1.Text);
zahl2:=StrToFloat(Edit2.Text); gesamt:=(log10(1000000) * log10(zahl1)) / log10(zahl2); label6.caption:=floattoStrF(gesamt,ffcurrency,7,2); 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: ![]() 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... |
Re: Logarithmus in Delphi
Zitat:
Zitat:
|
Re: Logarithmus in Delphi
Also wenn in dieser Rechnung:
Delphi-Quellcode:
zahl1 = 5000
gesamt:=(log10(1000000) * log10(zahl1)) / log10(zahl2);
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: ![]() (Form2 ist die entscheidende, bzw. die "Zeitberechnung") Danke dir! |
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.
|
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... :/ |
Re: Logarithmus in Delphi
Sorry hatte dein . als * gelesen, muß also:
Delphi-Quellcode:
heißen.
gesamt:=(log10(1000000) - log10(zahl1)) / log10(zahl2);
|
Re: Logarithmus in Delphi
Also genau so habe ich das jetzt auch stehen und bekomme das hier raus:
![]() Stimmt das etwa? |
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:
Im Übrigen rate ich dir davon ab, deine Variablen "zahl1", "zahl2" usw. zu nennen. Gib ihnen sinnvolle Namen.
zeit:=ln(endsumme/startkapital)/ln(1+zins/100);
|
Re: Logarithmus in Delphi
Eben, und ich verstehe nicht, was an der Rechnung falsch ist, das ist das, was mich aufregt :wall:
|
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 |
Re: Logarithmus in Delphi
Argh, jetzt ist es eine andere Zahl, aber immer noch falsch >.<
Delphi-Quellcode:
Als Ergebnis zeigt er nun 3.10 an...
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; |
Re: Logarithmus in Delphi
Zitat:
|
Re: Logarithmus in Delphi
Und - wenn ich mich jetzt grade beim Durchsehen der Math.pas nicht verschaut habe - ein kleines bisschen schneller. ;)
|
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! |
Re: Logarithmus in Delphi
Du verwendest den Zinssatz als Startkapital und vice versa. ;)
Statt 5000€ zu 5% nimmst du 5€ zu 5000%. |
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