Ответ:
const size = 100;
var MAS:array [1..size] of integer;
tmp, biggest, realsize : integer;
res: integer;
begin
writeln('Ввод данных:');
tmp:= 1;
for realsize:= 1 to size do
begin
read(tmp);
if tmp = 0 then break;
MAS[realsize]:= tmp;
if MAS[realsize] > biggest then
biggest:= MAS[realsize];
end;
realsize-=1;
writeln('Mas size: ', realsize);
for var i:= 1 to biggest do
begin
tmp:= 1;
for var j:= 1 to realsize do
if MAS[j] mod i <> 0 then
begin
tmp:=0;
break
end;
if tmp = 1 then
res:= i;
end;
writeln('RES: ', res);
end.
Объяснение:
Программа работает с натуральными числами.
Ищем наибольший элемент(biggest), объявляем переменную цикла, бегаем от 1 до biggest, вычисляем остаток от деления каждого элемента массива во вложенном цикле. Если остаток не равен нулю, то это значение нам не подходит(tmp = 0), если tmp = 1 , тогда пишем I в res. Конец цикла, НОД в res.
переменная realsize нужна для того, чтобы не попадать на пустые поля массива(не умею в динамическую память в паскале).