2.2 Спецификация программы
В спецификации программы определены основные файлы программы «Калькулятор для дробей».
Обозначения |
Наименование |
Примечание |
Калькулятор для дробей.exe |
Исполняемая программа |
Входная точка в программу |
Калькулятор.срр |
Главная функция |
Занимается вызовом основных вычислительных функций |
Drob.h |
Файл включений |
Определены понятия дроби и функции, непосредственно занимающиеся с дробями |
File.h |
Файл включений |
Определены файловые функции для калькулятора |
InOut.h |
Файл включений |
Определены все функции, использующие ввод и вывод на экран |
Protokol.txt |
Текстовый файл |
Файл протокола текущих данных, операций, расчетов. Создается программой. |
Калькулятор для дробей.sln |
Файл проекта |
Файл решений проекта (рабочая область проекта), находится в главном каталоге проекта |
Калькулятор для дробей. suo |
Файл опций |
Файл опций для создания решения, находится в главном каталоге проекта |
vc90.idb |
Файл для компилятора |
Устанавливает зависимость между источниками, которые используются компилятором, находится в каталоге t2/Release |
2.3 Описание программы
При создании программы калькулятора использовался модульный принцип построения программ. Все исходные модули логически разделены на файлы. Программа состоит из 4-х файлов: «Калькулятор.срр», «InOut.h», «Drob.h», «Filе.h». Такое разделение позволяет включить файл «Drob.h» без изменений в другие проекты, которые могут применять технологии API, MFC, CLR.
Файл «Калькулятор.срр» - главный, является по своей сути управляющим. Здесь осуществляется вход в программу. Этот модуль вызывает функции из других модулей – файлов включений «InOut.h», «Drob.h», «Filе.h», а также стандартные библиотечные функции для вывода русских букв.
Функции, объявленные и описанные в модуле «Калькулятор.срр» вызываются в ходе программы:
drob ArifmetOper(drob d1, char oper, HANDLE out, FILE* fout)
- функция для арифметических операций (+,-,*,/). Функция применяется для упрощения алгоритма, так как операции, проводимые с арифметическими действиями почти идентичны.
drob KvadratKoren(drob d1, char oper, HANDLE out, FILE *fout).
- функция для извлечения квадратного корня
drob VozvedStepen(drob d1, char oper, HANDLE out, FILE* fout).
- функция для возведения в степень дроби. Дробь любое положительное целое число.
Все три функции получают по четыре параметра. Три из них передаются по значению, - дробь как структура, операция, дескриптор канала вывода. Четвертый параметр - дескриптор текстового файла. Он передается через указатель. Каждая из перечисленных функций имеет тип drob, так как возвращает результат (величину дроби) для дальнейшего использования в расчетах.
Файл «InOut.h» - файл включений, содержит набор функций ввода с клавиатуры и вывода на экран. Этот файл определяет интерфейс, применим только в консольной технологии.
Содержание файла «InOut.h»:
void menu(HANDLE out)
- функция выводит меню в красном цвете. Параметр функции – дескриптор канала вывода.
drob GetDrob(HANDLE out)
- функция формирование дроби из двух целых чисел, вызывает функцию получения числа InputNum() сначала для числителя, потом для знаменателя. Обращение к функции получения числа происходит до тех пор, пока не будет получено число больше 0. Входной параметр функции - дескриптор канала вывода. Выходной параметр – дробь.
int InputNum(HANDLE out, char *mes, char *error, int begPoz=0, WORD PozitionNumX=0, WORD PozitionNumY=10)
- функция получения числа. Используется для получения величины числителя, знаменателя или степени. Эта функция выдает подсказку для действия оператора в определенной позиции экрана, при необходимости выдает сообщение об ошибке, вводит строку символов, вызывает функцию проверки и преобразования символьной строки в целое число Proverka(), возвращает преобразованное целое число. Функция использует параметры по умолчанию. Параметры функции: дескриптор вывода, подсказка оператору, сообщение об ошибке, начальная координата, для стирания строки, координата по Х и по У для вывода подсказки.
int Proverka(char *str)
- функция вспомогательная, вызывается из функции InputNum, проверяет введенную строкув на допустимые значения. Функция возвращает число, преобразовванное из символьной строки, если все символы допустимы, иначе возвращается -1 (ошибка).
int GetStep(HANDLE out, char *str1)
- функция формирования степени целого числа с записью в строку для протокола. Так как степень – целое число, то данная функция вызывает InputNum(). Параметры функции: – дескриптор канала вывода и адрес строки, в которую преобразовавается величина степени для записи в файл. Возвращаемое значение – величина степени.
void PrintOtvet(drob d, HANDLE out, char * str1, char oper)
- функция вывода ответа в определенном месте экрана. Осуществляет вывод дроби с преобразованием в целую и дробную часть на экран и записывает значение дроби в строку str1 для протокола с указанием операции. Дробь выводится правильная или смешанная. Входные параметры функции: значение дроби, дескриптор канала вывода, адрес строки символов (ответ преобразованный в строку), вид операции. Выходных параметров нет.
char GetOper(HANDLE out)
- функция ввода операции. В определенном месте экрана функция выдает подсказку для ввода операции, затем вводит саму операцию. Входные параметры функции: дескриптор канала вывода. Выходные параметры функции – символ операции.
void PrintNoOper(char oper, HANDLE out)
- функция вывода сообщения на экран о неправильно введенной операции. Входные параметры: вид операции, дескриптор канала вывода.
Файл «Drob.h» - файл включений, содержит набор функций, работающий с дробями. Данный файл можно включать как законченную часть в проекты с другими технологиями. Файл объявляет дробь как структуру и содержит набор функций:
drob Sokrasenie(drob dr)
- функция сокращение дробей - сокращение числителя и знаменателя через нахождение НОД. Используется алгоритм Евклида. Входной параметр – дробь, выходной сокращенная дробь.
drob Slogenie(drob f1, drob f2) - функция сложения дробей.
drob Vy4itenie(drob f1, drob f2) - функция вычитания дробей.
drob Umnogenie(drob f1, drob f2) - функция умножения дробей.
drob Delenie(drob f1, drob f2) - функция деления дробей.
У функций, выполняющих арифметические действия, используется стандартный математический алгоритм. Входные параметры – две дроби. После расчетов вызывается функция Sokrasenie(). Выходной параметр - результирующая сокращенная дробь.
drob Koren(drob f1) - функция вычисляет квадратный корень. Используется метод вычитания последовательности нечетных чисел. Входной параметр – дробь, выходной - результирующая сокращенная дробь.
drob Stepen(drob f1, int stepen) - функция возведения дроби в целую степень. Используется алгоритм умножения дроби на себя stepen раз. Входные параметры –дробь и степень дроби. Выходной параметр - результирующая сокращенная дробь.
Файл «Filе.h» - файл включений, содержит набор функций, работающий с текстовым файлом.
FILE * OpenFil(HANDLE out)
- функция открытия файла протокола.Функция выдает сообщение о записи протокола на диск, либо о невозможности создать файл. При успешном проведении операции создается текстовый файл "Protokol.txt", расположенный в том месте, где находится рабочая программа. Входные величины – дескриптор канала вывода, выходные – дескриптор файла.
void writeDrobInFile(int i, int j, FILE *fout)
- функция записи дроби. Входные параметры: числитель и знаменатель дроби, дескриптор файла. Выходные параметры отсутствуют.
void writeOtvetInFile(char *str1, FILE *fout)
- функция записи ответа. Входные параметры: строка символов, дескриптор файла. Выходные параметры отсутствуют.
void writeOperInFile(char oper, FILE *fout)
- функция записи операции. . Входные параметры: оператор, дескриптор файла. Выходные параметры отсутствуют.
void writeStepenInFile(char *str1, FILE *fout)
- функция записи значения степени. Входные параметры: строка символов, дескриптор файла. Выходные параметры отсутствуют.
2.4 Тестирование программы
Тестирование программы оценивает ее работоспособность и надежность. Чтобы программу проверить, необходимо произвести расчет формулы с заранее известным ответом:
Если
конечный ответ, полученный на экране,
соответствует заранее известному
ответу, в данном случае
,
и в текстовом файле зафиксированы все
правильные действия оператора, то
программа работает исправно.
При расчете вышеуказанной формулы в текстовом файле «Protokol.txt» появляется такая запись:
( 1/2 ) - ( 3/4 ) Ответ: ( -1 / 4)
+ ( 3/8 ) Ответ: ( 1 / 8)
^ 2 Ответ: ( 1 / 64)
* ( 25/1 ) Ответ: ( 25 / 64)
& Ответ: ( 5 / 8)
/ ( 1/4 ) Ответ: (2 1 / 2)
* ( 8/3 ) Ответ: (6 2 / 3)
