Показать сообщение отдельно
  #1  
Старый 27.03.2010, 23:49
Аватар для Kosten
Kosten Kosten вне форума
Прохожий
 
Регистрация: 22.11.2009
Сообщения: 10
Репутация: 10
По умолчанию цикл с предусловием и постусловием. help

Код:
var
  Form1: TForm1;
  M,N,S:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
     M:=StrToInt(Edit1.Text);
     N:=StrToInt(Edit2.Text);
          if M>N then M:=M-N
          else N:=N-M;
          while M=N do
          begin
          ShowMessage('Наибольший общий делитель найден!');
          S:=M;
          Edit3.Text:=IntToStr(S);
          end;
end;

end.
Я сделал так и конечно это не правильно, но я в тупике и не знаю как из него выбраться.
Объясню проблему:
Даны два натуральных числа, нужно найти наибольший общий делитель.
Для этого...
1) если числа равны, взять одно из них для ответа, если нет то 2
2) заменить большее число разностью большего и меньшего из чисел (M-N)
3) Вернуться к выполнению п.1.
То-есть, нужно повторять операцию выявления максимального числа и замены его на разность максимального и минимального, до того, как получатся равные числа и тогда одно из равных чисел будет взято за ответ.
Цикл то я вроде правильно задал, вот с повтором не могу разобраться...
Вот пример:
M=32 N=24
M>N, true, M:=32-24; M:=8; M>N, false, N:=24-8; N:=16; M>N; false, N:=16-8; N:=8; M=N; Ответ:=M
=((
Помогите пожалуйста
Ответить с цитированием