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

Не работает код из страуструп - программирование принципы и практика - C++

Восстановить пароль Регистрация
 
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
16.06.2012, 16:42     Не работает код из страуструп - программирование принципы и практика #1
Вот код его калькулятор почему то он не работает компилировал в VS 2010
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <locale.h>
using namespace std;
class Token
{
public:
    char kind; // вид Лексимы
    double value; // Переменая
    //Конструкторы
    Token(char ch) : kind(ch), value(0)
    {}
    Token(char ch, double v) : kind(ch), value(v)
    {}
 
};
class Token_st
{
private:
      bool full; // находиться ли в буфери объект класса Token? 
      Token buffer; // Здесь храниться объект класса Token, возрашаемы в поток функции putback()  
public:
    Token_st() : full(false), buffer(0)
    {}
    void putback(Token t) //Возрашаем объект класса Token обратно
    {
      buffer = t; //Копируем объект т в буффер
      full = true; //теперь буфер полон
    }
    Token get(); // Получаем объекты класса Token
 
};
// Реализцация функции get()
Token Token_st :: get()
{
   if(full) // если в буфери есть ликсима удаляем ее
   {
     full = false;
     return buffer;
   }
   char ch;
   cin >> ch;
 
   switch(ch)
   {
   case ';': // для печати
   case 'q': // для выхода 
   case '(': case ')': case '+': case '-': case '*': case '/':
       return Token(ch); // пусть каждый символ придставляет себя сам
 
  case '.': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
      {
          cin.putback(ch); //возрашем цифру обратно в поток ввода
          double val;
          cin >> val;
          return Token('8', val);
      }
     
  default:
        cout << "Не правельный ввод" << endl;
   }
 
 
}
double term();
double primary();
// реалезуем операцию + и -
double expression()
{
  double left = term();
  Token_st ts;
  Token t = ts.get();
  while(true)
  {
      switch(t.kind)
      {
      case '+':
          left += term();
          t = ts.get();
          break;
     case '-':
          left -= term();
          t = ts.get();
          break;
     default:
         ts.putback(t); // помешаем т обратно в поток лексим
         return left; // если + или - нету возрашем ответ
      }
  
  
  }
}
// реалезуем операцию / и *
double term()
{
  double left = primary();
  Token_st ts;
  Token t = ts.get();
  while(true)
  {
      switch(t.kind)
      {
      case '*':
          left *= primary();
          t = ts.get();
          break;
     case '/':
         {
           double d = primary();
           if(d == 0) cout << "На ноль делить нельзя" << endl;
          left /= primary();
          t = ts.get();
          break;
         }
     default:
         ts.putback(t); // помешаем т обратно в поток лексим
         return left; // если + или - нету возрашем ответ
      }
  
  }
}
// Оброботка скобок
double primary()
{
   Token_st ts;
  Token t = ts.get();
  switch(t.kind)
  {
      case '(':
  {
      double d = expression();
      ts.get();
      if(t.kind != ')') cout << "Error )" << endl;
      return d;
  }
      case '8':
          return t.value;
      default:
           cout << "Ожидайте первычного значенимя" << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
 
    system("pause");
    return 0;
}




ВОТ ошибки



1>------ Построение начато: проект: OOP kalkulutor, Конфигурация: Debug Win32 ------
1>Построение начато 16.06.2012 14:21:36.
1>InitializeBuildStatus:
1> Обращение к "Debug\OOP kalkulutor.unsuccessfulbuild".
1>ClCompile:
1> OOP kalkulutor.cpp
1>d:\my programs\c++\oop kalkulutor\oop kalkulutor\oop kalkulutor.cpp(142): error C2601: main: недопустимые локальные определения функций
1> d:\my programs\c++\oop kalkulutor\oop kalkulutor\oop kalkulutor.cpp(123): эта строка содержит "{", которая пока не имеет парной
1>d:\my programs\c++\oop kalkulutor\oop kalkulutor\oop kalkulutor.cpp(149): fatal error C1075: конец файла обнаружен ранее, чем левая фигурная скобка "{" в "d:\my programs\c++\oop kalkulutor\oop kalkulutor\oop kalkulutor.cpp(123)"
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:01.23
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2012, 16:42     Не работает код из страуструп - программирование принципы и практика
Посмотрите здесь:

C++ книгa "Программирование: принципы и практика использования C++, исправленное издание, Бьярне Страуструп;
C++ Ответы на книгу Бьерн Страуструп Программирование - Принципы и практика с помощью C + +
C++ Не работает кот с книги Страуструп Программирование и практика на С++
Кто читал Бьярне Страуструп Программирование: принципы и практика использования C++, исправленное издание C++
C++ Бьярне Страуструп Программирование: принципы и практика использования C++ кто читал
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.06.2012, 16:46     Не работает код из страуструп - программирование принципы и практика #2
Sylar9, В функции primary не закрывается скобкой } оператор switch. Внимательнее будьте.
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
16.06.2012, 16:59  [ТС]     Не работает код из страуструп - программирование принципы и практика #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Sylar9, В функции primary не закрывается скобкой } оператор switch. Внимательнее будьте.
и все ?

Добавлено через 7 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
Sylar9, В функции primary не закрывается скобкой } оператор switch. Внимательнее будьте.
исправел все равно ошибки


>PrepareForBuild:
1> Создание каталога "D:\My Programs\C++\Калькулятор ООП\Debug\".
1>InitializeBuildStatus:
1> Создание "Debug\Калькулятор ООП.unsuccessfulbuild", так как было задано "AlwaysCreate".
1>ClCompile:
1> Калькулятор ООП.cpp
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(156): error C2059: синтаксическая ошибка: константа
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(156): error C2470: проект: выглядит как определение функции, но без списка параметров; пропускается вероятное тело функции
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(156): error C2061: синтаксическая ошибка: идентификатор "kalkulutor"
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(159): warning C4129: O: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: m: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: c: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: o: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: o: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: o: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(170): fatal error C1004: непредвиденное обнаружение конца файла
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:03.79
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.06.2012, 17:09     Не работает код из страуструп - программирование принципы и практика #4
не знаю что там за ошибки, все не смотрел, но этот фрагмент убил
Цитата Сообщение от Sylar9 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
case '.': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
 {
 cin.putback(ch); //возрашем цифру обратно в поток ввода
 double val;
 cin >> val;
 return Token('8', val);
 }
default:
 cout << "Не правельный ввод" << endl;
C++
1
2
3
4
5
6
7
8
9
10
default:
    if (ch == '.' || std::isdigit(ch))
    {
          cin.putback(ch); //возрашем цифру обратно в поток ввода
          double val;
          cin >> val;
          return Token('8', val);
    }
    else
         cout << "Не правельный ввод" << endl;
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
16.06.2012, 17:17  [ТС]     Не работает код из страуструп - программирование принципы и практика #5
Цитата Сообщение от Jupiter Посмотреть сообщение
не знаю что там за ошибки, все не смотрел, но этот фрагмент убил

C++
1
2
3
4
5
6
7
8
9
10
default:
    if (ch == '.' || std::isdigit(ch))
    {
          cin.putback(ch); //возрашем цифру обратно в поток ввода
          double val;
          cin >> val;
          return Token('8', val);
    }
    else
         cout << "Не правельный ввод" << endl;
А что надо исправить, я код из книги статуструппа перепичатал, там все правельно должно быть
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
16.06.2012, 17:17     Не работает код из страуструп - программирование принципы и практика #6
Меня в свою очередь убило:
"Не правельный ввод"
Как так то? А как же великий и могучий?

Приведите код снова, вы там что-то серьезное добавили, раз ругается на 156-170 строчки, которых у вас в топике даже нет.
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
16.06.2012, 17:21  [ТС]     Не работает код из страуструп - программирование принципы и практика #7
Цитата Сообщение от MrGluck Посмотреть сообщение
Меня в свою очередь убило:


Как так то? А как же великий и могучий?
какой коменты мне надо что бы код работал а не то что выводит
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
16.06.2012, 17:40     Не работает код из страуструп - программирование принципы и практика #8
Цитата Сообщение от Sylar9 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch(ch)
 {
 case ';': // для печати
 case 'q': // для выхода 
 case '(': case ')': case '+': case '-': case '*': case '/':
 return Token(ch); // пусть каждый символ придставляет себя сам
case '.': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
 {
 cin.putback(ch); //возрашем цифру обратно в поток ввода
 double val;
 cin >> val;
 return Token('8', val);
 }
default:
 cout << "Не правельный ввод" << endl;
 }
После каждого case: нужно break ставить.
C++
1
2
3
4
switch(ch)
{
case ';': ... break;
case 'q': ... break;
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
16.06.2012, 17:42  [ТС]     Не работает код из страуструп - программирование принципы и практика #9
Цитата Сообщение от g-h Посмотреть сообщение
После каждого case: нужно break ставить.
C++
1
2
3
4
switch(ch)
{
case ';': ... break;
case 'q': ... break;
а в книге нету
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
16.06.2012, 17:45     Не работает код из страуструп - программирование принципы и практика #10
А в каких строчках появляются ошибки?
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
17.06.2012, 08:48  [ТС]     Не работает код из страуструп - программирование принципы и практика #11
Цитата Сообщение от g-h Посмотреть сообщение
А в каких строчках появляются ошибки?
PrepareForBuild
>PrepareForBuild:
1> Создание каталога "D:\My Programs\C++\Калькулятор ООП\Debug\".
1>InitializeBuildStatus:
1> Создание "Debug\Калькулятор ООП.unsuccessfulbuild", так как было задано "AlwaysCreate".
1>ClCompile:
1> Калькулятор ООП.cpp
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(156): error C2059: синтаксическая ошибка: константа
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(156): error C2470: проект: выглядит как определение функции, но без списка параметров; пропускается вероятное тело функции
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(156): error C2061: синтаксическая ошибка: идентификатор "kalkulutor"
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(159): warning C4129: O: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(162): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(163): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): error C2017: недопустимая escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: m: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: c: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: o: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: o: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(164): warning C4129: o: неизвестная escape-последовательность
1>d:\my programs\c++\калькулятор ооп\калькулятор ооп\калькулятор ооп.cpp(170): fatal error C1004: непредвиденное обнаружение конца файла
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:03.79
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Добавлено через 13 часов 33 минуты
Почему не работает код из книги стуратуструппа
Jupiter
17.06.2012, 18:28
  #12

Не по теме:

Цитата Сообщение от Sylar9 Посмотреть сообщение
Почему не работает
видать не судьба

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.06.2012, 19:17     Не работает код из страуструп - программирование принципы и практика #13
Цитата Сообщение от g-h Посмотреть сообщение
После каждого case: нужно break ставить.
Да ну?! А у меня вот тут и так работало. Не знал, что нельзя так, потому, наверное, и получилось...

Sylar9, по-русски же пишет:
Цитата Сообщение от Sylar9 Посмотреть сообщение
d:\my programs\c++\oop kalkulutor\oop kalkulutor\oop kalkulutor.cpp(123): эта строка содержит "{", которая пока не имеет парной
Скобку закрывающую пропустил, смотри внимательнее. Её-то компилятор и ищет, включая, видимо, пустые строки в конце файла.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2012, 20:00     Не работает код из страуструп - программирование принципы и практика
Еще ссылки по теме:

Не работает код из страуструп - программирование принципы и практика C++
Книга Страуструп Программирование Принципы и практика C++
Б. Страуструп "Программирование.Принципы и практика использования С++" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
17.06.2012, 20:00  [ТС]     Не работает код из страуструп - программирование принципы и практика #14
Цитата Сообщение от easybudda Посмотреть сообщение
Да ну?! А у меня вот тут и так работало. Не знал, что нельзя так, потому, наверное, и получилось...

Sylar9, по-русски же пишет:

Скобку закрывающую пропустил, смотри внимательнее. Её-то компилятор и ищет, включая, видимо, пустые строки в конце файла.
Вы думаете проблема в операторе break ?

Добавлено через 22 минуты
Исправил все компилируется:
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#include <iostream>
#include <locale.h>
using namespace std;
class Token
{
public:
    char kind; // вид Лексимы
    double value; // Переменая
    //Конструкторы
    Token(char ch) : kind(ch), value(0)
    {}
    Token(char ch, double v) : kind(ch), value(v)
    {}
 
};
class Token_st
{
private:
      bool full; // находиться ли в буфери объект класса Token? 
      Token buffer; // Здесь храниться объект класса Token, возрашаемы в поток функции putback()  
public:
    Token_st() : full(false), buffer(0)
    {}
    void putback(Token t) //Возрашаем объект класса Token обратно
    {
      buffer = t; //Копируем объект т в буффер
      full = true; //теперь буфер полон
    }
    Token get(); // Получаем объекты класса Token
 
};
// Реализцация функции get()
Token Token_st :: get()
{
   if(full) // если в буфери есть ликсима удаляем ее
   {
     full = false;
     return buffer;
   }
   char ch;
   cin >> ch;
 
   switch(ch)
   {
   case ';': // для печати
   case 'q': // для выхода 
   case '(': case ')': case '+': case '-': case '*': case '/':
       return Token(ch); // пусть каждый символ придставляет себя сам
       break;
  case '.': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
      {
          cin.putback(ch); //возрашем цифру обратно в поток ввода
          double val;
          cin >> val;
          return Token('8', val);
          break;
      }
     
  default:
        cout << "Не правельный ввод" << endl;
   }
 
 
}
double term();
double primary();
// реалезуем операцию + и -
double expression()
{
  double left = term();
  Token_st ts;
  Token t = ts.get();
  while(true)
  {
      switch(t.kind)
      {
      case '+':
          left += term();
          t = ts.get();
          break;
     case '-':
          left -= term();
          t = ts.get();
          break;
     default:
         ts.putback(t); // помешаем т обратно в поток лексим
         return left; // если + или - нету возрашем ответ
      }
  
  
  }
}
// реалезуем операцию / и *
double term()
{
  double left = primary();
  Token_st ts;
  Token t = ts.get();
  while(true)
  {
      switch(t.kind)
      {
      case '*':
          left *= primary();
          t = ts.get();
          break;
     case '/':
         {
           double d = primary();
           if(d == 0) cout << "На ноль делить нельзя" << endl;
          left /= primary();
          t = ts.get();
          break;
         }
     default:
         ts.putback(t); // помешаем т обратно в поток лексим
         return left; // если + или - нету возрашем ответ
      }
  
  }
}
// Оброботка скобок
double primary()
{
   Token_st ts;
  Token t = ts.get();
  switch(t.kind)
  {
      case '(':
  {
      double d = expression();
      ts.get();
      if(t.kind != ')') cout << "Error )" << endl;
      return d;
      break;
  }
      case '8':
          return t.value;
          break;
      default:
           cout << "Ожидайте первычного значенимя" << endl;
}
}
int main()
{
    setlocale(LC_ALL, "Rus");
    try {
    while (cin)
        cout << expression() << '\n';
      system("pause");
}
catch (exception& e) {
    cerr << e.what() << endl;
    system("pause");
    return 1;
}
catch (...) {
    cerr << "exception \n";
    system("pause");
    return 2;
}
 
 
    system("pause");
    return 0;
}
Но возникла проблема почему то он не правильно выводит ответ на экран
Yandex
Объявления
17.06.2012, 20:00     Не работает код из страуструп - программирование принципы и практика
Ответ Создать тему
Опции темы

Текущее время: 04:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru