![]() |
Schulaufgabe, Problem mit Variablen
Liste der Anhänge anzeigen (Anzahl: 1)
hallo community!
habe ein problem mit meinem programm, dass ich schreiben soll und bin auf diese schöne seite gestoßen. das sollte für euch eigentlich ein kinderspiel sein. also, die aufgabenstellung:
Code:
so, ich hab das mal gemacht
Erstelle ein Programm, das ein anzulegendes Guthaben, die Verzinsung pro Jahr, die Dauer der Anlage und die Mindestdauer der Anlage einliest und das resultierende Kapital nach Ablauf der Laufzeit berechnet.
Verwende die while...do...- Schleife! gut ist das erste edit-feld, zins das zweite, dauer das dritte und mind das vierte. erg steht für ergebnis und kommt in das label4. hier der code und ein bild vom proggi: ![]() ![]()
Code:
das problem:
var
Form1: TForm1; gut: real; zins: real; erg: real; zaehler: real; jahre: real; dauer: real; mind: real; monate: real; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin gut:=strtofloat(edit1.text); zins:=strtofloat(edit2.Text); --------------------------------------- dauer:=strtofloat(edit3.text); | mind:=strtofloat(edit4.text); | --------------------------------------- zaehler:=1; jahre:=dauer/12; ________________________ monate:=dauer mod 12; | ________________________| if dauer>=mind then begin while zaehler<=jahre do begin erg:=gut*(1+(zins/100)); zaehler:=zaehler+1; end; end else begin label4.caption:='Sie erhalten leider keine Zinsen.'; end; erg:=gut+(gut*zins/100*monate/12); label4.Caption:='Sie erhalten insgesamt ' + floattostr(erg) + ' €'; end; eigentlich müssten "dauer", "mind" und "monate" als integer definiert sein (der logik her), aber das geht nicht, weil wenn ich das mache, gibt es bei den beiden zeilen die ich gestrichelt abgetrennt habe folgende fehlermeldung: Incompatible Types: 'Integer' and 'Extended' aber mir ist aufgefallen dass alles was man "strtofloat"en will real sein muss, sonst funktionierts nie, also hab ich das ganze mal als real gemacht. und egal wie ich sie definiere (z.b. so wie jetzt), dann kommt folgende fehlermeldung in der zeile, die ich mit einer durchgezogenen linie abgetrennt habe: Operator not applicable to this operand type :cry: :cry: :cry: wer mir vertraut kann ja die datei runterladen (ist angehängt) und sich das mal in delphi anschauen. ich suche wirklich nur hilfe und hab nix schlechtes vor, ihr könnts ja vorher durch den virenscanner jagen. bitte helft mir! |
Re: Schulaufgabe, Problem mit Variablen
Verwende an diesen Stellen statt StrtoFloat StrtoInt, dann wird aus dem Text eine Ganzzahl gemacht.
Der modulo Operator kann logischerweise nur bei Ganzzahlen funktionieren. |
Re: Schulaufgabe, Problem mit Variablen
ok vielen dank, jetzt hab ich ein anderes problem entdeckt.
die if abfrage wird irgendwie nicht beachtet. die schleife soll ja nur ausgeführt werden, wenn "dauer>=mind". das wird aber einfach ignoriert und sie wird immer ausgeführt:
Delphi-Quellcode:
if dauer>=mind then
begin while zaehler<=jahre do begin erg:=gut*(1+(zins/100)); zaehler:=zaehler+1; end; end else begin label4.caption:='Sie erhalten leider keine Zinsen.'; end; |
Re: Schulaufgabe, Problem mit Variablen
Die wird sehr wohl beachtet, nur hast du danach das erg, welches du in der Schleife berechnet hast einfach wieder überschrieben. Desweiteren "überschreibst" du deine Ausgabe Label1.Caption.
So müsste es funktionieren:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin gut := strtoint(edit1.text); zins := strtoint(edit2.Text); dauer := strtoint(edit3.text); mind := strtoint(edit4.text); zaehler := 1; jahre := dauer / 12; monate := dauer mod 12; if dauer>=mind then begin while zaehler<=jahre do begin erg := gut*(1+(zins/100)); zaehler:=zaehler+1; end; label4.Caption := 'Sie erhalten insgesamt ' + floattostr(erg) + ' €'; end else begin label4.caption := 'Sie erhalten leider keine Zinsen.'; end; end; |
Re: Schulaufgabe, Problem mit Variablen
Als die Zinseszins Berechnung in der Schule dran war, warst du bestimmt krank oder so. Da gibt es nämlich eine fertige Formel dafür:
K=K0 * (1+p/100)^n K0 - Startkapital p - Prozentsatz n - Laufzeit Du sollst es zwar mit einer while do-schleife machen, aber mit der Formel könnte man ja mal das Ergebnis überprüfen. Ich hab dir das jetzt mal richtig gemacht:
Delphi-Quellcode:
Ach ja und nochwas gewöhn dir mal an, den Code ein wenig zu struckturieren, du wirst es mir einen Tages mal noch danken.
procedure TForm1.Button1Click(Sender: TObject);
begin gut:=strtofloat(edit1.text); zins:=strtofloat(edit2.Text); dauer:=strtoint(edit3.text); mind:=strtoint(edit4.text); zaehler:=1; jahre:=dauer/12; monate:=dauer mod 12; if dauer>=mind then begin erg:=gut; while zaehler<=jahre do begin erg:=erg*(1+(zins/100)); zaehler:=zaehler+1; end; zaehler:=1; while zaehler<=monate do begin erg:=erg*power(1+zins/100,1/12); zaehler:=zaehler+1; end; label4.Caption:='Sie erhalten insgesamt ' + floattostrf(erg,ffCurrency,18,2); end else begin label4.caption:='Sie erhalten leider keine Zinsen.'; end; end; |
Re: Schulaufgabe, Problem mit Variablen
nein, da war ich nicht krank und ich weiß auch noch wie das geht. aber ich bin leider GANZ neu in delphi, und hab eben noch
ein paar anlaufschwierigkeiten. oft weiß ich eben nicht was ich für ausdrücke verwenden muss. mit der struktur hast du völlig recht. das kenn ich ja schon von anderen sprachen. leider weiß ich auch nicht was das hier ist, was du eingebaut hast. wär nett wenn mir das noch erklärt wird.
Delphi-Quellcode:
aber ich wusste schon dass der code so falsch war, allerdings habe ich das jetzt so gelöst:
floattostrf(erg,ffCurrency,18,2)
Delphi-Quellcode:
so ist das doch auch richtig oder? es gab jetzt aber noch einen zusatz zur aufgabe:
procedure TForm1.Button1Click(Sender: TObject);
begin gut:=strtofloat(edit1.text); zins:=strtofloat(edit2.Text); dauer:=strtoint(edit3.text); mind:=strtoint(edit4.text); zaehler:=1; jahre:=dauer/12; monate:=dauer mod 12; if dauer>=mind then begin while zaehler<=jahre do begin gut:=gut*(1+(zins/100)); zaehler:=zaehler+1; end; erg:=gut+(gut*zins/100*monate/12); label4.Caption := 'Sie erhalten insgesamt ' + floattostr(erg) + ' €'; end else begin label4.caption := 'Sie erhalten leider keine Zinsen.'; end; end;
Code:
das ist ja sozusagen eine umkehrung. welcher code wäre jetzt vorteilhafter. der von mir oder von hugo?
Erweitere dein Programm so, dass du bestimmen kannst, wie lange man sein Geld anlegen müsste, um ein besimmtes Guthaben erreicht zu haben. (Bsp.: Jemand will 650 € anlegen und will wissen wie lang er sein Geld bei einem Zinssatz von 3,6% anlegen müsste, um 850 € zu erhalten)
|
Re: Schulaufgabe, Problem mit Variablen
Hallo,
das sollte etwa so gehen:
Delphi-Quellcode:
oder die Monate zaehlen:
while gut <= EndKaptital do
begin gut:=gut*(1+(zins/100)); zaehler:=zaehler+1; end;
Delphi-Quellcode:
Du mußt dann allerdings noch eine Fallunterscheidung machen.
while gut <= EndKaptital do
begin gut:=gut*(1+(zins/100)/12); monate:=monate+1; end; d.h. wenn das Endkapital eingegeben wurde (EndKapital > 0) und die Laufzeit keine Angabe erhält dann die obige Schleife ausführen. Wenn die Laufzeit gegeben ist und das Endkaptial = 0 ist dann die andere Schleife ausführen. Grüße Klaus |
Re: Schulaufgabe, Problem mit Variablen
Liste der Anhänge anzeigen (Anzahl: 1)
danke, soweit, so gut. hab das jetzt so umgesetzt:
(für die die noch keine klare vorstellung vom proggi haben, hab ich mal n screenshot angehängt).
Delphi-Quellcode:
nur gibt's da jetzt folgendes problem:
procedure TForm1.cmd_newClick(Sender: TObject);
begin gut:=strtofloat(Edit5.Text); zins:=strtofloat(Edit6.Text); erg:=strtofloat(Edit7.Text); zaehler:=0; while gut<erg do begin gut:=gut*(1+(zins/100)); zaehler:=zaehler+1; end; label17.Caption := 'Die Anlage müsste ' + floattostr(zaehler) + ' Jahre dauern.'; end; diese aktion wird ja solange ausgeführt bis das guthaben größer oder gleich dem zielguthaben ist. im idealfall hätte man gleich, nur leider tritt der idealfall ja nur ganz selten auf ^^ das heißt bei dem obigen beispiel bekomme ich jetzt 8 Jahre heraus. Das stimmt ja nicht ganz, es sind irgendwie 7,5... also werden die monate ja nicht beachtet (sieht man ja oben, es wird immer um 1 jahr erhöht), und das ist zu grob. wie kann ich jetzt die monate mit reinbekommen? :pale: |
Re: Schulaufgabe, Problem mit Variablen
Delphi-Quellcode:
Diese Zeile formatiert dein Ergebnis in eine Währung, d.h. das Ergebnis wird nur mit 2 Dezimalstellen angegeben und hat die Währungseinheit angehägt.
floattostrf(erg,ffCurrency,18,2)
Außerdem finde ich das komisch, das du erst ein Jahrezins machts und wenn dann noch ein paar Monate übrig sind du dafür auch zinsen gibts. Mach das doch so, dass man auswählen kann ob es monatlich, halbjährlich oder ganzjährlich Zinsen gibt. |
Re: Schulaufgabe, Problem mit Variablen
Ähm.. sorry, aber ich muss da jetzt mal ausbremsen.
Bei uns gilt: Neue Frage, neuer Thread. Ist einfach geschickter zur Suche nach gezielten Lösungen. Also bitte mach einen neuen Thread mit der Frage auf. Ich mag nur ungernst hier zumachen, deswegen appeliere ich einfach mal an Euch dass ihr hier nicht querschiesst und doch drauf antwortet *g*. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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