![]() |
С.Уэллин, " Как не надо программировать на С++" СПб: Питер, 2004. - 240 с.
Очень легкая в чтении книжка с загадками и анекдотами (это не шутка!) В то время как остальные книги по С++ методично описывают методы и приемы, которые надо использовать, чтобы избежать ошибок, автор приводит примеры неработающих программ. Все программы компилируются, многие - компилируются без ошибок. И все же все 111 приведенных автором программ не работают - либо работают, но не так, как хотел автор. Читателям предлагается угадать почему (наверное, "угадать" - это не самое правильное слово применительно к ошибке в тексте программы, но оно является наиболее подходящим для описания этих действий читателя). Чтобы читатели не сходили с ума в попытках объяснить порой необъяснимое или во всяком случае труднообъяснимое, в конце книги даны ответы ко всем программам. А чтобы читатели не мучались после того как узнают ответ: "Ах, как же я сразу не догадался!" - в конце книги перед ответами даны подсказки. Ко многим подсказкам тоже даны подсказки. Решение задачки превращается в увлекательный поиск ключей к разгадке!
Чтобы не быть голословными, приведем пример - ну например:
Программа 29. "Элементарно, дорогой читатель"
0 /*************************
1 * print_element - вывод
2 * элемента матрицы
3 *************************/
4 #include <iostream>
5
6 // простая матрица
7 int matrix[3][3] = {
8 {11,12,13},
9 {21,22,23},
10 {31,32,33}
11 };
12
13 int main ()
14 {
15 std::cout << "Element [1,2] is " <<
16 matrix[1,2] << std::endl;
17
18 return (0);
19 }
Заинтриговались? Идем за подсказками!
Подсказка 89. Это абсолютно законный, стандартный код С++, хотя некоторым может показаться иначе. (Подсказка 211, ответ 86)
Конечно, самого увлекательного - судорожного перелистывания страниц в поисках очередной подсказки - в статическом тексте передать невозможно:
Подсказка 211. Результат зависит от системы. (Подсказка 123, ответ 86)
Листаем в другую сторону:
Подсказка 123. Программа выводит не целое число, а нечто иное. (Подсказка 149, ответ 86)
И снова листаем...
Подсказка 149. Выведенное значение представляет собой указатель. (Подсказка 347, ответ 86)
Подсказка 347. Компилятор g++ выдает следующее предупреждение:
array2.cpp: In function 'int main()':
array2.cpp: 17: warning: left-hand operand of comma-expression has no effect
(Подсказка 17, ответ 86)
Я догадалась две подсказки назад, а вы?
Подсказка 17. Оператор "," возвращает результат второго выражения. Следовательно, значение выражения 5,9 равно 9. (Подсказка 348, ответ 86)
Подсказка 348. Выражение matrix[2] представляет собой указатель. (Ответ 86)
Ну и наконец...
Ответ 86. Ошибка кроется в конструкции matrix[1,2]. Оператор "," в С++ просто возвращает результат второго операнда. Таким образом, выражение 1,2 означает, что компилятор должен отбросить первую часть (1) и вернуть значение 2. Из этого следует, что значение matrix[1,2] в действительности эквивалентно matrix[2]. Но его значение представляет собой указатель на целочисленный массив, поэтому С++ интерпретирует команду как вывод указателя. Этим и объясняется странный вид результата. На самом деле программисту следовало использовать запись matrix[1][2].
Это был простой пример. А есть и более замороченные задачки! Задачки, которые так или иначе вставали и будут вставать перед программистами ежедневно.
Задачки перемежаются с програмистскими анекдотами и забавными байками о том, кто как когда и где нашел удивительную ошибку и как несколько месяцев над ней бились все светлые головы предприятия, но лишь одному скромному работнику софтверной индустрии удалось ее одолеть. Когда сил решать задачки уже не остается, короткая забавная история в конце страницы весьма стимулирует - "решу еще одну, задачку, прочитаю байку - и все!"
Из недостатков книжки можно выделить разве что программы с листингом на 4 страницы :). Это немного тяжело для такой развлекательной книжки. Впрочем, таких не очень много.
Вывод: очень увлекательное чтиво для любителей попрограммировать. Специфический аналог сканвордов из современных журналов, только более захватывающий и... интеллектуальный что ли. Чувствуешь, что не просто убиваешь время, а работаешь мозгами - и в то же получаешь удовольствие. Жаль только - всего 220 страниц! :)
Комментарии
Вот такие и нужны учебники...
Вот такие и нужны учебники... когда в них не тупое нудилово, а практические советы в игровой форме. Даже ученые доказывали что такая форма позволяет запомнить гораздо больше материала, да и не потерять интерес пока читаешь.
Отправить комментарий