Курсовой Халиуллин. Приложение Калькулятор
Скачать 76.71 Kb.
|
МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина) Кафедра информационной безопасности Курсовая РАБОТА по дисциплине «Программирование» Тема: Приложение «Калькулятор»
Санкт-Петербург 2021 ЗАДАНИЕ на курсовую работу
Аннотация Курсовая работа на тему: Приложение «Калькулятор». Пояснительная записка содержит: введение, теоретическую часть, реализацию программы, результат тестирования программы, заключение, список используемых источников, приложения. Цель работы: разработать на языке программирования C или C++ (по выбору студента) приложение для выполнения простых расчетов с использованием основных арифметических операций (сложение, вычитание, умножение, деление). Задачи работы: изучить устройство и историю калькуляторов, разработать и реализовать свою версию калькулятора на языке программирования C++, протестировать его и создать руководство пользователя. Summary Course work on the topic: The Calculator application. The explanatory note contains: introduction, theoretical part, program implementation, program testing result, conclusion, list of sources used, appendices. The purpose of the work: to develop an application in the C or C++ programming language (at the student's choice) for performing simple calculations using basic arithmetic operations (addition, subtraction, multiplication, division). Tasks of the work: to study the device and history of calculators, to develop and implement your own version of the calculator in the C++ programming language, to test it and create a user manual. содержание
введение Цель работы: Разработать на языке программирования C или C++ (по выбору студента) приложение для выполнения простых расчетов с использованием основных арифметических операций (сложение, вычитание, умножение, деление). Задачи работы: изучить устройство и историю калькуляторов, разработать и реализовать свою версию калькулятора на языке программирования C++, протестировать его и создать руководство пользователя. 1. Теоретическая часть Первым известным прототипом калькулятора считается Антикетирский механизм, отнесенный к 2 веку до нашей эры. Данный механизм использовался для расчета движения небесных тел и мог выполнять операции по сложению, вычитанию и делению. Также к прародителям калькуляторов относят счёты, использовавшиеся на Руси с 15 века нашей эры и абак из Древнего Вавилона. Уже в 1643 году учёным Блезом Паскалем была создана суммирующая машина, которая легко выполняла операции сложения, но остальные операции, хоть и были возможны, но требовали сложные и долгие процедуры выполнения вычислений. Сама машина из себя представляла коробку с шестеренками и окошками над ними, где выводился ответ. В 1673 немецкий математик Готфрид Вильгельм Лейбниц создал свою машину для вычислений, в которой было нововведением рукоятка с цилиндром, которые ускоряли процесс умножения и деления и использовалось в вычислительных машинах до середины 20 века. Во второй половине 20 века случилось массовая разработка и использование калькуляторов. В это время были разработаны первые массовые калькуляторы, первые карманные калькуляторы, программируемые калькуляторы, появилась возможность вычислять логарифмы. За это время у калькуляторов также появились графические дисплеи и началось разделение на направленности калькуляторов: простые, инженерные, бухгалтерские, финансовые, медицинские, статистические и другие. 2. Реализация программы Для выполнения курсовой работы выбран язык программирования C++, операционная система Windows 10 на архитектуре x86_64, интегрированная среда разработки Microsoft Visual Studio с компилятором Microsoft Visual C++. В программе реализованы две функции, кроме основной функции main. Первая из них это функция priority. Функция priority определяет приоритет операции, подаваемой на вход. Исходный код функции priority расположен в файле CalculatorCursuvaya.cpp. Объявление функции: int priority(char symbol); Тип функции: int. Аргументы функции: symbol — значение переменной symbol, в которой записана операция, чей приоритет необходимо определить. Возвращаемое значение функции: 1 — если это операция сложения или вычитания, имеющая низкий приоритет; 2 — если это операция умножения или деления, имеющая высокий приоритет; 0 — во всех остальных случаях. Вторая функция это функция count. Функция count производит математические операции с передаваемыми к ней значениями. Исходный код функции count расположен в файле CalculatorCursuvaya.cpp. Объявление функции: int count(std::stack Тип функции: int. Аргументы функции: operations — ссылка на стек, в который записана математическая операция, которую необходимо выполнить; numbers — ссылка на стек, в котором записаны числа, с которыми необходимо провести операцию; element — ссылка на элемент, через который происходит запись в стеки. Возвращаемое значение функции: 1 — значение первого аргумента является некорректным; 2 — значение второго аргумента является некорректным; 3 — значение третьего аргумента является некорректным; 4 — значение делителя равно 0; 0 — если программа завершилась успешно. 3. Результаты тестирование программы После запуска программа предлагает ввести выражение, которое необходимо посчитать (рисунок 1). Р исунок 1 — Окно программы после запуска После ведения выражения и нажатия кнопки «Enter» программа выдает результат подсчета выражения (рисунок 2). Р исунок 2 — Окно программы после подсчёта выражения Если ввести как делитель «0», то программа выдаст ошибку (рисунок 3). Р исунок 3 — Ошибка, возникшая при делении на 0 Если ввести знаки, отличающиеся от математических операндов и чисел, то программа выдаст ошибку (рисунок 4). Р исунок 4 — Ошибка, возникшая при введении некорректного символа заключение Поставленные задачи были выполнены и добавлены дополнительные функции калькулятора в виде увеличения количества допустимых операций. Все возможные ошибки, которые могут возникнуть при работе калькулятора обрабатываются в программе, в результате чего калькулятор работает безопасно, стабильно и корректно. список использованных источников https://www.cplusplus.com — сайт с полной информацией и документацией о функциях и особенностях языка C и C++. приложение 1. Руководство пользователя Программа представляет из себя калькулятор, выполняющий операции умножения, деления, сложения и вычитания, учитывая скобки, отрицательные числа и десятичные. Сведения о минимальных системных требованиях: Процессор: не менее 1ГГц или SoC; ОЗУ: 2ГБ; Последняя версия ОС с архитектурой x86_64; Свободное место на жестком диске: 4мб. Видеоадаптер: DirectX 9 или более поздняя версия с драйвером WDDM 1.0. Сведения об установке программы: необходимо разархивировать архив в отдельную папку. Сведения о запуске программы: запустить исполняемый файл CalculatorCursuvaya.exe, находящийся в папке Debug. Сведения о работе с программой: Запустите исполняемый файл, затем введите в открывшемся окне выражение, которое необходимо посчитать, и нажмите кнопку «Enter», после чего программа выведет вам ответ в поле «Result:». приложение 2. Блок-схема алгоритма приложение 3. Исходный код программы #include #include #include struct types { char symbol; float numeric; }; int count(std::stack { if (&operations == nullptr) { std::cerr << "Error"; return 1; } if (&numbers == nullptr) { std::cerr << "Error"; return 2; } if (&element == nullptr) { std::cerr << "Error"; return 3; } float element1,element2,result; element1 = numbers.top().numeric; numbers.pop(); switch (operations.top().symbol) { case '+': element2 = numbers.top().numeric; numbers.pop(); result = element2 + element1; element.symbol = '0'; element.numeric = result; numbers.push(element); operations.pop(); break; case '-': element2 = numbers.top().numeric; numbers.pop(); result = element2 - element1; element.symbol = '0'; element.numeric = result; numbers.push(element); operations.pop(); break; case '*': element2 = numbers.top().numeric; numbers.pop(); result = element2 * element1; element.symbol = '0'; element.numeric = result; numbers.push(element); operations.pop(); break; case '/': if (element1 == 0) { std::cerr << "Error"; return 4; } element2 = numbers.top().numeric; numbers.pop(); result = element2 / element1; element.symbol = '0'; element.numeric = result; numbers.push(element); operations.pop(); break; } return (0); } int priority(char symbol) { switch (symbol) { case '+': case '-': return 1; break; case '*': case '/': return 2; break; default: return 0; break; } } int main() { char symbol; float numeric; bool flag = true; std::stack std::stack types element; std::cout << "Write the expression\n"; while (true) { symbol = std::cin.peek(); if (symbol == '\n') { break; } if (symbol == ' ') { std::cin.ignore(); continue; } if ((symbol >= '0') && (symbol <= '9') || (symbol == '-') && (flag == true)) { std::cin >> numeric; element.symbol = '0'; element.numeric = numeric; numbers.push(element); flag = false; continue; } if ((symbol == '+') && (flag == true)) { std::cin.ignore(); continue; } if ((symbol == '+')||(symbol == '-') && (flag == false) || (symbol == '*') || (symbol == '/')) { if (operations.size() == 0) { element.numeric = 0; element.symbol = symbol; operations.push(element); std::cin.ignore(); continue; } if (operations.size() != 0 && priority(symbol) > priority(operations.top().symbol)) { element.numeric = 0; element.symbol = symbol; operations.push(element); std::cin.ignore(); continue; } if (operations.size() != 0 && priority(symbol) <= priority(operations.top().symbol)) { if (count(operations, numbers, element) !=0) { return 1; } continue; } } if (symbol == '(') { element.numeric = 0; element.symbol = symbol; operations.push(element); std::cin.ignore(); continue; } if (symbol == ')') { while (operations.top().symbol != '(') { if (count(operations, numbers, element) !=0) { return 1; } else { continue; } } operations.pop(); std::cin.ignore(); continue; } else { std::cerr << "Error"; return 2; } } while (numbers.size() > 1) { if (count(operations, numbers, element) != 0) { return 1; } } std::cout << "Result: " « numbers.top().numeric<<"\n"; system("pause"); return 0; } |