Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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
=((
Помогите пожалуйста
Ответить с цитированием
  #2  
Старый 28.03.2010, 00:31
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Думаю это ты хотел:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  M,N:Integer;
begin
  M:=StrToInt(Edit1.Text);
  N:=StrToInt(Edit2.Text);
  while (M<>N) and (M>1) and (N>1) do
    if M>N then Dec(M,N) else Dec(N,M);
  if (M=N) then Edit3.Text:=IntToStr(M)
    else Edit3.Text:='Нет общего делителя';
end;
Ответить с цитированием
  #3  
Старый 28.03.2010, 11:27
Аватар для Kosten
Kosten Kosten вне форума
Прохожий
 
Регистрация: 22.11.2009
Сообщения: 10
Репутация: 10
По умолчанию

Огромное спасибо за помощь, надеюсь в следующий раз подобных вопросов не возникнет.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:57.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025