Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Новые сложные задачи на C++, Автор: Герб Саттер


Автор: cardinal 10.7.2006, 18:06
user posted image

Рецензия на главы из книги „Новые сложные задачи на C++“
Автор: Герб Саттер.
ISBN 5-8459-0823-X
http://www.williamspublishing.com/Books/5-8459-0823-X.html


Вот главы предоставленные издательством:
http://forum.vingrad.ru/books/slojnue_zadachi_cpp/Chap05.doc
http://forum.vingrad.ru/books/slojnue_zadachi_cpp/Chap07.doc  

В главе «Оптимизация и эффективность» автор рассматривает три вопроса: об использовании ключевого слова const, ключевого слова inline и об эффективности использования памяти для хранения данных программы.

Довольно убедительно показано, что использование ключевого слова const практически никак не влияет на способность компилятора повысить быстродействие кода программы, в то время как многие программисты считают иначе.

Чтение раздела, посвященного вопросам встраивания кода (inlining), позволило мне шире взглянуть на устройство современных компиляторов. Так в главе показано, что не только сам компилятор генерирует исполняемый код, но впоследствии и редактор связей (linker) может вносить в него свои коррективы. На своем опыте неоднократно убеждался в том, что, например, Borland C++ 5.5 при компиляции выдает ассемблерный код, которого вы потом не находите в результирующем загрузочном модуле. Жаль только, что часто вы об этом и не подразумеваете. А это может приводить к трудноуловимым проблемам, особенно в embedded приложениях.

Ну, и, наконец, вопрос об эффективности упаковки данных – это отличная иллюстрация того, как полезно перед собственно написанием программы продумать ее структуру.

Глава «Изучение конкретных примеров» вызвала у меня противоречивые чувства. С одной стороны действительно полезно разобрать и оценить положительные и отрицательные стороны программ, написанных другими людьми, попробовать найти пути их улучшения. С другой стороны, представляется не слишком серьезным, поиск описок и пропуск букв в названиях включаемых файлов. Автор неоднократно рекомендует интенсивнее использовать элементы стандартных библиотек для повышения удобочитаемости программного кода. Но ведь многие программисты из своего опыта знают, что часто элементы стандартных библиотек у разных компиляторов могут быть реализованы не слишком эффективно и собственная оптимизация пары функций может дать существенный выигрыш в скорости работы всей программы.

Тем не менее, я с интересом прочитал эти две главы книги, любезно предоставленные издательством «Диалектика-Вильямс» и надеюсь, что и в остальных главах читатели найдут много полезных сведений для своей практической работы.
       

Автор: Daevaorn 10.7.2006, 18:50
Эта книга как первая чать, да что там, вся серия выше всяких похвал.
Что касается непосредственно "Новых сложных задач", то мне она показалась менее содержательной чем первая. Нет, это не минус, просто в первой было больше вещей охвачено, больше областей затронуто. А так, Саттер отличный программист, и как не странно, очень хороший автор книг. Рекомендую всем, столько тонкостей и нюансов языка вы не узнаете больше нигде!smile 

Автор: SergeCpp 13.7.2006, 15:05
http://ders.stml.net/cpp/xcppcomm/xcppcomm.html#intro

http://ders.stml.net/cpp/

Автор: schmidt 10.8.2006, 13:26
А где можна найти его первую книгу, тоесть не ту которая Новый сложные задачи на С++ ?  Поделистесь плз ссылочкой

Автор: Sunr1se 10.8.2006, 13:32
http://anatolix.naumen.ru/Books/ExceptionalCPP?v=11d
А вот она же, но на русском: http://prolaz-team.info/files/books/Gerb%20Satter%20-%20reshenie%20sl%20zadach%20na%20C++.rar

Автор: WERITAS 17.9.2006, 00:43
Эээ...а где пароль в RAR-архиву?

Автор: itan 21.9.2006, 11:02
Вот, нашел e-версию:
http://www.bookshelf.ru/modules.php?name=Files&d_op=get_file_details&files_id=370

Автор: patience 21.10.2006, 00:51
можно пароль на архив?
зарание спасибо.

Автор: cardinal 21.10.2006, 03:12
Цитата(patience @  20.10.2006,  23:51 Найти цитируемый пост)
можно пароль на архив?

Какой архив? Почитать можно только две представленные главы...

Автор: likehood 23.10.2006, 22:32
Цитата(patience @  21.10.2006,  01:51 Найти цитируемый пост)
можно пароль на архив?
зарание спасибо.

Пароль: www.bookshelf.ru

Автор: Любитель 4.11.2006, 14:32
Цитата(Sunr1se @  10.8.2006,  13:32 Найти цитируемый пост)
 http://prolaz-team.info/files/books/Gerb%2...%20na%20C++.rar

Это ссылка на "Решение сложных задач на C++". Это другая (более старая) книга.

А та что на bookshelf выдаёт HTTP 403 (нет прав). То же видим даже на просто www.bookshelf.ru.
Если у кого-то есть электронная русская версия - просьба выложить.

Автор: Любитель 15.12.2006, 15:12
Вспомнил сейчас про эту тему. У меня есть эта книга в электронном виде (на русском). Если кому интересно, могу выложить, вот только не знаю куда (здесь она вряд ли пройдёт ограничение по размеру).

Автор: zabivator 16.12.2006, 15:53
Осилил вчера таки эту книжку до конца =) Must read.

Автор: paSha_X 19.12.2006, 19:06
Цитата(patience @  21.10.2006,  00:51 Найти цитируемый пост)
можно пароль на архив?
зарание спасибо. 

На сайте www.prolaz-team.info  есть сообщение по этому поводу: "Все пароли на книги хранятся на сайте, не доставайте админов...............", под ним есть комментарии там написан пароль...
ЗС на всякий случай сдесь его не писал 

Автор: PoloS 12.1.2007, 14:24
в предисловии к книге встретил вот что:

одинаково ли действие "f(a++);" и "f(a); ++a;". Ответ нет. не могу понять почему?  smile 

Автор: zkv 12.1.2007, 17:05
PoloS, попробуй откомпилировать следующий код:
Код

void f( int &a ) {}

int main( int argc, char**argv )
{
    int a = 1;
    f( a );
    f( a++ );
}

Автор: RatHat 12.1.2007, 17:12
Код

void f( int &a ) {}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int a = 1;
    f(a);
    f(a++);
    ShowMessage(a);
}


компилил в билдере)

а = 2
))))

Автор: zkv 12.1.2007, 17:39
Цитата(RatHat @  12.1.2007,  17:12 Найти цитируемый пост)
компилил в билдере)

ну так он предупреждение выдает, тогда скажем так:
Код

void f( int &a ) 
{
  a = 10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int a = 1;
  f(a);
  a++;
  ShowMessage(a);

  a = 1;
  f(a++);
  ShowMessage(a);
}

Автор: Xenon 12.1.2007, 17:46
Фишка,я так понимаю, в void f( int &a ) При void f( int a ) вроде как, точно пофиг

Автор: zkv 12.1.2007, 17:55
Цитата(Xenon @  12.1.2007,  17:46 Найти цитируемый пост)
Фишка,я так понимаю, в void f( int &a ) При void f( int a ) вроде как, точно пофиг 

smile да, дело в том, что, по идее, постфиксный ++ создает копию объекта которую и отдает по значению, а сам объект инкрементирует. Билдер, как я понял из ворнинга, из переданного ++'ом значения делает нечто вроде временной переменной, которую и отдает по ссылке в функцию f().

Автор: Vsts 12.1.2007, 19:59
Цитата

void f( int &a ) {printf("f(&)\n");}
void f( int a )   {printf("f(  )\n");}
void main( )
{
    int a = 1;
    f( a++ );  //:)
}

это нармальными компиляторами не собираеться...вот так лучше
Код

void f( int &a ) { printf("f(&)");}
void f( int  a )  { printf("f( )");}
void main()
{
    int a = 1;
    f(a++);
}

Автор: PoloS 12.1.2007, 20:16
Спасибо, разобрался =)

Автор: Daevaorn 12.1.2007, 21:13
Цитата(PoloS @  12.1.2007,  15:24 Найти цитируемый пост)
одинаково ли действие "f(a++);" и "f(a); ++a;". Ответ нет. не могу понять почему?

это ещё цветочкиsmileего почитаешь, ещё и не такое увидешьsmile

Автор: Любитель 14.1.2007, 13:43
Зато иногда приятно ощущать себя идиотом  smile 

Автор: cardinal 5.4.2007, 21:20
scai, наш форум сотрудничает с издательством, поэтому ссылки на халяву не приветствуются.

Автор: andrew_121 15.6.2008, 15:37
Вот представляю еще одну задачку. Где-то в инете нарыл:

Есть две деревни: деревня магов и деревня гномов. Раз в год маги проходят по деревне гномов и выстраивают их по росту в возрастающем порядке, так что каждый гном может видеть только тех, кто ниже его самого. 

У магов неограниченное количество чёрных и белых шляп. Они одевают белую или черную шляпу на голову каждого гнома.

Затем, начиная с самого высокого гнома (в конце шеренги), они спрашивают его, какого цвета шляпа не нём надета. Если гном ошибается, маги убивают его (другие гномы слышат его ответ, но не могут определить, был ли он убит или нет).

Какой стратегии должны придерживаться гномы, чтобы минимизировать количество убиенных гномов?

Каково максимальное количество гномов, которые будут убиты при использовании оптимальной стратегии?

Мне сюжет понравился. Как в сказке какой-то...интересно та как )
Интересно у кого какой ответ )

Автор: Lazin 15.6.2008, 16:49
andrew_121, а причем тут С++ и Саттер с его книгами smile 

Автор: andrew_121 15.6.2008, 18:33
Lazin - У него в книге этой задачи НЕТ. Ну вот, дополнил )))

Автор: fish9370 15.6.2008, 19:29
Цитата(andrew_121 @  15.6.2008,  15:37 Найти цитируемый пост)
Есть две деревни: деревня магов и деревня гномов. Раз в год маги проходят по деревне гномов и выстраивают их по росту в возрастающем порядке, так что каждый гном может видеть только тех, кто ниже его самого. 

У магов неограниченное количество чёрных и белых шляп. Они одевают белую или черную шляпу на голову каждого гнома.

Затем, начиная с самого высокого гнома (в конце шеренги), они спрашивают его, какого цвета шляпа не нём надета. Если гном ошибается, маги убивают его (другие гномы слышат его ответ, но не могут определить, был ли он убит или нет).

Какой стратегии должны придерживаться гномы, чтобы минимизировать количество убиенных гномов?

Каково максимальное количество гномов, которые будут убиты при использовании оптимальной стратегии?


если придерживаться стандартной логики, рядом стоящий гном уж точно знал какая у того шляпа, и прекрасно видел замочили его другана или нет.. он шепчет на ухо рдом стоящему о цвете его шляпы, а тот ему.. так делает вся коллона.. при учете, что ни один гном не делжал зла на рядом стоящего и дал ему правильную информацию (либо он перепроверил ее у гнома с другой стороны) может пострадать только один гном (которого первого спросили, которому не успели шепнуть).. уж больно, что-то просто.. тут должен быть какой-то подвох..  smile  

Автор: bronislav 15.6.2008, 21:11
Вообще-то задача решается с помощью четности.

При правильной стратегии максимум умрет 1 гном.

Добавлено через 1 минуту и 57 секунд
Цитата(fish9370 @  15.6.2008,  18:29 Найти цитируемый пост)
он шепчет на ухо рдом стоящему о цвете его шляпы,

гномы не согут переговариваться между собой

Добавлено через 3 минуты и 54 секунды
Стратегия такая:
Гном считает количество черных шляп, и если их количество четное, то он говорит черная, если нет то белая

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

Автор: rrrFer 26.6.2008, 10:26
удалено(не заметил)

Автор: triclosan 27.8.2008, 13:46
+5коп.

книга легко читается - проскакивает хороший юмор, несмотря на то, что в ней поднимаются серьезные и тонкие вопросы. Видимо это в первую очередь заслуга литредактора. Оригинал не смотрел, любопытно как там. 

Автор: disputant 4.12.2011, 11:20
Цитата(triclosan @ 27.8.2008,  13:46)
+5коп.

книга легко читается - проскакивает хороший юмор, несмотря на то, что в ней поднимаются серьезные и тонкие вопросы. Видимо это в первую очередь заслуга литредактора. Оригинал не смотрел, любопытно как там.

Литредакторы смысл не правят - только исправляют стилистику - ну, например, слишком частые повторения слов и т.п. Но добавить какой-то юмор литредакторы не могут.

Так что юмор - это заслуга автора и переводчика...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)