Самостійне вивчення

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

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

#include<string.h>

#include<process.h>

const int LEN=80;

const int MAX=40;

///////////

class Stack

{private:

char st[MAX];

int top;

public:

Stack()

{top=0;}

void push(char var)

{st[++top]=var;}

char pop()

{return st[top--];}

int gettop()

{return top;}

};

///////////

class express

{private:

Stack s;

char* pStr;

int len;

public:

express(char* ptr)

{pStr=ptr;

len=strlen(pStr);}

void parse();

int solve();

};

//////////////

void express::parse()//add to stack

{

char ch;

char lastval;//останнє значення

char lastop;//останній оператор

for(int j=0;j<len;j++)

{ch=pStr[j];

if (ch>=’0’ && ch<=’9’)//якщо цифра

s.push(ch-‘0’);

else

if(ch==’+’||ch==’-‘||ch==’*’||ch==’/’)

{if (s.gettop()==1)

s.push(ch);

else

{lastval=s.pop();

lastop=s.pop();

if((ch==’*’||ch==’/’)&&(lastop==’+’||lastop==’-‘))

{s.push(lastop);

s.push(lastval);}

else

{switch(lastop)

{case’+’:s.push(s.pop()+lastval);break;

case’-‘:s.push(s.pop()-lastval);break;

case’*’:s.push(s.pop()*lastval);break;

case’/’:s.push(s.pop()/lastval);break;

default: cout<<”\nНевідомий оператор”;bioskey(0);exit(1);

}

}s.push(ch);

}

}

else

{cout<<”\nНевідомий символ”;

bioskey(0);

exit(1);

}

}

}

///////////

int express::solve()

{char lastval;

while(s.gettop()>1)

{lastval=s.pop();

switch(s.pop())

{case ‘+’:s.push(s.pop()+lastval); break;

case ‘-‘:s.push(s.pop()-lastval); break;

case ‘*’:s.push(s.pop()*lastval); break;

case ‘/’:s.push(s.pop()/lastval); break;

default:cout<<”\nНевідомий оператор”;bioskey(0);exit(1);

}

}

return int(s.pop());

}

////////////////

int main()

{clrscr();

char ans;

char string[LEN];

cout<<”\nВведіть вираз як 2+3*4/3-2”;

cout<<”\nЧисла з 1 цифри”;

cout<<”\nБез пропусків та дужок”;

do

{cout<<”\nВираз:”;

cin>>string;

express* eptr=new express(string);

eptr->parse();

cout<<”\nРезультат:”<<eptr->solve();

delete eptr;

cout<<”\nContinue y/n?”;

cin>>ans;

} while (ans==’y’);

return 0;

}

Програма 20.21

 

 


 








Дата добавления: 2015-08-26; просмотров: 512;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.