hab ein problem bei folgendem programm
die zellen werden nicht richtig erzeugt.
ich konnte den fehler nicht finden und bitte um hilfe
danke
PROGRAM life;
USES crt;
CONST
zeilen = 40;
spalten = 20;
VAR
feld1 : array [1..spalten,1..zeilen] of integer;
feld2 : array [1..spalten,1..zeilen] of integer;
x,y,runden,neumann:integer;
k,taste:char;
PROCEDURE clearzustand;
var x,y : integer;
begin
for x := 1 to spalten do
begin
for y := 1 to zeilen do
begin
feld1 [x,y] := 0;
feld2 [x,y] := 0;
end;{for}
end;{for}
end;{clearzustand}
PROCEDURE Bakterienzone;
BEGIN {Gleiter}
neumann:=0;
gotoxy(50,0);write('wieviele runden?');readln(runden);
gotoxy(50,0);writeln('Für Moore Automat 1 eingeben');
gotoxy(50,2);readln(neumann);
x:=1;
y:=1;
if neumann=1 then begin gotoxy(45,5);writeln('Navigation: Moore'); end;
if neumann=0 then begin gotoxy(45,5);writeln('Navigation: Neumann'); end;
writeln;
gotoxy(45,7);writeln('Numblock: 8,4,6,2');
gotoxy(45,8);writeln('oder: w,a,d,s');
writeln;
gotoxy(45,10);writeln('Zellen Einfügen:');
gotoxy(45,11);writeln('+');
writeln;
gotoxy(45,13);writeln('Zellen entfernen:');
gotoxy(45,14);writeln('-');
writeln;
gotoxy(45,16);writeln('Neue Eingabe: (Neustart)');
gotoxy(45,17);writeln('n');
writeln;
gotoxy(45,19);writeln('X = Zelle');
writeln;
repeat
gotoxy(1,50); write('x: ',x,' y: ',y);
gotoxy(x,y);
taste:= readkey;
if (taste='w') or (taste = '8') then dec(y); { oben }
if (taste='s') or (taste = '2') then inc(y); { unten }
if y=spalten then y:=1;
if y=0 then y:=spalten-1;
if (taste='a') or (taste = '4') then dec(x); { links }
if (taste='d') or (taste = '6') then inc(x); { rechts }
if x=zeilen then x:=1;
if x=0 then x:=zeilen-1;
if taste = '+' then begin
write('X');
feld1 [x,y] := 1;
end;
if taste = '-' then begin
write(' ');
feld1 [x,y] := 0;
end;
{if taste='r' then ruecksetzen;}
until taste = chr(27); {Esc}
end;
PROCEDURE Bakterienanzeigen; {die Position der zuvor gesetzten Bakterien wird erkannt}
var x,y:integer;
begin
for x := 1 to spalten do
begin
for y := 1 to zeilen do
begin
if feld1 [x,y] = 1 then
begin
gotoxy(x,y);
write('X');
end
else
begin
gotoxy(x,y);
write(' ');
end;
end;
end;
end;{grafikzeigen}
function Nachbar_position_speichern(x,y:integer):integer;
var n:integer;
begin
n := 0;
If feld1 [x,y+1] = 1 then inc(n); {wenn an der position [x,y+1] ein x steht, wird n um 1 erhöht}
If feld1 [x,y-1] = 1 then inc(n);
If feld1 [x+1,y] = 1 then inc(n);
If feld1 [x-1,y] = 1 then inc(n);
if neumann=1 then
begin
If feld1 [x-1,y-1] = 1 then inc(n);
If feld1 [x+1,y+1] = 1 then inc(n);
If feld1 [x-1,y+1] = 1 then inc(n);
If feld1 [x+1,y-1] = 1 then inc(n);
end;
nachbar_position_speichern:=n;
end;
procedure Nachbarn_erkennen;
begin
for x := 1 to spalten do
begin
for y := 1 to zeilen do
begin
feld2 [x,y] := 0;
if nachbar_position_speichern(x,y) = 3 then feld2 [x,y] := 1;
if nachbar_position_speichern(x,y) = 2 then feld2 [x,y] := 1;
end;{for}
end;{for}
end;{erzeugezustand2}
PROCEDURE vertauschezustaende;
var x,y : integer;
begin
for x := 1 to spalten do
begin
for y := 1 to zeilen do
begin
feld1 [x,y] := feld2 [x,y];
end;{for}
end;{for}
end;{clearzustand}
var
runden_zaehler:integer;
begin
clearzustand;
Bakterienzone;
bakterienanzeigen;
repeat
runden_zaehler:=runden_zaehler+1;
nachbarn_erkennen;
vertauschezustaende;
Bakterienanzeigen;
until runden_zaehler=runden;;
end.