Autor Beitrag
1_of_1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35


Delphi 5
BeitragVerfasst: So 18.06.06 09:06 
hallo!
Ich habe folgende Prozedur:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button1Click(Sender: TObject);
var n, i, q: integer;
    x, p, z: real;
    dasArray: Array[1..n] of Integer;   {Zeile 39 --> 1. Fehlermeldung}}}

begin
     x:=strtofloat(edit1.text);
     p:=strtofloat(edit2.text);
     n:=strtoint(edit3.text);
for i:= 1 to n do
    begin
         z:=(x*p)/100;
         x:=x+z;
         dasArray[i]:=x;                {Zeile 49 --> 2. Fehlermeldung}
   end;
Label7.caption:=floattostr(x);

end;


und dabei folgende Fehlermeldungen:
[Fehler] Unit1.pas(39): Konstantenausdruck erwartet
[Fehler] Unit1.pas(49): Inkompatible Typen: 'Integer' und 'Real'

Herauskommen soll eine Art Zinsrechner, mit den Variablen x-->Startkapital in Euro; p-->Zinssatz in Prozent und n-->Sparzeit in Jahren.

Ich muss wohl irgendwo einen grundlegenden Fehler gemacht haben, aber wie behebe ich diesen?

Ach ja, und in das Array soll der jeweilige Gesamtbetrag des jeweiligen Jahres gespeichert werden. (Keine Ausgabe!)


Zuletzt bearbeitet von 1_of_1 am So 18.06.06 09:11, insgesamt 1-mal bearbeitet
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 18.06.06 09:10 
1.)
Zitat:
ausblenden Delphi-Quelltext
1:
dasArray: Array[1..n] of Integer;   {Zeile 39 --> 1. Fehlermeldung}}}					

Das geht so nicht. n muß konstante sein oder du verwendest besser einen dynamische Array:
ausblenden Delphi-Quelltext
1:
dasArray: Array of Integer;					

und setzt die Größe zur Laufzeit:

ausblenden Delphi-Quelltext
1:
setLength( dasArray, n);					


2.) Du kannst einer Integervariable keine Gleitkommazahl zuweisen!

_________________
Markus Kinzler.
1_of_1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35


Delphi 5
BeitragVerfasst: So 18.06.06 09:14 
Zu 1.: Danke, jetzt ist mein Problem schon halb gelöst.
Zu 2.: Wie schreibe ich dann aber eine Zuweisung des jewweiligen x-Wertes zu dem jeweiligen Array-Feld?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 18.06.06 09:22 
Nimm
dasArray: Array of Extended;
und Nimm für z besser auch Extended.

_________________
Markus Kinzler.
1_of_1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35


Delphi 5
BeitragVerfasst: So 18.06.06 09:27 
Danke! Das ist es!
Wie kann ich jetzt die einzelnen Array-Felder ausgeben? (create label oder so etwas?)
Wie kann ich den Endwert auf zwei Stellen nach dem Komma runden?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 18.06.06 09:38 
Zitat:
Wie kann ich jetzt die einzelnen Array-Felder ausgeben? (create label oder so etwas?)

Memo oder ListView.
Zitat:
Wie kann ich den Endwert auf zwei Stellen nach dem Komma runden?

Die Werte selber oder für die Ausgabe?
Die Werte können z.B. mit
Wert := Trunc(Wert*100+5)/100; mathematisch gerundet werden.
Zur Ausgabe kann man Format() verwenden.

_________________
Markus Kinzler.
1_of_1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35


Delphi 5
BeitragVerfasst: So 18.06.06 09:58 
Du meinst sicherlich das ListView aus der Win32-Palette.
Wie arbeite ich damit?? Hier im Forum konnte ich nichts nützliches finden.
Oben steht ja noch der Quelltext welche Befehle müsste ich wo einbauen und warum?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 18.06.06 10:09 
Memo:
Hinzufügen einer neuen Zeile mit
Memo.Lines.Add(<string>);
z.B.
Memo.Lines.Add(FloatToStr(dasArry[i]));

Listview:
Hinzufügen einer Neue Zeile:
ausblenden Delphi-Quelltext
1:
2:
    item := ListView.Items.Add;
     item.Caption := FloatToStr(dasArry[i]);

Ich würde dir aber der Einfachheit halber zum Memo raten.

BTW. Delphi bringt eine Menge Demos mit.

_________________
Markus Kinzler.
1_of_1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35


Delphi 5
BeitragVerfasst: So 18.06.06 11:06 
OK, läuft schon fast.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
procedure TForm1.Button1Click(Sender: TObject);
var n, i, q: integer;
    x, p, z: real;
    dasArray: Array of Extended;

begin
     x:=strtofloat(edit1.text);
     p:=strtofloat(edit2.text);
     n:=strtoint(edit3.text);

if n=1
   then
   begin
   z:=(x*p)/100;
   x:=x+z;
   end
   else
   begin
   setLength( dasArray, n);
   for i:= 1 to n do
    begin
         z:=(x*p)/100;
         x:=x+z;
         x:=(Round(x*100))/100;
         dasArray[i]:=x;
         Memo1.Lines.Add(FloatToStr(dasArray[i]));
    end;
   end;
Label7.caption:=floattostr(x);

end;


jetzt kommt noch folgende Fehlerneldung (im Fenster mit rotem x) wenn ich eine Zahl beim Jahr eingebe, die größer als 1 ist: "Ungültige Zeigeroperation"
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 18.06.06 11:09 
Array Indices starten mit 0 es muß in Zeile 20
ausblenden Delphi-Quelltext
1:
for i:= 0 to n-1 do					

heißen.

_________________
Markus Kinzler.
1_of_1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35


Delphi 5
BeitragVerfasst: So 18.06.06 11:14 
DANKE!
Jetzt noch eine hoffentlich letzte Frage:
Wie lösche ich alle Einträge aus dem Memo?


Zuletzt bearbeitet von 1_of_1 am So 18.06.06 11:16, insgesamt 1-mal bearbeitet
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 18.06.06 11:16 
ausblenden Delphi-Quelltext
1:
memo1.Lines.Clear;					

_________________
Markus Kinzler.
1_of_1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35


Delphi 5
BeitragVerfasst: So 18.06.06 11:35 
Danke!
Jetzt funktioniert alles!