Sprawy organizacyjne
Zakładamy znajomość programowania strukturalnego i podstawowych algorytmów (np. ukończony przedmiot PIPR),
znajomość programowania obiektowego (np. ukończony przedmiot PROBI),
znajomość podstawowych elementów C++ (np. ukończony przedmiot PROBI),
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ół ZPR25Z na MS Teams PW
Zaliczenie Przedmiot jest zaliczany na podstawie wyników sprawdzianów, przeprowadzanych podczas wykładów
(punktacja 0 - 20pkt.) i wyników projektu (punktacja 0 - 20 pkt.).
Nie jest wymagana obecność na wykładzie i nie będzie ona sprawdzana.
Ocena końcowa jest określana na podstawie łącznej liczby punktów zgodnie z poniższą tabelą.
liczba punktów | ocena |
37 - 40 pkt | pięć |
33 - 36 pkt | cztery i pół |
29 - 32 pkt | cztery |
25 - 28 pkt | trzy i pół |
21 - 24 pkt | trzy |
0 - 20 pkt | dwa |
Bieżące oceny cząstkowe są uzupełniane na serwerze USOS
Sprawdziany
Sprawdziany odbędą w terminach podanych niżej. Każdy sprawdzian jest oceniany w skali 0-10 pkt. Oceny poszczególnych zadań będą w USOS.
Projekt: terminy, lista tematów i zasady oceniania
Wykłady
Wykłady będą odbywały się w sali 133 we wtorki 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
- (25 II, Robert Nowak) Sprawy organizacyjne, wprowadzenie;
prezentacja (pdf),
kod (zip).
- (4 III, Robert Nowak) Obiekty, polimorfizm, funkcje wirtualne. Zarządzanie pamięcią;
prezentacja (pdf),
kod (zip).
- (11 III, Robert Nowak) Obsługa błędów, wyjątki, RAII, sprytne wskaźniki;
prezentacja (pdf),
kod (zip).
- (18 III, Łukasz Neumann) Rust, wprowadzenie, model pamięci
- (25 III, Łukasz Neumann) Rust, programowanie współbieżne,
- (1 IV, Robert 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 .
- (8 IV)
- (Robert Nowak) Kolokwium 1,
- Konrad Grochowski) Optymalizacja kodu cz. 1.
- (15 IV, Witold Wysota) stałość, C++ jako język zorientowany na wartości, std::optional i std::variant;
- (29 IV, Robert Nowak) Szablony cz. 1, trejty, biblioteka standardowa cz. 1,
- (6 V, Witold Wysota) Szablony cz. 2, programowanie generyczne, biblioteka standardowa, funkcje anonimowe;
- (13 V, Robert Nowak) Aplikacje wielowątkowe w C++, synchronizacja, operacje atomowe, std::future, std::promise i inne.
- (20 V, Łukasz Neumann) Rust, zarządzanie projektem i łączenie z innymi językami,
- (27 V, Robert Nowak) C++14, C++17, C++20, C++23. Biblioteki Boost. Przetwarzanie tekstu.
- (3 VI)
- (Konrad Grochowski) Optymalizacja kodu cz. 2,
- (Robert Nowak)
LLM w wytwarzaniu oprogramowania.
Prototypowanie, programowanie interaktywne w emacs org-mode.
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
g++ plik.cpp --std=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
g++ plik.cpp --std=c++20 lub g++-12 plik.cpp --std=c++20 .
- (10 VI, Robert Nowak) Kolokwium 2:
Literatura:
- E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Wzorce projektowe, WNT, 2005.
- 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, Programowanie. Teoria i praktyka z wykorzystaniem C++, Helion, 2010.
- R. Nowak, A. Pająk, Język C++: mechanizmy, wzorce, biblioteki, BTC, 2010.
- A. Hunt, D. Thomas, Pragmatyczny programista, Helion, 2011.
- Software Engineering Body of Knowledge (SWEBOK) v3, IEEE Computer Society, 2014
|
Konsultacje i kontakt z prowadzącymi
Patrz Baza Wiedzy Politechniki Warszawskiej
Przydatne materiały
- slajdy wykładowe z semestru 2024Z (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)
- structured buildings (C++17)
- coroutine (C++20)
- koncepty (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::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)
Przykłady prostych aplikacji w Pythonie z modułami w Rust:
Opisy elementów biblioteki Boost:
Oprogramowanie
Kompilatory:
Biblioteki:
Inne narzędzia:
|