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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
#1

Калькулятор в книге Страуструпа - C++

28.07.2013, 14:48. Просмотров 2629. Ответов 29
Метки нет (Все метки)

Я знал, что это довольно тяжелая книга, поэтому начал читать ее после другой о С++, но пример "элементарного" калькулятора поставил меня в тупик с первых же строк. В этой теме я буду задавать вопросы относительно него по частям. Вот с самого начала: это всё вообще что? Даже не псевдокод, почему END в начале? Что за выражения? Что за термы? Первичное? Выражения? Прочитал весь пример, и так вопросов куча.
(стр. 70)
Грамматика языка калькулятора определяется следующими правилами:
программа:
END // END - это конец ввода
список-выраженийEND
список-выражений:
выражение PRINT // PRINT - это'\n' или';'
выражение PRINT список-выражений
выражение:
выражение+ терм
выражение - терм
терм
терм:
терм/ первичное
терм* первичное
первичное
первичное:
NUMBER // число с плавающей запятой в С++
NAME // имя в языке С++ за исключением'_'
NAME = выражение
- первичное
( выражение)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2013, 14:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Калькулятор в книге Страуструпа (C++):

Калькулятор в книге Страуструпа - C++
Приветствую всех кто читает эту тему. У меня возникла проблема во время написании калькулятора. Он был описан в 6 главе книги и там же...

Задача по книге Страуструпа после главы 3.9 - C++
Вот код который у меня получился, на данный момент: #include<iostream> #include<string> using namespace std; inline void...

Для того чтобы выучить С++ по книге Бьёрна Страуструпа - C++
Для того чтобы выучить С++ по книге Бьёрна Страуструпа обязательно знать Си??

Какой компилятор выбрать для лучшего изучения С++ по книге Берна Страуструпа?п - C++
Какой компилятор выбрать для лучшего изучения С++ по книге Берна Страуструпа? Возможно вопрос туповатый, но мне хотелось бы что-то...

Калькулятор Страуструпа С++ - C++
Я новичок в С++, пытаюсь читать Страуструпа. Дошёл до строчного калькулятора и не понимаю принципов его работы, перечитывал главу 4 раза....

Калькулятор Страуструпа (C++) - C++
Добрый вечер! Я изучаю "Принципы и практика использования C++" Страуструпа. Все, что он пишет, хорошо понимаю, но следующая логика...

29
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2013, 14:51 #2
http://ru.wikipedia.org/wiki/%D0%A4%...83%D1%80%D0%B0
а так же Ахо, Ульман - компиляторы...
1
metagalaxy
7 / 7 / 2
Регистрация: 18.02.2012
Сообщений: 61
28.07.2013, 15:02 #3
term - условие (англ.)
У тебя такое издание? У меня книга эта лежит, ща открою посмотрю.

Добавлено через 2 минуты
У тебя должно начинаться с
C++
1
2
program: 
                    END              // END - это конец ввода
Так?
аа так у тебя все на русском))) короче не заморачивайся, а начинай учить с более легких книжек раз это не понимаешь с Праты 6-ого издания, например.

Добавлено через 6 минут
грубо говоря программа начинается со слова программа
0
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
28.07.2013, 15:04  [ТС] #4
Цитата Сообщение от metagalaxy Посмотреть сообщение
term - условие (англ.)
аа так у тебя все на русском))) короче не заморачивайся, а начинай учить с более легких книжек раз это не понимаешь с Праты 6-ого издания, например.

Добавлено через 6 минут
грубо говоря программа начинается со слова программа
Вот после Праты я и начал учить, и процентов на 95 её переварил без проблем. Я просто не пойму логику этого примера и дальнейших листингов. У меня Второе дополненное издание.
0
metagalaxy
7 / 7 / 2
Регистрация: 18.02.2012
Сообщений: 61
28.07.2013, 15:06 #5
Т.е. автор всем "этим" хотел тебе сказать, что (цитата из книги, сразу после этого листинга): "Иными словами, программа есть последовательность выражений, разделенных точкой с запятой" (PRINT это ";")
)))
0
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
28.07.2013, 15:08 #6
Это некий план калькулятора. Просто читай дальше. Там будет по каждой функции объяснения. К концу главы поймешь общую суть калькулятора и реализацию. На самом деле, действительно, мне тоже показался сложным пример...
1
metagalaxy
7 / 7 / 2
Регистрация: 18.02.2012
Сообщений: 61
28.07.2013, 15:10 #7
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
Вот после Праты я и начал учить, и процентов на 95 её переварил без проблем. Я просто не пойму логику этого примера и дальнейших листингов. У меня Второе дополненное издание.
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
program:
 
      END                    // END - это конец ввода
 
      expr_list END
 
 
 
  expr_list:
 
      expression PRINT      // PRINT - это или '\n' или ';'
 
      expression PRINT expr_list
 
 
 
  expression:
 
      expression + term
 
      expression - term
 
      term
 
 
 
  term:
 
      term / primary
 
      term * primary
 
      primary
 
 
 
  primary:
 
      NUMBER                // число с плавающей точкой в C++
 
      NAME                  // имя C++ за исключением '_'
 
      NAME = expression
 
      - primary
 
      ( expression )
Вот так понятней? Это грамматика языка, которую допускает калькулятор. Вот почитай.
1
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
29.07.2013, 10:23  [ТС] #8
metagalaxy, gore-lykovoe,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
double expr()  // складывает и вычитает
{ 
double left = term(); 
for(;;) // ``вечно'' 
switch(curr_tok) { 
case PLUS: 
get_token(); // случай'+' 
left += term(); 
break; 
case MINUS: 
get_token(); // случай'-' 
left -= term(); 
break; 
default: 
return left; 
} 
}
что за переменная left? почему ей присваивается значение функции, вычисляющей умножение и деление?
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 11:16 #9
Потому что сложение или вычитание представляется в виде a1 + a2 + a3... (и a1-a2-a3...). А последовательность операций сложения и вычитания - слева направо. Поэтому в выражении a1+a2+a3 сначала посчитаем a1+a2 и потом к этой сумме добавим a3.
0
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
29.07.2013, 11:21  [ТС] #10
Цитата Сообщение от Dani Посмотреть сообщение
Потому что сложение или вычитание представляется в виде
Так при чём здесь функция умножения и деления?
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 11:22 #11
А при том, что выражение 2*3 + 4*5 + 5*6, это тоже, что и a1+a2+a3. Только a1, a2, a3 уже посчитаны: a1 = 2*3, a2 = 4*5, a3 = 5*6.
1
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
29.07.2013, 11:28  [ТС] #12
Цитата Сообщение от Dani Посмотреть сообщение
А при том, что выражение 2*3 + 4*5 + 5*6, это тоже, что и a1+a2+a3. Только a1, a2, a3 уже посчитаны: a1 = 2*3, a2 = 4*5, a3 = 5*6.
Я правильно понимаю, что что бы не вводилось в программу, это в конечном счете будет посчитано просто как сумма слагаемых? Поэтому листинг функции суммы приведен первым?
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 11:42 #13
Смотри. Первыми в математике выполняются умножение и деление, а потом - сложение и вычитание. Что мы складываем в математике? Слагаемые. Что может быть слагаемым? Может быть просто число, произведение чего-либо, частное чего-либо, выражение в скобках. В функции expression мы только знаем, что слагаемое - это Терм (просто название, можно назвать Выражение, Терм, Первичное веражение - хоть A, B, C, но это будет не информативно). Почему? Т.к. терм обрабатывает случаи умножения и деления, а функция primary (которая вызывается из функции term) обрабатывает случай выражения в скобках и числа - это все возможные варианты слагаемого. Функция терм возвратит нам значение слагаемого, затем мы его просто просуммируем к остальному результату.
Точно также и с функцией term: мы только знаем, что 1 множитель (в математике: 1 множитель * 2 множитель = произведение) это первичное выражение. Это первичное выражение обрабатывает функция primary (т.к. множитель может быть либо числом, либо выражением в скобках).
1
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 432
29.07.2013, 12:14  [ТС] #14
Dani, Огромное спасибо, теперь осталось разобраться в принципе работы функции get_token() и вообще в куче ещё всего, но многое уже прояснилось. Если мне ещё понадобится ваша помощь, могу ли я к вам обратиться?
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 12:18 #15
tramp_1-3, да, обращаться можете. Знаете, сколько я с этим калькулятором мучился? И как раздражает, когда он еще главы 3-4 трындит про этот калькулятор (раздражает, когда не понял как работает калькулятор). Главное - выполнить упражнения, там сразу гораздо понятнее станет. get_token - не беда, поясню как время будет.
1
29.07.2013, 12:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 12:18
Привет! Вот еще темы с ответами:

Калькулятор страуструпа - C++
Ну по крайней мере если это и не он, то очень на него похож. Проблема в скобках.Например: (1+1 - всё хорошо, выплывет ощибка...

Упражнение из книги Страуструпа. Программа мини-калькулятор. Цифры записанные в строковом формате - C++
Привет всем. Не могу понять, как необходимо изменить программу исходя из условия упражнения. Упражнение сформулировано так: ...

Обучение по книге Страуструпа "принципы и практика C++". Не выводится "Hello, World" - C++
Ребят, помогите пожалуйста, пропал на первом же примере из книги, автор даёт код для вывода Hello world!#include "std_lib_facilities.h" ...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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