Zainteresowania zawodowe: programowanie (C++, Java, C#, F#), technologie webowe, szeroko rozumiana algorytmika, metematyka klasyczna.
Data ostatniej modyfikacji tego dokumentu (cpp2018.phtml) to poniedziałek 21 października 2019 roku (o godzinie 12:50).
1 dzisiaj
8 w obecnym miesiącu
66 w bieżącym roku
8136 od powstania strony
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.
Zdefiniuj klasę opakowującą plik tekstowy line_reader
.
Obiekt takiej klasy ma przetrzymywać wskaźnik/referencję do strumienia plikowego ifstream
.
Zadaniem obiektów tej klasy będzie czytanie z pliku wiersz po wierszu.
Gdy strumień nie będzie już mógł odczytać następnej linii (koniec pliku) należy zgłosić wyjątek ios_base::failure
.
Klasa ta nie powinna zamykać strumienia w destruktorze.
W programie testowym stwórz sprytny wskaźnik shared_ptr
, który zamknie plik w momencie,
gdy ostatni sprytny wskaźnik na ten zasób będzie likwidowany.
Zdefiniuj klasę dla macierzy kwadratowej zawierającej liczby rzeczywiste. Należy umożliwić dostęp porzez referencję do poszczególnych elementów macierzy (do odczytu i zapisu). W klasie tej zdefiniuj statyczną operację mnożenia macierzy o takim samym rozmiarze (argumenty przekaż jako referencje do stałych macierzy).
Dalej w programie testowym stwórz macierze o rozmiarach odpowiednio 10×10, 100×100,
1000×1000 i 10000×10000 i wypełnij je losowymi wartościami z zakrsu od 0.5 do 2.0.
Następnie podnieś do kwadratu każdą z tych macierzy mierząc czas wykonania tych operacji
za pomocą obiektu duration
.
Dla małych macierzy powtórz tą operację wielokrotnie a potem zmierzony czas podziel przez tą wielokrotność.
Do pomiaru czasu użyj czasomierzy opartych na zegarze high_resolution_clock
.
Stwórz w swoim programie trzy zbiory danych różnego typu vector<double>
,
list<string>
i set<int>
.
Wypełnij te kontenery przypadkowymi wartościami (możesz losować albo arbitralnie coś wpisać).
Następnie na zbiorach tych wykonaj pewne obliczenia z użyciem zdefiniowanych przez ciebie funktorów
(obiekty funkcyjne albo lambdy):
Zaprogramuj algorytm stacji rozrządowej Dijkstry, który przekształca wyrażenie arytmetyczne z postaci infiksowej z nawiasami do postaci postfiksowej bez nawiasów (Odwrotna Notacja Polska). Wykorzystaj do tego celu kolekcje standardowe.
W swoim algorytmie najpierw podziel wejściowe wyrażenie arytmetyczne na kolejkę/listę leksemów. Wynikiem działania procedury przekształcającej ma być kolejka/lista symboli.
Napisz program, który wygeneruje 1000 losowych liczb z rozkładem:
uniform_real_distribution
;binomial_distribution
;poisson_distribution
;normal_distribution
.Wygenerowane liczby zapisz w pliku .csv (dla każdego rozkładu w osobnym pliku). Zrób w arkuszu kalkulacyjnym wykresy dla wygenerowanych danych w taki sposób, aby sprawdzić poprawność zastosowanego rozkładu prawdopodobieństwa.
Napisz program, który elegancko sformatuje plik w formacie XML:
Nazwę pliku do sformatowania przekaż poprzez argumenty wywołania. Wyniki formatowania wypisz na standardowym wyjściu.
Wykorzystując metaprogramowanie zdefiniuj szablon obiektu funkcyjnego, pozwalającego obliczyć na poziomie kompilacji:
Napisz program, który:
Dane wypisz podwójnie, używając ustawień zarówno globalnych (domyślnych) jak i polskich (albo angielskich, jeśli domyślne ustawienia będą polskie).
Napisz program, który zilustruje problem czytelników i pisarzy z wykorzystaniem operacji czytania z i pisania do jednego pliku tekstowego.
W swoim programie zdefiniuj klasy Czytelnik
, Pisarz
i Arbiter
(pisarze i czytelnucy posiadają swoje unikatowe dwucyfrowe identyfikatory).
Czytelnicy co pewien czas (określany na bieżąco w sposób losowy) czytają plik dane.txt
i wyświetlają na standardowym wyjściu ostatnią zapisaną w pliku liczbę (poprzedzoną identyfikatorem czytelnika).
Natomiast pisarze dopisują także co jakiś czas (określany na bieżąco w sposób losowy) do tego pliku
losowe liczby naturalne (rozpoczynające się od identyfikatora pisarza).
Z przyczyn oczywistych czytelnicy mogą działać jednocześnie, natomiast pisarze nie.
Co więcej, działalność pisarza wyklucza w tym czasie także działalność czytelników.
Rolą arbitra jest dopuszczanie w odpowiedni sposób czytelników i pisarzy do pliku dane.txt.
Problem należy rozwiązać na różne sposoby:
8 października 2018 r: sprytne wskaźniki
organizacja zajęć
sprytne wskaźniki: shared_ptr
, weak_ptr
, unique_ptr
slajdy: organizacja.pdf, wskazniki.pdf
15 października 2018 r: czasomierze
współczynniki ratio
zegary clock
, punkty time_point
i odcinki czasowe duration
slajdy: czasomierze.pdf
22 października 2018 r: funktory
29 października 2018 r: kolekcje standardowe
...
slajdy: kolekcje.pdf
5 listopada 2018 r: nowe elementy języka
...
slajdy: nowe.pdf
19 listopada 2018 r: generatory liczb losowych
26 listopada 2018 r: wyrażenia regularne
budowa wyrażeń regularnych
klasa regex
funkcje dopasowujące
podwyrażenia
iterowanie po dopasowaniach
slajdy: regularne.pdf
3 grudnia 2018 r: metaprogramowanie I
10 grudnia 2018 r: metaprogramowanie II
funkcja typowa Conditional
funkcja typowa Select
iteracja za pomocą szalonów rekurencyjnych
definicja warunkowa Enable_if
slajdy: meta2.pdf
17 grudnia 2018 r: lokalizacja I
7 stycznia 2019 r: lokalizacja II
14 stycznia 2019 r: współbieżność I
...
slajdy: watki1.pdf