Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. Oslash; Report Wizard – створення звітів за допомогою мастера, кнопка .
  2. Out3 -програмирование выходаOUT3
  3. Аналіз ефективності впровадження енергозберігаючих заходів за допомогою програми Proform
  4. Аналіз основних техніко-економічних показників діяльності підприємства
  5. Апостеріорна оцінка точності функцій виміряних|виміряти| величин
  6. Б) за допомогою програми Провідник.
  7. Блокова структура програми

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

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

 

#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;

};

 


Дата добавления: 2015-10-31; просмотров: 91 | Нарушение авторских прав


Читайте в этой же книге: Включить в расчет услугу по переводу денег в Китай по нашему контракту? | Формулювання задачі | Методи та засоби розв’язування задачі | Програма та її опис | Технологія програмування, виконання та відлагодження програми | Інструкція користувачеві | Контрольний приклад та аналіз результатів комп’ютерної реалізації програми |
<== предыдущая страница | следующая страница ==>
Розділ I. Аналіз завдання| Додаток. Лістинг програми мовою С

mybiblioteka.su - 2015-2024 год. (0.008 сек.)