русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-04-22; переглядів: 885.


Для самостійного вивчення пропонується програма 12.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;

}

Програма 12.21

 

 


 


<== попередня лекція | наступна лекція ==>
Вказівники на вказівники | Підсумок


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн