Registriert seit: 7. Apr 2006
30 Beiträge
|
Zugriffsverletzung Array
3. Jul 2006, 19:25
Hallo, ich speicher die Werte eines Stringgrid in ein array Copy_Sudoku.Will die Werte dann zurück ind Grid geben sräter und bekomme immer eine Zugriffsverletzung!
Delphi-Quellcode:
procedure TSudoku.generierenClick(Sender: TObject);
VAR anzahl,i,j,x,schwierigkeitsgrad,position_neu:integer;
copy_sudoku: array[0..80] of integer;
procedure copy_neu();
VAR y,z:integer;
begin
x:=0;
for y:= 0 to n-1 do // Alles reinigen!
for z:= 0 to n-1 do
begin
copy_sudoku[x]:=strtoint(EigenschaftenGrid[y,z].wert);
inc(x);
end;
end;
procedure copy_alt();
VAR y,z:integer;
begin
x:=0;
for y:= 0 to n-1 do // Alles reinigen!
for z:= 0 to n-1 do
begin
EigenschaftenGrid[i,y].wert:= inttostr(copy_sudoku[x]);
inc(x);
end;
end;
begin
for x:=0 to 81 do // Verlauf reinigen!
verlauf[x]:=0;
for i:= 0 to n-1 do // Alles reinigen!
for j:= 0 to n-1 do
begin
EigenschaftenGrid[i,j].wert:='0';
StringGrid1.Cells[j,i]:='';
end;
case Schwierigkeitsauswahl.itemindex of // Schwierigkeit setzen
0: begin
schwierigkeitsgrad:= 30;
end;
1: begin
schwierigkeitsgrad:= 50;
end;
2: begin
schwierigkeitsgrad:= 70;
end;
end;
erstellen_neu(StringGrid1); // erstellt ein zufällig voll gefülltes Sudoku
copy_neu();
repeat
for i:= 0 to n-1 do // Alles reinigen!
for j:= 0 to n-1 do
begin
EigenschaftenGrid[i,j].wert:='0';
StringGrid1.Cells[j,i]:='';
end;
copy_alt(); ////Hier ist die Zugriffsverletzung!!!
showmessage(inttostr(schwierigkeitsgrad));
for x:=1 to schwierigkeitsgrad do // zahlen raus nehmen
begin
position_neu:= random(81)+1;
wähle_zelle(position_neu);
EigenschaftenGrid[starti,startj].wert:='0';
EigenschaftenGrid[starti,startj].vorgegeben := 0;
end;
lösbar:= true;
x:=0;
for i:= 0 to n-1 do
for j:= 0 to n-1 do
begin
if EigenschaftenGrid[i,j].wert <> '0' then
begin
StringGrid1.Cells[j,i]:= EigenschaftenGrid[i,j].wert;
verlauf[x]:= EigenschaftenGrid[i,j].Gridzellen_Nummer;
inc(x);
end
else
StringGrid1.Cells[j,i]:='';
end;
loesen_ausschluss(StringGrid1);
for i:= 0 to n-1 do
for j:= 0 to n-1 do
if EigenschaftenGrid[i,j].wert = '0' then
lösbar:=false;
if lösbar = false then
begin
for i:= 0 to n-1 do
for j:= 0 to n-1 do
begin
EigenschaftenGrid[i,j].wert:= '0';
StringGrid1.Cells[j,i]:='';
end;
end;
x:=0;
for i:= 0 to n-1 do
for j:= 0 to n-1 do
if EigenschaftenGrid[i,j].Gridzellen_Nummer = verlauf[x] then
begin
StringGrid1.Cells[j,i]:= EigenschaftenGrid[i,j].wert;
EigenschaftenGrid[i,j].vorgegeben := 1;
inc(x);
end
else
begin
EigenschaftenGrid[i,j].wert:= '0';
StringGrid1.Cells[j,i]:='';
EigenschaftenGrid[i,j].vorgegeben := 0;
end;
until lösbar = true
end;
|
|
Zitat
|