Программирование. Принципы и практика использования C++ Исправленное издание, стр. 105
Задание
1. Скомпилируйте файл
calculator08buggy.cpp2. Пройдитесь по всей программе и добавьте необходимые комментарии.
3. В ходе комментирования вы обнаружите ошибки (специально вставленные в код, чтобы вы их нашли). Исправьте их; в тексте книги их нет.
4. Тестирование: подготовьте набор тестовых вводных данных и используйте их для тестирования калькулятора. Насколько полон ваш список? Что вы ищете? Включите в список отрицательные числа, нуль, очень маленькие числа и “странный” ввод.
5. Проведите тестирование и исправьте все ошибки, которые пропустили при комментировании.
6. Добавьте предопределенное имя
k10007. Предусмотрите возможность вычисления функции
sqrt()sqrt(2+6.7)sqrt(x)x;sqrt(9)38. Используйте стандартную функцию
sqrt()std_lib_facilities.h9. Предусмотрите перехват попыток извлечь квадратный корень из отрицательного числа и выведите на экран соответствующее сообщение об ошибке.
10. Предусмотрите возможность использовать функцию
pow(x,i)xipow(2.5,3)2.5*2.5*2.5i%11. Измените “ключевое слово объявления” с
let#12. Измените “ключевое слово выхода” с
qexitКонтрольные вопросы
1. Зачем работать над программой, когда ее первая версия уже доказала свою работоспособность? Перечислите причины.
2. Почему выражение “
1+2; q3. Зачем нам понадобилась символьная константа с именем
number4. Мы разбили функцию
main()main()5. Зачем вообще разделять код на несколько функций? Сформулируйте принципы.
6. Зачем нужны комментарии и как они должны быть организованы?
7. Что делает оператор
narrow_cast8. Как используются символические константы?
9. Почему важна организация кода?
10. Как мы реализовали оператор
%11. Что и как делает функция
is_declared()12. Реализация “ключевого слова”
let13. Сформулируйте правило, определяющее, что является именем в калькуляторе и что нет?
14. Чем хороша идея о постепенной разработке программ?
15. Когда следует начинать тестирование?
16. Когда следует проводить повторное тестирование?
17. Как вы принимаете решение о том, какие функции следует сделать отдельными?
18. Как вы выбираете имена для переменных и функций? Обоснуйте свой выбор.
19. Зачем нужны комментарии?
20. Что следует писать в комментариях, а что нет?
21. Когда следует считать программу законченной?
Термины

Упражнения
1. Предусмотрите использование символа подчеркивания в именах внутри программы–калькулятора.
2. Реализуйте оператор присваивания
=let3. Реализуйте именованные константы, которые действительно не могут изменять свои значения. Подсказка: в класс
Variableset_value()pieconst pi = 3.14;4. Функции
get_value()set_value()is_declared()define_name()var_tableSymbol_tablevar_tablevector<Variable>get()set()is_declared()define()Symbol_table5. Модифицируйте функцию
Token_stream::get()Token(print)'\n'isspace(ch)truech6. Каждая программа должна содержать подсказки для пользователя. Пусть при нажатии клавиши
<Н>7. Измените команды
qhquithelp8. Грамматика в разделе 7.6.4 является неполной (мы уже предостерегали вас от чрезмерного увлечения комментариями); в ней не определена последовательность инструкций, например
4+4;5–6;