Paweł Rzechonek

Zainteresowania zawodowe: programowanie (C++, Java, C#, F#), technologie webowe, szeroko rozumiana algorytmika, metematyka klasyczna.

C++
język programowania

data ostatniej modyfikacji dokumentu

Data ostatniej modyfikacji tego dokumentu (cpp.phtml) to wtorek 4 czerwca 2024 roku (o godzinie 17:46).

ogłoszenia
27 maja 2024 r.
ostatnie zadania:
Wystawiłem już komplet zadań do zrealizowania w tym semestrze - w sumie jest ich 12 (maksymalnie 120 punktów do zebrania za ich realizację).
Za dodatkowe zadanie (kalkulator ONP) można otrzymać dodatkowe punkty (co może wpłynąć na ocenę zaliczeniową). Zadanie dodatkowe należy oddać przed końcem semestru.

18 marca 2024 r.
wykład w trakcie godzin rektorskich:
Dzisiejszy wykład nie odbył się z powodu godzin rektorskich. Niemniej jednak załączam notatki do tego wykładu i wystawiam kolejne zadanie dotyczące kopiowania i przenoszenia. Wrócę do tematu kopiowania i przenoszenia obiektów w C++ w przyszłym tygodniu.

4 marca 2024 r.
odwołany wykład:
Dzisiejszy wykład został odwołany - nieprzewidziany incydent zatrzymał wykładowcę w domu. Wykład zostanie przeprowadzony w innym dogodnym i uzgodnionym terminie.

19 lutego 2024 r.
pierwsze laboratoria:
Pierwsze zajęcia laboratoryjne odbędą się w przyszłym tygodniu 26-29 lutego 2024.

19 lutego 2024 r.
punkt informacyjny:
W tym miejscu będą się pojawiać ważne ogłoszenia dotyczące organizacji wszystkich zajęć związanych z tym przedmiotem. Proszę czytać te ogłosznia na bieżąco.
terminarz
wykład:
poniedziałek 14-16 (Paweł Rzechonek)

laboratoria:
poniedziałek 12-14, s.110 (Łukasz Piwowar)
wtorek 16-18, s.110 (Łukasz Piwowar)
wtorek 18-20, s.137 (Paweł Rzechonek)
środa 16-18, s.7 (Andrzej Łukaszewski)
czwartek 18-20, s.110 (Paweł Rzechonek)
licznik wejść na stronę

2 dzisiaj
18 w obecnym miesiącu
1299 w bieżącym roku
1299 od powstania strony

polecane artykuły

o przedmiocie

Kurs programowania w C++

C++ to obiektowo zorientowany język programowania. Został on zaprojektowany przez Bjarne'a Stroustrupa z myślą o programowaniu systemowym oraz do zaawansowanych obliczeń inżynierskich. Świadome używanie C++ do rozwiązywania problemów algorytmicznych daje dużo satysfakcji doświadczonym programistom, zwłaszcza dlatego, że generowany przez kompilator kod jest bardzo efektywny.

Celem kursu jest zapoznanie studentów z bogatą składnią języka C++, różnorodnymi technikami stosowanymi w programowaniu w C++ oraz z obszernymi fragmentami biblioteki STL.

Wymagane przygotowanie
  •   Umiejętność programowania strukturalnego i proceduralnego w języku C/C++.
  •   Umiejętność czytania dokumentacji technicznej w języku angielskim.
  •   Podstawowa znajomość algorytmiki.
Cel kursu
  •   Nauka programowania obiektowego w języku C++.
  •   Poznanie wybranych fragmentów biblioteki STL.

literatura

Literatura podstawowa
  •   B.Stroustrup: Język C++. Kompendium wiedzy. Wydanie 4. Wydawnictwo Helion, Gliwice 2014.
  •   J.Grębosz: Opus magnum C++. Programowanie w języku C++11. Wydanie 2 poprawione. Tom 1, 2, 3. Wydawnictwo Helion, Gliwice 2020.
  •   J.Grębosz: Opus magnum C++. Misja w nadprzestrzeń C++14/17. Tom 4. Wydawnictwo Helion, Gliwice 2020.
Literatura uzupełniająca
  •   S.Meyers: Skuteczny nowoczesny C++. Wydawnictwo Helion, Gliwice 2020.
  •   S.Rao: C++. Dla każdego. Wydanie 7. Wydawnictwo Helion, Gliwice 2014.
  •   S.Prata: Język C++. Szkoła programowania. Wydanie 6. Wydawnictwo Helion, Gliwice 2012.
  •   A.Allain: C++. Przewodnik dla początkujących. Wydawnictwo Helion, Gliwice 2014.
  •   N.M.Josuttis: C++. Biblioteka standardowa. Podręcznik programisty. Wydanie 2. Wydawnictwo Helion, Gliwice 2014.
Literatura elektroniczna

laboratorium

Zasady zaliczenia przedmiotu
Ogólnie:
W semestrze będzie opublikowanych (na tej stronie) kilkanaście prostych zadań do zaprogramowania. Za każde samodzielnie zaprogramowane zadanie i oddane w terminie można będzie dostać do 10 punktów (chociaż zadania będą różnej trudności).
Terminy:
Zadania do zaprogramowania będą ogłaszane w tygodniu poprzedzającym termin ich realizacji. Zadania należy oddawać w wyznaczonym terminie. Spóźnienia nie będą tolerowane, za wyjątkiem uzasadnionych sytuacji życiowych: choroba potwierdzona zwolnieniem lekarskim, wezwanie do Sądu, itp.
Prezentacje:
Programy należy prezentować osobiście w czasie pracowni (proszę nie wysyłać programów pocztą elektroniczną, ani nie przekazywać ich poprzez innych studentów). W trakcie prezentacji programu trzeba się liczyć z pytamiami dotyczącymi zadania: metoda rozwiązania, zastosowane konstrukcje językowe, wykorzystane technologie, itp.
Rozwiązania:
Kody źródłowe własnych programów należy zapisywać na SKOS, ponieważ tylko wtedy rozwiązania zadań będą podlegały weryfikacji autorskiej i ocenie.
Oceny:
Aby zaliczyć laboratorium na ocenę dostateczną trzeba do końca semestru zdobyć 50% z wszystkich możliwych do uzyskania punktów; na ocenę bardzo dobrą trzeba będzie zgromadzić 90% punktów; oceny pośrednie pozostają w liniowej zależności od przedstawionych wymagań granicznych.
Zadania laboratoryjne
  1. trójkąt
  2. liczby rzymskie
  3. rozkład liczb całkowitych na czynniki pierwsze
  4. figury na płaszczyźnie
  5. zmienna z historią zmian wartości
  6. kolejka napisów
  7. wielomiany
  8. kolorowe piksele
  9. wyrażenia arytmetyczne
  10. liczby wymierne
  11. drzewo BST
  12. szyfr Cezara
  13. kalkulator ONP - zadanie dodatkowe
Ranking

ostatnia aktualizacja: wtorek, 4 czerwca 2024, 17:30

  • grupa wt.18.PRz (pdf) (hasło: stat)
  • grupa cz.18.PRz (pdf) (hasło: stat)
SKOS

wykłady

26 lutego 2024 r: łagodne wprowadzenie do C++

organizacja zajęć: sprawy organizacyjne

  • pierwsze programy w C++
  • struktura programu w C++
  • zmienne ustalone const
  • wyrażenia stałe constexpr
  • referencje i referencje do stałych
  • wskaźnik pusty nullptr
  • typy całkowite int8_t, int16_t, int32_t i int64_t
  • ułożenie obiektów w pamięci i operator alignof
  • typy znakowe char16_t i char32_t
  • łańcuchy znakowe string
  • używanie łańcuchów znakowych zamiast napisów w stylu C
  • wektory vector<T>
  • używanie wektorów zamiast tablic
  • pary pair<K, V>
  • inicjalizacja tablic i kolekcji za pomocą listy wartości
  • przeglądanie tablic i kolekcji za pomocą pętli zakresowej for-each
  • standardowe wejście cin, wyjście cout oraz wyjście dla błędów cerr i clog
  • zgłaszanie błędów za pomocą rzucania wyjątków standardowych instrukcją throw
  • listy wartości initalizer_list<>

slajdy: łagodne wprowadzenie do C++

9 marca 2022 r: klasy i obiekty, ukrywanie implementacji

  • I paradygmat OOP - abstrakcja (grupowanie danych i procedur)
  • klasy - typy danych
  • obiekty - instancje określonej klasy
  • stan obiektu
  • funkcjonalność klasy
  • definicja klasy class
  • składowe w klasie - pola i metody
  • odwołania do składowych za pomocą operatorów . (kropka) i -> (strzałka)
  • tworzenie nowych obiektów na stosie i na stercie za pomocą operatora new
  • inicjalizacja obiektu za pomocą konstruktora
  • konstruktory delegatowe
  • inicjalizacja składowych w obiekcie przed uruchomieniem konstruktora
  • lista inicjalizacyjna do sparametryzowanej inicjalizacji pól składowych w obiekcie
  • usuwanie niepotrzebnych obiektów ze stosu i ze sterty za pomocą operatora delete
  • likwidacja obiektu z udziałem destruktora
  • automatyczne uruchomienie destruktora przed likwidacją obiektu
  • wskaźnik this i jego wykorzystanie w metodach instancyjnych
  • kompozycja - budowanie klasy za pomocą wypełniania obiektami innych klas
  • II paradygmat OOP - hermetyzacja (ukrywanie implementacji)
  • udostępnianie bezpiecznych narzędzi do manipulowania ukrytym stanem obiektu i
  • ukrywanie składowych w sekcji private
  • upublicznianie składowych w sekcji public
  • przeciążanie funkcji i konstruktorów
  • konstruktor domyślny wygenerowany przez kompilator
  • wymuszenie wygenerowania konstruktora domyślnego za pomocą frazy =default
  • stałe pola w klasie
  • inicjalizacja pól stałych w obiekcie za pomocą listy inicjalizacyjnej
  • upublicznianie stałych pól w klasie
  • stałe funkcje składowe do operowania na stałych obiektach

slajdy: cpp2klasy.pdf

16/23 marca 2022 r: składowe statyczne, inicjalizacja, kopiowanie, przenoszenie

  • składowe statyczne w klasie deklarowane za pomocą static
  • odwołania do składowych statycznych
  • inicjalizacja pól statycznych
  • funkcje wbudowane
  • argumenty domyślne w funkcjach
  • inicjalizacja typów podstawowych
  • jednolita inicjalizacja
  • inicjalizacja listą wartości initialization_list<>
  • l-wartości i r-wartości
  • obiekty tymczasowe
  • argumenty tymczasowe w funkcjach
  • semantyka przenoszenia
  • konstruktor kopiujący i przenoszący
  • przypisanie kopiujące i przenoszące

slajdy: kopiowanie i przenoszenie

przykładowy program: napis.hpp napis.cpp test_napis.cpp

8 kwietnia 2024 r: przeciążanie operatorów

  • funkcje i klasy zaprzyjaźnione
  • przeciążanie operatorów
  • operatory składowe kontra zaprzyjaźnione
  • operatory zwiększania ++ i zmniejszania --
  • przypisanie kopiujące i przenoszące =
  • operator wywołania funkcji ()
  • operator indeksowania []
  • operator dostępu do składowych ->
  • statyczne operatory składowe new i delete
  • zaprzyjaźnione operatory czytania z i pisania do strumienia >> i <<

slajdy: operatory

15 kwietnia 2024 r: dziedziczenie

  • III paradygmat OOP - dziedziczenie (specjalizacja klasy)
  • dziedziczenie - budowanie klasy za pomocą rozbudowywania istniejącej klasy
  • porównanie dziedziczenia i kompozycji
  • dokładanie nowych składowych w trakcie dziedziczenia
  • lista pochodzenia
  • dostęp do odziedziczonych składników
  • przywracanie pierwotnej widoczności odziedziczonych składników za pomocą deklaracji using
  • projektowanie hierarchii klas
  • blokowanie dziedziczenia za pomocą deklaratora final
  • dziedziczenie wielobazowe
  • dziedziczenie wirtualne
  • konwersje standardowe dla wskaźników i referencji przy dziedziczeniu
  • inicjalizacja i destrukcja obiektów w warunkach dziedziczenia
  • przenoszenie konstruktorów z klasy bazowej za pomocą deklaracji using
  • inicjalizacja pól składowych w definicji klasy

slajdy: dziedziczenie

22 kwietnia 2024 r: polimorfizm

  • IV paradygmat OOP - polimorfizm (wydobycie adekwatnej dla obiektu funkcjonalności)
  • składowe funkcje wirtualne
  • nadpisywanie funkcji wirtualnych
  • wywołania polimorficzne za pomocą wskaźników i referencji
  • implementacja wywołań polimorficznych
  • wczesne i późne wiązanie
  • wirtualne destruktory
  • klasy abstrakcyjne
  • fabrykowanie obiektów

slajdy: polimorfizm

29 kwietnia 2024 r: przestrzenie nazw

  • przestrzenie nazw jako struktury grupujące definicje
  • przestrzenie nazw jako struktury otwarte
  • deklaracja użycia i dyrektywa użycia
  • przestrzeń anonimowa
  • komponowanie i wybór w przestrzeniach nazw
  • standardowa przestrzeń nazw
  • przestrzenie zagnieżdżone

slajdy: przestrzenie nazw

29 kwietnia 2024 r: wyjątki

  • zastosowanie wyjątków do sygnalizowania błędów
  • zgłaszanie wyjątków instrukcją throw
  • łapanie wyjątków w instrukcji try-catch
  • przepływ sterowania przy zgłoszeniu wyjątku
  • funkcje call-back’owe
  • rozróżniane wyjątków po typie
  • grupowanie wyjątków w hierarchie klas
  • dopasowywanie wyjątków
  • złapanie każdego wyjątku w bloku catch(...)
  • odwikłanie stosu po zgłoszeniu wyjątku
  • implementacja mechanizmu zgłaszania i łapania wyjątków
  • wyjątki w konstruktorach i w destruktorach
  • RAII czyli zdobywanie zasobów poprzez inicjalizację
  • wsparcie techniki RAII przez shared_ptr
  • specyfikacja wyjątków zgłaszanych przez funkcje
  • wyjątek bad_alloc zgłaszany przez operator new
  • klasa exception i wyjątki z biblioteki standardowej
  • definiowanie własnych wyjątków
  • asercje

slajdy: wyjatki

6 maja 2024 r: konwersje

  • konwersje tradycyjne dla typów podstawowych
  • konstruktory konwertujące i notacja konstruktorowa
  • blokowanie konwersji za pomocą explicit
  • operatory konwersji w klasie
  • szablonowe operatory konwersji
  • statyczna konwersja typów danych przy użyciu operatorów konwertujących za pomocą static_cast<>
  • zmiana deklaratorów const i volatile za pomocą const_cast<>
  • zmiana interpretacji typu danych za pomocą reinterpret_cast<>
  • dynamiczna konwersja wskaźników i referencji to klas polimorficznych za pomocą dynamic_cast<>
  • RTTI - informacja o typie danych
  • automatyczne określanie typu - deklaracja auto
  • wydobycie typu wyrażenia za pomocą decltype

slajdy: konwersje

13 maja 2024 r: szablony

  • definicja szablonu
  • funkcje i klasy szablonowe
  • szablony funkcji
  • przeciążanie szablonów funkcji
  • trejty czyli specyfikowanie strategii za pomocą parametrów szablonu
  • parametry domyślne w szablonach
  • specjalizacja szblonów
  • szablony klas
  • składowe statyczne w szablonach
  • przyjaźń a szablony
  • dziedziczenie w przypadku szablonów

slajdy: szablony

20 maja 2024 r: strumienie

  • pojęcie strumienia jako obiektu transportującego dane
  • strumienie konsolowe cin, cout, clog i cerr
  • hierarchia klas strumieni w bibliotece standardowej
  • formatowane operacje na strumieniach za pomocą operatorów << i >>
  • przeciążanie operatorów strumieniowych << i >>
  • sterowanie formatem strumienia - flaga fmtflags
  • manipulatory z biblioteki standardowej
  • definiowanie własnych manipulatorów
  • nieformatowane operacje czytania i pisania na strumieniach
  • błędy w strumieniu - flaga io_state
  • zgłaszanie wyjątków przez strumień
  • strumienie związane z plikami
  • strumienie związane z łańcuchami znakowymi
  • synchronizacja strumieni
  • bufory strumieniowe

slajdy: strumienie

27 maja 2024 r: kolekcje i iteratory

  • kontenery i ich elementy (semantyka wartości)
  • kontenery sekwencyjne vector, deque i list
  • kontenery uporządkowane set, multiset, map i multimap
  • kontenery nieuporządkowane unordered_set i unordered_map
  • łańcuchy i tablice jako kontenery
  • adaptatory kontenerów stack, queue i priority_queue
  • iteratory

slajdy: kolekcje i iteratory

3 czerwca 2024 r: algorytmy

  • klasyfikacja algorytmów
  • algorytm for_each
  • algorytmy niemodyfikujące
  • algorytmy modyfikujące
  • algorytmy usuwające
  • algorytmy mutujące
  • algorytmy sortujące
  • algorytmy bazujące na posortowanych danych

slajdy: algorytmy

3 czerwca 2024 r: obiekty funkcyjne i lambdy

  • funktory i predykaty
  • predefiniowane obiekty funkcyjne
  • algorytm for_each
  • wyrażenia lambda
  • rekurencyjne lambdy

slajdy: lambdy.pdf

For Erasmus Students

Tutorials
  1. C++ Language (www.cplusplus.com)
  2. C++ Tutorial (www.javatpoint.com)
  3. C++ Tutorial (www.tutorialspoint.com)
  4. C++ reference (en.cppreference.com)
Exercises
  1. Roman numbers
  2. Decomposition of integers into prime factors [pl]
  3. Figures on the plane
  4. Variable with change history [pl]
  5. Queue containing strings
  6. Polynomials
  7. Colorful pixels [pl]
  8. Expression trees
  9. Rational numbers
  10. Binary search tree [pl]