Створення арифметичного калькулятора

Автоматизація виконання операцій на робочих місцях. Розробка програми "Арифметичний калькулятор", що буде дозволяти обраховувати різноманітні арифметичні операцій (додавання, віднімання, ділення, множення). Тестування програми і результати її виконання.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 05.05.2014
Размер файла 226,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Міністерство освіти і науки України

Тернопільський національний технічний університет ім. І. Пулюя

Кафедра комп'ютерних наук

КУРСОВА РОБОТА

з предмету: "Об'єктно-орієнтоване програмування"

на тему: "Створення арифметичного калькулятора"

Виконав студент групи СН - 21М.Б. Дереворіз

Керівник роботи ст. викл. В.М. Бревус

Тернопіль - 2012 р.

Зміст

  • Вступ
  • Технічне завдання
  • Аналіз технічного завдання
  • Розробка програми
  • Розробка методів
  • Тестування програми і результати її виконання
  • Висновок
  • Список використаної літератури
  • Додаток

Вступ

Питання автоматизації виконання операцій на робочих місцях є досить вагомим у наш час. Основною причиною цього є все більше і більше зростаючий потік інформації, який доводиться обробляти кожному з нас. Якщо в 80-х роках минулого століття основною проблемою була нестача інформації або доступ до неї з великим запізненням, то на даний момент основна проблема - надлишок інформації. Багато хто не в силах справитися з постійно зростаючим її об'ємом.

Для написання курсової роботи з предмету "ООП" я вибрав завдання, яке передбачає розробку програми, арифметичний калькулятор що буде дозволяти обраховувати різноманітні арифметичні операцій такі як додавання, віднімання, ділення, множення. Думаю, така тема є в наш час досить актуальною. Адже зараз є велика кількість людей які користуються калькулятором при обчисленні деяких величин.

Гарною можливістю для автоматизації виконання операцій є використання в роботі персональних комп'ютерів, які зараз доступні по ціні для будь-якої організації. Комп'ютер можна використовувати по-різному, найчастіше основне його використання в організаціях - набір, друк і зберігання документів. Але цим можливості обчислювальної техніки не обмежуються.

Дана програма призначена для виконання простих операцій над числами, таких, як: додавання, віднімання, ділення, множення.

арифметичний калькулятор програма тестування

Технічне завдання

Аналіз технічного завдання

Розроблена програма може працювати на будь-якому ІВМ-сумісному комп'ютері починаючи з 80286 і вище. Робота програми не обмежена об'ємом ОЗП (оперативного запам'ятовуючого пристрою) чи жорсткого диску, але рекомендується мати не менше 2 мегабайтів вільного дискового простору. При збільшенні об'єму бази даних необхідно збільшити ємність використовуваного ЖМД (жорсткого магнітного диску). Вся інформація вводиться за допомогою клавіатури. Контроль введеної інформації здійснюється за допомогою дисплею.

Після вводу інформації можливе її редагування і знищення.

Після запуску проекту на екрані з'явиться основне вікон в якому можна записувати дані.

Після завершення вводу виразів натисніть "Enter" і результат буде автоматично виведений на екран.

Розробка програми

Основним класом програми є клас parser - головна форма зі всіма розміщеними на ній компонентами. Головна форма відображає вікно програма, в якому виконується більшість операцій, та забезпечує зв'язок всіх інших елементів програми.

Для полегшення сприйняття іншим програмістом тексту програми всі класам та їх елементам давалися осмислені імена, тобто клас parser (парсити) обробляти інформацію.

При розробці системи класів в першу чергу ставилася задача обійтися як можна меншим числом класів і разом з тим забезпечити гнучкість програми, можливість її подальшої модифікації. Оскільки програма не складна то в програмі створений всього лише 1 клас parser.

Нижче наведений клас головної форми:

class parser {

char *exp_ptr;

char token [80];

char tok_type;

void eval_exp2 (double &result);

void eval_exp3 (double &result);

void eval_exp4 (double &result);

void eval_exp5 (double &result);

void eval_exp6 (double &result);

void atom (double &result);

void get_token ();

void serror (int error);

int isdelim (char c);

public:

parser ();

double eval_exp (char *exp);

};

Розробка методів

В програмі реалізовано лише два методи, один який отримує введений вираз, і далі по ланцюжку передається eval_exp2 - > eval_exp3 - > eval_exp4 - > eval_exp5 - > eval_exp6

Крім того, в програмі ще присутній захист від помилок користувача, які реалізовані засобами компонентів. Так, наприклад, в полі для кількості, неможливо вписати будь-який символ, крім цифри. Це реалізовано за допомогою компоненту, який призначений для вводу числових значень та відображення їх в довільному, заданому програмістом, форматі.

Нижче наведений метод, який отримує введений вираз, і передає далі по ланцюжку

eval_exp2 - > eval_exp3 - > eval_exp4 - > eval_exp5 - > eval_exp6

double parser:: eval_exp (char *exp)

{

double result;

exp_ptr = exp;

get_token ();

if (! *token)

{

serror (2);

return 0.0;

}

eval_exp2 (result);

if (*token)

{

serror (0);

}

return result;

}

void parser:: eval_exp2 (double &result)

{

register char op;

double temp;

eval_exp3 (result);

while ( (op = *token) == '+' || op == '-')

{

get_token ();

eval_exp3 (temp);

switch (op)

{

case '-':

result = result - temp;

break;

case '+':

result = result + temp;

break;

}

}

}

void parser:: eval_exp3 (double &result)

{

register char op;

double temp;

eval_exp4 (result);

while ( (op = *token) =='*' || op == '/' || op == '%')

{

get_token ();

eval_exp4 (temp);

switch (op)

{

case '*':

result = result * temp;

break;

case '/':

result = result / temp;

break;

case '%':

result = (int) result % (int) temp;

break;

}

}

}

void parser:: eval_exp4 (double &result)

{

double temp, ex;

register int t;

eval_exp5 (result);

if (*token == '^')

{

get_token ();

eval_exp5 (temp);

ex = result;

if (temp == 0.0)

{

result = 1.0;

return;

}

for (t = (int) temp - 1; t > 0; - -t)

{

result = result * (double) ex;

}

}

}

void parser:: eval_exp5 (double &result)

{

register char op;

op = 0;

if ( (tok_type == DELIMITER) && *token=='+' || *token == '-')

{

op = *token;

get_token ();

}

eval_exp6 (result);

if (op == '-')

{

result = - result;

}

}

void parser:: eval_exp6 (double &result)

{

if ( (*token == ' ('))

{

get_token ();

eval_exp2 (result);

if (*token! = ') ')

{

serror (1);

}

get_token ();

}

else atom (result);

}

Другий метод перевіряє чи введене значення число чи ні.

void parser:: atom (double &result)

{

switch (tok_type)

{

case NUMBER:

result = atof (token);

get_token ();

return;

defualt:

serror (0);

}

}

UML Діаграма класів.

Тестування програми і результати її виконання

Тестування програми проводилося на різних комп'ютерах, на яких була встановлена операційна система Windows 2007 або Windows XP. В процесі перевірки роботи було заповнене основне вікно виразами, в процесі вводу інформації навмисне допускалися помилки - наприклад, вводились букви, й здійснювали ділення на нуль.

При вводі помилкових значень програма просто вибивала повідомлення про помилку або відмовитися від вводу інформації.

В загальному програма показала високу надійність у роботі, що значною мірою пов'язано з її простотою і зручністю користування.

Висновок

Результати попереднього тестування програми показали вирішення питань автоматизації виконання операцій на робочих місцях відносно простими засобами. На даний момент курс програмування читається практично у всіх навчальних закладах, і хоча б частина їх випускників використовує отримані знання у роботі. Тому при наявності можливостей займатися створенням програм безпосередньо на робочих місцях продуктивність праці зростає.

Створенню програм безпосередньо на робочих місцях сприяє і той факт, що ніхто краще від людей, які будуть з цією програмою працювати. Не знає специфіки роботи, тому всі зміни і корективи в інтерфейс і логіку роботи програми можна вносити ще на етапі її написання і попереднього тестування. Іншими словами, етапи написання і попереднього тестування програми проходять одночасно, в результаті чого прискорюється процес її створення.

Список використаної літератури

1. Дарахвелидзе П.Г. Программирование в Delphi 5. СПб.: БХВ-Петербург, 2000 - 774 с.

2. Тейксера С., Пачеко К. Delphi 5. Руководство разработчика (в 2 томах). М.: Издательский дом "Вильямс", 2000.

3. Фаронов В.В., Шумаков П.В. Delphi 4: Руководство разработчика баз данных. М.: Нолидж, 1999 - 558 с.

4. Хоменко А.Д. "Программирование на С++" 95-177с.

5. Видео уроки по C++ от Teantong (1-45)

Додаток

Задокументований текст програми.

#include "stdafx. h"

#include <iostream>

#include <cstdlib>

#include <cctype>

#include <cstring>

using namespace std;

enum types {DELIMITER=1, VARIABLE, NUMBER};

// Клас який "парсить" введений вираз

class parser {

char *exp_ptr;

char token [80];

char tok_type;

void eval_exp2 (double &result);

void eval_exp3 (double &result);

void eval_exp4 (double &result);

void eval_exp5 (double &result);

void eval_exp6 (double &result);

void atom (double &result);

void get_token ();

void serror (int error);

int isdelim (char c);

public:

parser ();

double eval_exp (char *exp);

};

// Конструктор

parser:: parser ()

{

exp_ptr = NULL;

}

// Метод, який отримує введений вираз, і далі по ланцюжку передається eval_exp2 - > eval_exp3 - > eval_exp4 - > eval_exp5 - > eval_exp6

double parser:: eval_exp (char *exp)

{

double result;

exp_ptr = exp;

get_token ();

if (! *token)

{

serror (2);

return 0.0;

}

eval_exp2 (result);

if (*token)

{

serror (0);

}

return result;

}

void parser:: eval_exp2 (double &result)

{

register char op;

double temp;

eval_exp3 (result);

while ( (op = *token) == '+' || op == '-')

{

get_token ();

eval_exp3 (temp);

switch (op)

{

case '-':

result = result - temp;

break;

case '+':

result = result + temp;

break;

}

}

}

void parser:: eval_exp3 (double &result)

{

register char op;

double temp;

eval_exp4 (result);

while ( (op = *token) =='*' || op == '/' || op == '%')

{

get_token ();

eval_exp4 (temp);

switch (op)

{

case '*':

result = result * temp;

break;

case '/':

result = result / temp;

break;

case '%':

result = (int) result % (int) temp;

break;

}

}

}

void parser:: eval_exp4 (double &result)

{

double temp, ex;

register int t;

eval_exp5 (result);

if (*token == '^')

{

get_token ();

eval_exp5 (temp);

ex = result;

if (temp == 0.0)

{

result = 1.0;

return;

}

for (t = (int) temp - 1; t > 0; - -t)

{

result = result * (double) ex;

}

}

}

void parser:: eval_exp5 (double &result)

{

register char op;

op = 0;

if ( (tok_type == DELIMITER) && *token=='+' || *token == '-')

{

op = *token;

get_token ();

}

eval_exp6 (result);

if (op == '-')

{

result = - result;

}

}

void parser:: eval_exp6 (double &result)

{

if ( (*token == ' ('))

{

get_token ();

eval_exp2 (result);

if (*token! = ') ')

{

serror (1);

}

get_token ();

}

else atom (result);

}

// Метод, який перевіряє чи ввдедене значення чило, чи ні

void parser:: atom (double &result)

{

switch (tok_type)

{

case NUMBER:

result = atof (token);

get_token ();

return;

defualt:

serror (0);

}

}

// Вивід значень про помилки

void parser:: serror (int error)

{

static char *e [] =

{

"Синтаксична помилка",

"Неспiвпадiння дужок",

"Пустий вираз"

};

cout << e [error] << endl;

}

void parser:: get_token ()

{

register char *temp;

tok_type = 0;

temp = token;

*temp = '\0';

if (! *exp_ptr)

{

return;

}

while (isspace (*exp_ptr))

{

++exp_ptr;

}

if (strchr (" +-*/%^ ()", *exp_ptr))

{

tok_type = DELIMITER;

*temp++ = *exp_ptr++;

}

else if (isalpha (*exp_ptr))

{

while (! isdelim (*exp_ptr))

{

*temp++ = *exp_ptr++;

}

tok_type = VARIABLE;

}

else if (isdigit (*exp_ptr))

{

while (! isdelim (*exp_ptr))

{

*temp++ = *exp_ptr++;

}

tok_type = NUMBER;

}

*temp = '\0';

}

int parser:: isdelim (char c)

{

if (strchr (" +-/*%^ ()", c) || c == 9 || c == '\r' || c == 0)

{

return 1;

}

return 0;

}

void main ()

{

setlocale (LC_ALL, "Russian");

const int explength = 80;

char expstr [explength];

cout << "Десятковий роздiлювач - ," << endl;

cout << "Для завершення роботи натиснiть q" << endl;

parser ob;

for (;;)

{

cout << "Введiть вираз: ";

cin. getline (expstr, explength - 1);

if (*expstr == 'q')

{

break;

}

cout << "Вiдповiдь: " << ob. eval_exp (expstr) << "\n\n";

};

}

Реалізація програми.

Пусте вікно готове для обчислень.

Реалізація обчислень.

Размещено на Allbest.ru


Подобные документы

  • Демонстрування можливостей використання калькулятора для матриць. Розробка програми, яка може бути використана для виконання основних арифметичних операцій над матрицями та для перевірки обчислень у розрахункових роботах. Алгоритм створення програми.

    курсовая работа [43,2 K], добавлен 12.12.2009

  • Розробка програми калькулятора, що може виконувати найголовніші арифметичні операції над двома числами. Вимоги до апаратного і програмного забезпечення. Опис форм та компонентів програми. Розробка алгоритмів програмного забезпечення. Опис коду програми.

    курсовая работа [57,1 K], добавлен 31.05.2013

  • Операція алгебраїчного додавання, множення, ділення. Алгоритм ділення модулів чисел. Поняття граф-схеми алгоритму та правила її складання. Основні поняття теорії цифрових автоматів. Синтез керуючого автомата. Контроль виконання арифметичних операцій.

    реферат [55,4 K], добавлен 24.03.2009

  • Розробка калькулятора з використанням динамічної індикації. Для керування калькулятором застосовується шістнадцять кнопок: кнопки вводу цифр від 0 до 9; додавання, віднімання, множення, ділення та дорівнює; кнопка збросу. Принципова схема пристрою.

    курсовая работа [248,8 K], добавлен 15.03.2011

  • Діаграма діяльності програми. Алгоритм програми "калькулятор". Побудова діаграм UML. Статична діаграма класів. Основні операції при обчисленні десяткового логарифму. Приклад калькулятора, що перемножує числа. Структури та типи діаграм, їх значення.

    дипломная работа [241,4 K], добавлен 21.09.2010

  • Математичний опис задачі виконання символьних операцій з многочленами, розробка алгоритмів її реалізації і сама реалізація на одній з версій алгоритмічної мови Pascal, контрольна перевірка правильності. Тестування програми на екстремальних вхідних даних.

    контрольная работа [24,1 K], добавлен 20.09.2010

  • Розрізняють дві форми подання двійкових чисел у ЕОМ: із фіксованою комою і з "плавучою" комою. Прямий, обернений і додатковий коди двійкових чисел. Алгоритми виконання арифметичних операцій (додавання, множення, ділення) над двійковими числами із знаком.

    лекция [28,1 K], добавлен 13.04.2008

  • Розробка автоматизованої системи навчання. Операції над простими типами в середовищі Delphі. Прості типи даних. Арифметичні операції і операції відношення. Виконання логічних операцій. Черговість виконання операцій. Строкові операції отримання адреси.

    курсовая работа [2,4 M], добавлен 04.05.2013

  • Загальні відомості про системи числення. Поняття основи. Машинні коди чисел. Алгоритми виконання операцій додавання і віднімання в арифметико-логічному пристрої ЕОМ, множення і ділення двійкових чисел в АЛП. Логічні основи ЕОМ. Досконалі нормальні форми.

    учебное пособие [355,4 K], добавлен 09.02.2012

  • Розробка програми "Калькулятор" для Windows за допомогою ітераційної моделі, при використанні якої не вимагається одразу повністю писати готову закінчену програму. Аналіз вимог. Опис системної архітектури. Етапи реалізації та тестування готової програми.

    контрольная работа [19,4 K], добавлен 24.02.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.