Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
calculator.doc
Скачиваний:
344
Добавлен:
05.03.2016
Размер:
120.83 Кб
Скачать

Розділ I. Аналіз завдання

Метою курсової роботи є закріплення теоретичних знань та практичних навичок програмування, набутих при вивченні дисциплін „Основи програмування” та „Проблемно орієнтовані мови програмування”.

В ході виконання курсової роботи студенти повинні навчитися самостійно працювати з літературою, розробляти алгоритми, здійснювати їх програмну реалізацію та від лагодження на сучасних комп‘ютерних системах.

За останні роки відбувся різкий стрибок у розвитку комп’ютерної техніки й програмного забезпечення із одночасним розширення сфер застосування персональних комп’ютерів.

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

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

Розділ iі. Розробка алгоритму функціонування

Алгор́итм (латинізов. Algorithmi, від імені перського математика IX ст. аль-Хорезмі) — послідовність,система, набір систематизованих правил виконання обчислювального процесу, що обов'язково приводить до розв'язання певного класу задач після скінченного числа операцій. При написанні комп'ютерних програм алгоритм описує логічну послідовність операцій. Для візуального зображення алгоритмів часто використовують блок-схеми.

Дана програма складається з таких функцій:

double prim (bool get) – функція, яка служить для віднімань і додавань чисел;

double prim(bool get) – функція, яка дозволяє виконувати користувачу дії з дужками;

double expr(bool get) – функція, яка служить для додавання чисел;

int error(const string &s) – функція для помилок;

Token_value get_token() – функція, яка зчитує символи введені користувачем.

Розділ iіі. Створення програми із описом основних функцій

Дана частина програми є основною і дає можливість працювати усім іншим функціям.

Вона складається з: оголошення бібліотек, структури меню, структури бази товарів, з циклу управління клавішами, а також виведення головного меню.

#include <iostream>

#include <string>

#include <map>

#include <cctype>

#include <sstream>

#include <conio.h>

using namespace std;

istream* input;

int no_of_errors;

map<string,double> table;

double number_value;

string string_value;

int no_of_strings=0;

enum Token_value

{

NAME,NUMBER,END,PLUS='+',MINUS='-',MUL='*',DIV='/',

PRINT=',',ASSIGN='=',LP='(',RP=')'

};

Token_value curr_tok=PRINT;

double term(bool get);

double prim(bool get);

double expr(bool get);

int error(const string &s);

Token_value get_token();

int main(int argc, char* argv[])

{

switch(argc)

{

case 1:

input=&cin;

break;

case 2:

input=new istringstream(argv[1]);

break;

default:

error("To mach parameters!!!");

return 1;

};

table ["pi"]=3.1415926535897932385;

table["e"] =2.7128272824590452354;

while(input)

{

get_token();

if(curr_tok==END)break;

if(curr_tok==PRINT)continue;

cout<<expr(false)<<'\n';

};

if(input!=&cin)delete input;

return no_of_errors;

};

Функція, яка відповідає за додавання віднімання чисел:

double expr(bool get)

{

double left=term(get);

for(;;)

{

switch(curr_tok)

{

case PLUS : left+=term(true);break;

case MINUS : left-=term(true);break;

default : return left;

};

};

};

Функція, яка дозволяє мотижити та ділити числа:

double term(bool get)

{

double left=prim(get);

for(;;)

{

switch(curr_tok)

{

case MUL : left*=prim(true);break;

case DIV : if(double d=prim(true))

{

left/=d;

break;

};

return error("DIVIZION BY ZERO");

default : return left;

};

};

};

Функція, яка користувачу вводити дії з дужками:

double prim(bool get)

{

if(get)get_token();

switch(curr_tok)

{

case NUMBER :

{

double v=number_value;

get_token();

return v;

};

case NAME :

{

double&v=table[string_value];

if(get_token()==ASSIGN)v=expr(true);

return v;

};

case MINUS : return -prim(true);

case LP :

{

double e=expr(true);

if(curr_tok!=RP)return error(") EXPECTED");

get_token();

return e;

};

default : return error("PRIMARY EXPRESSION EXPECTED");

};

};

Функція, яка дозволяє вводити дані з клавіатури:

Token_value get_token()

{

char ch=0;

do{if(!input->get(ch))return curr_tok=END;}

while(ch!='\n'&&isspace(ch));

switch(ch)

{

case 0 : return curr_tok=END;

case ':': case '*': case '/': case '+':

case '-': case '(': case ')':

case '=' :

return curr_tok=Token_value(ch);

case '0': case '1': case '2': case '3':

case '4': case '5': case '6': case '7':

case '8': case '9':

case '.' :

input->putback(ch);

*input>>number_value;

return curr_tok=NUMBER;

case ';' :

case '\n' :

no_of_strings++;

return curr_tok=PRINT;

default :

if (isalpha(ch))

{

string_value=ch;

while(input->get(ch)&&isalpha(ch))

string_value.push_back(ch);

input->putback(ch);

return curr_tok=NAME;

};

error("INCORECT WORD");

return curr_tok=PRINT;

};

};

Функція виведення повідомлення про помилку:

int error(const string &s)

{

no_of_errors++;

cerr<<no_of_strings<<" :-: ERROR:"<<s<<'\n';

return 1;

};

Розділ IV. Опис технології роботи програми

Після компіляції з’являється вікно в якому ми вводимо числа та арифметичні дії, та після натиснення клавіші “Enter” отримаємо відповідь:

Мал. 1 – головне меню програми

В програмі реалізована можливість обчислень виразів з числом PI та виведення його значення на екран. Для цього потрібно в консольному вікні ввести “pi”:

Мал. 2 – виведення числа PI

Також користувачу доступно вводити великі вирази із дужками і отримувати вірну відповідь:

Мал. 3 – введення виразів з дужками

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]