Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Zinseszins-Berechnung (https://www.delphipraxis.net/187618-zinseszins-berechnung.html)

timbou 15. Dez 2015 10:53

Zinseszins-Berechnung
 
Hallo,

ich schreibe am Donnerstag eine Kursarbeit in Informatik. Leider fehlt mein Lehrer meistens bzw. erklärt uns nichts, weshalb ich nun nicht weiß, was an folgenden Programmen falsch ist. Vielen Dank, sollte sich einer erbarmen und die Fehler korrigieren.

Aufgabe war: "Schreibe ein Programm, das bei Eingabe von Startkapital, Zinssatz, Zielkapital die Laufzeit einer Anlage (von Geld) ausgibt. Formuliere das Programm mit While und Repeat."

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
   x := StrToFloat(Edit1.Text);
   Zinssatz := StrToFloat(Edit2.Text);
   Zielkapital := StrToFloat(Edit3.text);
  repeat
    X := X * (Zinssatz/100*1);
    Memo1.Lines.Add(FloatToStr(x));
  until X >= Zielkapital;

 Laufzeit := Memo1.Lines.Count;





end;

vagtler 15. Dez 2015 10:56

AW: Was ist falsch?
 
Erstens ist das kein Programm (nur ein Ausschnitt) und wieso glaubst Du, dass es falsch ist?

timbou 15. Dez 2015 11:01

AW: Was ist falsch?
 
Habe nur noch die ganzen Variablen als Real definiert (außer Laufzeit, das mit Integer).

In der Memo spuckt mir das Programm nur ganz viele Nullen aus...

Daniel 15. Dez 2015 11:02

AW: Was ist falsch?
 
Moin,

sei bitte so gut und gib Deinem Beitrag einen aussagekräftigen Titel. ;-)
(Den Stand jetzt ist wenigstens der falsch)

Allgemein hat sich bei diesen Problemen bewährt, die Lösung "umgangssprachlich" zu formulieren und zwar so konkret, dass Du anhand dieser Beschreibung mit Stift und Papier zur korrekten Lösung kommen würdest. Danach weiß man i.A. sehr fix, was im Programm falsch läuft.

timbou 15. Dez 2015 11:04

AW: Was ist falsch?
 
Hi,

entschuldigung, aber wo ändert man den Titel? Habe nichts finden können.

Über so einen Lösungsansatz wäre ich noch glücklicher...

Bambini 15. Dez 2015 11:05

AW: Was ist falsch?
 
Zitat:

Zitat von timbou (Beitrag 1324502)
Code:
    X := X * (Zinssatz/100*1);

Sollte sich das Startkapital nicht um den Wert Zinswert erhöhen?
Besser wäre:
Code:
    X := X * (Zinssatz/100 + 1);

timbou 15. Dez 2015 11:13

AW: Was ist falsch?
 
Leichsinnsfehler :cry: Aber vielen vielen Dank!

gammatester 15. Dez 2015 11:19

AW: Zinseszins-Berechnung
 
Du benutzt kein
Delphi-Quellcode:
while
, also ist die Aufgabe nicht richtig beantwortet.

timbou 15. Dez 2015 11:45

AW: Zinseszins-Berechnung
 
Ich verstehe allerdings nicht, was für einen Mehrwert das bringen soll, bzw. wie man dort noch while einbinden soll.
Ich hätte jetzt noch geschrieben:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
   x := StrToFloat(Edit1.Text);
   Zinssatz := StrToFloat(Edit2.Text);
   Zielkapital := StrToFloat(Edit3.text);

   while (x< Zielkapital) do
        begin
        repeat
              X := X * (Zinssatz/100 + 1);
              Memo1.Lines.Add(FloatToStr(x));
        until X >= Zielkapital;

        end;


 Laufzeit := Memo1.Lines.Count;
 Button1.Caption:= IntToStr(Laufzeit) + ' Monate';
Aber das ginge ja auch ohne While-Schleife? Beziehungsweise mit ner einfachen If...then-Struktur

Daniel 15. Dez 2015 11:49

AW: Zinseszins-Berechnung
 
Unser Lehrer damals hatte uns eine ähnliche Aufgabe gestellt und wollte dabei auf den Unterschied zwischen "while" und "repeat" hinaus. Wir sollten damals eine Lösung tatsächlich auf verschiedene Arten implementieren.
Hier nun einen Weg finden zu wollen, der auf Teufel komm raus beide Schleifen-Typen in ein und demselben Code-Schnipsel berücksichtigt, hielte ich für wenig hilfreich.

timbou 15. Dez 2015 11:56

AW: Zinseszins-Berechnung
 
Das habe ich auch nicht verstanden. Sollte so eine Aufgabenstellung in der Arbeit drankommen, mache ich eben einmal mit While und einmal mit Repeat. Vielleicht dann auch noch ne Begründung, warum das Schreiben des Codes mit zwei Schleifentypen unnötig ist... Ich hoffe mal, dass das reichen würde

Sir Rufo 15. Dez 2015 11:57

AW: Zinseszins-Berechnung
 
Einen Mehrwert würde es aber bringen, wenn du deinen Code in eine Funktion auslagern würdest:
Delphi-Quellcode:
function ZinsesZinsBerechnungLaufzeit( const StartKapital, ZinsSatz, ZielKapital: Currency ) : Integer;
var
  AktuellesKapital: Currency;
  Laufzeit: Integer;
begin
  AktuellesKapital := StartKapital;
  Laufzeit := 0;
  while AktuellesKapital < ZielKapital do
  begin
    AktuellesKapital := AktuellesKapital + ( AktuellesKapital * Zinssatz ) / 100;
    Inc( Laufzeit );
  end;
  Result := Laufzeit;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LaufzeitLabel.Caption := IntToStr( 
    ZinsesZinsBerechnungLaufzeit( 
      StrToCurr( StartKapitalEdit.Text ),
      StrToCurr( ZinsSatzEdit.Text ),
      StrToCurr( ZielKapitalEdit.Text ) ) );
end;
Im Übrigen macht dieser Code exakt das, was in der Aufgabe steht. Denn dort sehe ich nichts von der Ausgabe der Zwischenschritte ;)

Ein Umbau auf
Delphi-Quellcode:
repeat
sollte problemlos möglich sein. Allerdings musst du auf die Kopf-Bedingung achten ;)

timbou 15. Dez 2015 12:00

AW: Zinseszins-Berechnung
 
Habe im Internet davon auch schon gelesen. Allerdings sind wir wegen ständigen Ausfällen wegen "Krankheit" des Lehrers noch nicht so weit gekommen, wodurch dies auch nicht verlangt ist.

Aber natürlich wäre es verdammt souverän, nach paar Stunden Unterricht solche Codes rauszuhauen :D

Sir Rufo 15. Dez 2015 12:04

AW: Zinseszins-Berechnung
 
Zitat:

Zitat von timbou (Beitrag 1324526)
Habe im Internet davon auch schon gelesen. Allerdings sind wir wegen ständigen Ausfällen wegen "Krankheit" des Lehrers noch nicht so weit gekommen, wodurch dies auch nicht verlangt ist.

Aber natürlich wäre es verdammt souverän, nach paar Stunden Unterricht solche Codes rauszuhauen :D

Verlangt ist das bestimmt nicht, aber wie du siehst ist alles auf einmal viel übersichtlicher und handlicher :)

Und für eine vernünftige Namesgebung sollte eigentlich kein Unterricht nötig sein ;)

timbou 15. Dez 2015 12:06

AW: Zinseszins-Berechnung
 
Ist wirklich viel übersichtlicher :) Ich mache es dann in der Kursarbeit nach den vom Lehrer gegebenen Methoden. Sollte ich noch Zeit haben, kann ich ja nach etwas nach dieser Methode schreiben. Extrapunkte sind immer gut:-D

p80286 15. Dez 2015 14:43

AW: Zinseszins-Berechnung
 
Zitat:

Zitat von Daniel (Beitrag 1324523)
Unser Lehrer damals hatte uns eine ähnliche Aufgabe gestellt und wollte dabei auf den Unterschied zwischen "while" und "repeat" hinaus. Wir sollten damals eine Lösung tatsächlich auf verschiedene Arten implementieren.
Hier nun einen Weg finden zu wollen, der auf Teufel komm raus beide Schleifen-Typen in ein und demselben Code-Schnipsel berücksichtigt, hielte ich für wenig hilfreich.

Mir scheint eher das es um Renten und Zins-Berechnung geht. Wenn ich mich richtig erinnere wird Rente am (zins-)Jahresbegin und Zinsen am Jahresende gezahlt. es könnte sein daß das gemeint ist.
(Bitte nicht schlagen, ist mehr als 40 Jahre her, daß ich mich damit beschäftigt habe)

Gruß
K-H

Amateurprofi 16. Dez 2015 00:11

AW: Zinseszins-Berechnung
 
Zitat:

Zitat von Sir Rufo (Beitrag 1324525)
Einen Mehrwert würde es aber bringen, wenn du deinen Code in eine Funktion auslagern würdest:
Delphi-Quellcode:
function ZinsesZinsBerechnungLaufzeit( const StartKapital, ZinsSatz, ZielKapital: Currency ) : Integer;
var
  AktuellesKapital: Currency;
  Laufzeit: Integer;
begin
  AktuellesKapital := StartKapital;
  Laufzeit := 0;
  while AktuellesKapital < ZielKapital do
  begin
    AktuellesKapital := AktuellesKapital + ( AktuellesKapital * Zinssatz ) / 100;
    Inc( Laufzeit );
  end;
  Result := Laufzeit;
end;

Probier das mal mit StartKapital = 0.01 und Zinssatz=0.1;
Beides Werte die durchaus vorkommen können.

Um eine Endlosschleife zu vermeiden, sollte geprüft werden, ob die Zinsen = 0 sind.
Weiterhin sollten die angefallenen Zinsen auf 2 Stellen gerundet werden, denn Banken schreiben keine Zinsen gut, wenn der (gerundete) Zinsertrag < 1 Cent ist.

Sir Rufo 16. Dez 2015 00:36

AW: Zinseszins-Berechnung
 
Ich muss die Aufgabe nicht abgeben ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 Uhr.

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