
- •Разработка программы преобразования чисел в различные системЫ счисления
- •Задание на курсовое проектирование
- •1 Исходные данные (функциональные требования) на проектирование
- •2 Структура проекта
- •3 Календарный график выполнения проекта
- •Оглавление Введение 4
- •1. Анализ задачи преобразования чисел в различные системы счисления и выполнения арифметических операций........................................................................5
- •2. Проектирование программы преобразования чисел..............................................10
- •Введение
- •1 Анализ задачи преобразования чисел в различные системы счисления и выполнения арифметических операций
- •2 Проектирование программы преобразования чисел
- •2.1 Разработка структуры программы
- •2.2 Разработка алгоритмов реализации основных функций
- •3. Реализация программы преобразования чисел
- •3.1. Программная реализация преобразования чисел
- •3.2. Тестирование
- •3.3. Руководство пользователя
- •Заключение
- •Список использованных источников
- •Приложение 1.
- •Приложение 2.
2 Проектирование программы преобразования чисел
2.1 Разработка структуры программы
Класс Calculator
Класс Calculator описывает объекты, представляющие собой числа в различных системах счисления и результаты арифметических операций в заданной системе счисления, а также методы преобразования числе из заданных систем счисления в десятичнуюсистему счисления и наоборот.
Поля класса:
c1, c2 – числа в заданных систем счисления;
bas1,bas2, basis – основания систем счисления чисел и результата операций соответственно.
Методы класса:
Menu()–функция меню, обеспечивающая выбор различных действий пользователем.
int StringToDec(string s, int x)-преобразование числа из позиционной(2-16 или римской) в десятичную систему счисления. Возвращает число в десятичной системе счисления
string DecToString(const int a, int k) – преобразование числа a из десятичной системы исчисления в k-ичную (2-16 позиционную или римскую) систему счисления. Возвращает конечный результат преобразования.
2.2 Разработка алгоритмов реализации основных функций
Основная программа
Основная программа представлена функцией main, в которой выполняются следующие действия:
Создание объекта класса Calculator с именем “Reshenie”;
Вызов метода Menu объектом“Reshenie”
Схема основной программы приведена в Приложении 2 (Рисунок 2).
Функция Menu
Введем строковую переменную s. Цикл do-while позволит нам повторять действия над числами пока пользователь сам не решит закончить вычисления.
Далее пользователь должен ввести 1-е, 2-е число (с1 и с2) и их системы счисления (сохраним в переменных bas1 и bas2 соответственно).Также пользователю необходимо ввести основание системы счисления результата вычислений(сохраним в переменной basis).
Данные, введенные пользователем, сохранены и теперь, прежде чем мы начнем их преобразовывать, нужно выполнить проверку этих данных на корректность. Проверим введенные основания систем счисления (bas1, bas2, basis) на случай их выхода за допустимый диапазон. Если данные корректны, то вызывается соответствующая функция перевода и выполняются операции(+, –, *, /, %), если нет, то выводится сообщение об ошибке. В любом случае, на экран выводится сообщение (Повторить?). В том случае если пользователь хочет повторить, то все действия повторяются заново, если не хочет, то программа прекращает свою работу.
Схема функции Menuприведена в Приложении 2(Рисунок 4).
Функция StringToDec
Для хранения цифр числа, введенного пользователем, будем использовать строку(val).
Введем необходимые нам для перевода переменные типа int: k,c,a,m,n,zи переменную kk типа bool.Для разбиения строки val на массив нам, прежде всего, понадобится узнать длину строки(k). Для этого воспользуемся функцией length(). Теперь будем работать с массивом.
Так как пользователь может ввести отрицательное число, то проверим, является ли первый символ массива ‘-’. Если является, то заменяем первый символ на ‘0’.
Проверим, является ли введенное основание системы счисления = -1 (т.е. задана римская система счисления). Если является, то открывается цикл for, в котором просматривается каждый символ массива val, которому сопоставляется эквивалент в арабской системе записи чисел. При помощи правил перевода описанных выше из строки с римскими символами мы получаем число m, значение которого мы возвращаем вMenu(). Но если наше римское число было отрицательным, то припишем ‘–’ к числу m перед тем как его возвращать.
Если введённое основание системы счисление не равно -1, то открываем цикл for и просматриваем каждый отдельный символ массива val[i].Если символ массива равен буквам ‘A-F’, то заменяем этот символ на эквивалентную ему в десятичной системе цифру(10-15). Затем собираем число вместе (z=z·t + c). Если первоначало число было отрицательным, то припишем к числу ‘–’. Это число мы и будем возвращать в функцию Menu().
Схема функции StringToDec представлена в Приложении 2(Рисунок 5).
Функция DecToString
Для преобразования результата вычислений из десятичной в заданную систему счисления необходимо ввести переменные: k, c, kk. Хранить цифры полученного числа в заданной системе счислениябудем в строке s.
Если результат вычислений оказался отрицательным, то заменяем это отрицательное число на противоположное – без знака.
Теперь проверяем, является ли система счисления результата римской (t = -1). Если является, то согласно правилам перевода, описанным выше, осуществляем преобразование числа в римскую строку. Если первоначально число было отрицательным, то приписываем в начало строки sминус(s=’–’ + s) и возвращаем эту строку в Menu().
Если система счисления результата не римская (2-16), то первоначально находим остаток от деления числа на его основание (k=z % t). Если этот остаток от 10-15, то заменяем его на эквивалентную букву (‘A’- ‘F’). Если остаток от 0-9, то согласно правилам перевода из десятичной в произвольную систему счисления находим все цифры, которые складываются в строку s. Если число первоначально было отрицательным, то приписываем ‘ –‘в начало строки-результатаи возвращаем эту строку в Menu()
Схема функции DecToString представлена в Приложении 2(Рисунок 6).