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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2011, 22:18   #1
leiprechain
Пользователь
 
Регистрация: 16.12.2011
Сообщений: 20
Смущение Исправление программы для нахождения факториала числа

Здравствуйте!
Помогите пожалуйста исправить ошибки.
Задали в школе следующую задачу:
"Напишите и отладьте следующий алгоритм, подпрограмму НОД составьте сами".
1. Алгоритм
2. цел: x;
3. { Запросить х;
4. x:= Фок(x);
5. Сообщить x:
6. }
7. Алгоритм Фок (цел: x): цел
8. {Если x=1 то {Фок:= 1;}
9. иначе { Фок := Фок (x-1)*x/ НОД(Фок(x-10,x)}
10. }
Код:
program lab;
uses crt;
var x: integer;
 
function Nod(x: integer): integer;
var m,n: integer;
   begin
      m:= x;
      n:= foc(x-1);
      while m<>n do
         begin
             if m>n then m:= m-n;
                else n:= n-m;
         end;
   end;
 
function foc(x: integer): real;
   begin
       if x=1 then foc:= 1;
       else foc:= foc(x-1)*1/Nod(foc(x-1), x);
   end;
 
begin
  clrscr;
  writeln('x=');
  readln(x);
  x:=foc(x);
  writeln('x=', x);
end.
Насколько я понял, данный алгоритм вычисляет факториал заданной переменной x.
leiprechain вне форума Ответить с цитированием
Старый 19.12.2011, 14:13   #2
leiprechain
Пользователь
 
Регистрация: 16.12.2011
Сообщений: 20
По умолчанию

Помогите пожааалуйста.
leiprechain вне форума Ответить с цитированием
Старый 19.12.2011, 19:26   #3
leiprechain
Пользователь
 
Регистрация: 16.12.2011
Сообщений: 20
По умолчанию

Сори за нубские вопросы, но всё-таки я ещё один задам.
Ошибки я нашёл в программе, запустил компилятор, вроде всё правильно, но после ввода переменной х выдаёт пустую строку. В чём проблема?
Вот код
Код:
program lab;
uses crt;
var x: integer;
 
function Nod(x: integer): integer;
var m,n: integer;
   begin
      m:= x;
      n:= foc;
      while m<>n do
         begin
             if m>n then m:= m-n
                else n:= n-m;
         end;
   end;
 
function foc(x: integer): integer;
   begin
       if x=1 then foc:= 1
       else foc:= foc(x-1)*1 div Nod(foc(x-1), x);
   end;
 
begin
  clrscr;
  writeln('x=');
  readln(x);
  x:=foc(x);
  writeln('x=',x);
readkey;
end.
P.S Проблема где-то в функции Nod, так как если его заменить на 1 в foc, то всё работает корректно.
leiprechain вне форума Ответить с цитированием
Старый 19.12.2011, 19:46   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
Nod(foc(x-1), x);
и
Код:
 function Nod(x: integer): integer;
ничего не замечаете?
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 19.12.2011, 19:59   #5
leiprechain
Пользователь
 
Регистрация: 16.12.2011
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
Код:
Nod(foc(x-1), x);
и
Код:
 function Nod(x: integer): integer;
ничего не замечаете?
Замечаю, но при вводе
Код:
function Nod(x, foc(x-1): integer): integer;
он пишет что необходимо вести ":" перед (х-1).
leiprechain вне форума Ответить с цитированием
Старый 19.12.2011, 20:01   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
else foc:= foc(x-1)*1 div Nod(x)
вот так должно быть
а не так как у вас
Код:
else foc:= foc(x-1)*1 div Nod(foc(x-1), x);
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 19.12.2011, 20:10   #7
leiprechain
Пользователь
 
Регистрация: 16.12.2011
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
Код:
else foc:= foc(x-1)*1 div Nod(x)
вот так должно быть
теперь 0 выдаёт.
leiprechain вне форума Ответить с цитированием
Старый 19.12.2011, 20:35   #8
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

А где у вас в функции возвращается результат?
Возьмите учебник! Глава процедуры и функции!
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 19.12.2011, 20:49   #9
leiprechain
Пользователь
 
Регистрация: 16.12.2011
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
А где у вас в функции возвращается результат?
Возьмите учебник! Глава процедуры и функции!
Спасибо за помощь.
Нужды в учебнике нет, так как сам сообразил
К тому же в моём учебнике глава "процедуры и функции" помещена в один параграф
leiprechain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Словесный алгоритм нахождения в матрице для каждой строки числа элементов, кратных 5 и наибольшее из полученных значений (Паскаль) BloodyBlade Помощь студентам 0 05.12.2011 23:28
Поиск факториала числа 0<N<101 SGU_ART Помощь студентам 0 16.05.2010 20:34
Паскаль.Программа для нахождения чисел квадрата трёхзначного числа. vmilyoshin Помощь студентам 4 23.04.2010 13:25
вычесление факториала числа ольга сокол Помощь студентам 4 30.03.2010 08:08
Вычисление факториала числа PAVEL315 Общие вопросы Delphi 17 21.03.2007 07:32