Array Speicherplätze Inhalt addieren

Hallo alle zusammen,
Ich bräuchte hilfe und zwar hab ich ein Programm geschrieben, dass die Felder eines Arrays zusammen rechnen soll.
Wenn ich bei eine Zahl in Edtspeicher schreibe, soll er die ins erste Feld schreiben und wenn ich eine weitere zahl in Edtspeicher schreibe, soll er die ins 2 Array-Feld schreiben und dann immer so weiter und wenn ich dann auf Btnsumme klicke, soll er alle Felder addieren und mit dann das Ergebnis in Edtsumme anzeigen. Ich weiß jetzt nur nicht wieso er die Felder nicht addiert, sonder mit die Anzahl der Felder mit dem eingegebenen Wert multipliziert.
Ich hoffe Ihr könnt mir helfen.

Hier einmal der Quelltext:

procedure TForm1.BtnSpeicherClick(Sender: TObject);
begin
setlength(speicher,length(speicher)+1);
speicher[length(speicher)-1]:=strtoint(edtspeicher.text);
p:=speicher[length(speicher)-1];
end;

procedure TForm1.BtnSummeClick(Sender: TObject);
var Summe,i: Integer;
begin
summe:=0;
for i:= 1 to length(speicher) do
begin
speicher[length(speicher)-1]:=summe;
summe:=p+summe;
end;
edtsumme.text:=inttostr(summe);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
setlength(Speicher,0);
end;

Mit freundlichen Grüßen
John

Hallo,

procedure TForm1.BtnSpeicherClick(Sender: TObject);
begin
setlength(speicher,length(speicher)+1);
speicher[length(speicher)-1]:=strtoint(edtspeicher.text);

etwas besser

 speicher[high(speicher)]:=strtoint(edtspeicher.text); 

p:=speicher[length(speicher)-1];

Wozu soll das dienen? Bei jedem neuen Arrayelement wird p wieder überschrieben. Du hast den Wert doch schon im letzten Element des Arrays gespeichert! Wozu da noch eine Variable p?

end;

procedure TForm1.BtnSummeClick(Sender: TObject);
var Summe,i: Integer;
begin
summe:=0;
for i:= 1 to length(speicher) do

besser:
for i:= 0 to length(speicher)-1 do

begin
speicher[length(speicher)-1]:=summe;

was soll das bewirken? Du überschreibst Dir laufend dein letztes Arrayelement mit der Summe?

summe:=p+summe;

Hier addierst Du die eigentlich überflüssige Variable p zur Summe. In p steht der Inhalt des letzten Array-Elements zum Zeitpunkt der Eingabe (Du hast p immer wieder überschrieben).

Du solltest i benutzen um auf die Werte des Arrays zuzugreifen!

end;
edtsumme.text:=inttostr(summe);

Gruß, Niels

Danke.
Waren irgendwie blöde Denkfehler.