Sprawy organizacyjne
Regulamin przedmiotu jest umieszczony w systemie USOS.
Dokumenty na tej stronie mają charakter wyjaśniający, rozszerzający i pomocniczy; w razie niespójności rozstrzyga regulamin przedmiotu.
Bieżące oceny cząstkowe są uzupełniane na serwerze USOS
Zakładamy znajomość programowania strukturalnego i podstawowych algorytmów (np. ukończony przedmiot PIPR),
znajomość programowania obiektowego (np. ukończony przedmiot PROI),
znajomość podstawowych elementów C++ (np. ukończony przedmiot PROI),
znajomość wzorców projektowych (np. ukończony przedmiot SWO),
znajomość podstawowych potoków wytwarzania oprogramowania (np. ukończony przedmiot SWO),
umiejętność czytania diagramu klas UML (np. ukończony przedmiot SWO)
Zespół ZPR-26Z na MS Teams PW
Projekt: terminy, lista tematów i zasady oceniania
Wykłady
Wykłady będą odbywały się w sali 202 w poniedziałki w godzinach 18.15 - 20.00.
Tematy poszczególnych wykładów oraz materiały pomocnicze (slajdy i inne) będą umieszczane poniżej.
Przykładowe fragmenty kodu są umieszczane w archiwum zip.
kompilacja przykładów w trybie C++11 lub nowszym, przykładowe polecenie: g++ nazwa.cpp
- (5 X, Nowak) Sprawy organizacyjne, wprowadzenie;
prezentacja (pdf),
kod (zip).
- (12 X, Neumann) Rust, wprowadzenie, model pamięci
- (19 X, Nowak) Obiekty, polimorfizm, funkcje wirtualne. Zarządzanie pamięcią;
- (26 X, Nowak) Obsługa błędów, wyjątki, RAII, sprytne wskaźniki;
- (2 XI, Neumann) Rust, programowanie współbieżne,
- (9 XI, Nowak) Wtyczki. Łączenie C++ z C, Python, Rust. Powtórzenie;
Przykładowe zadania
- programowanie obiektowe, wyjątki. Kompilacja w trybie C++11 bez Boost.Regex, np.
g++ kol1zestS.cpp --std=c++11
zestaw S, rozwiązania S,
zestaw T, rozwiązania T,
zestaw U, rozwiązania U,
zestaw V, rozwiązania V,
zestaw W, rozwiązania W,
zestaw X, rozwiązania X,
zestaw Y, rozwiązania Y,
zestaw Z, rozwiązania Z
zestaw A, rozwiązania A,
zestaw B, rozwiązania B,
zestaw C, rozwiązania C.
- programowanie obiektowe, wyjątki. Kompilacja w trybie C++17, np.
g++ kol1zestD.cpp --std=c++17 -pthread
zestaw D, rozwiązania D,
zestaw E, rozwiązania E.
- RUST:
rust1,
rust2,
zadanie z Borrow checker'a (znane z Rust'a),
kompilacja w trybie C++17
g++ plik.cpp --std=c++17
- zestaw F,
rozwiązania, kompilacja w trybie C++17
g++ plik.cpp --std=c++17:
smartptr,
exceptions,
nvi,
const,
STL
- zestaw G,
rozwiązania, kompilacja w trybie C++17
g++ plik.cpp --std=c++17:
rust3,
smartptr,
exceptions,
nvi.
- zestaw H, zestaw H (wersja 2),
rozwiązania (lub kod): STL i szablony,
unique_ptr,
smart_ptr,
kompilacja w trybie C++20
g++ plik.cpp --std=c++20.
- zestaw I,
rozwiązania (lub kod): smart_ptr,
NVI,
kompilacja w trybie C++20
g++ plik.cpp --std=c++20.
-
zestaw J,
rozwiązania (lub kod): smart_ptr,
NVI,
ogólne (mediana),
kompilacja w trybie C++20
g++ plik.cpp --std=c++20.
-
zestaw K,
rozwiązania (lub kod): smart_ptr,
wyjątki
RUST,
kompilacja w trybie C++20
g++ plik.cpp --std=c++20.
-
zestaw L,
rozwiązania (lub kod): NVI,
smart_ptr
kompilacja w trybie C++20
g++ plik.cpp --std=c++20.
-
zestaw M,
rozwiązania (lub kod): NVI,
smart_ptr, konstr. przenoszący;
kompilacja w trybie C++20
g++ plik.cpp --std=c++20.
-
zestaw N,
rozwiązania (lub kod): NVI,
smart_ptr, rvalue ;
kompilacja w trybie C++20
g++ plik.cpp --std=c++20.
- (16 XI, Robert Nowak) Kolokwium 1,
- (23 XI, Witold Wysota) stałość, C++ jako język zorientowany na wartości, std::optional i std::variant;
- (30 XI, Witold Wysota) Szablony cz. 1, programowanie generyczne, biblioteka standardowa, funkcje anonimowe;
- (7 XII, Robert Nowak) Szablony cz. 2, trejty, biblioteka standardowa,
- (14 XII, Robert Nowak) Aplikacje wielowątkowe w C++, synchronizacja, operacje atomowe, std::future, std::promise i inne.
- (21 XII, Łukasz Neumann) Rust, zarządzanie projektem i łączenie z innymi językami,
- (11 I, Robert Nowak) Boost. Przetwarzanie tekstu. Powtórzenie
Przykładowe zadania:
- Szablony, wątki. Kompilacja w trybie C++11 z biblioteką Boost.Thread, np. np.
g++ kol2zestP.cpp --std=c++11 -lboost_thread -lboost_system -pthread
zestaw S, rozwiązania S,
zestaw T, rozwiązania T,
zestaw U, rozwiązania U,
zestaw V, rozwiązania V,
zestaw W, rozwiązania W,
zestaw X, rozwiązania X,
zestaw Y, rozwiązania Y,
zestaw Z, rozwiązania Z,
zestaw A, rozwiązania A.
- Szablony, wątki. Kompilacja w trybie C++11 w wersji współbieżnej, np.
g++ kol2zestB.cpp --std=c++11 -pthread
zestaw B, rozwiązania B,
zestaw C, rozwiązania C.
- szablony, wątki. Kompilacja w trybie C++17 w wersji współbieżnej, np.
g++ kol2zestD.cpp --std=c++17 -pthread
zestaw D, rozwiązania D,
zestaw E, rozwiązania E.
- zestaw F,
rozwiązania: concurr,
async,
- zestaw G,
rozwiązania:
STL-1, STL-2, STL-3,
blokada, trejty,
kompilacja w trybie C++20
g++ plik.cpp --std=c++20.
- zestaw H,
rozwiązania (lub kod): wydruk, std::function,
shared_mudex,
wydruk, std::any,
wątki, kompilacja w trybie C++20
g++ plik.cpp --std=c++20.
-
zestaw I,
rozwiązania (lub kod): STL-1,
STL-2,
wydruk, std::function,
wątki, wyścig, kompilacja w trybie C++20.
-
zestaw J,
rozwiązania (lub kod): variant,
współbieżność, operacje atomowe,
wariant, wydruk,
kompilacja w trybie C++20
g++ plik.cpp --std=c++20 lub g++-12 plik.cpp --std=c++20.
-
zestaw K,
rozwiązania (lub kod): variant,
współbieżność, skalowalność,
STL-1,
STL-2,
kompilacja w trybie C++20.
-
zestaw L,
rozwiązania (lub kod): współbieżność - wyścigi,
mediana.
-
zestaw M,
rozwiązania (lub kod): zakleszczenie,
stl.
-
zestaw N,
rozwiązania (lub kod): trejty,
współbieżność, skalowalność.
- (18 I, Kolokwium 2)
- (25 I, Nowak) LLM w wytwarzaniu oprogramowania; C++14, C++17, C++20, C++23,
Literatura:
- E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Wzorce projektowe, Helion, 2021.
- A. Alexandrescu, Nowoczesne projektowanie w C++, WNT, 2005.
- A. Alexandrescu and H. Sutter,
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk, Helion, 2005.
- S. Meyers, 50 efektywnych sposobów na udoskonalenie Twoich programów, Helion, 2003.
- B. Stroustrup, Podróż po języku C++ dla zaawansowanych, Helion, 2023.
- R. Nowak, A. Pająk, Język C++: mechanizmy, wzorce, biblioteki, BTC, 2010.
- A. Hunt, D. Thomas, Pragmatyczny programista, wydanie 2, Helion, 2024.
- Software Engineering Body of Knowledge (SWEBOK) v4, IEEE Computer Society, 2024.
|
Konsultacje i kontakt z prowadzącymi
Patrz Baza Wiedzy Politechniki Warszawskiej
Przydatne materiały
- slajdy wykładowe z semestru 2026L (7MB)
C++, dokumentacja on-line:
Czasopisma:
Dodatkowe przykłady utworzone przez Studentów ZPR
Opisy elementów biblioteki standardowej C++:
- [[likely]],[[unlikely]](C++20)
- atrybuty, np. [[maybe_unused]] (C++26), opis(pdf)
- dedukcja argumentów szablonu dla klas, ctad (C++17)
- std::scoped_lock (C++17)
- std::chrono (C++20)
- std::expected (C++23)
- std::bit (C++20)
- fold expressions (C++17), opis(pdf)
- coroutines (C++20)
- coroutines2 (C++20)
- structured buildings (C++17)
- coroutine (C++20)
- koncepty (C++20)
- koncepty2 (C++20)
- zakresy (ranges, C++20),
zip,
opis (pdf)
- moduły (C++20)
- std::generator (C++23)
- three way comparison (C++20)
- std::jthread (C++20)
- std::async (C++20)
- std::views (C++20)
- std::format (C++20)
- std::source_location (C++20)
- std::source_location (C++20), tutaj wykorzystuje httplib
- std::source_location (C++20), inny przyklad
- std::counting_semaphore (C++20)
- std::to_underlying (C++23)
- constexpr i consteval (C++11 .. C++23)
- std::filesystem (C++17)
- CRTP, explicit this (C++23)
- std::formatter (C++20)
- bufor cykliczny, wykorzystuje std::atomic (C++11)
- widoki, std::ranges::views::zip (C++23)
- std::barrier (C++20)
- std::mdspan (C++23), dokumentacja
- std::mdspan (C++23), wersja 2
- std::stacktrace (C++23)
- std::stacktrace (C++23) wersja 2
- [[no_unique_address]] (C++20)
Przykłady prostych aplikacji w Pythonie z modułami w Rust:
Opisy elementów biblioteki Boost:
Oprogramowanie
|