1) Но Nmax ни где не используется G-массивом. Nmax вообще ограничивает лишь длину цикла M и используется только в процедуре Enter. G же спокойно заполняется

for j:=1 to 178 do
G[j]:=j*j;

и ни как не касается Nmax. Я решил ее вообще убрать и маненько изменил Enter.

2) Внешний цикл вы имеете виду

......
for i:=1 to N do...
......
......
end;
.......

Если да, то честно говоря не вижу причин его не использовать разве может из за того что в конце может у N отнимется 1, а N уже внесена в услувие цикла? Но я все равно поменял smile.gif

3) Поменял на

for w:=i .....

4) Поменял var N:integer;

program Masiv;
uses crt;
type mas= array [1..16] of integer;
var G,M:mas; var N:integer;

procedure Enter (var M:mas; var N:integer);
var i,x:integer;
begin
N:=0;
for i:=1 to 16 do
begin
write ('M[',i,']=');
readln (x);
if x=0 then break;
inc (N); M[i]:=x;
end;
end;

procedure Print (var M:mas; N:integer);
var i:integer;
begin
for i:=1 to N do
write (M[i],'; ');
writeln;
end;


procedure Work (var M:mas; var G:mas; var N:integer);
var j,i,w,b,sym,ost:integer; f,q:boolean;
begin
for j:=1 to 178 do
G[j]:=j*j;
while i>N do
begin
i:=1;
begin f:=true; sym:=0; ost:=0; q:=false;
b:=m[i];
for j:=1 to 178 do
begin
if g[j]=m[i] then
begin
q:=true; break;
end;
end;
repeat
ost:=b mod 10;
sym:=sym + ost;
b:=b div 10;
until b=0;
if sym mod 2=0 then f:=false;
if (f=true) and (q=true) then
begin
for w:=i to N do
m[i]:=m[i+1];
N:=N-1;
end;
inc(i);
end;
end;
end;

Begin clrscr;
Enter (M,N);
Print (M,N);
Work (M,G,N);
Print (M,N);
readkey
End.

По прежнему выдает ошибку тамже где и выдовала в Print.

Скиньте плиз ваш полный вариант, а то чую не успею отладить до четверга.