Danke für deine Antwort!
Es funktioniert nun, jedoch musste ich noch 2 extra if-Anweisungen mit einbinden, weil es nur mit deinem code immernoch das falsche ergebniss lieferte!
Ich habe nun folgendes stehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,k,n : Integer;
begin
for i := 1 to high(alt) do
for k := 1 to length(alt) do begin
n := Nachbarn (i,k);
if (alt[i,k] = 1) AND not (n in [2,3]) then
neu[i,k] := 0
else if (alt[i,k] = 1) AND (n in [2,3]) then
neu[i,k] := 1;
if (alt [i,k] = 0) AND (n = 3) then
neu[i,k] := 1
else if (alt [i,k] = 0) AND not (n = 3) then
neu[i,k] := 0;
end;
einlesen;
ausgeben;
end;
Jedoch besteht mein Problem mit den Randfeldern immernoch. Ich habe keine Vorstellung, wie ich Delphi sagen soll, dass wenn ein Feld den x-Wert oder y-Wert 1 oder 50, oder auch beides, hat, dass es dann beim überschreiten der Feldgrenzen auf die gegenüberliegende Seite wechseln soll.
Ich hatte mal folgendes probiert:
Delphi-Quellcode:
if (k = 1) then
begin
if alt[i+1,k] = 1 then inc(c);
if alt[i+1,k+1] = 1 then inc(c);
if alt[i,k+1] = 1 then inc(c);
if alt[i-1,k+1] = 1 then inc(c);
if alt[i-1,k] = 1 then inc(c);
if alt[i-1,50] = 1 then inc(c);
if alt[i,50] = 1 then inc(c);
if alt[i+1,50] = 1 then inc(c);
end;
Nur ist diese Variante ja nicht gerade sehr effizient, weil es einfach nur Zeile für Zeile aufgeschrieben wird, was man natürlich auch machen könnte
Wie Grishnak in seinem Post (#2) schon bemerkte:
Zitat von
Grishnak:
Zu Randfeldern: (...) es gibt keine Randfelder, sondern das Feld ist umlaufend (z.B. die Nachbarn von [3;1] sind dann [2;50], [3;50], [4;50], [2;1], [4;1], [2;2], [3;2] und [4;2].
Nur wie mache ich das ? Wäre echt dankbar für einen effizienteren Denkanstoß als der Meinige
gruß fabiO