AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schulaufgabe, Problem mit Variablen

Ein Thema von PrinceOfPerZiA · begonnen am 29. Dez 2006 · letzter Beitrag vom 30. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
PrinceOfPerZiA

Registriert seit: 29. Dez 2006
6 Beiträge
 
#1

Schulaufgabe, Problem mit Variablen

  Alt 29. Dez 2006, 21:13
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:
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!
so, ich hab das mal gemacht
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:
http://img150.imageshack.us/img150/9...reendz9.th.jpg

Code:
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;
das problem:
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



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!
Angehängte Dateien
Dateityp: rar zinsen_115.rar (167,0 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Schulaufgabe, Problem mit Variablen

  Alt 29. Dez 2006, 21:20
Verwende an diesen Stellen statt StrtoFloat StrtoInt, dann wird aus dem Text eine Ganzzahl gemacht.
Der modulo Operator kann logischerweise nur bei Ganzzahlen funktionieren.
Benjamin
  Mit Zitat antworten Zitat
PrinceOfPerZiA

Registriert seit: 29. Dez 2006
6 Beiträge
 
#3

Re: Schulaufgabe, Problem mit Variablen

  Alt 29. Dez 2006, 21:38
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;
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Schulaufgabe, Problem mit Variablen

  Alt 29. Dez 2006, 21:51
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;
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Schulaufgabe, Problem mit Variablen

  Alt 29. Dez 2006, 23:26
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:
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;
Ach ja und nochwas gewöhn dir mal an, den Code ein wenig zu struckturieren, du wirst es mir einen Tages mal noch danken.
  Mit Zitat antworten Zitat
PrinceOfPerZiA

Registriert seit: 29. Dez 2006
6 Beiträge
 
#6

Re: Schulaufgabe, Problem mit Variablen

  Alt 30. Dez 2006, 11:32
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.
floattostrf(erg,ffCurrency,18,2) aber ich wusste schon dass der code so falsch war, allerdings habe ich das jetzt so gelöst:

Delphi-Quellcode:
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;
so ist das doch auch richtig oder? es gab jetzt aber noch einen zusatz zur aufgabe:
Code:
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)
das ist ja sozusagen eine umkehrung. welcher code wäre jetzt vorteilhafter. der von mir oder von hugo?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Schulaufgabe, Problem mit Variablen

  Alt 30. Dez 2006, 12:29
Hallo,

das sollte etwa so gehen:

Delphi-Quellcode:
while gut <= EndKaptital do
begin
  gut:=gut*(1+(zins/100));
  zaehler:=zaehler+1;
end;
oder die Monate zaehlen:

Delphi-Quellcode:
while gut <= EndKaptital do
begin
  gut:=gut*(1+(zins/100)/12);
  monate:=monate+1;
end;
Du mußt dann allerdings noch eine Fallunterscheidung machen.

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
Klaus
  Mit Zitat antworten Zitat
PrinceOfPerZiA

Registriert seit: 29. Dez 2006
6 Beiträge
 
#8

Re: Schulaufgabe, Problem mit Variablen

  Alt 30. Dez 2006, 14:01
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:
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;
nur gibt's da jetzt folgendes problem:
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?
Miniaturansicht angehängter Grafiken
screen_660.jpg  
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Schulaufgabe, Problem mit Variablen

  Alt 30. Dez 2006, 14:08
floattostrf(erg,ffCurrency,18,2) 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.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.613 Beiträge
 
#10

Re: Schulaufgabe, Problem mit Variablen

  Alt 30. Dez 2006, 14:10
Ä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*.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 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