Details zum E-Book

Nowoczesny C++.  Zbiór praktycznych zadań dla przyszłych ekspertów

Nowoczesny C++. Zbiór praktycznych zadań dla przyszłych ekspertów

Marius Bancila

E-book

C++ jest dojrzałym językiem programowania, od wielu lat wykorzystywanym przez profesjonalnych programistów do wielu różnych zastosowań, włączając w to pisanie gier, programowanie GUI czy tworzenie złożonych aplikacji użytkowych. Zaprojektowano go pod kątem maksymalizowania wydajności, jest więc najczęściej wybieranym językiem w sytuacjach, w których najważniejsza jest efektywność działania kodu. Aby jednak wykorzystać te zalety C++, trzeba nauczyć się nim posługiwać. A biegłość w posługiwaniu się językiem programowania przychodzi dzięki regularnym ćwiczeniom i ciągłemu testowaniu nabytych umiejętności. Innymi słowy, trzeba rozwiązywać jak najwięcej różnorodnych, rzeczywistych i praktycznych zadań problemowych.

W tej książce zawarto zestaw 100 zadań o różnym poziomie trudności, ułożonych w taki sposób, aby podczas rozwiązywania móc skorzystać z bogactwa standardowej biblioteki C++ oraz z wielu zewnętrznych bibliotek wieloplatformowych. Zadania rozmieszczono w 12 rozdziałach, z których każdy dotyczy określonego tematu. Są to problemy, których odpowiednie rozwiązanie warunkuje poprawne działanie aplikacji, takie jak bezpieczna komunikacja, szyfrowanie i autoryzacja danych, korzystanie z wątków i funkcji asynchronicznych czy implementacja algorytmów współbieżnych. Proponowane zagadnienia zostały dokładnie opisane, uwzględniono również szereg zaleceń, wyjaśnień i wskazówek. Na wypadek gdyby wykonanie któregoś zadania sprawiało trudności, do książki dołączono kod źródłowy przykładowych rozwiązań.

Ważniejsze zagadnienia ujęte w książce:

  • serializacja i deserializacja danych JSON i XML
  • praca z bazą danych SQLite
  • implementacja takich struktur jak bufor cykliczny i kolejka priorytetowa
  • usługi REST i HTTP
  • wzorce projektowe w rozwiązywaniu problemów

Oto C++. Podejmiesz wyzwanie i napiszesz kod!

 

O autorze 9

 

O recenzentach 10

Przedmowa 11

Rozdział 1. Zadania matematyczne 19

  • Zadania 19
    • 1. Suma liczb naturalnych podzielnych przez 3 lub 5 19
    • 2. Największy wspólny dzielnik 19
    • 3. Najmniejsza wspólna wielokrotność 19
    • 4. Największa liczba pierwsza mniejsza od podanej 19
    • 5. Liczby pierwsze szóstkowe 19
    • 6. Liczby obfite 20
    • 7. Liczby zaprzyjaźnione 20
    • 8. Liczby Armstronga 20
    • 9. Czynniki pierwsze liczby 20
    • 10. Kod Graya 20
    • 11. Przekształcanie liczb arabskich na rzymskie 20
    • 12. Najdłuższy ciąg Collatza 20
    • 13. Wyznaczanie liczby Pi 20
    • 14. Sprawdzanie numerów ISBN 20
  • Rozwiązania 21
    • 1. Suma liczb naturalnych podzielnych przez 3 lub 5 21
    • 2. Największy wspólny dzielnik 21
    • 3. Najmniejsza wspólna wielokrotność 22
    • 4. Największa liczba pierwsza mniejsza od podanej 23
    • 5. Liczby pierwsze szóstkowe 24
    • 6. Liczby obfite 24
    • 7. Liczby zaprzyjaźnione 25
    • 8. Liczby Armstronga 26
    • 9. Czynniki pierwsze liczby 27
    • 10. Kod Graya 28
    • 11. Przekształcanie liczb arabskich na rzymskie 29
    • 12. Najdłuższy ciąg Collatza 31
    • 13. Wyznaczanie liczby Pi 32
    • 14. Sprawdzanie numerów ISBN 33

Rozdział 2. Funkcje języka 35

  • Zadania 35
    • 15. Typ danych IPv4 35
    • 16. Wyliczanie zakresu adresów IPv4 35
    • 17. Utworzenie dwuwymiarowej tablicy z podstawowymi operacjami 35
    • 18. Funkcja wyznaczająca minimum dla dowolnej liczby argumentów 36
    • 19. Dodawanie zakresu wartości do kontenera 36
    • 20. Dowolny, wszystkie lub żaden argument w kontenerze 36
    • 21. Klasa opakowująca dla uchwytu systemowego 36
    • 22. Wyświetlanie różnych skal temperatur 36
  • Rozwiązania 37
    • 15. Typ danych IPv4 37
    • 16. Wyliczanie zakresu adresów IPv4 38
    • 17. Utworzenie dwuwymiarowej tablicy z podstawowymi operacjami 40
    • 18. Funkcja wyznaczająca minimum dla dowolnej liczby argumentów 42
    • 19. Dodawanie zakresu wartości do kontenera 43
    • 20. Dowolny, wszystkie lub żaden argument w kontenerze 44
    • 21. Klasa opakowująca dla uchwytu systemowego 45
    • 22. Wyświetlanie różnych skal temperatur 49

Rozdział 3. Łańcuchy i wyrażenia regularne 53

  • Zadania 53
    • 23. Zamiana typu binarnego na łańcuch 53
    • 24. Zamiana typu łańcuchowego na binarny 53
    • 25. Wielkie litery w tytule artykułu 54
    • 26. Łączenie łańcuchów oddzielanych separatorem 54
    • 27. Dzielenie łańcucha na tokeny z listą możliwych separatorów 54
    • 28. Najdłuższy podciąg palindromiczny 54
    • 29. Sprawdzanie tablic rejestracyjnych 54
    • 30. Wyodrębnianie elementów adresu URL 55
    • 31. Przekształcanie dat w łańcuchach 55
  • Rozwiązania 56
    • 23. Zamiana typu binarnego na łańcuch 56
    • 24. Zamiana typu łańcuchowego na binarny 57
    • 25. Wielkie litery w tytule artykułu 58
    • 26. Łączenie łańcuchów oddzielanych separatorem 59
    • 27. Dzielenie łańcucha na tokeny z listą możliwych separatorów 60
    • 28. Najdłuższy podciąg palindromiczny 61
    • 29. Sprawdzanie tablic rejestracyjnych 63
    • 30. Wyodrębnianie elementów adresu URL 64
    • 31. Przekształcanie dat w łańcuchach 65

Rozdział 4. Strumienie i systemy plików 67

  • Zadania 67
    • 32. Trójkąt Pascala 67
    • 33. Lista procesów w postaci tabeli 67
    • 34. Usuwanie pustych wierszy z pliku tekstowego 68
    • 35. Obliczanie rozmiaru katalogu 68
    • 36. Usuwanie plików starszych od określonej daty 68
    • 37. Wyszukiwanie w katalogu plików, które pasują do wyrażenia regularnego 68
    • 38. Tymczasowe pliki logów 68
  • Rozwiązania 69
    • 32. Trójkąt Pascala 69
    • 33. Lista procesów w postaci tabeli 70
    • 34. Usuwanie pustych wierszy z pliku tekstowego 72
    • 35. Obliczanie rozmiaru katalogu 73
    • 36. Usuwanie plików starszych od określonej daty 73
    • 37. Wyszukiwanie w katalogu plików, które pasują do wyrażenia regularnego 75
    • 38. Tymczasowe pliki logów 76

Rozdział 5. Data i czas 79

  • Zadania 79
    • 39. Pomiar czasu wykonania funkcji 79
    • 40. Liczba dni zawartych między dwiema datami 79
    • 41. Dzień tygodnia 79
    • 42. Numer dnia i tygodnia w roku 79
    • 43. Czasy spotkań dla wielu stref czasowych 80
    • 44. Kalendarz miesięczny 80
  • Rozwiązania 81
    • 39. Pomiar czasu wykonania funkcji 81
    • 40. Liczba dni zawartych między dwiema datami 82
    • 41. Dzień tygodnia 83
    • 42. Numer dnia i tygodnia w roku 83
    • 43. Czasy spotkań dla wielu stref czasowych 84
    • 44. Kalendarz miesięczny 86

Rozdział 6. Algorytmy i struktury danych 89

  • Zadania 89
    • 45. Kolejka priorytetowa 89
    • 46. Bufor cykliczny 90
    • 47. Podwójne buforowanie 90
    • 48. Najczęściej występujący element w zbiorze danych 90
    • 49. Histogram tekstu 90
    • 50. Filtrowanie listy numerów telefonów 91
    • 51. Przekształcanie listy numerów telefonów 91
    • 52. Generowanie wszystkich permutacji ciągu znaków 91
    • 53. Średnia ocena filmów 91
    • 54. Algorytm tworzenia par 91
    • 55. Algorytm scalania 92
    • 56. Algorytm wyboru 92
    • 57. Algorytm sortowania 92
    • 58. Najkrótsza ścieżka między węzłami 92
    • 59. Program Weasel 93
    • 60. Gra w życie 93
  • Rozwiązania 95
    • 45. Kolejka priorytetowa 95
    • 46. Bufor cykliczny 97
    • 47. Podwójne buforowanie 100
    • 48. Najczęściej występujący element w zbiorze danych 102
    • 49. Histogram tekstu 103
    • 50. Filtrowanie listy numerów telefonów 105
    • 51. Przekształcanie listy numerów telefonów 106
    • 52. Generowanie wszystkich permutacji ciągu znaków 107
    • 53. Średnia ocena filmów 109
    • 54. Algorytm tworzenia par 110
    • 55. Algorytm scalania 111
    • 56. Algorytm wyboru 112
    • 57. Algorytm sortowania 113
    • 58. Najkrótsza ścieżka między węzłami 116
    • 59. Program Weasel 120
    • 60. Gra w życie 122

Rozdział 7. Współbieżność 127

  • Zadania 127
    • 61. Algorytm przekształcania współbieżnego 127
    • 62. Algorytmy wyszukiwania współbieżnego minimalnych i maksymalnych elementów w zbiorze przy użyciu wątków 127
    • 63. Algorytmy wyszukiwania współbieżnego minimalnych i maksymalnych elementów w zbiorze przy użyciu funkcji asynchronicznych 128
    • 64. Algorytm sortowania współbieżnego 128
    • 65. Wyświetlanie komunikatów w konsoli w sposób bezpieczny dla wątków 128
    • 66. System obsługi klienta 128
  • Rozwiązania 129
    • 61. Algorytm przekształcania współbieżnego 129
    • 62. Algorytmy wyszukiwania współbieżnego minimalnych i maksymalnych elementów w zbiorze przy użyciu wątków 130
    • 63. Algorytmy wyszukiwania współbieżnego minimalnych i maksymalnych elementów w zbiorze przy użyciu funkcji asynchronicznych 132
    • 64. Algorytm sortowania współbieżnego 134
    • 65. Wyświetlanie komunikatów w konsoli w sposób bezpieczny dla wątków 136
    • 66. System obsługi klienta 137

Rozdział 8. Wzorce projektowe 141

  • Zadania 141
    • 67. Sprawdzanie poprawności haseł 141
    • 68. Generowanie losowych haseł 141
    • 69. Generowanie numerów ubezpieczenia socjalnego 141
    • 70. System zatwierdzania 142
    • 71. Obserwowany kontener typu wektorowego 142
    • 72. Obliczanie ceny zamówienia z rabatami 143
  • Rozwiązania 144
    • 67. Sprawdzanie poprawności haseł 144
    • 68. Generowanie losowych haseł 147
    • 69. Generowanie numerów ubezpieczenia socjalnego 151
    • 70. System zatwierdzania 155
    • 71. Obserwowany kontener typu wektorowego 158
    • 72. Obliczanie ceny zamówienia z rabatami 163

Rozdział 9. Serializacja danych 169

  • Zadania 169
    • 73. Serializacja danych do pliku XML i deserializacja ich z niego 169
    • 74. Pobieranie danych z pliku XML przy użyciu języka XPath 170
    • 75. Serializacja danych do formatu JSON 170
    • 76. Deserializacja danych z formatu JSON 170
    • 77. Tworzenie pliku PDF z listą filmów 171
    • 78. Tworzenie pliku PDF na podstawie zbioru obrazów 171
  • Rozwiązania 172
    • 73. Serializacja danych do pliku XML i deserializacja ich z niego 172
    • 74. Pobieranie danych z pliku XML przy użyciu języka XPath 175
    • 75. Serializacja danych do formatu JSON 177
    • 76. Deserializacja danych z formatu JSON 178
    • 77. Tworzenie pliku PDF z listą filmów 180
    • 78. Tworzenie pliku PDF na podstawie zbioru obrazów 183

Rozdział 10. Archiwa, obrazy i bazy danych 187

  • Zadania 187
    • 79. Wyszukiwanie plików w archiwum ZIP 187
    • 80. Pakowanie plików do archiwum ZIP i wypakowywanie ich z tego archiwum 187
    • 81. Pakowanie plików do archiwum ZIP i wypakowywanie ich z tego archiwum z zastosowaniem hasła 188
    • 82. Tworzenie pliku PNG z flagą narodową 188
    • 83. Tworzenie obrazu PNG zawierającego tekst weryfikacyjny 188
    • 84. Generator kodów kreskowych EAN-13 189
    • 85. Odczytywanie informacji o filmach z bazy SQLite 189
    • 86. Wstawianie w sposób transakcyjny informacji o filmach do bazy danych SQLite 189
    • 87. Obsługa multimediów w bazie danych SQLite 190
  • Rozwiązania 191
    • 79. Wyszukiwanie plików w archiwum ZIP 191
    • 80. Pakowanie plików do archiwum ZIP i wypakowywanie ich z tego archiwum 192
    • 81. Pakowanie plików do archiwum ZIP i wypakowywanie ich z tego archiwum z zastosowaniem hasła 196
    • 82. Tworzenie pliku PNG z flagą narodową 198
    • 83. Tworzenie obrazu PNG zawierającego tekst weryfikacyjny 199
    • 84. Generator kodów kreskowych EAN-13 202
    • 85. Odczytywanie informacji o filmach z bazy SQLite 207
    • 86. Wstawianie w sposób transakcyjny informacji o filmach do bazy danych SQLite 212
    • 87. Obsługa multimediów w bazie danych SQLite 216

Rozdział 11. Kryptografia 225

  • Zadania 225
    • 88. Szyfr Cezara 225
    • 89. Szyfr Vigenere'a 225
    • 90. Kodowanie i dekodowanie base64 225
    • 91. Sprawdzanie poprawności uwierzytelniania użytkowników 226
    • 92. Wyznaczanie skrótów dla plików 226
    • 93. Szyfrowanie i deszyfrowanie plików 226
    • 94. Podpisywanie plików 226
  • Rozwiązania 227
    • 88. Szyfr Cezara 227
    • 89. Szyfr Vigenere'a 228
    • 90. Kodowanie i dekodowanie base64 231
    • 91. Sprawdzanie poprawności uwierzytelniania użytkowników 236
    • 92. Wyznaczanie skrótów dla plików 239
    • 93. Szyfrowanie i deszyfrowanie plików 240
    • 94. Podpisywanie plików 242

Rozdział 12. Praca w sieci i usługi 247

  • Zadania 247
    • 95. Znajdowanie adresu IP dla hosta 247
    • 96. Gra Fizz-Buzz klient-serwer 247
    • 97. Kursy wymiany bitcoinów 248
    • 98. Pobieranie wiadomości e-mailowych przy użyciu protokołu IMAP 248
    • 99. Tłumaczenie tekstu na dowolny język 248
    • 100. Wykrywanie twarzy na obrazie 248
  • Rozwiązania 249
    • 95. Znajdowanie adresu IP dla hosta 249
    • 96. Gra Fizz-Buzz klient-serwer 250
    • 97. Kursy wymiany bitcoinów 255
    • 98. Pobieranie wiadomości e-mailowych przy użyciu protokołu IMAP 258
    • 99. Tłumaczenie tekstu na dowolny język 263
    • 100. Wykrywanie twarzy na obrazie 267

Bibliografia 277

Skorowidz 281

  • Titel: Nowoczesny C++. Zbiór praktycznych zadań dla przyszłych ekspertów
  • Autor: Marius Bancila
  • Originaler Titel: The Modern C++ Challenge: Become an expert programmer by solving real-world problems
  • Übersetzung: Jacek Janusz
  • ISBN: 978-83-283-5212-4, 9788328352124
  • Veröffentlichungsdatum: 2019-04-16
  • Format: E-book
  • Artikelkennung: nowcpp
  • Verleger: Helion