Paweł Rzechonek

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

C++ i STL
zaawansowane techniki

data ostatniej modyfikacji

Data ostatniej modyfikacji dokumentu (cpp.phtml) to czwartek 1 stycznia 1970 roku (o godzinie 1:00).

ogłoszenia
12 października 2021 r.
pierwsze laboratoria:
W pierwszym tygodniu nauki laboratoria nie odbywają się. Pierwsze zajęcia laboratoryjne odbędą się w przyszłym tygodniu 15 października 2021 r.

12 października 2021 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:
wtorek 16-18 (Paweł Rzechonek)

laboratoria:
wtorek 10-12 (Marek Szykuła)
wtorek 18-20 (Paweł Rzechonek)
czwartek 12-14 (Andrzej Łukaszewski)
licznik wejść na stronę

8 dzisiaj
237 w obecnym miesiącu
237 w bieżącym roku
237 od powstania strony

o przedmiocie

Kurs C++17 i STL

C++17 to najnowsza wersja języka C++. Język C++ prawdza się, gdy chcemy zapewnić wysoką wydajność programu. Język ten jest stale rozwijany a kolejne jego specyfikacje, czyli C++11, C++14 i C++17, przyniosły wiele udogodnień. Aby w pełni wykorzystać potencjał języka C++ należy go używać wraz z biblioteką standardową STL. C++ wraz z STL to doskonałe narzędzie do implementowania oprogramowania wysokiej jakości.

Wymagane przygotowanie
  •   Umiejętność programowania obiektowego w języku C++98.
  •   Podstawowa znajomość algorytmiki.
  •   Umiejętność czytania dokumentacji technicznej w języku angielskim.
Cel kursu
  •   Nauka programowania w języku C++17.
  •   Poznanie obszernych fragmentów biblioteki standardowej STL.

literatura

Podrędznik podstawowy
  •   N.M.Josuttis: C++. Biblioteka standardowa. Podręcznik programisty. Wydanie 2. Wydawnictwo Helion, Gliwice 2014.
Literatura papierowa
  •   B.Stroustrup: Język C++. Kompendium wiedzy. Wydanie 4. Wydawnictwo Helion, Gliwice 2014.
  •   J.Galowicz: C++17 STL. Receptury. Wydawnictwo Helion, Gliwice 2018.
Literatura elektroniczna

laboratorium

Zasady zaliczenia przedmiotu
Ogólnie:
W semestrze będzie opublikowanych (na tej stronie) kilkanaście prostych list z zadaniami do zaprogramowania. Na każdej liście znajdą się zadania za sumaryczną ilość około 10 punktów (przeważnie będzie to dokładnie 10 punktów). Zatem za samodzielnie zaprogramowane zadania z listy i oddane w terminie można będzie dostać do 10 punktów (chociaż listy z zadaniami mogą różnić się trudnością).
Terminy:
Zadania do zaprogramowania będą ogłaszane w tygodniu poprzedzającym termin ich realizacji. Zadania należy oddawać w wyznaczonym terminie w trakcie trwania pracowni. 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 - z każdym studentem chciałbym indywidualnie omówić jego rozwiązanie oraz wskazać wady i braki w programie. Po pracowni program należy mi przekazać (będę jeszcze robić weryfikację antyplagiatową) na SKOS. W trakcie prezentacji programu trzeba się liczyć z pytamiami dotyczącymi zadania: metoda rozwiązania, zastosowane konstrukcje językowe, wykorzystane technologie czy klasy biblioteczne 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. Jeśli student nie mógł uczestniczyć w zajęciach z powodu awarii połączenia internetowego, to oprócz programu ma przekazać sprawozdanie z realizacji zadania (co zostało zaprogramowane i w którym miejścu w pliku źródłowym oraz czego nie udało się osiągnąć).
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 pozostją w liniowej zależności od przedstawionych wymagań granicznych.
Zadania laboratoryjne
  1. Lista 1 (19, 21 października 2021): nowe elementy języka C++ W PRZYGOTOWANIU!!!
  2. Zadanie 1 (1 pkt).
    Sprawdź, czy w stosowanym przez Ciebie kompilatorze (co najmniej c++17) działają trójznaki (ang. trigraphs), takie jak na przykład ??- co tłumaczy się na znak tyldy ˜, itp. Co zrobić, aby kompilator właściwie zinterpretował występujące w programie trójznaki?
    Zadanie 2 (1 pkt).
    Wypisz na standardowym wyjściu std::out surowy łańcuch znaków (ang. raw string) zawierający:
    1. adres naszego Instytutu (w pierwszej linii pełną nazwę Instytutu, w drugiej ulicę z numerem, w trzeciej kod pocztowy i miasto);
    2. ścieżkę bezwzględną do katalogu z programami użytkowymi w systemie Windows;
    3. różne sekwencje znaków cudzysłowia i nawiasów okrągłych (a w szczególności sekwencję )").
    Zadanie 3 (2 pkt).
    Stwórz alias dla typu będącego zbiorem std::set<> łańcuchów znakowych. Następnie zadeklaruj i zainicjalizuj taki zbiór używając jednolitej inicjalizacji. Na koniec przejdź po tym zbiorze pętlą for dla zakresów (ang. range-based for-each loop)) dedukując automatycznie typ elementów zbioru; wypisz w pętli wszystkie łańcuchy na standardowym wyjściu std::cout).
    Zadanie 4 (2 pkt).
    Zdefiniuj silnie stypizowany typ wyliczeniowy dla kilku wybranych imion męskich i żeńskich, którego elementy będa typu uint_16. Następnie zdefiniuj funkcję, która jako argumenty przyjmuje komunikat typu string i imię odbiorcy zdefiniowanego wcześniej typu wyliczeniowego (funkcja może wypisywać komunikat personalnie skierowany do wskazanej osoby używając instrukcji switch-case).
    Zadanie 5 (1 pkt).
    Zdefiniuj funkcję rekurencyjną, która będzie wyznaczała n-tą liczbę Lucasa. Funkcja ta ma przyjmować argument typu uint32_t i powinna automatycznie dedukować typ wyniku.
    Zadanie 6 (2 pkt).
    Napisz program, który dla podanych współczynników równania kwadratowego wyliczy wyróżnik tego równania (często oznaczany symbolem Δ) i w zależności od jego wartości wypisze miejsca zerowe. Użyj do tego celu instrukcji warunkowej if-else z lokalnym inicjalizatorem dla wyróżnika.
    Zadanie 7 (1 pkt).
    Napisz program, który dla podanej daty wypisze ją z nazwą miesiąca (na przykład: 12 października 2021). Użyj do tego celu instrukcji wyboru switch-case z lokalnym inicjalizatorem miesiąca w dacie.

wykłady

8 października 2020 r: nowe elementy języka w C++17

organizacja zajęć
nowe elementy języka C++ 11/14/17
  • trójznaki
  • surowe łańcuchy znakowe
  • pętla for-each
  • jednolita inicjalizacja
  • stypizowane typy wyliczeniowe
  • dedukcja typów za pomocą auto i decltype
  • instrukcje if i switch-case z częścią inicjalizującą zmienne lokalne dla tych instrukcji
  • instrukcja constexpr-if

slajdy: organizacja.pdf, nowe.pdf

C++ compiler support

Wandbox (C++2a compiler online)