Программа для нахождения НОК в Паскале. Объясните, пожалуйста строчки, помечанные цифрами. Заранее спасибо. var n,m:integer;
i,k:integer;
delitsya:boolean; 1.
begin
write('Vvedite N: ');
readln(n);
write('Vvedite M: ');
readln(m);
if (m<>0) and (n<>0) then
begin
k:=n*m; 2
i:=k; 3
while i>0 do 4
begin
if (i mod n=0) and (i mod m=0) then 5
k:=i; 6
i:=i-1; 7
end;
writeln('NOK ',m,' i ',n,' raven ',k)
end
else writeln('Na nol delit nelzya');

readln;
end.

Ответы

Ответ дал: 1karma1
1
delitsya:boolean; -  видимо переменная delitsya  типа boolean (значение 0 или 1)

k:=n*m;  -  присваиваем переменной k значение произведения n*m

i:=k;  - присваиваем переменной i значение переменной k 

while i>0 do  - цикл, который будет выполняться пока значение 
i>0

if (i mod n=0) and (i mod m=0) then  - если остатки отделения i mod n и i mod m равны нулю, то выполняется 2 строчки ниже с присвоением k значения i и уменьшением i на 1

Ощущение, что программа написана криво, она вообще работает? 


sh432: Спасибо. А насчёт того работает ли - это не факт. В любом случае, она не моя и в любом случае, ещё раз спасибо. Единственное, я всё равно немного не понимаю ЗАЧЕМ мы присваивает произведение.
1karma1: Мб компилиться и будет, но выполнит ли то, что от нее требуют - вообще не факт. В простонародье это называется говнокодом :)
XEKER: Вот, исправил программу, она не работала, вот верный вариант:
var i,k,n,m:integer;
label syda;
begin
syda:
write('Vvedite N: ');
readln(n);
write('Vvedite M: ');
readln(m);
if (m=0) and (m=0) then goto syda else
if (m<>0) and (n<>0) then
begin
k:=n*m;
i:=k;
end;
while i>0 do
begin
i:=i-1;
end;
writeln('NOK ',m,' i ',n,' raven ',k)
end.
sh432: Хеker, огромное вам спасибо
Вас заинтересует