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

Додаток. Лістинг програми мовою С

Читайте также:
  1. Out3 -програмирование выходаOUT3
  2. Аналіз ефективності впровадження енергозберігаючих заходів за допомогою програми Proform
  3. Б) за допомогою програми Провідник.
  4. Блокова структура програми
  5. Вартість програми: 275 євро діти до 15 років / 320 євро старше 15 років
  6. Визначення кількості основних робітників для виконання виробничої програми.

 

 

#include <iostream>

#include <string>

#include <map>

#include <cctype>2

#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; просмотров: 105 | Нарушение авторских прав


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

mybiblioteka.su - 2015-2020 год. (0.009 сек.)