Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Обработка исключительных ситуаций. http://www.cyberforum.ru/cpp-beginners/thread166453.html
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Написать функцию вычисления значения по заданной строке символов, являющихся записью этого числа в десятичной системе счисления. Предусмотреть случай выхода за границы диапазона определяемого типом int. Используйте механизм исключений.
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++) if(*pf==*ps) {first.erase(pf); second.erase(ps); break;} } функция получает два вектора и если два элемента одинаковые, удаляет их 1--> 2 3 5 5 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
138 / 138 / 19
Регистрация: 25.01.2010
Сообщений: 181
16.09.2010, 21:34     Стандартная библиотека шаблонов (STL)
Пример был взят из книги
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;
}
//---------------------------------------------------------------------------
 
Текущее время: 19:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru