Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2009, 21:06   #1
Вера123
Пользователь
 
Регистрация: 09.06.2009
Сообщений: 18
По умолчанию задача на Паскале

Найти наибольший общий делитель трех натуральных
чисел, имея в виду, что НОД (а, b, с) = НОД (НОД (а, b), с).
При решении определите функцию для расчета наибольшего общего делителя двух натуральных чисел, используя алгоритм Евклида(это из раздела "подпрограммы")...вот я пробовала....
Код:
program nod;
var  d,f : real;

	function o(a,b,c : integer): real;
        begin
        writeln ('vvedite 1 chuslo');
	read (a);
	writeln ('vvedite 2 chuslo');
	read (b);
	writeln ('vvedite 3 chuslo');
	read (c);
	d:= a/b ;
        f:= d/c ;
    if f=0 then writeln ('');
end.
Вера123 вне форума Ответить с цитированием
Старый 09.06.2009, 22:03   #2
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

А где сам алгоритм нахождения НОД???
Это не верно:
Код:
  ...
  d:= a/b ;
  f:= d/c ;
  if f=0 then writeln ('');
  ...
Надо вот так:
Код:
var
  a,b,c: Integer;

 function NOD(a,b: Integer): Integer;
 begin
   while (a <> 0) and (b <> 0) do
     if a >= b then
       a := a mod b
     else
       b := b mod a;

   NOD := a + b;
 end;

begin
  writeln ('vvedite 1 chuslo');
  read (a);
  writeln ('vvedite 2 chuslo');
  read (b);
  writeln ('vvedite 3 chuslo');
  read (c);

  if (NOD(a, b) = 1) and (NOD(a, c) = 1) and (NOD(c, b) = 1) then
    writeln('vzaimno prostie!')
  else
    writeln('ne vzaimno prostie!');

end.
P.S.
Такая проверка также неверна:
НОД (а, b, с) = НОД (НОД (а, b), с).
Допустим, числа: 5, 7, 10. По данной проверке:
НОД(5, 7, 10) = НОД (НОД (5, 7), 10). - неверно.
5 и 7 - взаимно простые
7 и 10 - тоже
5 и 10 - нет.

На взаимную простоту надо проверять попарно
1 и 2, 1 и 3, 2 и 3 числа.
Код:
 if (NOD(a, b) = 1) and (NOD(a, c) = 1) and (NOD(c, b) = 1) then
Удачи.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Последний раз редактировалось Daramant; 09.06.2009 в 22:08.
Daramant вне форума Ответить с цитированием
Старый 10.06.2009, 20:24   #3
Вера123
Пользователь
 
Регистрация: 09.06.2009
Сообщений: 18
По умолчанию

это неверно !!!! там всегда пишет
Код:
ne vzaimno prostie!
Вера123 вне форума Ответить с цитированием
Старый 10.06.2009, 22:05   #4
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Все работает. Какие числа ты вводила?
1 2 3 - взаимно простые
2 3 4 - нет
2 3 5 - да
3 9 10 - нет
3 8 11 - да

P.S. Числа нужно тоже правильно подобрать.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на паскале kotenkin-kiss Паскаль, Turbo Pascal, PascalABC.NET 3 02.12.2010 18:11
Задача на Паскале Martischa Помощь студентам 1 19.05.2009 10:36
Задача на Паскале Witaliy Помощь студентам 2 09.02.2009 17:56
Задача на Паскале stscolt Помощь студентам 1 29.04.2008 20:52