Длинная арифметика на языке Си
Автор: AstralXXX • Апрель 25, 2023 • Лабораторная работа • 16,576 Слов (67 Страниц) • 179 Просмотры
ЛАБОРАТОРНАЯ РАБОТА
- Выполнил
- студент гр. <подпись>
- Преподаватель
- асс. преподавателя
<подпись>
- Санкт-Петербург
- 2023
- Цель работы
Необходимо разработать программу, реализующую функционал длинной арифметики для целых чисел. Длина вводимых пользователем чисел: до 2500 знаков.
- Постановка задачи
В разработанной программе должны поддерживаться такие операции как: сложение двух чисел, вычитание двух чисел, умножение двух чисел, возведение числа в степень, факториал числа, сумма всех чисел от и до, также должна быть реализована поддержка отрицательных чисел.
- Теоретические исследования
Существует два основных подхода к решению данной задачи. Первый – с помощью польской нотации, но из-за нехватки знаний о работе стека и структур в языке си, был выбран метод реализации последовательного решения уравнения учитывая порядок выполнения действий.
- Сложение
Операции сложения выполняться также, как и в тетради. Пример представлен на рисунке 1.
[pic 1]
Рисунок 1 – Блок-схема алгоритма сложения
- Вычитание
Выполняется так же, как и операция сложения.
- Умножение
Выполняется аналогично способу сложения. Однако по мере вычислений размер массива увеличиться при необходимости. Пример работы представлен на рисунке 2.
[pic 2]
Рисунок 2 – Блок-схема алгоритма умножения
- Возведение в степень
Возведение в степень есть перемножения числа на самого себя, а потому происходит так же, как и операция умножения
- Факториал
Реализуется последовательным умножение (число на которое умножают возрастает на 1).
- Описание решения
При запуске программы создаться динамический массив типом char, далее происходит посимвольный ввод, который сразу же проверяет выражение на валидность, если будет введена буква или неподходящий символ, программа сразу же завершит работу, также сразу удаляются все пробелы. Изначально под массив выделятся 512 байт, но по мере поступления данных он может увеличиваться до тех пор, пока не закончатся либо входные данные, либо память компьютера.
Далее удаляются факториалы, которые можно сократить. Все числа при вычислении хранятся в отдельном динамическом массиве, так как изначальный размер числа неизвестен. Далее сначала вычисляются все факториалы, потом происходит возведение в степень, умножение, сложение и вычитание. Также стоит отметить, что после каждой операции изначальный массив изменяется, из него удаляется выражение которые было вычислено, а вместо него записывается результат. На третьем рисунке изображена блок-схема разработанной программы.
[pic 3]
Рисунок 3 – Блок-схема разработанной программы
- Тестирование и результаты работы программы
[pic 4]
Рисунок 4 – Пример выполнения работы программы
[pic 5]
Рисунок 5 – Пример выполнения работы программы
[pic 6]
Рисунок 6 – Пример выполнения работы программы
[pic 7]
Рисунок 7 – Пример выполнения работы программы
[pic 8]
Рисунок 8 – Пример выполнения работы программы
[pic 9]
Рисунок 9 – Пример выполнения работы программы
- Выводы
В ходе выполнения работы были получены навыки работы с динамическими массивами, указателями на функции, работы со строками и функциями.
...