По дисциплине
«Защите допускаю» Руководитель: Ильин В.А. _________________ (Подпись) «____» __________2008 г
Оценка при защите: ________________ ________________ (Подпись)
«____» __________2008 г.
УФА-2008 МГТУ МИРЭА ==============================================================
Факультет: филиал МГТУ МИРЭА в г. Фрязино Кафедра общенаучных дисциплин
КУРСОВАЯ РАБОТА по дисциплине «Программирование 1»
Тема курсовой работы « Калькулятор для дробей »
Студент группы ХХХХХ ХХХХХХХХ YYYYY ZZZZZZ.
Руководитель курсовой работы старший преподаватель кафедры ОНД Николаева Е.Л. Рецензент доцент, к.п.н. Исмагилова Е.И.
Фрязино 2012г.
Содержание
Введение Курсовая работа «Калькулятор для дробей» посвящена созданию рабочей программы, позволяющей работать с дробными числами. Рабочая программа в диалоговом режиме представляет оператору независимый выбор рядя операций: ввод дробных чисел, математические действия с ними. Кроме того, рабочая программа предусматривает автоматическое преобразование дробей при выводе, постоянный контроль данных и операций в виде текстового файла, диагностические сообщения и подсказки оператору. Рабочая программа реализуется в консольной технологии, занимает не более 15 кбайт памяти. Может работать под операционной системой Windows ХР и более ранних версиях Windows, на процессорах начиная 486 серии. Данная курсовая работа имеет практическое значение: с ее помощью можно производить различные вычисления при подготовке домашних задач школьникам младших классов. Кроме того, при небольшой модификации данного проекта можно создать тестовую программу в помощь учителям для проверки знаний учеников, изучающих дроби.
1 Разработка эскизного и технического проектов программы 1.1 Задание
В курсовой работе необходимо создать консольное приложение «Калькулятор для дробей», позволяющее реализовать основные операции с дробными числами с подробным контролем действий оператора. Работа с дробными числами предусматривает: - ввод дробного числа; - выполнение математических операций путем выбора пунктов меню: - сложения, - вычитания, - умножения, - деления; - возведение в степень; - извлечение квадратного корня; - вывод дробного/смешанного числа; - автоматическое преобразование неправильной дроби в смешанное число. Консольное приложение должно: - автоматически записывать введенные данные и выбранные математические операции с вычисленными результатами в протокол; - выдавать диагностические сообщения на неправильные действия оператора; - выдавать подсказки оператору для последовательности ввода данных или операции. Интерфейс программы «Калькулятор для дробей» должен представлять собой собственное консольное окно с заголовком, с позиционированными цветными текстовыми строками для вывода подсказок, ввода чисел и операций, ответа, диагностических сообщений на ошибки оператора.
1.2 Назначение и область применения
Назначение программы – «Калькулятор для дробей» позволяет производить математические вычисления с дробными и смешанными числами, а также автоматически протоколировать все произведенные операции для просмотра результатов всей работы оператора. Область применения программы - вычисления для дисциплины по курсу начальной математики при изучении темы «Дроби» для младших школьников.
1.3 Технические характеристики 1.3.1 Постановка задачи
Необходимо разработать программу для проведения математических вычислений с дробными числами с целью дальнейшего обучения и использования в расчетах при решении задач и примеров по математике для учащихся начальной школы. В математике дробное число (далее дробь) – запись вида a/b называется обыкновенной (или простой) дробью. Число a при этом называется числителем, а b – знаменателем. Числитель и знаменатель представляют собой натуральные числа. Правильная дробь – модуль числителя по величине меньше модуля знаменателя, неправильная дробь – модуль числителя по величине больше модуля знаменателя. Смешанная дробь состоит из целой части и правильной дроби. Разрабатываемая программа «Калькулятор для дробей» (далее калькулятор) должна предоставить возможность пользователю сделать выбор математических операций с правильными и неправильными дробями. Выбор операций должен осуществляться через независимые пункты предлагаемого меню. Предлагаемые виды операции с дробями: - требующие две дроби - арифметические действия: сложение, вычитание, умножение, деление; - требующие одну дробь - возведение в целую степень, извлечение квадратного корня. При выполнении арифметических действий с дробями следует применить стандартные математические алгоритмы. При выполнении операции возведения в целую степень использовать алгоритм умножения дроби на саму себя такое количество раз, какова величина степени. При вычислении квадратного корня следует использовать алгоритм вычитания последовательности нечетных чисел из числителя и, соответственно, знаменателя. Цикл работы с дробями должен быть бесконечным. Каждый ответ, полученный от предыдущей операции, становится текущим значение для следующей операции. Таким образом, в программе необходимо предусмотреть корректный выход через один из пунктов меню – предложение выйти из программы через нажатие клавиши«Esc». В данной программе необходимо использовать собственные типы данных – структура. Программа должна использовать диалоговый режим с пользователем. Разработка интерфейса программы имеет большое значение. Интерфейс должен быть прост и удобен. При запуске программы должно открываться консольное окно с заголовком. На экране должны появиться: - в самом верху окна меню (красного цвета). Меню должно появиться только один раз при запуске программы; - ниже сообщения оператору (подсказки) об очередности действий: вводе числителя, знаменателя, вида операции, величины степени. Цвет данных и сообщений должны отличаться от остальных надписей на экране; - далее результат действий (ответ). Цвет данной надписи выбрать зеленым; - в низу консольного окна должно находиться сообщение о создании файла и записи информации в файл. Цвет данного сообщения выбрать синим. При неправильном вводе дроби, операции, ошибки в создании или записи данных в файл должно выдаваться соответствующее диагностическое сообщение в фиксированном месте ярко красного цвета. Месторасположение вывода каждого сообщения строго фиксировано. Позиционирование для курсора при вводе значений должно осуществляться в заданных программой местах. Открытие файла для протокола должно происходить при запуске программы. В него необходимо записать последовательность: данные, операция, ответ. Такая последовательность записывается в бесконечном цикле. Прекращение записи – закрытие файла при выходе из программы. Ошибки оператора не следует записывать в файл.
1.3.2 Описание алгоритма
В программе решаются одновременно две задачи: работа с дробями и запись этой работы в файл на диск. Программа калькулятор достаточно простая, рассматривать алгоритмы работы большинства функций не имеет смысла. В данной курсовой работе представлены наиболее интересные алгоритмы программы калькулятор.. Основной алгоритм работы программы представляет собой типичный алгоритм по выбору пунктов меню и вызове соответствующих функций. Алгоритм главной программы осуществляет: - вывод меню; - открытие файла; - ввод дроби и запись в файл; - ввод математической операции или завершения программы; - выбор математической операции с записью в файл; - в зависимости от выбранной математической операции, необходимо сделать ввод дроби или степень, или сразу получить ответ. При этом сразу идет запись текущей информации на диск; - при нажатии клавиши «Esc», закрывается файл и выход из программы. Алгоритм главной программы представлен на рисунке 1. В связи с тем, что главный модуль вызывает функции для проведения арифметических операций, их алгоритм единообразный и представлен на рисунке 2. Сами же действия с дробями очень просты, поэтому их алгоритмы не рассматриваются. Алгоритмы функций извлечения корня и возведения дроби в степень представлены на рисунках 3 и 4 соответственно. Следует отметить алгоритм вывода ответа и алгоритм формирования дроби. Алгоритм вывода ответа позволяет вывести дробь в зеленом цвете и строго указанном месте экрана в виде правильной дроби или смешанного числа. Алгоритм вывода подразумевает: 1. установления позиции курсора; 2. очищения строка для вывода путем записи пробелов; 3. восстановления позиция курсора; 4. задание цвета вывода зеленым; 5. сравнения величины числителя и знаменателя. Если дробь неправильная, то выделяется целая часть путем подсчета количества раз вхождения знаменателя в числитель. Как только величина числителя становится меньше знаменателя, записывается ответ в строку символов, находящуюся в памяти для вывода в протокол, и на экран. При правильной дроби сразу же записывается ответ на экран и в строку символов. 6. восстановление белого цвета для дальнейшего вывода. Алгоритм формирования дроби заключается в последовательном воде двух символьных строк с анализом на ввод ошибок, преобразованием этих строк в целые числа соответственно для числителя и знаменателя дроби. Цвет символов при выводе сообщений для оператора и введенных строк осуществляются в определенных местах консольного окна. Алгоритм формирования дроби (а) с вызовом функции ввода (б) представлены на рисунке 5.
Рисунок 1. Алгоритм главной программы.
Рисунок 2. Алгоритм вызова арифметических операций.
Рисунок 5 Алгоритм формирования дроби (а) с вызовом функции ввода (б). 1.3.3 Организация входных и выходных данных
Входные данные – данные, с которыми работает программа: числитель, знаменатель, степень числа – натуральные числа, а вид операции - символ. Перечисленные данные вводятся с клавиатуры. При вводе числителя, знаменателя, степени числа применяется ввод сроки символов в символьный массив. Такой ввод удобен, так как позволяет вовремя обнаружить и исправить ошибки. Дробное число состоит из двух составляющих, поэтому разумно его представить как структуру - собственный тип данных: struct drob { int chis; //числитель int znam; //знаменатель }; Так как каждое поле структуры – целое число, символьный массив после ввода и проверки на ошибки переводится в целое число. Степень дробного числа - целое число, для ее получения используется такой же способ, как и составляющих частей дроби. Степень в программе определена как int step. Вид операции или операция – символьная переменная, определенная как char oper. Данная переменная может принимать строго определенные значения: «+», «-», «*», «/», «^», «&», либо значение переменной с кодом 1 и 27. Любое другое значение переменной вызовет сообщение о неправильной операции.
Выходные данные – результат расчета операций с дробями представляет собой дробь, которая выводится на экран в последовательности: значения числителя, знака «/», значение знаменателя взятые в круглые скобки. Например: (1/2). Кроме того, при запуске программы выдаются текстовые сообщения о последовательности действий оператора и об ошибках, допущенных оператором. Дроби и операции с ними последовательно, по мере проведения расчета, записываются в текстовый файл протокола для контроля. Эта запись представляет собой форматированный вывод дробей, операций между ними, и ответов.
1.3.4 Выбор состава технических и программных средств
Средства, используемые в данной работе, содержатся в интегрированной среде разработки (IDE) Microsoft Visual C++ 2008 (далее VS). Эта среда предоставляет набор инструментов, которые помогают в создании и изменении кода, а также в обнаружении и исправлении ошибок. В VS для организации работы служат проекты и решения. При написании программы на языке C++ с помощью VS первым этапом является выбор типа проекта. Для каждого типа проекта VS устанавливает параметры компилятора и генерирует стартовый код. Так как задача ставились написать консольное приложение, то запускался мастер приложений Win32 и создавался пустой проект - без файлов исходного кода. В пустой проект через обозреватель решений добавлялись файла исходного кода «Калькулятор.cpp» и три файла включений «InOut.h», «Drob.h», «Filr.h». Далее все файлы компилировались, исправлялись ошибки, полученные при компиляции, создавался загрузочный (исполнительный) модуль, он запускался на выполнение. При запуске на выполнение возникали ошибки в логике программы, которые в дальнейшем были исправлены. В конечном итоге получился исполнительный модуль – рабочая программы «Калькулятор для дробей.exe».
2 Разработка рабочего проекта 2.1 Разработка программы
Программа калькулятор предназначена для функционирования в среде Windows. Это приложение, хотя и разрабатывалось в среде визуального программирования, но использует консольное окно. Таким образом, программирование строится на процессе написания кода, придающего консольному окну и программе в целом необходимую функциональность. Окно программы изображено на рисунке 6.
Рисунок 6. Консольное окно программы «Калькулятор для дробей».
Меню программы выводится только один раз. Программа использует диалоговый режим. Последовательность выдачи сообщения на действия оператора строго определена: сначала выводится предложение для ввода числителя. Вводится числитель. Ввод заканчивается нажатием на клавишу «Enter». Аналогично происходит и со знаменателем, и со степенью числа. Что касается ввода операции, то это ввод одного допустимого символа без нажатия клавиши «Enter». Позиции для ввода данных определены программно. Если операция требует вторую дробь, то диалог повторяется: вводится числитель и знаменатель следующей дроби. Только после этого высвечивается полученный ответ. Если операция требует возведение в степень, то предлагается ввести степень числа, и после ввода степени выдается ответ. При вводе операции извлечения квадратного корня сразу же высвечивается результат вычисления. В каждом случае после вывода результатов расчета программа предлагает ввести очередную операцию для того, чтобы продолжить вычисления или выйти из программы. Таким образом, работа по выбору пунктов меню представляет собой бесконечный цикл операций. Выход из программы осуществляется при нажатии на клавишу «Esc», что является корректным способом завершения программы. Каждое действие, выполненное оператором: ввод чисел или операции, записывается в текстовый файл на диск для контроля полученных результатов. Текстовый файл «Protokol.txt» создается заново и открывается при запуске программы, а закрывается при выходе из программы. Данный файл располагается в том каталоге, где находится рабочая программа. В программе предусмотрена реакцию на некорректный ввод операции или данных. На рисунке 7 представлено консольное окно, на котором отражена ситуация с введенной несуществующей операцией.
Рисунок 7. Окно программы с сообщением о неправильной операции.
2.2 Спецификация программы
В спецификации программы определены основные файлы программы «Калькулятор для дробей».
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)
3 Внедрение
Программа «Калькулятор для дробей.ехе» - консольное приложение, занимает объем не более 15 Кбайт. Для ее выполнения необходим минимальный состав аппаратурных средств: операционная система Windows 95, процессор 486 серии, оперативная память 4 Мбайт, память видеокарты 512 Кбайт, жесткий диск 544 Мбайт, экран, клавиатура, мышь. Рабочая программа из каталога «Release» проекта «Калькулятор для дробей», можно скопировать на жесткий или съемный диск. При запуске рабочей программы высвечивается меню с предложенными операциями и предложением ввода числителя. После ввода числителя программа предлагает ввести знаменатель дроби. После ввода знаменателя высвечивается сообщение о вводе операции. Если операция требует вторую дробь, то диалог повторяется: вводится числитель и знаменатель следующей дроби. Только после этого высвечивается полученный ответ. Если операция требует возведение в степень, то предлагается ввести степень числа, и после ввода степени выдается ответ. При вводе операции извлечения квадратного корня сразу же высвечивается результат вычисления. В каждом случае после вывода результатов расчета программа предлагает ввести очередную операцию для того, чтобы продолжить вычисления или выйти из программы. Таким образом, работа по выбору пунктов меню представляет собой бесконечный цикл операций. Выход из программы осуществляется при нажатии на клавишу «Esc», что является корректным способом завершения программы. Каждое действие, выполненное оператором: ввод чисел или операции, записывается в текстовый файл на диск для контроля полученных результатов. Текстовый файл «Protokol.txt» создается заново и открывается при запуске программы, а закрывается при выходе из программы. Данный файл располагается в том месте, где находится рабочая программа. В программе необходимо предусмотрена реакция на некорректный ввод операции или данных. Текстовые сообщения, выдаваемые программой на экран делятся на подсказки оператору, результаты расчетов, сообщения об ошибках.
Подсказки для оператора, которые появляются в программе: "Введите числитель дроби-> "; "Введите знаменатель дроби-> "; "\tВведите степень дробного числа -> "; "\tВведите операцию-> "; “Файл создан. Осуществляется ЗАПИСЬ протокола на диск”.
Сообщения результата расчетов, выводятся на экран и в текстовый файл: "Ответ: (%d)" – вывод осуществляется только целой части дроби, если числитель равен 0; "Ответ: (%d / %d)" – вывод правильной дроби; "Ответ: (%d %d / %d)" вывод смешанной дроби.
Сообщения об ошибках, которые могут появиться на экране при неверном действии оператора: "Неверный ввод данных!!!"; "Неверный ввод степени числа!!!"; «Операции %c не существует!!!», с этим сообщением показывается несуществующая операция.
Сообщения об ошибках, которые могут появиться на экране при ошибке файловых операций: "Файл не создан. Записи протокола на диск не будет!".
В курсовой работе не предусмотрена справочная информация о создателе программы с указанием данных студента, так как данная работа является примером написания и оформления пояснительной записки.
4 Список использованной литературы
1. Герберт Шилдт. Полный справочник по С++. Четвертое издание. Москва. Издательский дом «Вильямс». 2009 г. 2. В.И. Шупляк, С++, Практический курс, Учебное пособие., Минск, «Новое знание», 2008 г. 3. Герберт Шилдт. С++: для начинающих. Москва. «ЭКОМ Паблишерз». 2009 г. 4. Павловская Т. А., C/C++. Программирование на языке высокого уровня, Санкт-Петербург, «Питер», 2003 г. 5. MSDN -справочник по системе, операторам, функциям для среды разработки Microsoft Visual Studoi 2008 (2010) по языку С++. Приложение Листинг программы «Калькулятор для дробей»
|