- •Томский государственный университет систем управления и радиоэлектроники (тусур)
- •Длинные числа
- •Томский государственный университет систем управления и радиоэлектроники (тусур)
- •Задание
- •Содержание
- •Введение
- •Постановка задачи
- •Обзор литературы
- •Аналоги разработки данной программы
- •Существующие алгоритмы
- •Представление целых чисел
- •Сложение и вычитание
- •Умножение
- •Деление
- •Возведение в степень
- •Вывод длинного числа
- •Анализ задания
- •Требования к программе
- •Использование готовых разработок
- •Реализация программы
- •Тип данных
- •Основные процедуры и функции
- •Описание программы для пользователя
- •Заключение
- •Список используемых источников
- •Приложение а
- •Приложение б
- •Пошаговая структура процедуры сложения
- •Приложение в
- •Пошаговая структура процедуры деления
Приложение б
(Обязательное)
Пошаговая структура процедуры сложения
Входные параметры — число №1, число №2, результат
Если знаки разные, то переход на операцию вычитание
Если одно из чисел дробное, переход на шаг 3, иначе на шаг 14
Если дробное — число №2, то переход на шаг 4, иначе на шаг 9
Переводим число №1 в строку
Прибавляем к концу строки цифру 0
Положение точки в числе №1 равно 1
Перевод строки в число №1
Если дробное — число №1, то переход на шаг 9
Переводим число №2 в строку
Прибавляем к концу строки цифру 0
Положение точки в числе №2 равно 1
Перевод строки в число №2, переход на шаг 14
Если положение точки в числе №1 больше чем в числе №2, то положение точки в результате равно положению точки в числе №1, иначе равно положению точки в числе №2
Carry = 0
Если длина массива в числе №1 больше чем в числе №2 то переход на шаг 16, иначе на шаг 26
Если числа №1 и №2 дробные то переход на шаг 17, иначе на шаг 22
Перевод числа №1 в строку
Перевод числа №2 в строку
Если количество знаков после запятой в числе №1 больше чем в числе №2, то переход на шаг 20, иначе на шаг 21
Пока количество знаков после запятой в числе №1 и в числе №2 не будут равны прибавляем к строке числа №2 цифру 0, переход на шаг 22
Пока количество знаков после запятой в числе №1 и в числе №2 не будут равны прибавляем к строке числа №1 цифру 0
Длина массива числа №2 равна длине массива числа №1
Перевод строки в число №1
Перевод строки в число №2
Если длина массива в числе №2 больше чем в числе №1 то переход на шаг 26
Если числа №1 и №2 дробные то переход на шаг 27, иначе на шаг 30
Перевод числа №1 в строку
Перевод числа №2 в строку
Если количество знаков после запятой в числе №1 больше чем в числе №2, то переход на шаг 20, иначе на шаг 21
Пока количество знаков после запятой в числе №1 и в числе №2 не будут равны прибавляем к строке числа №2 цифру 0, переход на шаг 22
Пока количество знаков после запятой в числе №1 и в числе №2 не будут равны прибавляем к строке числа №1 цифру 0
Длина массива числа №1 равна длине массива числа №2
Перевод строки в число №1
Перевод строки в число №2
Длина массива результата равна длине массива числа №1
I=Длина массива результата - 1
Складываем элемент массива числа №1 с соответствующим элементом массива числа №2 с конца
Если сумма элементов больше 10000, то Carry=1, иначе переход на шаг 36
К следующему элементу массива с конца прибавляем Carry
Если I=0,то переход на шаг 41,иначе переход на шаг 36
Если Carry=1, то переход на шаг 42, иначе на шаг 44
Увеличиваем длину массива результата на 1
Последний элемент массива результата равен Carry
Знак результата равен знаку числа №1
Приложение в
(Обязательное)
Пошаговая структура процедуры деления
Входные параметры число №1,число №2, результат, остаток.
Если число №1 меньше числа №2, то переход на шаг 2, иначе на шаг 3
Копируем число №1 в остаток, выход
Если длина массива числа №1 равна 0, то переход на шаг 4, иначе на шаг 4
Длина массива результата равна 1
Результат равен 0, выход
Если длина массива числа №2 равна 0, то переход на шаг 7, иначе на шаг 8
Выход
Если числа №1 и №2 равны , то результат равен 1, иначе переход на шаг 10
Выход
Если длина массива числа №2 равна 1, то переход на шаг 11, иначе на шаг 12
Выполнение процедуры деления длинного числа на короткое, выход
Перевод числа №1 в строку S1
Перевод числа №2 в строку S2
S_1:=S1
S_2:=S2
Удаляем из строки s1, количество знаков числа №2 начиная с первого
Пока длина S_1 не равноS_2 удаляем последний символ из строкиS_1
Выделяем в памяти ячейки для чисел _a, _tmp, _tmp2,c,d
Переводим строку S_1 в число _a
n=0
Если последний элемент массива числа _aравен 0, то переход на шаг 22, иначе на шаг 23
n=1, переход на шаг
n:=n+1
Умножаем число bнаn, результат записываем в _tmp
Если _tmpбольше чем _a, то переход на шаг 26, иначе на шаг 23
n:=n-1
К строке результата прибавляем значение n
Умножаем число bнаn, результат записываем в _tmp
Вычитаем из _aчисло _tmp, результа записываем в _tmp2
Переводим _tmp2 в строкуss
Удаляем из строки s1 один символ с начала
Если s1 не пустая строка, то переход на шаг 33, иначе на шаг
Прибавляем к строке ssпервый символ строкиs1
Переводим строку ssв число _a
Если s1 — пустая строка, то переход на шаг 37, иначе на шаг 36
Если число _aбольше или равноbто переход на шаг 37, иначе на шаг 32
Делаем строку ss пустой
Если s1 – пустая строка, то переход на шаг 39, иначе на шаг 20
Переводим строку результата в число
Умножаем результат на число №2, результат записываем в число _tmp
Вычитаем из числа №1 число _tmp, результат записываем в остаток
Освобождаем память для чисел _a, _tmp, _tmp2