Вообще-то, не в обиду будет сказано тут все неправильно, начиная от метода нахождения НОД, а в частности:
переменные m,n,i,d - должны быть integer(longint, int64 - целые короче) ;
два цикла в одном и for и repeat - в такой реализации вообще работать не будут, потому что до 1(если n и m неотрицательные - а как правило НОД находят именно для двух целых чисел) , а если поставить for ...downto ...(т. е. в уменьшении) , то программа зациклится, ну про точку с запятой уже сказали, в конце вероятно вы имели ввиду не readln(d), а writeln(d), ну это, как говорится, уже мелочи - все равно программа до этого не доберется.
Ну и как я уже говорил алгоритм не тот (описывает не все возможности-например возможность ввести очень большое число, хотя наверное оно вам и не надо) , хотя и близко, более правильный алгоритм предложил уважаемый Георгий Зотиков, хотя он не совсем внимательно прочитал условие задачи. Ну а я могу только предложить то, что вы хотели получить следуя вашей логике (рабочий вариант Вашего решения) :
program lll;
var m,n,i,d: integer;
begin
readln (m); //правда лучше добавить проверку, потому что m и n
readln (n); //не должны быть равными нулю
d:=0;
if m>n then
for i:=1 to n do
if ((m mod i)=0) and ((n mod i)=0) then d:=i
else
for i:=1 to m do
if ((m mod i)=0) and ((n mod i)=0) then d:=i;
if d<>0 then WriteLn (d)
else WriteLn('Нет наибольшего общего делителя');
readln;
end.
1. Зачем после "do" перед "repeat" ставить "begin" ?
2. Если вы используете "else", то перед этим оператором не надо ставить точку с запятой (иначе будет считаться, что оператор ветвления закончен) .
3. Не понятно назначение операторов "readln(b); readln;" в конце программы. Если вы хотите приостановить программу, то достаточно просто readln.
Вроде все.
{нахождение НОД}
uses crt;
var
a, b, c, gcd: integer;
function nod(x,y:integer):integer;
begin
while (x <> 0) and (y <> 0) do
if x > y then x := x mod y else y := y mod x;
nod := x + y;
end;
begin
cls;
write('vvesti 3 chisla --> '); readln(a, b,c);
{ while (a <> 0) and (b <> 0) do
if a > b then a := a mod b else b := b mod a;
gcd := a + b; }
gcd:=nod(nod(a,b),c);
writeln('НОД: ', gcd);
readkey;
end.