Разработка программы "Калькулятор"
Организация вычислительных процессов и программирования на алгоритмическом языке. Создание программы "Калькулятор". Выбор языка и среды программирования. Функциональная схема работы программы, описание разработанных алгоритмов. Способы устранения ошибок.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 27.08.2012 |
Размер файла | 434,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
- Введение
- Техническое задание
- 1. Аналитический раздел
- 1.1 Обзор и анализ существующих программных решений
- 1.2 Определение функциональных требований к разрабатываемой программной системе
- 2. Конструкторский раздел
- 2.1 Выбор языка и среды программирования
- 2.2 Функциональная схема работы программы
- 2.3 Организация данных и проектирование интерфейсов обмена данными в программной системе
- 3. Технологический раздел
- 3.1 Определение структуры и состава программной системы
- 3.2 Описание разработанных алгоритмов программы
- 3.3 Руководство пользователя
- 4. Экспериментальный раздел
- 4.1 Виды контроля качества разрабатываемого ПО
- 4.2 Методика проведения и результаты тестирования
- 4.3 Методы и способы устранения ошибок
- 4.4 Отладка выявленных ошибок, обнаруженных при тестировании
- Заключение
- Список литературы
- Приложения
Введение
Целью данного курсового проекта является создание программы "Калькулятор", которая и будет являться объектом исследования.
Калькулятор - устройство для арифметических вычислений. Мы пользуемся простыми калькуляторами для математических вычислений в школе и для подсчета денег в магазине. Ученые, инженеры и статистики пользуются другими калькуляторами, способными выполнять сложные операции. Современные калькуляторы - это электронные приборы с маленькими силиконовыми микросхемами, производящими любые вычисления. Разновидность калькулятора - кассовый аппарат. Он суммирует цены и делает распечатку чека. Большинство кассовых аппаратов автоматически считывают цены по бар коду, указанному на каждом товаре. "Мозг" калькулятора может только складывать и вычитать. Умножение и деление он выполняет путем многократного сложения или вычитания.
Обычный калькулятор выполняет сложение и вычитание, умножение и деление, а также вычисляет проценты. Любое число, которое вы вводите в калькулятор, преобразуется в бинарный код, а результаты в бинарном коде переводятся обратно в десятичную систему и отображаются на дисплее.
Когда вы набираете числа на клавиатуре, в регистры памяти калькулятора вводятся бинарные коды для операндов и арифметических действий (сложения, вычитания, умножения и деления). Арифметический блок выполняет действие и сохраняет результат в одном из регистров. Затем результат пересылается в память дисплея и отображается в десятичной форме на дисплее.
Целью курсового проекта является приобретение и закрепление навыков в организации вычислительных процессов и программирования на алгоритмическом языке.
программа алгоритм калькулятор ошибка
Техническое задание
на курсовой проект по дисциплине "Языки программирования"
Студент Носенков А.В. Группа 11-БАС-2
Тема Разработка программы "Калькулятор"
Общая формулировка задания
Необходимо разработать программу "Калькулятор" выполняющую основные арифметические операции, а также расчет основных тригонометрических функций в среде программирования Turbo Pascal 7.0.
Требования к графическому и пользовательскому интерфейсам:
· программа должна работать в графическом режиме;
· в программе должны использоваться кнопки для ввода данных (операций) и графическое меню;
· программа должна содержать поле для ввода данных и вывода результата.
Требования к функциональным возможностям:
· реализовать возможность вывода на экран последнего операнда;
· реализовать возможность выполнения основных арифметических действий (сложение, вычитание, деление, умножение), извлечение квадратного корня, вычисление основных тригонометрических функций (косинус, синус, тангенс, котангенс), возведение в целую степень;
· реализовать возможность сброса результата.
Руководитель Леонов Ю.А.
1. Аналитический раздел
1.1 Обзор и анализ существующих программных решений
Сегодня повсеместное использование калькуляторов существенно облегчает работу человека в самых различных сферах. Впрочем, представить себе жизнь без таких помощников практически невозможно - ведь счетные устройства повсюду сопровождали человека в самые различные исторические периоды, хотя механизм их работы и был устроен иначе.
Уже три тысячи лет назад в Древнем Вавилоне появился первый абак - старинный аналог счет, в котором круглые камешки передвигались по специальным направляющим в форме углублений, и каждая из направляющих представляла собой отображение ряда единиц, десятков, сотен. Абак был известен также и в Древней Индии, а в X-ом веке нашей эры он также появился и в Западной Европе. Однако здесь вместо камешков было принято использовать специальные жетоны, на которые наносились цифры.
Техническое достижение в области механизации расчетов датируется 1643-им годом и связано с именем ученого Блеза Паскаля. Новшество представляет собой суммирующую арифметическую машину, которая казалась совершенным достижением, но уже через тридцать лет Готфрид Вильгельм Лейбниц представил еще более сложное изобретение - первый механизированный калькулятор. Примечательно, что именно в эти годы (начало нового времени) несколько утихает борьба между "абацистами" и "алгоритмистами", и калькулятор представляет собой ожидаемый компромисс между двумя конфликтующими сторонами.
За рубежом развитие счетных машин происходит не менее интенсивно. Первый калькулятор массового выпуска - ANITA MK VIII - выпускается в Англии в 1961-ом году и представляет собой устройство, работающее на газоразрядных лампах. Это устройство было достаточно громоздким по современным меркам, оно оснащалось клавиатурой для ввода числа, а также дополнительной 10-ти клавишной консолью для задания множителя. В 1965-ом году калькуляторы Wang впервые научились считать логарифмы, а уже через четыре года в США появился и первый настольный программируемый калькулятор. А в 1970-ые годы мир калькуляторов становится более совершенным и разнообразным - появляются новые настольные и карманные машины, а также профессиональные инженерные калькуляторы, позволяющие производить сложнейшие расчеты.
Сегодня усовершенствованные модели калькуляторов представляют собою высокотехнологичные разработки, при создании которых был использован колоссальный опыт инженерных предприятий во всем мире. И, несмотря на абсолютный приоритет ЭВМ, калькуляторы и прочие счетные устройства по-прежнему сопровождают человека в различных отраслях деятельности!
Из доступных программ-калькуляторов можно назвать "Калькулятор Windows" и "NumLock Calculator".
1. NumLock Calculator - очень удобный калькулятор, который выскакивает при нажатии NumLock (или ScrollLock), а при повторном нажатии прячется обратно в системную панель. Результат вычислений может автоматически вставляться в активное окно. Поддерживает разные форматы (десятичный, шестнадцатиричный, с фиксированной точкой, научный), разные виды (простой, инженерный, программерский и т.п.).
Основные функции NumLock Calculator:
· быстрый вызов по "горячим клавишам", определяемым пользователем;
· автоматическая вставка результата в документы и буфер обмена;
· более 100 функций, 7 форматов чисел и выражений;
· история вычислений, 10 ячеек памяти, доступ к 100 переменным;
Пример работы данной программы (рис.1.1).
Рис.1.1 Пользовательский интерфейс программы " NumLock Calculator".
2. "Калькулятор Windows" - компонент Microsoft Windows, имитирующий работу обычного карманного калькулятора. Его "кнопки" можно нажимать мышкой. Возможен ввод с дополнительной цифровой клавиатуры. Также можно вставлять математические выражения из буфера обмена и получать результат (например, набрать в Блокноте "2*2=", скопировать и вставить в Калькулятор, на "экране" которого появится ответ "4"). Пример работы данной программы (рис.1.2.).
Рис.1.2 Интерфейс программы "Калькулятор Windows".
1.2 Определение функциональных требований к разрабатываемой программной системе
Проанализировав существующие программные решения, были определены следующие функциональные требования к разрабатываемой программе:
1) соблюдение правильности вычислений;
2) программа должна иметь простой, но в то же время понятный и наглядный интерфейс, который не должен перегружать ресурсы компьютера;
3) программа должна иметь возможность сброса полученного результата;
4) пользователь должен иметь возможность видеть выполняемые им действия и полученный результат;
5) программа не должна занимать большой объем памяти и не должна требовать установки на жесткий диск компьютера;
6) должна существовать возможность вычисления основных тригонометрических функций (синус, косинус, тангенс, котангенс), извлечение квадратного корня, а также возведение числа в целую степень;
7) работоспособность приложения в среде Windows.
В ходе разработки программы все вышеописанные функциональные требования к ней были выполнены.
2. Конструкторский раздел
2.1 Выбор языка и среды программирования
Общее назначение программного средства - выполнение арифметических операций для использования в учебном процессе и повседневной жизни.
Реализуемая задача состоит в том, чтобы при выборе действия выполнялась определенная операция, и имелась возможность корректировать число (удаление последнего символа), сбросить полученный результат или же продолжить расчеты с данным результатом.
Язык Паскаль был одним языков, созданных для обучения и получивших популярность, как и новичков, так и в серьёзном программировании. При его создании успешно решена задача сочетания сравнительной простоты языка с потенциальной широтой области его применений. В отличии от своих предшественников (в частности Бейсика) Паскаль допускает разнообразные типы составных объектов: запись - упорядоченный набор про именованных объектов произвольных типов; файл - упорядоченный набор однородных данных, размещаемых во внешней памяти; множество - набор элементов одного типа, кодируемых отрезками натурального ряда или произвольными именами. В Паскале имеется оператор варианта, т.е. выбора одной из нескольких альтернативных последовательностей (ветвей) операторов по вычисляемому номеру ветви.
Программа на Паскаль, также как и в других языках программирования реализует алгоритм решения задачи. Она объединяет последовательность действий, выполняемых над определенными типами данными с помощью операций, определяемых возможностями языка. Язык Паскаль является универсальным языком, т.е. на нем можно писать вычислительные, графические и системные программы, программы по обработке больших блоков данных (типа СУБД).
2.2 Функциональная схема работы программы
Для представления принципа работы программы ниже приведена ее функциональная схема (рис.2.1).
Рис.2.1 Функциональная схема программы "Калькулятор"
Пункт "Ввод операнда" представляет собой часть программы, в которой выбираются нужные числа для подсчета. После выбора чисел нужно выбрать действие, которое необходимо выполнить (пункт "Выбор функции"). Затем по введенным данным вычисляется результат (пункт "Вычисление значения").
Далее пользователю предоставляется продолжить работу с результатом ("Работа с результатом"). В следствие работы с ним пользователь может выйти из программы или сбросить результат и продолжить вычисления.
2.3 Организация данных и проектирование интерфейсов обмена данными в программной системе
Одной из самых важных функций любой программы является ввод и вывод данных.
Выводимые данные это то, что сообщается пользователю. Входные данные это то, что пользователь сообщает программе.
Выводимые данные в программе представлены в виде графического отображения окна программы (рис.2.2):
Рис.2.2 Окно программы
Входные данные представлены в виде программного кода, который необходимо выполнить при определенных действиях пользователя, а именно:
· нажатие клавиш клавиатуры;
· работа пользователя с кнопками в интерфейсе.
3. Технологический раздел
3.1 Определение структуры и состава программной системы
В программе используются модули, как стандартные, так и собственные.
Модуль GrMouse обрабатывает прерывание Dos $33 - это события от мыши и определяет координаты курсора и состояние кнопок мыши.
Модуль GrButton содержит описание процедур, связанных с событиями мыши.
Модуль Functions содержит набор подпрограмм для работы с числами.
Модуль GrOutPut содержит набор подпрограмм для собственно отрисовки результатов в графическом режиме, вывод результата в нужном виде в нужное место. Список стандартных модулей представляют Graph, crt, dos
В модуле Graph (GRAPH. TPU) находится библиотека, состоящая из более чем 50 графических подпрограмм от побитовых до подпрограмм высокого уровня.
Модуль Crt позволяет выводить цветные символы на цветном экране. Хотя по-прежнему отображение будет происходить в текстовом режиме. Текстовый режим означает, что на экране могут выводиться только определенные символы в определенных местах (знакоместах). Можно представить экран, разделенным вертикальными и горизонтальными линиями на ячейки. В эти ячейки можно "вписывать" различные символы. У каждой ячейки есть адрес.
Модуль Dos позволяет использовать возможности операционной системы MS DOS, не предусмотренные в стандарте языка Паскаль, и содержит типы, константы, переменные и подпрограммы для реализации этих дополнительных возможностей.
В программе использованы локальные переменные и константа, стандартные и пользовательские процедуры и функции.
Константа называется Captions и имеет тип данных строковый. Она нужна для нанесения надписей на кнопки, используемые в интерфейсе программы.
Локальные переменные:
§ Buttons-массив от 1 до 35 для индексов кнопок;
§ CEbutton, QuitButton, FirstEdit, SecondEdit - переменные для кнопок сброса, выхода из программы, первого числа и второго числа соответственно;
§ Quit-переменная с типом данных "булевский", при значении true происходит выход из программы.
Процедуры и функции пользователя:
· "function GetCaption (i: byte): string; " - нанесение надписей на кнопки;
· "procedure ChangeSysOfCount (SysOfCount: TSysCountStr); " - выбор десятичной системы счисления;
· "procedure SetGroupEnabled (SysOfCount: TSysCountStr); " - подключение кнопок клавиатуры;
· "procedure Drawing SquareOfButt (MaxTopInc, LeftOffs, TopOffs, BStartInd, BCount: word); " - отрисовка кнопок;
· "procedure FstAction; " - работа с первым операндом;
· "procedure SndAction; " - работа со вторым операндом.
3.2 Описание разработанных алгоритмов программы
Рис.3.1 Алгоритм программы "Калькулятор".
Для создания программы калькулятор необходимо реализовать алгоритм, позволяющий иметь возможность, при выборе действия (операции), выводить ее на экран и получать результат вычислений. Также необходимо организовать возможность сброса полученных результатов.
Для повышения удобства пользования программой разработан понятный графический интерфейс, то есть все возможные операции, которые пользователь может производить в программе, выведены непосредственно на экран пользователя.
3.3 Руководство пользователя
Требования к аппаратуре и программному обеспечению
Так как программа выполнена в среде программирования Turbo Pascal, то требования к аппаратному и программному обеспечению минимальны.
ПК с процессором, совместимым с Intel Pentium или AMD, монитором и клавиатурой. Операционная система MS-DOS или MS Windows (кроме Windows 7, так как на данной операционной системе приложение не может работать в полноэкранном режиме).
Установка программы
Установка программы на компьютер пользователя заключается в копировании папки программы и установки ярлыка на Рабочий стол. Создайте в любом разделе жесткого диска новую папку и скопируйте в нее все файлы папки "Курсовой проект".
Запускать следует файл GRCALC. EXE непосредственно из папки или при помощи ярлыка кнопкой Enter или двойным щелчком мыши.
Если требуется доработка программы, то необходимо иметь исходный файл GRCALC. PAS, который открывается в среде программирования TURBO PASCAL версии 7 или совместимой с ней. Порядок работы с программой опишем в руководстве пользователя. Здесь приводится описание приемов управления программой.
Порядок работы
Запуск программы производится двойным щелчком мыши на файле GRCALC. EXE или на его ярлыке.
После запуска открывается окно программы. Далее в поле данных мы должны ввести первое число, затем операцию, которую мы хотим выполнить, а затем второе число. Нажимаем кнопку "=". Далее получаем результат выполнения действия. Можно сбросить результат (нажать "CE") или продолжить работу с ним.
4. Экспериментальный раздел
4.1 Виды контроля качества разрабатываемого ПО
Тестирование программы - это этап, на котором проверяется, как ведет себя программа на как можно большем количестве входных наборов данных, в том числе и на заведомо неверных.
Основные принципы организации тестирования:
· необходимой частью каждого теста должно являться описание ожидаемых результатов работы программы, чтобы можно было быстро выяснить наличие или отсутствие ошибки в ней;
· следует по возможности избегать тестирования программы ее автором, т.к. кроме уже указанной объективной сложности тестирования для программистов здесь присутствует и тот фактор, что обнаружение недостатков в своей деятельности противоречит человеческой психологии (однако отладка программы эффективнее всего выполняется именно автором программы);
· по тем же соображениям организация - разработчик программного обеспечения не должна "единолично ” его тестировать (должны существовать организации, специализирующиеся на тестировании программных средств);
· должны являться правилом доскональное изучение результатов каждого теста, чтобы не пропустить малозаметную на поверхностный взгляд ошибку в программе;
· необходимо тщательно подбирать тест не только для правильных (предусмотренных) входных данных, но и для неправильных (непредусмотренных);
· следует сохранять использованные тесты (для повышения эффективности повторного тестирования программы после ее модификации или установки у заказчика);
· тестирования не должно планироваться исходя из предположения, что в программе не будут обнаружены ошибки (в частности, следует выделять для тестирования достаточные временные и материальные ресурсы);
· следует учитывать так называемый "принцип скопления ошибок”: вероятность наличия не обнаруженных ошибок в некоторой части программы прямо пропорциональна числу ошибок, уже обнаруженных в этой части;
4.2 Методика проведения и результаты тестирования
При тестировании программы были выполнены следующие принципы:
необходимо тщательно подбирать тест не только для правильных (предусмотренных) входных данных, но и для неправильных (непредусмотренных);
· должны являться правилом доскональное изучение результатов каждого теста, чтобы не пропустить малозаметную на поверхностный взгляд ошибку в программе;
· следует всегда помнить, что тестирование - творческий процесс, а не относиться к нему как к рутинному занятию;
· следует по возможности избегать тестирования программы ее автором.
Тестирование выявило ряд ошибок в алгоритме, синтаксисе кода программы и ее интерфейсе.
4.3 Методы и способы устранения ошибок
Отладка - это комплексный процесс по выявлению и исправлению дефектов в программном обеспечении. Сами же дефекты, обычно, обнаруживается в процессе тестирования ПО.
Отладка состоит из следующих этапов:
· воспроизведение дефекта (любым из доступных способов);
· анализ дефекта (поиск причины возникновения дефекта);
· дизайн исправления дефекта;
· кодирование исправления дефекта;
· валидация исправления;
· интеграция исправления в кодовую базу или целевую систему;
· дополнительные валидации после интеграции.
На любом этапе отладки могут возникнуть новые дефекты, которые придётся отлаживать. Например, какая-то часть исправления в коде работает не так как ожидается и соответственно придётся отлаживать эту часть в изоляции и снова основное время уходит на пункты 1 и 2 и т.д.
Этап отладки можно считать законченным, если программа правильно работает на двух-трех наборах входных данных.
Некоторые методы отладки ПО используемые на данный момент в индустрии:
· запуск программы из под отладчика;
· анализ поведения системы;
· unit тестирование;
· анализ кода без исполнения программы;
· выполнения программы (или её части) в другой среде;
· отладка трансляцией кода.
4.4 Отладка выявленных ошибок, обнаруженных при тестировании
Во время выполнения отладки, были использованы следующие методы:
· unit тестирование;
· анализ кода без исполнения программы;
· запуск программы из под отладчика.
Отладка ряда ошибок прошла успешно, были внесены изменения в интерфейс программы.
Также были предусмотрены некоторые исключительные ситуации:. Для квадратного корня не была учтена область допустимых значений. А также для операции "деление" не было учтено деление на "0". Для устранения данной ошибки преобразован оператор case:
case CurrentFunc of
…
'/': begin if stemp=0 then begin res: =0; outtextxy (450,65,'false'); end else if SParam<>'0'then begin Res: =FTemp/STemp;
end; end;
'v': begin if ftemp <0 then begin res: =0; outtextxy (450,65,'false'); end else Res: =sqrt (Ftemp); end;
…
Заключение
В результате выполнения данного курсового проекта был разработан игровой программный продукт "Калькулятор". При помощи этой программы можно высчитывать определенные арифметические операции. Программа не занимает много места, не требовательна к установленному программному обеспечению.
Также было проведено исследование полученного программного продукта. В результате были выявлены следующие достоинства и недостатки полученного программного продукта:
Достоинства:
· Существует возможность сбрасывать результат;
· Программный продукт малотребователен к системным ресурсам компьютера.
Недостатки:
· Невозможность выполнения некоторых других математических операций;
· Невозможность сохранения операндов или результатов в памяти программы;
В целом, поставленная в начале курсового проекта цель была достигнута. В программе выполняются все необходимые функциональные требования.
Список литературы
1. Фаронов, В.В. Программирование в Delphi 7: учеб. пособие / В.В. Фаронов. - 7-е изд., перераб. - М.: Нолидж, 2006. - 412с.
2. Ставровский, А.Б. Delphi в задачах и примерах: учеб. для вузов / А.Б. Ставровский. - Киев: BНV, 2004. - 399с.
3. Кнут, Д.Э. Искусство программирования: учеб. пособие: в 3 т.: пер. с англ. Т.1: Основные алгоритмы. - 3-е изд. - М. и др.: Вильямс, 2000. - 720 с.
4. Гловацкая, А.П. Методы и алгоритмы вычислительной математики: учеб. пособие для вузов / А.П. Головыцкая. - М.: Радио и связь, 1999. - 408с.
5. Бежанова, М.М. Практическое программирование: структуры данных и алгоритмы: учеб. для вузов / М.М. Бежанова, Л.А. Москвина, И.В. Поттосин. - М.: Логос, 2001. - 223с.
Приложения
Приложение 1
Листинг программы
program Calculator;
uses Functions,GrMouse,GrButton,Graph,GrOutPut,dos,crt;
const
Captions: string=' 7 8 9/< - x^y'+
' 4 5 6 * sin cos'+
' 1 2 3 - tg ktg'+
' 0 с. + = ы'+
' P R O E K T';
{$F+}
var
Buttons: array [1.35] of TGrButton;
CEbutton,QuitButton: TGrButton;
FirstEdit,SecondEdit: TGrButton;
MouseStatus: TMouseStatus;
Quit: boolean;
function GetCaption (i: byte): string;
var
x,TempPos,Count: byte;
begin
Count: =0;
TempPos: =0;
for x: =1 to Length (Captions) do
begin
if Captions [x] =' ' then inc (count);
if Count=i-2 then TempPos: =x;
if Count=i-1 then GetCaption: =copy (Captions,TempPos+2,x-TempPos-1);
end;
end;
procedure ChangeSysOfCount (SysOfCount: TSysCountStr);
var
Temp: string;
begin
case SysOfCount [1] of
'D': begin
end;
end;
case SysOfCount [1] of
'D': begin SysCount: =DEC; DisButtons: =DECindexes; end;
end;
FilterExpValue (FParam);
FilterExpValue (SParam);
SetFActive (false);
TextToOut (SParam);
SetFActive (true);
TextToOut (FParam);
end;
procedure SetGroupEnabled (SysOfCount: TSysCountStr);
begin
DisButtons: =ALLnumbers;
for i: =2 to 35 do
if i in DisButtons then
with Buttons [i] do
if not Enabled then
SetEnabled (true);
ChangeSysOFCount (SysOFCount);
for i: =2 to 35 do
if i in DisButtons then
Buttons [i]. SetEnabled (False);
Result: ='';
end;
procedure DrawingSquareOfButt (MaxTopInc,LeftOffs,TopOffs,BStartInd,BCount: word);
begin
j: =0;
while j<=MaxTopInc do
begin
for i: =BStartInd-1 to BStartInd+BCount-2 do
begin
Buttons [j+i+1]. Left: =i*50+LeftOffs;
Buttons [j+i+1]. Top: =j*7+TopOffs;
Buttons [j+i+1]. Draw;
end;
inc (j,7);
end;
end;
procedure Action;
begin
Quit: =true;
end;
procedure SetRadioClick (var ActButt,DisAct1,DisAct2: TGrButton);
begin
if ActButt. FillColor=ActButt. FillColor then
begin
ActButt. FillColor: =ActButt. PressedColor;
DisAct1. FillColor: =1;
DisAct2. FillColor: =1;
ActButt. Fill (ActButt. PressedColor);
DisAct1. Fill (DisAct1. FillColor);
DisAct2. FIll (DisAct2. FillColor);
end;
end;
procedure SetDECsys;
begin
SetRadioClick (Buttons [8],Buttons [1],Buttons [15]);
SetGroupEnabled ('DEC');
end;
procedure FstAction;
begin
if (FirstEdit. FillColor=1) then
begin
FirstEdit. FillColor: =4;
SecondEdit. FillColor: =1;
FirstEdit. Draw;
SecondEdit. Draw;
SetFActive (true);
Calculated: =false;
end;
end;
procedure SndAction;
begin
if (SecondEdit. FillColor=1) then
begin
FirstEdit. FillColor: =1;
SecondEdit. FillColor: =4;
FirstEdit. Draw;
SecondEdit. Draw;
SetFActive (false);
end;
end;
begin
InitGraphRegim;
ClearDevice;
QuitButton. Init;
CEButton. Init;
FirstEdit. Init;
SecondEdit. Init;
for i: =1 to 35 do
with Buttons [i] do
begin
Init;
Caption: =GetCaption (i+1);
end;
with QuitButton do
begin
Left: =140;
Top: =GetMaxY-50;
Height: =20;
Width: =370;
Caption: ='Quit';
Draw;
end;
with CEButton do
begin
Left: =GetMaxX-220;
Top: =80;
Height: =30;
Width: =85;
Caption: ='CE';
Draw;
end;
with FirstEdit do
begin
Left: =GetMaxX-55;
Top: =120;
Caption: ='Fst';
FillColor: =4;
Draw;
end;
with SecondEdit do
begin
Left: =GetMaxX-55;
Top: =170;
Caption: ='Snd';
Draw;
end;
DrawingSquareOfButt (30,140,1200,1,1);
DrawingSquareOfButt (30,170,120,2,6);
Rectangle (5,5,GetMaxX-5,GetMaxY-5);
Rectangle (OutXs,OutYs,OutXf,OutYf);
{/*End of drawing*/}
CEClick;
InitMouse;
CursorShow;
Buttons [1]. PressedColor: =8;
Buttons [8]. PressedColor: =8;
Buttons [15]. PressedColor: =8;
SetGroupEnabled ('DEC');
SetRadioClick (Buttons [8],Buttons [1],Buttons [15]);
Buttons [8]. Action: =SetDECsys;
Buttons [6]. Action: =BackSpaceSymbol;
Buttons [24]. Action: =SetPlusMines;
Buttons [27]. Action: =GetResult;
{*************************}
while not Quit do
begin
for i: =1 to 35 do
with Buttons [i] do
begin
if onClick (Action,MouseStatus) then
begin
if (Length (Caption) =1) then
if (Caption [1] in SysCount) then
begin
AddToOutPut (Caption);
Calculated: =false;
end;
SetEnterMode (Caption [1]);
if Caption [1] ='с' then Calculated: =false;
end;
Key: =0;
if KeyPressed then
begin
Key: =Ord (readkey);
case Key of
48.57,46,97.103:
if UpCase (Char (Key)) in SysCount then
begin
AddToOutPut (UpCase (Char (Key)));
Calculated: =false;
end;
8: begin
BackSpaceSymbol;
Calculated: =false;
end;
42: SetEnterMode ('*'); {*}
43: SetEnterMode ('+'); {+}
45: SetEnterMode ('-'); {-}
47: SetEnterMode ('/'); {/}
27: exit;
end;
end;
end;
QuitButton. onClick (Action,MouseStatus);
CEButton. OnClick (CEClick,MouseStatus);
if FirstEdit. OnClick (FstAction,MouseStatus) or (FActive) then FstAction;
if SecondEdit. OnClick (SndAction,MouseStatus) or (SActive) then SndAction;
end;
CloseGraph;
end.
Модуль Function
unit Functions;
{$F+} {$N+}
interface
uses Graph,GrOutPut;
procedure SetEnterMode (Func: char);
procedure GetResult;
procedure FilterExpValue (var Par: StrParam);
implementation
function IntToStr (Param: word): String;
var
Temp: string;
e: word;
begin
Str (Param,Temp);
IntToStr: =Temp;
end;
procedure FilterExpValue (var Par: StrParam);
var degree,mant,NullStr: string;
IntDegree,e,DotPos,ExpPos: integer;
DelExp,minus: boolean;
i: integer;
begin
if Par [1] ='-' then minus: =true
else minus: =false;
DotPos: =Pos ('. ',Par);
ExpPos: =Pos ('E',Par);
NullStr: ='';
Degree: ='';
DelExp: =false;
{**************}
if ExpPos=0 then exit;
degree: =Copy (Par,ExpPos+1,Length (Par) - ExpPos);
mant: =Copy (Par,DotPos-1,ExpPos-DotPos+1);
Val (Degree, IntDegree,e);
if (IntDegree>0)
then begin
for i: =1 to IntDegree
do begin
DotPos: =Pos ('. ',mant);
Delete (mant,DotPos,1);
Insert ('. ',mant,DotPos+1);
end;
end;
if (IntDegree<0)
then begin
for i: =1 to - IntDegree
do begin
Insert ('0',mant,1);
DotPos: =Pos ('. ',mant);
Delete (mant,DotPos,1);
Insert ('. ',mant,2);
end;
end;
i: =Length (mant);
while (mant [i] ='0')
do begin
Delete (mant, i,1);
i: =i-1;
end;
if mant [Length (mant)] ='. '
then Delete (mant,Length (mant),1);
if minus then insert ('-',mant,1);
Par: =mant;
end;
procedure ExcludeMines (Par: boolean);
begin
if Par then
begin
if Pos ('-',FParam) <>0 then
Delete (FParam,1,1);
if Pos ('-',SParam) <>0 then
Delete (SParam,1,1);
end else
begin
if Pos ('-',FParam) =0 then
FParam: ='-'+FParam;
if Pos ('-',SParam) =0 then
SParam: ='-'+SParam;
end;
end;
procedure Value (FPar,SPar: StrParam; var FTemp,STemp);
var
e: word;
begin
Val (FPar,Extended (FTemp),e);
Val (SPar,Extended (STemp),e);
end;
function Operation: string;
var
FTemp,STemp,Res: extended;
St,Answer: StrParam;
RetHex,RetBin,Ex: boolean;
e: word;
{******************}
{******************}
begin
RetBin: =false;
RetHEX: =false;
Value (FParam,SParam,FTemp,STemp);
Ex: =false; {*used for exit after odnomest function*}
case CurrentFunc of
'+': Res: =FTemp+STemp;
'-': Res: =FTemp-STemp;
'*': Res: =FTemp*STemp;
'/': if SParam<>'0'then Res: =FTemp/STemp;
's': Res: =sin (ftemp);
'c': Res: =cos (ftemp);
't': Res: = (sin (ftemp) /cos (ftemp));
'k': Res: = (cos (ftemp) /sin (ftemp));
'v': Res: =sqrt (Ftemp);
'x': Res: =exp (ln (Ftemp) *stemp);
end;
Str (Res,St);
if Ex then exit;
FilterExpValue (st);
CheckOutPut (SParam);
CheckOutPut (FParam);
Operation: =St;
Result: =st;
CurrentFunc: =#0;
CheckOutPut (Result);
ResultToScreen;
end;
procedure SetEnterMode (Func: char);
begin
if (Func in AllOper) then
begin
if (Length (FParam) =0) or (FParam='0') then
begin
SetFActive (true);
end else
begin
if Func in ['n','p'] then
begin
CurrentFunc: =Func;
Operation;
exit;
end;
SetFActive (False);
if CurrentFunc=#0 then
begin
CurrentFunc: =Func;
CurrentFuncToScr;
end
else
if Calculated then
begin
Result: =Operation;
end;
if Calculated then
begin
FParam: =Result;
ClearOutPut;
SetFActive (true);
TextToOut (FParam);
SetFActive (false);
CalCulated: =false;
SParam: ='';
Result: ='';
end else
if (Length (SParam) >0) and (SParam<>'0') then
begin
CheckOutPut (FParam);
CheckOutPut (SParam);
Result: =Operation;
end;
end;
end;
end;
procedure GetResult;
begin
if not Calculated then
if CurrentFunc<>#0 then
Result: =Operation;
end;
end.
Модуль Groutput
unit GrOutPut;
{$N+}
interface
uses Graph;
Type
StrParam=string [64];
TProc=Procedure;
TMem=record
sys: char;
Mem: StrParam;
end;
TPosition=record
x1,y1,x2,y2: word;
end;
const
{Output controls}
OutXs=30;
OutYs=20;
OutXf=600;
OutYf=60;
{***************}
{All ordinal operations}
AllOper= ['+','-','*','/','c','s','t','k','v','x'];
{**********************}
DEC= ['0'. '9','. '];
{*****************************************}
ALLnumbers= [2,3,4,9,10,11,16,17,18,23,30.35];
DECindexes= [30.35];
{***********************************}
FParamOfs=13;
SParamOfs=36;
procedure CheckOutPut (var Out: StrParam);
procedure ClearOutPut;
procedure ClrResOut;
procedure SetFActive (param: boolean);
procedure TextToOut (Out: StrParam);
procedure AddToOutPut (Param: string);
procedure SetPlusMines;
procedure ResultToScreen;
procedure BackSpaceSymbol;
procedure CEClick;
procedure CurrentFuncToScr;
procedure ClearCurrentFunc;
Var
Result,FParam,SParam: StrParam;
Memory: TMem;
SysCount: set of char;
DisButtons: set of byte;
CurrentFunc: char;
MantisaPos,Operation, i,j,Middle,Key: word;
FActive,SActive,Calculated: boolean;
implementation
procedure CheckOutPut (var Out: StrParam);
var
MinesState: boolean;
begin
i: =1;
MinesState: =false;
if Pos ('-',Out) <>0 then
begin
Delete (Out,1,1);
MinesState: =true;
end;
while Pos (' ',Out) <>0 do delete (Out,Pos (' ',Out),1);
while i<=Length (Out) do
begin
if Out [i] ='. ' then
if i<>Pos ('. ',Out) then
begin
delete (Out, i,1);
i: =i-1;
end;
inc (i);
end;
if Out [2] <>'. ' then
while (Out [1] ='0') or (Out [1] ='. ') do
if Length (Out) >1 then Delete (Out,1,1) else
break;
if Out [1] ='. ' then Out: ='0'+Out;
if Out [Length (Out)] ='. ' then Out: =Out+'0';
if Length (Out) =0 then Out: ='0';
if MinesState then
if Pos ('-',Out) =0 then
Out: ='-'+Out;
end;
procedure SetFActive (param: boolean);
begin
FActive: =Param;
SActive: =not Param;
end;
procedure BackSpaceSymbol;
begin
Calculated: =false;
case FActive of
true:
if FParam<>'0' then
begin
delete (FParam,Length (FParam),1);
TextToOut (FParam);
end;
false:
if SParam<>'0' then
begin
delete (SParam,Length (SParam),1);
TextToOut (SParam);
end;
end;
end;
procedure ClrResOut;
begin
SetViewPort (OutXs+1,OutYs+FParamOfs+8,OutXf-1,OutYf-3,true);
ClearViewPort;
SetViewPort (0,0,GetMaxX,GetMaxY,true);
end;
procedure TextToOut (Out: StrParam);
begin
case FActive of
true: SetViewPort (OutXs+1,OutYs+3,OutXf-1,OutYs+FParamOfs-1,true);
false: SetViewPort (OutXs+1,OutYs+FParamOfs,OutXf-1,OutYf-3,true);
end;
ClearViewPort;
CheckOutPut (Out);
CurrentFuncToScr;
case FActive of
true: begin OutTextXY (OutXf-40-TextWidth (Out) div 2,4,Out); ClrResOut; end;
false: OutTextXY (OutXf-40-TextWidth (Out) div 2,4,Out);
end;
SetViewPort (0,0,GetMaxX,GetMaxY,true);
end;
procedure ResultToScreen;
begin
SetViewPort (OutXs+1,OutYs+23,OutXf-1,OutYf-1,true);
ClearViewPort;
line (OutXf-40-TextWidth (Result),2,OutXf-40,2);
OutTextXY (OutXf-40-TextWidth (Result) div 2,9,Result);
Calculated: =true;
SetViewPort (0,0,GetMaxX,GetMaxY,true);
end;
procedure CEClick;
begin
MantisaPos: =0;
ClearOutPut;
Calculated: =false;
case FActive of
true: begin FParam: ='0'; TextToOut ('0');
SetFActive (false); TextToOut (SParam);
SetFActive (true); end;
false: begin SParam: ='0'; TextToOut ('0');
SetFActive (true); TextToOut (FParam);
SetFActive (false); end;
end;
TextToOut ('0');
SetFActive (true);
end;
procedure AddToOutPut (Param: string);
var
Out: string;
begin
ClearCurrentFunc;
case FActive of
true: begin
if SysCount=Dec then
if Pos ('E',FParam) <>0 then FParam: ='0';
FParam: =FParam+Param;
TextToOut (FParam);
end;
false: begin
if SysCount=Dec then
if Pos ('E',SParam) <>0 then SParam: ='0';
SParam: =SParam+Param;
TextToOut (SParam);
end;
end;
CurrentFuncToScr;
end;
procedure AddDelMines (var Param: StrParam);
begin
if (Length (Param) >=1) and
(Param<>'0') and (Param<>'0.0') then
if Pos ('-',Param) =0 then
begin
Param: ='-'+Param;
CheckOutPut (Param);
TextToOut (Param);
end else
begin
delete (Param,1,1);
CheckOutPut (Param);
TextToOut (Param);
end;
end;
procedure SetPlusMines;
begin
case FActive of
true: AddDelMines (FParam);
false: AddDelMines (SParam);
end;
end;
procedure ClearCurrentFunc;
var
ViewPort: ViewPortType;
begin
GetViewSettings (ViewPort);
SetViewPort (OutXs+1,OutYs+6,OutXf-20-Middle,OutYs+14,true);
ClearViewPort;
with ViewPort do
SetViewPort (x1,y1,x2,y2,Clip);
end;
procedure CurrentFuncToScr;
var
ViewPort: ViewPortType;
begin
{if CurrentFunc=#0 then exit; }
GetViewSettings (ViewPort);
{**************}
if TextWidth (FParam) >TextWidth (SParam) then
Middle: =TextWidth (FParam)
else Middle: =TextWidth (SParam);
{**************}
SetViewPort (OutXs+1,OutYs+6,OutXf-30-Middle,OutYs+14,true);
ClearViewPort;
{**************}
OutTextXY (OutXf-OutXs-40-Middle,5,CurrentFunc);
{**************}
with ViewPort do
SetViewPort (x1,y1,x2,y2,Clip);
end;
procedure ClearOutPut;
begin
SetViewPort (OutXs+1,OutYs+1,OutXf-1,OutYf-1,true);
ClearViewPort;
SetViewPort (0,0,GetMaxX,GetMaxY,true);
end;
begin
FActive: =true;
SActive: =false;
CurrentFunc: =#0;
SysCount: =DEC;
Calculated: =false;
FParam: ='0';
SParam: ='0';
Result: ='';
enПриложение 2
Графический интерфейс программы
Рис.1. Графический интерфейс программы
Рис.2. Программа во время работы
Размещено на Allbest.ru
Подобные документы
Создание программы калькулятор, вычисляющий простейшие математические примеры на сложение, вычитание, умножение, деление и возведение в степень. Определение входных и выходных данных, требований к программе. Рекомендации по использованию программы.
курсовая работа [717,6 K], добавлен 17.01.2013Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.
курсовая работа [1,2 M], добавлен 07.07.2012Основные способы создания в среде Lazarus на языке программирования Pascal программ "Калькулятор" и "Лабиринт". Создание программы "Простейший калькулятор". Вычисление значения выражения, сумм ряда чисел, системы функций "Логическая развилка".
курсовая работа [2,9 M], добавлен 27.09.2014Разработка приложения "Калькулятор с переходом в строковый калькулятор" с применением объектно-ориентированного программирования. Концепция и понятия объектно-ориентированного программирования. Язык программирования Java. Листинг программы "Калькулятор".
курсовая работа [966,9 K], добавлен 11.02.2016Калькулятор как устройство для арифметических вычислений. Разработка алгоритма, его перевод в программный код. Выбор языка, опции компилятора при сборке программы. Обработка ошибок и исключительных ситуаций в коде. Тестирование программы, файл помощи.
курсовая работа [1,2 M], добавлен 19.02.2015Написание программы, состоящей из двух модулей и реализующей простейший калькулятор. Разработка алгоритма решения задачи, реализация его в среде программирования Delphi. Список использованных переменных. Блок-схема программы, руководство пользователя.
курсовая работа [106,6 K], добавлен 16.06.2014Разработка программы "Калькулятор" для работы с вещественными числами. Алгоритм работы программы. Набор тестов и варианты исполнения программы. Порядок ввода текста, стандартные ошибки в работе программы. Программная документация, текст программы.
курсовая работа [225,9 K], добавлен 13.10.2013Проект автоматизированного решения арифметической задачи, путем написания ее на языке программирования С++. Реализация программы "Строковый калькулятор" в среде программирования Borland C++. Основные действия: сложение, вычитание, умножение, деление.
курсовая работа [142,1 K], добавлен 07.05.2012Теория чисел как одно из направлений математики, изучающее свойства натуральных чисел. Разработка программы-калькулятора CalcKurs на языке программирования Pascal. Основные функции, реализованные в программе. Интерфейс программы, описание процедур.
курсовая работа [1,9 M], добавлен 03.06.2010Создание программы для выполнения простейших математических функций с применением языка программирования ObjectPascal. Проектирование графического интерфейса Калькулятора двоичных и шестнадцатеричных систем. Описание алгоритма на естественном языке.
курсовая работа [115,4 K], добавлен 19.05.2014