Okładka książki

Przemysław Koprowski

0x80 zadań z C i C++

O książce

"0x80 zadań z C i C++" jest podręcznikiem programowania w językach ISO C '99 oraz ISO C++ '03 w formie zbioru zadań. 0x80 oznacza w tych językach liczbę 128 w zapisie szesnastkowym. Z tylu właśnie problemów programistycznych (zadań) składa się podręcznik. Rozwiązanie każdego zadania jest bardzo obszernie omówione, niejednokrotnie dyskutuje się kilka różnych strategii rozwiązania problemu, porównując na przykład algorytm szybszy, ale o większym zapotrzebowaniu na pamięć komputera, z rozwiązaniem o większej złożoności obliczeniowej, ale mniejszej pamięciowej. Podręcznik powstał na bazie wieloletniego doświadczenia autora w nauczaniu programowania w Instytucie Matematyki Uniwersytu Śląskiego.

Warto zwrócić uwagę na kilka cech odróżniających ten podręcznik od innych dostępnych na rynku. Po pierwsze, książka omawia najbardziej aktualne (w chwili wydania) wersje języków programowania, zgodne ze standardami międzynarodowymi, to jest ISO C '99 oraz ISO C++ '03. Po drugie, podręcznik obejmuje bardzo szeroki zakres materiału — nie ogranicza się jedynie do podstaw omawianych języków, ale zahacza też o bardziej zaawansowane zagadnienia, takie jak: dynamiczne struktury danych, hermetyzacja, zarządzanie pamięcią, liczniki referencji, wykorzystanie wzorców, metaprogramowanie i wiele innych. Zadania w zbiorze występują na czterech różnych poziomach. Oprócz zadań standardowych, pojawiają się zadania łatwiejsze przeznaczone dla początkujących programistów; zadania bardziej zaawansowane w których czytelnik zetknie się m.in. z takimi zagadnieniami jak L-systemy, boidy czy filtry splotowe. Czwartą kategorią są zadania "hackerskie", które eksploatują niestandardowe, mało znane (i często niezalecane, co jest wyraźnie podkreślone w tekście książki) aspekty języków C i C++. Kolejną unikalną cechą tego podręcznika jest to, iż poszczególne zadania są ze sobą powiązane, i tak przykładowo w zadaniu 0x1A omawiana jest implementacja liczb całkowitych 256-bitowych w C, w zadaniu 0x29 problem jest rozszerzony na arytmetykę wielomianową (nadal w C), po to by w zadaniu 0x50 zaimplementować (teraz już w C++) arytmetykę dowolnej precyzji zaś w 0x56 dowolne wyrażenia arytmetyczne. Warto też nadmienić, że zadania nie ograniczają się jedynie do napisania programu lub funkcji. W części zadań należy uzupełnić podany kod nie naruszając istniejącej struktury (czyli zrobić dokładnie to z czym programiści wielokrotnie zetkną się w pracy zawodowej funkcjonując w ramach zespołu). W innych zadaniach należy przeprowadzić analizę programu, bądź też znaleźć i poprawić błędy w gotowym kodzie.

Spis treści

Spis treścii
Przedmowaiii
I ISO C 99 Zadania1
1 Początki3
2 Zmienne, operatory i sterowanie5
3 Tablice i wskaźniki9
4 Struktury, unie, tablice13
5 Dynamiczne struktury danych17
6 Zadania różne21
II ISO C 99 Rozwiązania25
1 Początki27
2 Zmienne, operatory i sterowanie39
3 Tablice i wskaźniki55
4 Struktury, unie, tablice73
5 Dynamiczne struktury danych97
6 Zadania różne123
III ISO C++ 03 Zadania165
1 Klasy i operatory167
2 Konstrukcja i destrukcja173
3 Dziedziczenie i wzorce179
4 Biblioteka standardowa: kontenery183
5 Biblioteka standardowa: algorytmy187
6 Zadania różne193
IV ISO C++ 03 Rozwiązania201
1 Klasy i operatory203
2 Konstrukcja i destrukcja229
3 Dziedziczenie i wzorce271
4 Biblioteka standardowa: kontenery307
5 Biblioteka standardowa: algorytmy337
6 Zadania różne359
Bibliografia393

Errata

Poniżej znajduje się lista błędów dostrzeżonych już po wydrukowaniu książki:
  1. 11—12 oraz 70: w komentarzu do kodu i w rozwiązaniu zamiast pTab, iRozm oraz iKrok powinny być konsekwentnie używane zmienne tab, rozm, krok
  2. 6610 jest "prawy bok", powinno być "lewy bok"
  3. 6712 kest "kody" powinno być "y
  4. 9820 jest "wygłada" powinno być "wygląda"
  5. 10513 jest "przez" powinno być "przed"
  6. 2094 jest (1,1) powinno być (1,2)
  7. 2093 użyte są dwa różne symbole zbioru pustego

0x80 w liczbach

Gdzie kupić?

Książka jest dostępna bezpośrednio w wydawnictwie Exit jak także w wybranych księgarniach interentowych.