Файл: Лабораторная работа 1 Фундаментальные структуры данных Факториал Реализовать вычисление факториала чисел.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.12.2023

Просмотров: 12

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Лабораторная работа №1

Фундаментальные структуры

данных

1. Факториал



Реализовать вычисление факториала чисел (на различных целочисленных типах). Определить допустимые диапазоны вычислений.
В языке Python используется два целочисленных типа: целые числа, длинные целые числа.

Целочисленный тип представляет диапазон чисел от -2147483648 до 2147483647. Тип длинных целых чисел способен представлять числа неограниченной величины (ограничение накладывается только объемом доступной памяти).

Несмотря на то, что существует два целочисленных типа, интерпретатор Python старается скрыть имеющиеся различия — когда целое число выходит за допустимый диапазон, происходит переключение на длинную арифметику. Это позволяет работать с числами произвольной длины (пока хватает памяти), ценой увеличения времени работы (так как в этом случае арифметические операции реализуются не аппаратно, а программно).

По определению факториал числа n есть
n! = 1·2·3· … ·n, 0! = 1 (1)

Программная реализация
def factorial( n ):

if n < 0: # факториал определён только для

return None # неотрицательных целых чисел

if n == 0 or n == 1: # 0! = 1! = 1

return 1

else: # общий случай, расчёт по формуле (1)

f = 2

for i in range( 3, n + 1 ):

f *= i

return f
Пример расчёта

500! = 12201368259911100687012387854230469262535743428031928421

92413588385845373153881997605496447502203281863013616477148203

5841633787220781772004807852051593292854779075719393306037729

6085908627042917454788242491272634430567017327076946106280231

04526442188787894657547771498634943677810376442740338273653974

713864778784954384895955375379904232410612713269843277457155463

0997720278101456108118837370953101635632443298702956389662891165

897476957208792692887128178007026517450776841071962439039432253

642260523494585012991857150124870696156814162535905669342381300

885624924689156412677565448188650659384795177536089400574523894

03357984763639449053130623237490664450488246650759467358620746

3792518420045936969298102226397195259719094521782333175693458150

8552332820762820023402626907898342451712006207714640979456116127

62914595123722991334016955236385094288559201872743379517301458635

7570828355780158735432768888680120399882384702151467605445407663

53598417443048012893831389688163948746965881750450692636533817505

5478128640000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000

000000000000000000


2. Индивидуальное задание



Вариант 40. Замечена следующая закономерность:
9 х 1+2=11

9 х 12 + 3 =111

9 х 123 + 4 =1111

9 х 1234 + 5 =11111
Написать программу, подтверждающую эту закономерность.
Данная закономерность описывается уравнением
9 ciphsk + k + 1 = unitsk, k = 1, 2, ... (2)

где ciphsk и unitsk определяются рекуррентно
ciphsk = 10 ciphsk-1 + k + 1, ciphs1 = 1;

unitsk = 10 ciphsk-1 + 1, units1 = 11.
Программная реализация
max = 10 # максимальное количество итераций

ciphs = 1

units = 11

for k in range( 1, max ):

if ( 9*ciphs + k + 1 ) == units:

print( "9 *", ciphs, " + ", k + 1, "=", units )

ciphs = 10*ciphs + k + 1

units = 10*units + 1
Скриншот результатов работы скрипта