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

procedure Enter (var M:mas; Nmax:integer; var N:integer); {ввод массива}
var i,x:integer;
begin
N:=0;
for i:=1 to Nmax do
begin
write ('M[',i,']=');
readln (x);
if x=0 then break; {0 - индикатор окончания, он не обрабатывается}
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],'; '); {тут появляется ошибка File not open for output когда запускаешь ее и вводишь какие нибудь числа}
writeln;
end;
procedure Work (var M:mas; var G:mas; N:integer); {обраборка}
var j,i,b,sym,ost:integer; f,q:boolean;
begin
for j:=1 to 178 do
G[j]:=j*j; {создание мас. G - полные квадраты до <=32000}
for i:=1 to N do
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 {проверка числа из мас. М, на наличие его в мас G}
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 i:=i to N do
begin
m[i]:=m[i+1]; {затерание искомого элем. и сдвиг всех справа на 1 шаг в лево} {Сдвиг так и не исправили}
N:=N-1; {обрезание последнего элем. т.к. он будет повторятся из за сдвига}
end;
end;
end;
end;

Begin clrscr; {нужно ввести мас., распечатать его до и распечатать его после}
Enter (M,Nmax,N);
Print (M,N);
Work (M,G,N);
Print (M,N);
readkey
End.


Исправьте пока эти две ошибки.