Форум программистов, компьютерный форум, киберфорум
Наши страницы

Стандартная библиотека шаблонов (STL) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обработка исключительных ситуаций. http://www.cyberforum.ru/cpp-beginners/thread166453.html
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Написать функцию вычисления значения по заданной строке символов, являющихся записью этого числа в...
C++ vector - что не так? void delSame(vector<int> &first, vector<int> &second) { vector<int>::iterator pf, ps; for(pf=first.begin(); pf!=first.end(); pf++) for(ps=second.begin(); ps!=second.end(); ps++)... http://www.cyberforum.ru/cpp-beginners/thread166452.html
Наследование.Виртуальные функции. C++
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Создать класс живущих с местоположением. Определить наследуемые классы - лиса, кролик и трава....
C++ Файловый ввод-вывод.
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Создать класс СПРАВОЧНИК со следующими полями: Название фирмы Владелец Телефон Адрес ...
C++ Работа с файлами и директории. http://www.cyberforum.ru/cpp-beginners/thread166449.html
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Необходимо создать следующий набор программ: Программа для копирования каталогов (копируются...
C++ Бинарное дерево. Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Реализовать базу данных ГАИ по штрафным квитанциям с помощью бинарного дерева. Ключом будет... подробнее

Показать сообщение отдельно
Demon-red
139 / 139 / 19
Регистрация: 25.01.2010
Сообщений: 181
16.09.2010, 21:34
Пример был взят из книги
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <cstring>
using namespace std;
const int LEN = 80;
const int MAX = 40;
char buf[256];
char* rus(const char* text)
{
 CharToOem(text,buf);
 return buf;
}
 
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 ()
{
 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;
       }
    }
   s.push(ch);
   }
  }
  else
  {
   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 : exit(1);
    }
  }
  return int (s.pop());
}
 
int main()
{
  char ans;
  char string [ LEN ];
  cout << rus("\nВведите аримметическое выражение в виде 2+3*7/2"
               "\nЧисла должны из одной цифры"
               "\nНе используя пробелы и скрбки");
 do
 {
   cout << rus("\nВыражение : ");
   cin >> string;
   express* eptr = new express (string);
   eptr->parse();
   cout << rus("\nРезультат : ") << eptr->solve();
   delete eptr;
   cout << rus("\nЕще одно выражение (d/n)? ");
   cin >> ans;
 } while (ans == 'd');
 getch();
        return 0;
}
//---------------------------------------------------------------------------
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru