Boost, Metaprogramowanie, Inne biblioteki

Wielkość: px
Rozpocząć pokaz od strony:

Download "Boost, Metaprogramowanie, Inne biblioteki"

Transkrypt

1 Boost, Metaprogramowanie, Inne biblioteki Biblioteka STL Sebastian Deorowicz Politechnika Śląska Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

2 Plan wykładu 1 Biblioteka Regex (Boost) 2 Biblioteka Graph (Boost) 3 Metaprogramowanie Wprowadzenie Coś poważniejszego Inne podejście 4 Inne biblioteki LEDA Blitz++ Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

3 Plan wykładu 1 Biblioteka Regex (Boost) 2 Biblioteka Graph (Boost) 3 Metaprogramowanie Wprowadzenie Coś poważniejszego Inne podejście 4 Inne biblioteki LEDA Blitz++ Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

4 Biblioteka regex (Boost) Opis Standardowy język C++ nie udostępnia możliwości stosowania wyrażeń regularnych Biblioteka regex (należąca do bibliotek Boost) wypełnia tę lukę Biblioteka dostępna jest na darmowej licencji Czym się teraz zajmiemy? Podobnie jak w przypadku innych bibliotek Boost, regex nie zostanie omówiona w całości Celem wykładu jest zaprezentowanie niektórych jej możliwości i zachęcenie do samodzielnego zgłębienia szczegółów więcej informacji: B. Karlsson, Więcej niż C++. Wprowadzenie do bibliotek Boost, Helion, 2006 Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

5 Biblioteka regex wyrażenia regularne Litery, cyfry, inne znaki 1 Każdy symbol jest dopasowywany z takim samym z wyjątkiem znaków specjalnych:. dowolny znak [ definiuje zakresy symboli, np. [xyz] dowolny z symboli xyz, [x-z] to samo { definiuje liczbę powtórzeń: {n} poprzedni znak powinien wystąpić n razy {n,} poprzedni znak powinien wystąpić co najmniej n razy {n,m} poprzedni znak powinien wystąpić co najmniej n ale nie więcej niż m razy (, ) definiują podwyrażenie, które może być później używane w dalszym ciągu wyrażenia regularnego * poprzedni znak powinien wystąpić zero bądź więcej razy + poprzedni znak powinien wystąpić raz bądź więcej razy? poprzedni znak powinien wystąpić zero raz bądź raz alternatywa pomiędzy dwoma możliwościami ˆ początek wiersza $ koniec wiersza 1 Wykaz obejmuje najważniejsze elementy wyrażeń regularnych, ale nie jest kompletny Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

6 Biblioteka regex przykład Przykład #include "stdafx.h" #include <boost/regex.hpp> #include <iostream> #include <string> using namespace std; using namespace boost; int _tmain(int argc, _TCHAR* argv[]) { string slowo("alicja"); regex reg("[a-za-z]+"); regex reg_nip("\\d{3}-\\d{3}-\\d{2}-\\d{2}"); string NIP1(" "); string NIP2(" "); string NIP3(" "); regex reg_nip_alt("\\d{3}-(\\d{3}-\\d{2}-\\d{2} \\d{2}-\\d{2}-\\d{3})"); } cout << regex_match(slowo, reg) << endl; // 1 cout << regex_match(nip1, reg_nip) << endl; // 1 cout << regex_match(nip2, reg_nip) << endl; // 0 cout << regex_match(nip3, reg_nip) << endl; // 0 cout << regex_match(nip1, reg_nip_alt) << endl; // 1 cout << regex_match(nip2, reg_nip_alt) << endl; // 0 cout << regex_match(nip3, reg_nip_alt) << endl; // 1 Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

7 Biblioteka regex Wersje składni wyrażeń regularnych Perl domyślna POSIX extended kompatybilna z egrep i awk POSIX basic kompatybilna z grep i emacs Wersje składni ciągów formatujących przy zastępowaniu znaków Sed Perl Boost-Extended Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

8 Biblioteka regex algorytmy regex match Sprawdza czy podany ciąg jest zgodny z wyrażeniem regularnym Istnieje kilka przeciążonych wersji tej funkcji, np. ciąg może być typu string, może być określony iteratorami regex search Sprawdza czy w podanym ciągu występuje fragment dający się dopasować do wyrażenia regularnego regex replace Wyszukuje w podanym ciągu wszystkie dopasowania podanego ciągu i zamienia je na podany ciąg Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

9 Biblioteka regex algorytmy regex match Sprawdza czy podany ciąg jest zgodny z wyrażeniem regularnym Istnieje kilka przeciążonych wersji tej funkcji, np. ciąg może być typu string, może być określony iteratorami regex search Sprawdza czy w podanym ciągu występuje fragment dający się dopasować do wyrażenia regularnego regex replace Wyszukuje w podanym ciągu wszystkie dopasowania podanego ciągu i zamienia je na podany ciąg Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

10 Biblioteka regex algorytmy regex match Sprawdza czy podany ciąg jest zgodny z wyrażeniem regularnym Istnieje kilka przeciążonych wersji tej funkcji, np. ciąg może być typu string, może być określony iteratorami regex search Sprawdza czy w podanym ciągu występuje fragment dający się dopasować do wyrażenia regularnego regex replace Wyszukuje w podanym ciągu wszystkie dopasowania podanego ciągu i zamienia je na podany ciąg Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

11 Biblioteka regex algorytmy Przykład #include "stdafx.h" #include <boost/regex.hpp> #include <iostream> #include <string> using namespace std; using namespace boost; int _tmain(int argc, _TCHAR* argv[]) { string s("ala ma kota, ale kot nie lubi Ali, za to lubi Asię"); regex reg("(a)(l[a-za-z])", regex::perl); s = regex_replace(s, reg, "O$2"); cout << s << endl; } // Ola ma kota, ale kot nie lubi Oli, za to lubi Asię Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

12 Biblioteka regex iteratory Przykład #include "stdafx.h" #include <algorithm> #include <boost/regex.hpp> #include <iostream> #include <string> using namespace std; using namespace boost; bool regex_callback(const boost::match_results<std::string::const_iterator>& x) { cout << x[0].str() << endl; return true; } int _tmain(int argc, _TCHAR* argv[]) { string s("firma usługowa \n652 Kowalski i spółka (0-32) "); regex reg_nip("\\d{3}-(\\d{3}-\\d{2}-\\d{2} \\d{2}-\\d{2}-\\d{3})"); sregex_iterator p(s.begin(), s.end(), reg_nip); sregex_iterator end; } for_each(p, end, &regex_callback); // Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

13 Plan wykładu 1 Biblioteka Regex (Boost) 2 Biblioteka Graph (Boost) 3 Metaprogramowanie Wprowadzenie Coś poważniejszego Inne podejście 4 Inne biblioteki LEDA Blitz++ Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

14 Biblioteka graph Możliwości Reprezentacja grafów w pamięci komputera Spora biblioteka gotowych algorytmów takich jak np. algorytm Dijkstry algorytm Floyda Warshalla algorytm Kruskala przeszukiwanie grafu wszerz i w głąb kolorowanie grafu Nieco trudniejsza w użyciu za to wydajnie zaimplementowana Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

15 Biblioteka graph (cz.1) 2 #include "stdafx.h" #include <iostream> #include <cstdio> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/breadth_first_search.hpp> #include <boost/pending/integer_range.hpp> #include <boost/pending/indirect_cmp.hpp> using namespace boost; template <typename TimeMap> class bfs_time_visitor:public default_bfs_visitor { typedef typename property_traits<timemap>::value_type T; public: bfs_time_visitor(timemap tmap, T & t):m_timemap(tmap), m_time(t) { } template <typename Vertex, typename Graph> void discover_vertex(vertex u, const Graph & g) const { put(m_timemap, u, m_time++); } TimeMap m_timemap; T & m_time; }; 2 Przykład z Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

16 Biblioteka graph (cz.2) int _tmain(int argc, _TCHAR* argv[]) { // Select the graph type we wish to use typedef adjacency_list<vecs, vecs, undirecteds> graph_t; // Set up the vertex IDs and names enum {r, s, t, u, v, w, x, y, N}; const char *name = "rstuvwxy"; // Specify the edges in the graph typedef std::pair < int, int >E; E edge_array[] = { E(r, s), E(r, v), E(s, w), E(w, r), E(w, t), E(w, x), E(x, t), E(t, u), E(x, y), E(u, y) }; // Create the graph object const int n_edges = sizeof(edge_array) / sizeof(e); typedef graph_traits<graph_t>::vertices_size_type v_size_t; graph_t g(edge_array, edge_array + n_edges, v_size_t(n)); // Typedefs typedef graph_traits<graph_t>::vertex_descriptor Vertex; typedef graph_traits<graph_t>::vertices_size_type Size; typedef Size* Iiter; // a vector to hold the discover time property for each vertex std::vector<size> dtime(num_vertices(g)); Size time = 0; bfs_time_visitor<size*>vis(&dtime[0], time); breadth_first_search(g, vertex(s, g), visitor(vis)); // Use std::sort to order the vertices by their discover time std::vector<graph_traits<graph_t>::vertices_size_type > discover_order(n); integer_range < int >range(0, N); std::copy(range.begin(), range.end(), discover_order.begin()); std::sort(discover_order.begin(), discover_order.end(), indirect_cmp<iiter, std::less<size> >(&dtime[0])); std::cout << "order of discovery: "; for (int i = 0; i < N; ++i) std::cout << name[discover_order[i]] << " "; std::cout << std::endl; } Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

17 Plan wykładu 1 Biblioteka Regex (Boost) 2 Biblioteka Graph (Boost) 3 Metaprogramowanie Wprowadzenie Coś poważniejszego Inne podejście 4 Inne biblioteki LEDA Blitz++ Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

18 Metaprogramowanie Czym jest metaprogramowanie? Tworzenie programów wykonywanych w czasie kompilacji Metaprogram modyfikuje kod programu Polecana literatura D. Vandevoorde, N. Josuttis, C++. Szablony. Vademecum profesjonalisty, Helion, D. Abrahams, A. Gurtovoy, Język C++. Metaprogramowanie za pomocą szablonów, Helion, Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

19 Metaprogramowanie Czym jest metaprogramowanie? Tworzenie programów wykonywanych w czasie kompilacji Metaprogram modyfikuje kod programu Polecana literatura D. Vandevoorde, N. Josuttis, C++. Szablony. Vademecum profesjonalisty, Helion, D. Abrahams, A. Gurtovoy, Język C++. Metaprogramowanie za pomocą szablonów, Helion, Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

20 Metaprogramowanie (przykłady) silnia Przykład unsigned factorial_fun(unsigned n) { int r; for(r = 1; n > 0; n--) r *= n; return r; }... cout << factorial_fun(5) << endl; // 120 Opis Funkcja wykonywana jest w trakcie działania programu Złożoność liniowa względem parametru Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

21 Metaprogramowanie (przykłady) silnia Przykład template<unsigned N> inline unsigned factorial(void) { return factorial<n-1>() * N; } template<> inline unsigned factorial<0>(void) { return 1; }... cout << factorial<5>() << endl; // 120 cout << factorial<10>() << endl; // Opis Metafunkcja wykonywana jest w trakcie kompilacji W czasie działania programu podstawiany jest tylko konkretny wynik złożoność stała Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

22 Programowanie a metaprogramowanie Funkcja Jest obliczana w trakcie działania programu Może być wywoływana z parametrem znanym dopiero w czasie działania programu Zajmuje niewiele miejsca w kodzie Metafunkcja Jest obliczana w trakcie kompilacji programu w trakcie działania programu wywołanie sprowadza się do podstawienia wyniku Może być wywoływana tylko z parametrem znanym w czasie kompilacji Muszą istnieć specjalizacje dla wszystkich wartości parametrów użytych w programie Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

23 Metaprogramowanie Jak przerabiać kod na metakod? Do dyspozycji mamy wzorce Parametrami nie-typami wzorca mogą być tylko liczby całkowite Metaprogramowanie za pomocą wzorców bazuje na rekurencji algorytm musi być (albo musi się dać przerobić na) rekurencyjny Problem Wzorce funkcji nie mogą być specjalizowane tylko częściowo nie był to problem dla funkcji silnia, ale już przy potęgowaniu tak łatwo się nie da Rozwiązanie Wzorce klas mogą być specjalizowane częściowo trzeba przejść z funkcji na klasy Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

24 Metaprogramowanie Jak przerabiać kod na metakod? Do dyspozycji mamy wzorce Parametrami nie-typami wzorca mogą być tylko liczby całkowite Metaprogramowanie za pomocą wzorców bazuje na rekurencji algorytm musi być (albo musi się dać przerobić na) rekurencyjny Problem Wzorce funkcji nie mogą być specjalizowane tylko częściowo nie był to problem dla funkcji silnia, ale już przy potęgowaniu tak łatwo się nie da Rozwiązanie Wzorce klas mogą być specjalizowane częściowo trzeba przejść z funkcji na klasy Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

25 Metaprogramowanie Jak przerabiać kod na metakod? Do dyspozycji mamy wzorce Parametrami nie-typami wzorca mogą być tylko liczby całkowite Metaprogramowanie za pomocą wzorców bazuje na rekurencji algorytm musi być (albo musi się dać przerobić na) rekurencyjny Problem Wzorce funkcji nie mogą być specjalizowane tylko częściowo nie był to problem dla funkcji silnia, ale już przy potęgowaniu tak łatwo się nie da Rozwiązanie Wzorce klas mogą być specjalizowane częściowo trzeba przejść z funkcji na klasy Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

26 Metaprogramowanie (przykłady) potęgowanie Przykład template<unsigned X, unsigned Y> struct power { static unsigned const value = X * power<x,y-1>::value; }; template<unsigned X> struct power<x, 0> { static unsigned const value = 1; };... cout << power<2,5>::value << endl; cout << power<5,4>::value << endl; Co się tu dzieje? Klasa nie może zwracać wyniku, ale może mieć pola statyczne Pola te istnieją niezależnie od tego czy mamy obiekty klas Klasa jest tzw. otoczką zmiennej Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

27 Metaprogramowanie (przykłady) potęgowanie Czy jest ono kosztowne? W czasie wykonywania wiele nas nie kosztuje W czasie kompilacji dla potęgi trzeba wyznaczyć stworzyć konkretyzacje wszystkich niższych potęg Przykład To samo można jednak zrobić nieco lepiej template<unsigned X, unsigned Y> struct power2 { static unsigned const value = power2<x,y/2>::value * power2<x,(y-y/2)>::value; }; template<unsigned X> struct power2<x, 1> { static unsigned const value = X; }; template<unsigned X> struct power2<x, 0> { static unsigned const value = 1; };... cout << power<2,5>::value << endl; cout << power<5,4>::value << endl; Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

28 Metaprogramowanie (przykłady) potęgowanie Czy jest ono kosztowne? W czasie wykonywania wiele nas nie kosztuje W czasie kompilacji dla potęgi trzeba wyznaczyć stworzyć konkretyzacje wszystkich niższych potęg Przykład To samo można jednak zrobić nieco lepiej template<unsigned X, unsigned Y> struct power2 { static unsigned const value = power2<x,y/2>::value * power2<x,(y-y/2)>::value; }; template<unsigned X> struct power2<x, 1> { static unsigned const value = X; }; template<unsigned X> struct power2<x, 0> { static unsigned const value = 1; };... cout << power<2,5>::value << endl; cout << power<5,4>::value << endl; Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

29 Metaprogramowanie Inny problem Spróbujmy obliczać wartości współczynników dwumianowych Zrobimy to na podstawie trójkąta Pascala, tj. wykorzystamy zależność: ( ) ( ) ( ) n n 1 n 1 = + k k 1 k Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

30 Metaprogramowanie współczynniki dwumianowe (metaprogram) Przykład template<unsigned N, unsigned K> struct slow_binomial { static unsigned const value = slow_binomial<n-1,k-1>::value + slow_binomial<n-1,k>::value; }; template<unsigned N> struct slow_binomial<n, 0> { static unsigned const value = 1; }; template<unsigned N> struct slow_binomial<n, N> { static unsigned const value = 1; }; template<> struct slow_binomial<0, 0> { static unsigned const value = 1; };... cout << slow_binomial<10,5>::value << endl; Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

31 Metaprogramowanie współczynniki dwumianowe Czy to dużo kosztuje? Trzeba wykonać O(nk) konkretyzacji bo obliczenie wykonywane jest za pomocą trójkąta Pascala Czy można lepiej? Oczywiście wystarczy liczyć współczynnik ze wzoru: n! n(n 1) (k + 1) = k!(n k)! (n k)(n k 1) 1 Dzięki temu potrzebnych będzie tylko O(n) specjalizacji Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

32 Metaprogramowanie współczynniki dwumianowe (wersja 2) Przykład template<unsigned N, unsigned K> struct partial_factorial { static unsigned const value = N * partial_factorial<n-1,k>::value; }; template<unsigned N> struct partial_factorial<n,n> { static unsigned const value = 1; }; template<unsigned N, unsigned K> struct fast_binomial { static unsigned const value = partial_factorial<n,k>::value / partial_factorial<n-k,0>::value; };... cout << fast_binomial<10,5>::value << endl; Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

33 Metaprogramowanie współczynniki dwumianowe Porównanie wersji Wersja 1 generuje dużo więcej kodu niż wersja 2 Wersja 2 może dawać błędne wyniki nawet jeśli wynik jest w zakresie int, bo wyniki cząstkowe (w liczniku i w mianowniku) mogą przekroczyć zakres Wersja 1 da poprawny wynik końcowy jeśli tylko mieści się on w zakresie int Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

34 Metaprogramowanie Opis Do tej pory tworzyliśmy metafunkcje w pełni obliczane w czasie kompilacji Możliwe jest jednak też tworzenie metafunkcji tylko częściowo obliczanych w czasie kompilacji ich parametrami są wartości znane dopiero w czasie wykonywania programu Takie metafunkcje sprowadzają się więc w zasadzie do wygenerowania efektywnego kodu na podstawie znanych niektórych parametrów problemu Problem Zabierzmy się za sortowanie Istnieje wiele algorytmów sortowania, ale wybierzemy sortowanie przez proste wstawianie, ponieważ dla małych danych jest ono bardzo wydajne wydajniejsze niż sortowanie szybkie Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

35 Metaprogramowanie sortowanie przez wstawianie Przykład void insertion_sort(int *A, int n) { for(int i = 1; i < n; i++) { int x = A[i]; int j; for(j = i-1; j >= 0 && A[j] > x; j--) A[j+1] = A[j]; A[j+1] = x; } } Problem Brak rekurencji, więc trzeba ten kod najpierw przerobić na szczęście pętle się bardzo łatwo przerabia Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

36 Metaprogramowanie sortowanie przez wstawianie Przykład int inline inner_loop(int *A, const int n, const int x) { if(n >= 0) { if(a[n] > x) { A[n+1] = A[n]; return inner_loop(a, n-1, x); } else return n; } return -1; } void insertion_sort2(int *A, int n) { for(int i = 1; i < n; i++) { int x = A[i]; int j = inner_loop(a, i-1, x); A[j+1] = x; } } Co teraz? Teraz przejdziemy na metaprogram, w którym rozmiar tablicy będzie parametrem wzorca Dane do sortowania będą parametrem funkcji Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

37 Metaprogramowanie sortowanie przez wstawianie (wersja 1) Przykład template<int N> int inline inner_loop(int *A, const int x) { if(a[n] > x) { A[N+1] = A[N]; return inner_loop<n-1>(a, x); } else return N; } template<> int inline inner_loop<-1>(int *A, const int x) { return -1; } template<int N> void inline insertion_sort(int *A) { insertion_sort<n-1>(a); int x = A[N-1]; A[inner_loop<N-2>(A, x)+1] = x; } template<> void inline insertion_sort<0>(int *A) {} template<> void inline insertion_sort<1>(int *A) {} Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

38 Metaprogramowanie sortowanie przez wstawianie (wersja 2) Przykład template<int N> inline void inner_loop(int *A) { if(a[n] < A[N-1]) { std::swap(a[n], A[N-1]); inner_loop<n-1>(a); } }; template<> inline void inner_loop<0>(int *A) {}; template<int N> inline void insertion_sort(int *A) { insertion_sort<n-1>(a); inner_loop<n-1>(a); }; template<> inline void insertion_sort<0>(int *A) {}; template<> inline void insertion_sort<1>(int *A) {}; Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

39 Metaprogramowanie testy porównawcze N = 10 funkcja 10.9ns metafunkcja (1) 4.7ns metafunkcja (2) 4.9ns sort. szybkie 20.0ns std::sort 17.0ns N = 16 funkcja 25.7ns metafunkcja (1) 12.7ns metafunkcja (2) 14.0ns sort. szybkie 34.6ns std::sort 30.3ns Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

40 Metaprogramowanie Biblioteka MPL Czym jest? Ogólna biblioteka wspomagająca metaprogramowanie Część Boost Zawiera sekwencje, iteratory, algorytmy (podobne do tych z STL) czasu kompilacji Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

41 Plan wykładu 1 Biblioteka Regex (Boost) 2 Biblioteka Graph (Boost) 3 Metaprogramowanie Wprowadzenie Coś poważniejszego Inne podejście 4 Inne biblioteki LEDA Blitz++ Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

42 LEDA Czym jest LEDA? Zaawansowana biblioteka struktur danych i algorytmów URL: Zalety Bardzo duża liczba gotowych struktur danych i algorytmów Duża wygoda użytkowania Wady Wysoka cena: kilka (kilkanaście) tysięcy Euro w zależności od wersji Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

43 Blitz++ Czym jest Blitz++? 3 Biblioteka specjalizowana dla obliczeń naukowych Dostępna na licencji GNU GPL 3 WWW: Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

44 Co za tydzień? Spotykamy się o 12:15 w sali 732 w celu omówienia tematów projektów Sebastian Deorowicz (PŚl) Boost, Metaprogramowanie, Inne biblioteki / 38

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do

Bardziej szczegółowo

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016 Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa

Bardziej szczegółowo

Język C++ wykład VIII

Język C++ wykład VIII Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz.

Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz. Technologie programowania Wykład 4 Przemek Błaśkiewicz 9 maja 2017 1 / 54 Szablony funkcji Często w programach zachodzi potrzeba użycia funkcji, które co do mechanizmu działaja tak samo, ale różnia się

Bardziej szczegółowo

Szablony. Szablony funkcji

Szablony. Szablony funkcji Szablony Szablony sa mechanizmem ponownego wykorzystania kodu (reuse) W przypadku funkcji ponownie wykorzystany jest algorytm W przypadku klas ponownie wykorzystane sa wszystkie skladowe Deklaracja szablonu

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

Szablony funkcji i klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Zaawansowane programowanie w języku C++ Biblioteka standardowa Zaawansowane programowanie w języku C++ Biblioteka standardowa Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna

Kurs programowania. Wykład 9. Wojciech Macyna Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy

Bardziej szczegółowo

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1) Programowanie Obiektowe (język C++) Wykład 10. FUNKCJE WZORCOWE Funkcje wzorcowe wprowadzenie (1) Funkcje wzorcowe wprowadzenie (2) int max ( int a, int b ) return a>b? a : b; Aby mieć analogiczną funkcję

Bardziej szczegółowo

Wprowadzenie do szablonów klas

Wprowadzenie do szablonów klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2008-2010 Bogdan Kreczmer Niniejszy

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 4 Funkcje przeciażone - Idea Przeciażanie funkcji (polimorfizm funkcji), to kolejna nowość w języku

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Programowanie Komponentowe Zarządzanie obiektami: kontenery Programowanie Komponentowe Zarządzanie obiektami: kontenery dr inż. Ireneusz Szcześniak jesień 2016 roku Kontenery Kontener w C++ to generyczna struktura danych. Przechowuje elementy jednego dowolnego

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

PROGRAMOWANIE GENERYCZNE W JĘZYKU C++

PROGRAMOWANIE GENERYCZNE W JĘZYKU C++ PROGRAMOWANIE GENERYCZNE W JĘZYKU C++ Krzysztof Rogala Instytu Automatyki i Informatyki Stosowanej Wydział Elektroniki i Technik Informacyjnych Politechniki Warszawskiej CZYM JEST PROGRAMOWANIE GENERYCZNE?

Bardziej szczegółowo

C++ wprowadzanie zmiennych

C++ wprowadzanie zmiennych C++ wprowadzanie zmiennych Każda zmienna musi być zadeklarowana, należy określić jej nazwę (identyfikator) oraz typ. Opis_typu lista zmiennych Dla każdej zmiennej rezerwowany jest fragment pamięci o określonym

Bardziej szczegółowo

STL: implementowanie algorytmów C++: STL. STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów

STL: implementowanie algorytmów C++: STL. STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów Algorytm przeszukiwania w głąb Przeszukiwanie grafu odwiedzenie wszystkich jego wierzchołków w kolejności jak na rysunku obok: C++: STL Implementowanie własnych algorytmów Reprezentacja grafu w programie

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Programowanie generyczne w C++ Dr inż. Andrzej Grosser Cz estochowa, 2016 2 Spis treści 1. Zadanie 3 5 1.1. Wprowadzenie.................................. 5 1.2. Obiekty funkcyjne................................

Bardziej szczegółowo

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31 Programowanie w C++ Wykład 8 Katarzyna Grzelak 7 maja 2018 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31 STL - powtórzenie STL Standard Template Libarary standardowa biblioteka szablonów Składowe biblioteki:

Bardziej szczegółowo

TEMAT : KLASY POLIMORFIZM

TEMAT : KLASY POLIMORFIZM TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Iteratory, Alokatory, Przyszłość C++, Boost

Iteratory, Alokatory, Przyszłość C++, Boost Iteratory, Alokatory, Przyszłość C++, Boost Biblioteka STL Sebastian Deorowicz Politechnika Śląska 2006 11 13 Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost 2006 11 13 1 / 50 Plan

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie klas c.d. Projektowanie klas przykład Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Wzorce funkcji (szablony)

Wzorce funkcji (szablony) Wzorce funkcji (szablony) Wzorce funkcji (ang. function template) dają możliwość wielokrotnego wykorzystywania tego samego kodu funkcji dla różnych typów danych. Załóżmy, że chcemy zdefiniować funkcję

Bardziej szczegółowo

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

Bardziej szczegółowo

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne 1 Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

Bardziej szczegółowo

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od

Bardziej szczegółowo

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 7 Katarzyna Grzelak 23 kwietnia 2018 K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40 Standard Template Library (STL) K.Grzelak (Wykład 7) Programowanie w C++ 2 / 40 C++ Templates

Bardziej szczegółowo

Algorytmy, iteratory, kolekcje niestandardowe

Algorytmy, iteratory, kolekcje niestandardowe Algorytmy, iteratory, kolekcje niestandardowe Biblioteka STL Sebastian Deorowicz Politechnika Śląska 2006 11 06 Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe 2006 11 06 1 / 83

Bardziej szczegółowo

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python. Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python. Pliki z rozwiązaniami projektu (wszystkie polecenia

Bardziej szczegółowo

Rekurencja. Przygotowała: Agnieszka Reiter

Rekurencja. Przygotowała: Agnieszka Reiter Rekurencja Przygotowała: Agnieszka Reiter Definicja Charakterystyczną cechą funkcji (procedury) rekurencyjnej jest to, że wywołuje ona samą siebie. Drugą cechą rekursji jest jej dziedzina, którą mogą być

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 5 1 SPECYFIKATOR const Specyfikator (przydomek) const: Umieszczenie przed nazwą zmiennej specyfikatora const w jej definicji informuje kompilator,

Bardziej szczegółowo

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,

Bardziej szczegółowo

Obsługa wyjątków. Język C++ WW12

Obsługa wyjątków. Język C++ WW12 Obsługa wyjątków Pozwala zarządzać błędami wykonania w uporządkowany sposób. Umożliwia automatyczne wywołanie części kodu, funkcji, metod klas, który trzeba wykonać przy powstaniu błędów. try //blok try

Bardziej szczegółowo

STL: Lekcja 1&2. Filozofia STL

STL: Lekcja 1&2. Filozofia STL STL: Lekcja 1&2 Tematy: Filozofia STL Po co nam STL? Podstawowa zawartość STL Co warto znać zanim zaczniemy pracę z STL?: wskaźniki Praca na tekstach: klasa String Vector: nowy wymiar standardowych tablic.

Bardziej szczegółowo

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std; Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu

Bardziej szczegółowo

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków ZAWARTOŚCI 3 PLIKOW W WORDZIE: MAIN.CPP: #include #include #include pamięci // Potrzebne do memset oraz memcpy, czyli kopiowania bloków #include "Rysowanie_BMP.h" using

Bardziej szczegółowo

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 1 Podstawy programowania dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Ramowy program warsztatów 1. Pierwsze: Podstawy programowania 2. Drugie:

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 04 X 2011 Wszelkie uwagi, poprawki, braki czy sugestie najlepiej wysyłać na maila. 1. wprowadzenie do Linuksa: kompilacja

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri); Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2 ( $%%) )'20 )*0) 1 / ) Jzyk C++ cz 3 Jarosław Gramacki Instytut Informatyki i Elektroniki # $$%%& ' ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )!" 2 # $$%%& ' ( $%%/,))3 ( %* 2 / 4 ( ( *' *''*,

Bardziej szczegółowo

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; } #include using namespace std; Prototypy funkcji Funkcja 1 void ela(int); double info (double); int main( ); return 0; Funkcja 2 void ela(int); Funkcja 3 double info(double); return 4*t; jeszcze

Bardziej szczegółowo

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy. 12. Rekurencja. Funkcja rekurencyjna funkcja, która wywołuje samą siebie. Naturalne postępowanie: np. zbierając rozsypane pionki do gry podnosi się zwykle pierwszy, a potem zbiera się resztę w ten sam

Bardziej szczegółowo

Wyjątki (exceptions)

Wyjątki (exceptions) Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.

Bardziej szczegółowo

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Funkcje przetwarzające teksty (biblioteka ) - tworzenie własnych

Bardziej szczegółowo

Wstęp do informatyki- wykład 11 Funkcje

Wstęp do informatyki- wykład 11 Funkcje 1 Wstęp do informatyki- wykład 11 Funkcje Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy Grębosz, Opus magnum

Bardziej szczegółowo

10.1 Szablony... 1 10.2 Szablony funkcji... 2 10.3 Szablony klas... 5 10.4 Szablony jako wstęp do biblioteki STL... 10

10.1 Szablony... 1 10.2 Szablony funkcji... 2 10.3 Szablony klas... 5 10.4 Szablony jako wstęp do biblioteki STL... 10 .1 Szablony... 1.2 Szablony funkcji... 2.3 Szablony klas....4 Szablony jako wstęp do biblioteki STL....1 Szablony Szablony definiują sparametryzowane rodziny klas, funkcji. Szablony deklarujemy i definiujemy

Bardziej szczegółowo

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz

Bardziej szczegółowo

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Algorytmika i programowanie Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer

Bardziej szczegółowo

Wstęp do informatyki- wykład 9 Funkcje

Wstęp do informatyki- wykład 9 Funkcje 1 Wstęp do informatyki- wykład 9 Funkcje Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy Grębosz, Opus magnum

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

Pytanie 1. Pytanie 2. Pytanie 3 WOJEWÓDZKI KONKURS INFORMATYCZNY. Treść pytania

Pytanie 1. Pytanie 2. Pytanie 3 WOJEWÓDZKI KONKURS INFORMATYCZNY. Treść pytania WOJEWÓDZKI KONKURS INFORMATYCZNY PRZEPROWADZANY W DOTYCHCZASOWYCH GIMNAZJACH W ROKU SZK. 2018/2019 Etap wojewódzki Pytanie 1 O rozmiarze obrazów w grafice rastrowej decyduje całkowita liczba pikseli (wielkość

Bardziej szczegółowo

Szablon klasy std::vector

Szablon klasy std::vector Szablon klasy std::vector Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat

Bardziej szczegółowo

obiekty funkcyjne - funktory

obiekty funkcyjne - funktory #include #include #include #include #include #include #include #include #include #include using namespace

Bardziej szczegółowo

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja Opis zagadnieo 1-3 Iteracja, rekurencja i ich realizacja Iteracja Iteracja to czynnośd powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa

Bardziej szczegółowo

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++ Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 10 Kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie

Bardziej szczegółowo

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie) Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie) Wprowadzenie Haszowanie jest to pewna technika rozwiązywania ogólnego problemu słownika. Przez problem słownika rozumiemy tutaj takie

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 6 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji

Bardziej szczegółowo

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną) 1 Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną) Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,

Bardziej szczegółowo

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

Program 14. #include <iostream> #include <ctime> using namespace std;

Program 14. #include <iostream> #include <ctime> using namespace std; Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału

Bardziej szczegółowo

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

Bardziej szczegółowo

Algorytmy i język C++

Algorytmy i język C++ Wykład 6 Wskaźniki Wskaźnik nie przechowuje wartości zmiennej ale, podobnie jak tablica, wskazuje miejsce w pamięci, w którym znajduje się zmienna danego typu. W poniższym przykładzie symbol * pomiędzy

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku C++ Biblioteka STL

Programowanie Obiektowo Zorientowane w języku C++ Biblioteka STL Programowanie Obiektowo Zorientowane w języku C++ Biblioteka STL Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

Mechanizm dziedziczenia

Mechanizm dziedziczenia Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia

Bardziej szczegółowo

Technologie cyfrowe semestr letni 2018/2019

Technologie cyfrowe semestr letni 2018/2019 Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 7 (08.04.2019) Wikipedia Programowanie komputerów proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów

Bardziej szczegółowo

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie (język C++) Wykład 1. Język C a C++. Definiowanie prostych klas. Typy referencyjne. Domyślne wartości argumentów. PrzeciąŜanie funkcji. Konstruktory, destruktory. Definiowanie

Bardziej szczegółowo

Wprowadzenie do programowania i programowanie obiektowe

Wprowadzenie do programowania i programowanie obiektowe Wprowadzenie do programowania i programowanie obiektowe Wirtotechnologia Zajęcia nr 10 autor: Grzegorz Smyk Wydział Odlewnictwa Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015 POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 4 : Napisy. Tablice dwuwymiarowe. Formaty

Bardziej szczegółowo

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ w C Zak lad Chemii Teoretycznej UJ 30 listopada 2006 1 2 3 Inicjalizacja zmiennych Zmienne jednowymiarowe można inicjować przy ich definicji. #include i n t x = 1 ; l o n g day = 1000L * 60L

Bardziej szczegółowo

Wstęp do programowania. Wykład 1

Wstęp do programowania. Wykład 1 Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.

Bardziej szczegółowo

Operacje wejścia/wyjścia odsłona pierwsza

Operacje wejścia/wyjścia odsłona pierwsza Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy 1 Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com

Bardziej szczegółowo

Zadanie 2: Arytmetyka symboli

Zadanie 2: Arytmetyka symboli 1 Cel ćwiczenia Zadanie 2: Arytmetyka symboli Wykształcenie umiejętności abstrahowania operacji arytmetycznych. Zapoznanie się i przećwiczenie mechanizmu tworzenia przeciążeń funkcji operatorowych. Utrwalenie

Bardziej szczegółowo