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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 1
#1

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

16.06.2012, 16:42. Просмотров 985. Ответов 13
Метки нет (Все метки)

Вот код его калькулятор почему то он не работает компилировал в 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 ==========
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2012, 16:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает код из страуструп - программирование принципы и практика (C++):

Не работает код из страуструп - программирование принципы и практика - C++
Не работает код из книги страуструп - программирование принципы и практика С++ Глава 5,6,2 вот код: #include &lt;iostream&gt; #include...

Книга Страуструп Программирование Принципы и практика - C++
У кого есть книга Страуструп Программирование Принципы и практика? сбросьте пожалуйста 333 страницу из книги

Обучение по книге Страуструп Б. - Программирование. Принципы и практика с использованием C++ - C++
Всем, добрый день! Изучаю язык С++ по книге Страструпа, до этого никогда не занимался программированием. В ходе изучения книги возникает...

Бьярне Страуструп Программирование: принципы и практика использования C++ кто читал - C++
Нам посоветовали книгу( в универи посоветовал препод), Бьярне Страуструп Программирование: принципы и практика использования C++, взял...

Ответы на книгу Бьерн Страуструп Программирование - Принципы и практика с помощью C + + - C++
Вот хотел есть ли книга с ответами на упражнения в книги Бьерн Страуструп Программирование - Принципы и практика с помощью C + + . Просто...

книгa "Программирование: принципы и практика использования C++, исправленное издание, Бьярне Страуструп; - C++
а в этой книги &quot;Программирование: принципы и практика использования C++, исправленное издание, Бьярне Страуструп;&quot; описанно про циклы....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
16.06.2012, 16:46 #2
Sylar9, В функции primary не закрывается скобкой } оператор switch. Внимательнее будьте.
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 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 ==========
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 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;
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 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;
А что надо исправить, я код из книги статуструппа перепичатал, там все правельно должно быть
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
16.06.2012, 17:17 #6
Меня в свою очередь убило:
"Не правельный ввод"
Как так то? А как же великий и могучий?

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


Как так то? А как же великий и могучий?
какой коменты мне надо что бы код работал а не то что выводит
0
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;
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 1
16.06.2012, 17:42  [ТС] #9
Цитата Сообщение от g-h Посмотреть сообщение
После каждого case: нужно break ставить.
C++
1
2
3
4
switch(ch)
{
case ';': ... break;
case 'q': ... break;
а в книге нету
0
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
16.06.2012, 17:45 #10
А в каких строчках появляются ошибки?
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 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 минуты
Почему не работает код из книги стуратуструппа
0
Jupiter
17.06.2012, 18:28
  #12

Не по теме:

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

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

Sylar9, по-русски же пишет:
Цитата Сообщение от Sylar9 Посмотреть сообщение
d:\my programs\c++\oop kalkulutor\oop kalkulutor\oop kalkulutor.cpp(123): эта строка содержит "{", которая пока не имеет парной
Скобку закрывающую пропустил, смотри внимательнее. Её-то компилятор и ищет, включая, видимо, пустые строки в конце файла.
1
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,927
Записей в блоге: 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;
}
Но возникла проблема почему то он не правильно выводит ответ на экран
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2012, 20:00
Привет! Вот еще темы с ответами:

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

Б. Страуструп "Программирование.Принципы и практика использования С++" - C++
Домашнее задание из главы 3. Напишите программу, которая предлагает ввести три целых числа и выводит их на экран в порядке возрастания....

Не работает кот с книги Страуструп Программирование и практика на С++ - C++
Написал код как в книги Страуструп Программирование и практика на С++, а он не работает. Можете исправить и уточнить почему он не работает ...

Страуструп - принципы и практика программирования. Ошибки компиляции - C++
При компиляции примеров из книги, 12 главы (графика), получаю ошибки: Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.06.2012, 20:00
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru