Zitat von
Salazriel:
Delphi-Quellcode:
procedure TForm1.RestMengeNeuZuordnen(EingegebeneZahl:integer);
var NeueZahl:Zahlen;
i:integer;
begin
FeldMenge[StringGrid1.col,StringGrid1.row]:=[]; //da bereits eine Zahl drinsteht
For i:=0 to 8 do
begin
FeldMenge[StringGrid1.col,i]:=FeldMenge[StringGrid1.col,i]-NeueZahl;
FeldMenge[i,StringGrid1.row]:=FeldMenge[i,StringGrid1.row]-NeueZahl;
//Die Zahl aus den Restmengen der Zellen der gleichen Spalte und Zeile löschen)
end;
end;
NeueZahl hat einen undefinierten Zustand, also reduzierst du deine Sets um undefinierte Mengen.
So sollte es funktionieren.
Delphi-Quellcode:
procedure TMain.RestMengeNeuZuordnen(EingegebeneZahl:integer);
var NeueZahl:Zahlen;
i:integer;
begin
FeldMenge[StringGrid1.col,StringGrid1.row]:=[]; //da bereits eine Zahl drinsteht
For i:=0 to 8 do begin
FeldMenge[StringGrid1.col,i]:=FeldMenge[StringGrid1.col,i]-[EingegebeneZahl];
FeldMenge[i,StringGrid1.row]:=FeldMenge[i,StringGrid1.row]-[EingegebeneZahl];
//Die Zahl aus den Restmengen der Zellen der gleichen Spalte und Zeile löschen)
end;
end;
Zitat von
Salazriel:
Delphi-Quellcode:
procedure TForm1.RestMengeAnzeigen;
var RestMengeDerZelle:Zahlen;
begin
RestMengeDerZelle:=FeldMenge[StringGrid1.col,StringGrid1.row];
If 1 in RestMengeDerZelle then Stringgrid2.Cells[0,0]:='1';
If 2 in RestMengeDerZelle then Stringgrid2.Cells[1,0]:='2';
If 3 in RestMengeDerZelle then Stringgrid2.Cells[2,0]:='3';
If 4 in RestMengeDerZelle then Stringgrid2.Cells[0,1]:='4';
If 5 in RestMengeDerZelle then Stringgrid2.Cells[1,1]:='5';
If 6 in RestMengeDerZelle then Stringgrid2.Cells[2,1]:='6';
If 7 in RestMengeDerZelle then Stringgrid2.Cells[0,2]:='7';
If 8 in RestMengeDerZelle then Stringgrid2.Cells[1,2]:='8';
If 9 in RestMengeDerZelle then Stringgrid2.Cells[2,2]:='9';
//geht das irgendwie eleganter ?
StringGrid1.SetFocus;
end;
Du schreibst Zahlen in die Zellen, aber wenn eine Zahl nicht in der Menge enthalten ist, löscht du sie nicht aus der Anzeige.
So sollte es funktionieren.
Delphi-Quellcode:
procedure TMain.RestMengeAnzeigen;
var RestMengeDerZelle:Zahlen;
r,c,n:integer;
begin
RestMengeDerZelle:=FeldMenge[StringGrid1.col,StringGrid1.row];
for r:=0 to 2 do
for c:=0 to 2 do begin
n:=r*3+c+1;
if n in RestMengeDerZelle then Stringgrid2.Cells[c,r]:=chr(n+48)
else Stringgrid2.Cells[c,r]:='';
end;
StringGrid1.SetFocus;
end;
Du weißt aber, daß du die Zahlen nicht nur in gleichen Zeilen und Spalten entfernen mußt sondern auch im jeweiligen 3x3-Block?
Und ansonsten schau mal hier:
Uni-Wien