Факториал в «Паскале»: как вычислить. Примеры программ
Обучение программированию идёт по пути от простого к сложному. Освоив типы данных и операторы языка, переходят к циклическим конструкциям. Задач на циклы существует бесчисленное количество: начиная от вывода цифр в столбик до подсчёта сумм по сложным формулам. Тем не менее у начинающих программистов остаётся вопрос: «Как вычислить факториал в «Паскале»?»
Реализовать задачу можно как минимум тремя способами. Отличаются они используемыми операторами.
Математические сведения
Перед тем как перейти к построению алгоритмов и написанию программ, следует изучить теорию. В математике факториалом называют произведение целого числа, для которого вычисляется выражение, на целые положительные числа меньше его.
Понять определение поможет пример. Пусть требуется выполнить нахождение факториала для числа 3. Решение: 3! = 3 * 2 * 1 = 6.
Обозначается действие восклицательным знаком, который ставится после числа. Важное замечание: факториал определён только для целых положительных чисел. Вместе с тем, введено понятия для нуля: 0! = 1.
Считать выражение для больших значений вручную – занятие долгое. Чтобы убыстрить процесс вычислений, используют компьютерные программы. Далее рассмотрены способы, как найти факториал в «Паскале».
Первый способ
Код ниже показывает вариант программы.
В примере используют составную конструкцию с условием, которое записывается перед телом цикла. Синтаксис записи:
Выполняется код следующим образом: программа проверяет истинность выражения , в случае положительной проверки переходит на .
Возвращаясь к программе, нужно обратить внимание на следующие строки:
- 2 – задаётся число n, для которого будет выполнен расчёт;
- 6 – заголовок цикла;
- 7 – начало цикла;
- 8 – вычисление переменной fact, которая хранит значение факториала числа n;
- 9 – увеличение переменной-счётчика на единицу;
- 10 – конец цикла.
Второй способ
Следующий предлагает вычислить факториал в «Паскале» с помощью оператора repeat.
Конструкция цикла: repeat until <условие>;
Чтобы понять, как работает программа, рассмотрим её построчно:
- 2 – константе n назначается число, для которого выполняется вычисление;
- 7 – начало цикла;
- 8, 9 – расчёт факториала и увеличения счётчика i;
- 10 – конец тела цикла;
- 11 – проверка условия, поскольку условие располагается после последовательности операторов, повтор действий будет выполнен как минимум один раз.
Третий способ
Последняя программа также дает возможность вычислить факториал в «Паскале» и является самой компактной по размеру. Причина – используемый оператор for, для которого увеличение счётчика i задаётся в параметрах цикла.
Работает код следующим образом (цифрами указаны строки листинга):
- 2 – константе n присваивают значение числа, для которого вычисляется факториал;
- 6 – задаются параметры цикла – начальное и конечное значения;
- 7 – начало цикла;
- 8 – вычисление переменной fact;
- 9 – конец цикла.
Замечание
Даже для чисел из первой десятки факториал имеет значение больше, чем допускает тип данных integer. Поэтому программа в «Паскале» покажет сообщение об ошибке. Исправить её просто – нужно заменить тип данных для переменной-результата на longint или использовать типы для хранения вещественных значений.
Источник статьи: http://fb.ru/article/304034/faktorial-v-paskale-kak-vyichislit-primeryi-programm
Написать функцию вычисления факториала
Написать рекурсивную функцию вычисления факториала
Нужно написать рекурсивную функцию вычисления n!. Обычную функции могу написать, а куда рекурсию.
Написать программу, которая вычисляет значение p = (для вычисления факториала использовать функцию)
Написать программу, которая вычисляет значение p =m!*(m-n)!/n! (для вычисления факториала.
Вычисление суммы, используя функцию вычисления факториала
Составить программу вычисления суммы (рис), используя функцию вычисления факториала натурального.
Вычислить величины. Использовать функцию вычисления факториала
Составить программу. В задаче предполагается, используя шестизначный учебный шифр (его.
простите меня на недогадливость, а в чём состоит существенная экономия?
Решение
очень хитро!
я бы лично вряд ли использовал подобный код в реале (не люблю в продакшн такие хитрозакрученные и слегка неочевидные вещи), но код вызывает восхищение! Просто супер!
Спасибо!
bormant, а эта строчка всё таки НЕ НУЖНА!
Закомментируйте и убедитесь в этом сами!
цикл for изменяет переменную m
Решение
Тут понимаете какая штука.
Для языка Паскаль недвусмысленно заявлено, что значение счетчика цикла for по окончании цикла не определено, если только цикл не завершился по Break. Это означает, что значение счетчика цикла может быть разным в зависимости как от реализации языка, так и от варианта оптимизации внутри конкретной реализации (например, равным последнему значению, следующему за последним значением, или вовсе начальному значению). Если какая-то реализация будет брать начальное значение счетчика из памяти в регистр, все обращения к счетчику транслировать в обращения к этому регистру, а возвращать значение из регистра в память только по Break, то, строго говоря, это не будет нарушением с точки зрения языка.
Поэтому закладываться на особенности той или иной реализации — самое последнее дело.
Это сродни самой дорогой ошибке программирования — ARIANE 5, с той лишь разницей, что там заложились не на языковые особенности, а на то, что начальные условия старта ARIANE 4, для которой изначально писался код, останутся неизменны.
Наоборот, код не использует ни одной нестандартной или недокументированной возможности. Он просто помнит одно последнее значение и использует его, если возможно. В конкретно этом примере экономия невелика, но представьте вместо Longint длинную арифметику, и оценки времени сразу заиграют новыми красками 🙂
Пример по сути является наводящим для организации «ленивых вычислений». Если последнее значение заменить таблицей, вычисляемой по мере необходимости, то достигается экономия на повторных вычислениях одних и тех же значений (без проверок допустимых диапазонов, только идея):
Или варианты с промежуточными значениями и довычисление от них необходимых.
Другое дело, что если бы в продакшн подобный участок был бы действительно критичным по времени, то вместо функции была бы таблица.
Источник статьи: http://www.cyberforum.ru/turbo-pascal/thread1795221.html
Факториал числа
Написал программу, которая считает факториал числа.
Но считает она до максимального значения типа REAL. Как сделать, чтобы считался факториал для любого числа? (С массивами пока не знаком.)
Определить во сколько раз факториал числа n! больше факториала числа m!
Определить во сколько раз факториал числа n! больше факториала числа m!
Определить во сколько раз факториал числа n больше числа m
Определить во сколько раз факториал числа n больше числа m
Факториал числа
Скажи пожалуйста, существуют ли ещё способы нахождения n! в Pascal, кроме самого простого var.
Определить факториал числа
Определить факториал числа n!
Считает сумму числа сочетаний, из этого можно и про факториалы извлечь.
Программа авторская.
Добавлено через 1 минуту
ЯСеньПень, что означает «cnk» ?
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Найти факториал числа
Пользователь вводит натуральное число. Найти факториал числа. Использовать процедуры или функции
Найти факториал числа N
Помогите пожалуйста, очень нужно, заранее благодарю! Операторы цикла 15. Найти факториал числа N.
Найти факториал числа N
Ввести N различных чисел. Найти N!.Помогите плиз
Факториал числа в процедурах
Пользователь вводит натуральное число. Требуется найти факториал введенного числа, при условии что.
Источник статьи: http://www.cyberforum.ru/pascalabc/thread239797.html
Длинная арифметика. Факториал
Добрый вечер, господа программисты.
Сижу сейчас и разбираюсь с кодом для вычисления факториала из Окулова (задание 10, программа 5). Вот код без изменений из книги.
Всё вроде бы верно, но для факториала 27! возникает ошибка (большие числа не пробовал). Программа выдаёт 888869450418352160768000000, а двух цифр вначале не хватает: 10888869450418352160768000000.
Проблема, как мне кажется, в подчёркнутом условии. Ведь при выходе факториала за прежние границы массива первая цифра вне границ вполне может быть нулём, как в 27!, а исходник этого не учитывает.
При замене указанного условия на i > a[0] (цифра с номером, большим, чем изначально указанный) всё становится на свои места.
Пожалуйста, подскажите, прав ли я.
длинная арифметика!
Вычислить точное значение эн в степени эн факториал!
Длинная арифметика
Требуется вычислить факториал целого числа N. Факториал обозначают как N! и вычисляют по формуле: .
длинная арифметика
помогите мне из этого умножения сделать сложение препод сказал тут нужно поменять умножить на плюс.
Длинная арифметика
Так вот я неаписал программу на сложение. Все с ней норм, а вот с произведением не идет почемуто.
Решение
Молодец! Возьми с полочки конфетку.
Я, к примеру, не стал бы описывать массив четырёхбайтовых элементов для хранения значений не превышающих байта (0..10 — это 1/25 от байта) !
Есть некоторая задержка при приведении больших чисел к меньшим, но выигрыш в памяти даст получить факториал для более больших чисел.
(Вообще не понятно почему размерность выбрана именно до 300 цифр? Всего лишь 170! имеет в своём составе уже 307 цифр.)
Только вот длину числа нужно вывести в отдельную переменную.
Короче! Я бы переписал всё примерно вот так:
Joy, только арифметика немного усложнится!
Не в данном конкретном случае, а при разработке своего модуля „длинной арифметики“.
Появятся проблемы с переполнением при выполнении простых арифметических операций, а значит появятся затруднения при отладке!
9 · 9 = 81 — влезет в байт. Нужно будет только сделать перенос десятичных регистров.
99 · 99 = 9801 — уже не лезет в байт. Следовательно нужно тратиться на приведение типов… Это — дополнительное время!
А ещё при больших основаниях преобразование в строку должно учитывать, что очередная порция цифр может быть меньше чем требуется, тогда ему слева дописывать нолики…
Ячейки:Значения = [00:00][01:11][02:01][03:10][04:01]
Что должно быть представлено публике как 110011100.
Если же не учитывать вышеприведённое условие добавление нолей, то кто-то может вывести так: 1101110.
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Длинная арифметика
Уважаемые, помогите решить задачку, горит ужасно помогите пожалуста, срочно надо: 1.Составить.
Длинная арифметика.Чтение и вывод.
Нашел процедуры чтения и выводы длинных чисел. Но есть несколько вопросов. procedure ReadLong(var.
Формирование матрицы, длинная арифметика.
1)натуральное число (длинное целое) можно представить в виде произведения нескольких натуральных.
Сортировка массивов и длинная арифметика
Ребят, помогите пожалуйста. Очень нужен ПОЛНЫЙ КОД. Вот задачи: 1. В городе имеется m банков.
Сортировка вставками.множества.длинная арифметика..
Завтра надо сдать практику иначе отчислят. помогите решить хоть что нибудь 1)Сортировка.
Источник статьи: http://www.cyberforum.ru/turbo-pascal/thread1381181.html
Двойной факториал
Задача: Дано натуральное число n. Получить n!! (!-факториал),равное произведению (1*3*. *n) для нечётного n и (2*4*. *n) для чётного n.
Требования:
Использовать оператор FOR.
Не использовать массивы и строки.
При вычислении факториалов обратить внимание на переполнение. Определить,при каких значениях параметров оно наступает. Постараться отодвинуть эту эту границу путём изменения типа параметров или сокращения дробей.
Двойной факториал
подскажите как написать функцию для вычисления х!!
Вычислить двойной факториал
привет всем. Суть задания такова найти для N значение (2N)!! нашел программу, но она работает для.
Вычислить двойной факториал
Написал программку под задание: Для числа n вывести произведение «n!!» с условием: если число.
Найти двойной факториал
Дано целое число N (> 0). Найти двойной факториал N: N!! = N•(N–2)•(N–4)•… (последний сомножитель.
у меня не нормально,на фор жалуется(
Добавлено через 3 минуты
вроде заработало,для чётных кажется правильно,но для неч ответ с минусом вылазит.
Задача: Дано натуральное число n. Получить n!! (!-факториал),равное произведению (1*3*. *n) для нечётного n и (2*4*. *n) для чётного n.
Требования:
Использовать оператор FOR.
Не использовать массивы и строки.
При вычислении факториалов обратить внимание на переполнение. Определить,при каких значениях параметров оно наступает. Постараться отодвинуть эту эту границу путём изменения типа параметров или сокращения дробей.
victor_g
прога работает,спасибо,но вроде нужно произведение факториалов,а вылазит просто факториал(
может нужно ввести в расчёты ещё n2 чётное? а потом перемножить чёт и нечет.
if (i mod 2)<>(n mod 2) then continue;
можно объяснение этой строки
if (i mod 2)<>(n mod 2) then continue;
можно объяснение этой строки
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Вычислить двойной факториал
Составьте, пожалуйста, программу для вычисления двойного факториала (2n+1)!! (например.
Вычислить двойной факториал, используя процедуру
Вычислить, используя процедуру у = (2n — 1)!! = 1* 3*5 * . * (2n — 1), n>0 Дублирование.
Двойной факториал
N!! = N*(N–2)*(N–4)*… (N > 0 — параметр целого типа; последний сомножитель в произведении равен 2.
Двойной факториал
Пусть n — натуральное число и пусть n!!означает 1*3*5*. *n для нечетного n и 2*4*. *n для.
Источник статьи: http://www.cyberforum.ru/pascal/thread64936.html