Hier die gefixte Routine für alle Interessierten:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
ACol, ARow, x : Integer;
begin
StringGrid1.Cells[ 17, 1 ] := '1';
for ARow := 1 to 10 do
for ACol := 1 to 34 do
begin
x :=
StrToIntDef(StringGrid1.Cells[ACol - 1, ARow - 1], 0) +
StrToIntDef(StringGrid1.Cells[ACol + 1, ARow - 1], 0);
if x <> 0 then StringGrid1.Cells[ACol, ARow] := IntToStr(x);
end;
end;
Die Fehler in der Routine des Threaderstellers sind folgende:
Er geht zuerst Spalte für Spalte durch und nicht Zeile für Zeile. Da sich die Berechnung darauf verlässt, das die Zeile davor komplett berechnet ist, müssen wir Zeile für Zeile arbeiten.
Ausserdem berechnet sich x nicht durch "x + <Wert Links Oben> + <Wert Rechts Oben>" sondern nur durch "<Wert Rechts Oben> + <Wert Links Oben>".