Zitat von
fabiO:
Ich hab das mal überdacht, wobei mir etwas aufgefallen ist.
Wenn ich das Feld größer mache und hierbei die randfelder Leer lassen, also somit eine umrandung schaffe, funktioniert das programm ja auch nicht.
Ach ja, Eckenfelder haben ja seltener 3 Nachbarn... Soll das so sein? Hab ich nie gemacht, aber egal. Wenn Du aber einen Überlauf haben willst, also der linke Nachbar von A[i,0] soll A[i,50] sein, dann versuche Dein Glück mal mit 'modulo'.
Dein Array ist also so definiert:
Delphi-Quellcode:
Var
LifeWelt : Array [0..N-1, 0..M-1] Of Byte;
Function ZaehleNachbarn (i,j : Integer) : Integer;
Var
dx,dy : Integer;
Begin
Result := -alt[i,j]; // Wir zählen Alles, auch uns selbst
For dx:=-1 to 1 do
for dy:=-1 to 1 do
If alt [(i + N + dx) mod N , (j + M + dy) mod M] = 1 then
inc(Result);
End;
Probe:
Linker Nachbar von j=0 soll sein: M-1. dy=-1, also ergibt j+M-1 mod M = M-1, q.e.d
Rechter Nachbar von j=M-1 soll sein:0. dy= 1, also ergibt (M-1)+M +1 mod M = 2M mod M = 0. q.e.d
Für alle anderen Fälle ist (j+M+dy) mod M = j+dy. q.e.d
Gleiches gilt für oben/unten... oder (prüf mal selbst)