Исправьте ошибку в программе предназначенную для нахождения факториала числа

: 20

Исправление программы для нахождения факториала числа

Помогите пожалуйста исправить ошибки.
Задали в школе следующую задачу:
«Напишите и отладьте следующий алгоритм, подпрограмму НОД составьте сами».
1. Алгоритм
2. цел: x;
3. < Запросить х;
4. x:= Фок(x);
5. Сообщить x:
6. >
7. Алгоритм Фок (цел: x): цел
8.
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.

Источник: www.programmersforum.ru

Рекурсия. Факториал числа c++ рекурсивно. Рекурсия факториал. Рекурсивный алгоритм факториал. #44

Исправьте ошибку в программе предназначенную для нахождения факториала числа

Факториалом натурального числа (обозначается ) называется произведение всех натуральных чисел от до . Например, .

Дано целое положительное число . Необходимо найти ближайшее к число, которое является точным факториалом какого-либо натурального числа. Если два точных факториала одинаково близки к , нужно выбрать меньший из них.

Например, для нужно получить ответ , а для – ответ .
Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
Алгоритмический язык

Читайте также:
Как снять защиту с флешки чтобы удалить файлы программа

DIM A, K, F AS INTEGER INPUT A K = 0 F = 1 WHILE F 1 F = F * K WEND IF F — A > A — FK THEN F = FK K = K — 1 END IF PRINT K END
Последовательно выполните следующее.

  1. Напишите, что выведет эта программа при вводе .
  2. Приведите пример числа , при котором программа выведет верный ответ. Укажите этот ответ.
  3. Найдите в программе все ошибки (известно, что их не больше двух) и исправьте их. Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.

Достаточно указать ошибки и способ их исправления для одного языка программирования.

Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.

Показать разбор
Содержание верного ответа
(допускаются иные формулировки ответа, не искажающие его смысла)

  1. При вводе программа выведет число .
  2. Программа выводит верный ответ при вводе (ответ ), (ответ ) и (ответ ).
  3. Программа содержит две ошибки.

Первая ошибка. Ошибочная проверка. По условию при равном удалении от двух точных факториалов нужно выбрать меньший из них. Для этого нужно строгое сравнение заменить на нестрогое.

Алгоритм нахождения факториала (Factorial algorithm)

Вторая ошибка. Ошибочный вывод. Вместо значения факториала выводится «основание» факториала .
Пример исправления для языка Паскаль
Первая ошибка:

if f-a > a — f div k
Исправленная строка:
if f-a >= a — f div k

Допускается использование функции (модуль числа). Это ничего не меняет по сути, так как обе части сравнения часть заведомо неотрицательны, но такое использование нельзя считать ошибкой:

if abd(f-a) >= abs(a — f div k)

Читайте также:
Программа чтобы скинуть с айфона на компьютер

При использовании функции модуля на алгоритмическом языке следует использовать функцию (модуль для целых чисел):

если iabs(f-a) >= iabs(div(f,k)-a)

Использование в алгоритмическом языке функции вместо отмечается как ошибка, но не влияет на оценку работы.

Вторая ошибка:

writeln(k)
Исправленная строка:
writeln(f)
В программах на других языках ошибочные строки и их исправления аналогичны.

Незначительной опиской, не влияющей на оценку, следует считать отсутствие служебных слов и знаков после содержательной части исправления (например, слова THEN в Бейсике или точки с запятой в C++).

Указания по оцениванию Баллы
В задаче требуется выполнить четыре действия.
1. Указать ответ программы при данном вводе.
2. Указать пример входного числа, при котором программа выдаёт верный ответ, и ответ программы в этом случае.
3. Исправить первую ошибку в программе.
4. Исправить вторую ошибку в программе.
Действие считается выполненным, если указан верный результат работы программы при заданном входном значении.
Действие считается выполненным, если указаны входное значение и ответ, при выполнении программы с этим входным значением получается этот ответ и этот ответ совпадает с ответом, который выдаёт для данного входного значения правильная программа.
Для действий и экзаменуемый не обязан объяснять, как получен результат, достаточно указать верные числа.
Каждое из действий и считается выполненным при одновременном выполнении двух условий:
а) правильно указана строка с ошибкой;
б) указан такой новый вариант строки, что при исправлении другой ошибки получается правильная программа.
В исправленной строке допускаются незначительные синтаксические ошибки (лишние или пропущенные знаки препинания, неточные написания служебных слов языка).
Выполнены все четыре необходимых действия, ни одна верная строка не указана в качестве ошибочной.
Не выполнены условия, позволяющие поставить балла. Имеет место одна из следующих ситуаций.
1. Выполнены три из четырёх необходимых действий, ни одна верная строка не названа ошибочной.
2. Выполнены все четыре необходимых действия, одна верная строка названа ошибочной.
Не выполнены условия, позволяющие поставить или балла.
Выполнены два из четырёх необходимых действий.
Не выполнены условия, позволяющие поставить , или балла.
Максимальный балл
Читайте также:
Федеральная программа поддержки мсп это

Источник: yandex.ru

Помогите найти ошибку в программе расчета факториала — C (СИ)

Начал Си учить в студии13 печатаю по статье и решил факториал писать, ну где 1*2*3*4 и дальше числа. Ясно чё фигня, но и тут запара. Ввожу «-1» и оно вроде пишет чтоб ввод повторил, пишу 5 и пишет 120, но потом жму энтер, а оно мне -1. Какого? Спасибо, ребятки за возможные ответы.

Помогите жизу разрулить.

#include #include #include int factorial(short n); int main() < setlocale(LC_ALL, «Rus»); printf(«Введите число для вычисления его факториалаnn = «); int n; scanf_s(«%d», printf(«%d»,factoial(n)); getch(); return 0; >int factoial(short n) < if ((n < 0) || (n >10)) < printf(«Повторите ввод!»); main(); >if (n == 0) return 1; if (n

А, в программе наверно надо после 23-ей строки, после main(); добавить exit(0);.

Вроде чёта чухается и не грузит по кругу циклы и лишнего нету. Ну так наверное неправильно.

Код к задаче: «Помогите найти ошибку в программе расчета факториала»

Листинг программы

#include int main(int argc, char ** argv) < if ( argc >1 ) < printf(«%s «, argv[argc-1]); main(argc — 1, argv); >else printf(«n»); return 0; >

Источник: studassistent.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru