С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565

Ох уж эта книга бьярне

30.10.2017, 16:28. Показов 2608. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Вообщем проблема простая. По книге код пишу, в ней многострадальная 6ая глава, код которой на сайте автора. Самому надо еще параллельно что то исправлять. Короче суть в том что мне выдает ошибку, и не хочет компилировать.
Конкретно ругается на bool Full и Token buffer. Видимо потому что они в привате, но ведь код сам с сайта и в книге написано что он работать должен.

Ссылка на сайт с кодом: http://stroustrup.com/Programm... 2buggy.cpp

Сам код
Кликните здесь для просмотра всего текста

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
class Token {
public:
    char kind;        // what kind of token
    double value;     // for numbers: a value 
    Token(char ch)    // make a Token from a char
        :kind(ch), value(0) { }
    Token(char ch, double val)     // make a Token from a char and a double
        :kind(ch), value(val) { }
};
 
//------------------------------------------------------------------------------
 
class Token_stream {
public:
    Token_stream();
    Token get();
    void putback(Token t);
private:
    bool full;
    Token buffer;
};
 
Token_stream::Token_stream()
    :full(false), buffer(0) 
{
}
 
 
void Token_stream::putback(Token t) {
    if (full)
        perror("putback() into a full buffer");
    buffer = t;
    full = true;
}
 
 
Token get()    // read a token from cin
{
    if (full) {       // do we already have a Token ready?
                      // remove token from buffer
        full = false;
        return buffer;
    }
 
    char ch;
    cin >> ch;    // note that >> skips whitespace (space, newline, tab, etc.)
 
    switch (ch) {
        //not yet   case ';':    // for "print"
        //not yet   case 'q':    // for "quit"
    case '(': case ')': case '+': case '-': case '*': case '/':
        return Token(ch);        // let each character represent itself
    case '.':
    case '0': case '1': case '2': case '3': case '4':
    case '5': case '6': case '7': case '8': case '9':
    {
        cin.putback(ch);         // put digit back into the input stream
        double val;
        cin >> val;              // read a floating-point number
        return Token('8', val);   // let '8' represent "a number"
    }
    default:
        perror("Bad token");
    }
}
 
Token_stream ts;
 
double expression();
 
 
 
double primary() {
    Token t = get();
    switch (t.kind) {
    case '(':{
        double d = expression();
        t = ts.get();
        if (t.kind != ')') {
            perror("Must have ')'");
        }
        return d;
    }
    case '8':
        return t.value;
    default:
        perror("Need first expression!!!");
    }
}
 
double term() {
    double left = primary();
    Token t = ts.get();
    while (true) {
        switch (t.kind) {
        case '*':
            left *= primary();
            t = ts.get();
            break;
        case '/': {
            double d = primary();
            if (d == 0) {
                perror("Divided zero!!!");
            }
 
            left /= primary();
            t = ts.get();
            break;
        }
        default:
            ts.putback(t);
            return left;
        }
    }
 
}
 
double expression() {
    double left = term();
    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;
        }
    }
 
}
 
 
 
int main() {
    try {
        while (cin) {
            cout << "= "<< expression() << '\n';
        }
        keep_window_open();
    }
    catch (exception& e) {
        cerr << e.what() << '\n';
        keep_window_open();
        return 1;
    }
    catch (...) {
        cerr << "exception\n";
        keep_window_open();
        return 2;
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2017, 16:28
Ответы с готовыми решениями:

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

Я недавно начал учить C# ,по книге Э.Троеслена и Ф.Джепикса для новичка эта книга подойдёт?
+ C# мой первый язык , если что .

Как обратиться к объекту, посаженному в "Эта книга" из других модулей?
Посадил в Excel в модуль 'Эта книга' Public WithEvents cbxSelView As Office.CommandBarComboBox Но ! Чей-то не въеду никак - как к нему...

7
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
30.10.2017, 16:30
Bring,
/*
This file is known as calculator02buggy.cpp

I have inserted 5 errors that should cause this not to compile
I have inserted 3 logic errors that should cause the program to give wrong results

First try to find an remove the bugs without looking in the book.
If that gets tedious, compare the code to that in the book (or posted source code)

Happy hunting!

*/
Там же выше написано.

Добавлено через 35 секунд

Не по теме:

Ох уж этот Бьярне, ох и шалунишка :D

1
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
30.10.2017, 16:39
Кто-то читает по диагонали и не читает задания в конце главы)
0
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
30.10.2017, 16:43  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Там же выше написано.
Господи, я даже внимания не обращал на это... Спасибо.
0
30.10.2017, 16:48

Не по теме:

Да и название файла calculator02buggy.cpp как бы намекает.

0
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
30.10.2017, 16:55  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
Да и название файла calculator02buggy.cpp как бы намекает.
Найди на его сайт 01 версию, или прочитай заголовок что он для главы 6.7. Учитывая что я как раз на главе 6.7 - что как бы намекает.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
30.10.2017, 17:06
Bring, ничего не понял. Какие версии? Какие заголовки? Имя файла указано в первом сообщении.
0
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
30.10.2017, 17:22  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
ничего не понял. Какие версии? Какие заголовки? Имя файла указано в первом сообщении.
А, ты про то что в название buggy, сори)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2017, 17:22
Помогаю со студенческими работами здесь

Не получается сделать 6е задание 3й главы из книги Бьярне Страуструп
Здравствуйте, я совсем не давно начал изучать C++ и начал с книги Бьярна Страуструпа, и остановился на заданиях с 3й главы, а конкретно...

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

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

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

Книга 1 Книга 2 Книга 3 count = 1
Кто нибудь сталкивался с таким? Открыто несколько книг с пуска, т.е. созданые вновь но еще не сохраненные книги. Книга1 Книга2 Книга3 ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru