Kontakt:

pokój: 339
telefon: +48 71 3757836
mail:
www: http://www.ii.uni.wroc.pl/~prz/

Konsultacje (pokój 339) w trakcie semestru:

  • poniedziałek 15-17

Proszę wcześniej uzgodnić dokładny termin konsultacji drogą mailową.

język C++ (lato 2015)

Adres:

Instytut Informatyki
Uniwersytetu Wrocławskiego
ul. Joliot-Curie 15
50-383 Wrocław
OGŁOSZENIA

27 maja 2015 r.

Termin najbliższych zajęć w grupie PRz:

Zajęcia laboratoryjne grupy PRz w czwartek 28 maja 2015 r. rozpoczną się godzinę później, czyli o 11:15.

26 maja 2015 r.

Dołączenie biblioteki dll do projektu w Code::Blocks 13.12:

Zaczynamy od utworzenia projektu typu Dynamic Link Library. Dobrze jest na samym początku zmienić nazwy pliku nagłówkowego .h i pliku źródłowego .cpp z main na nazwy docelowe. Pamiętaj aby przed nazwą klasy umieścić deklarator DLL_EXPORT. Potem programujemy i kompilujemy.

Następnie tworzymy nowy projekt typu Console Application. Do projektu tego przenosimy z poprzedniego plik nagłówkowy .h i plik z biblioteką .dll. Następnie ustawiamy w opcjach kompilacji (menu settings, compiler...) w ustawieniach linkera (zakładka linker settings) dostęp do naszej biblioteki (do pola link libraries dokładamy za pomocą przycisku add lokalizację biblioteki). Potem programujemy, kompilujemy i uruchamiamy.

18 maja 2015 r.

Termin najbliższych zajęć w grupie PRz:

Zajęcia laboratoryjne grupy PRz w czwartek 21 maja 2015 r. zostaną wyjątkowo przesunięte na wcześniejszy termin, czyli na godzinę 8:15- 9:45 (o godzinie 10:00 rozpoczynam szkolenie poza budyniem Instytutu i będę musiał wyjść trochę wcześniej).

13 maja 2015 r.

Lokalizacja najbliższych zajęć w grupie PRz:

Zajęcia laboratoryjne grupy PRz w czwartek 14 maja 2015 r. zostaną wyjątkowo przeniesione do sali 137.

2 kwietnia 2015 r.

Termin oddania zadania 5 w grupie PRz:

Zadanie 5 będzie można oddać jeszcze w przyszłym tygodniu, tuż po Świętach Wielkanocnych.

4 marca 2015 r.

Komentarz do zadania 1:

Postać binarna liczby całkowitej, to liczba zapamiętana w zmiennej typu int, a nie ciąg znaków '0' i '1'.

Jeśli za pomocą cyfr rzymskich chcemy przedstawić liczbę 4000 lub nieco większą, to użyjmy w tym celu odpowiedniej ilości cyfr M (rzymska cyfra M ma wartość 1000). Na przykład wartość 6000 zapiszemy jako MMMMMM.

25 lutego 2015 r.

Pierwsze laboratorium:

W tym tygodniu laboratoriów nie będzie. Pierwsze zadanie pojawi się z terminem na następny tydzień, czyli 3-5 marca 2015 r.

21 lutego 2015 r.

Punkt informacyjny:

To w tym miejscu będą się pojawiać ważne ogłoszenia dotyczące organizacji zajęć związanych z tym przedmiotem. Proszę zaglądać do ogłoszń, szczególnie przed wykładem i przed laboratorium.

C++ to obiektowo zorientowany język programowania. Został on zaprojektowany przez B.Stroustrupa z myślą o programowaniu systemowym oraz do zaawansowanych obliczeń matematycznych. Ś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++, najważniejszymi technikami stosowanymi w programowaniu z wykorzystaniem tego języka oraz z obszernymi fragmentami biblioteki standardowej STL.

Wymagane przygotowanie

  • Umiejętność programowania strukturalnego w języku ANSI C.
  • Znajomość podstawowych struktur danych (tablice, listy, drzewa, grafy).

Literatura

Literatura papierowa polskojęzyczna:

  • B.Stroustrup: Język C++. WNT, Warszawa 2000.
  • N.M.Josuttis: C++. Biblioteka standardowa. Podręcznik programisty. Wydawnictwo Helion, Gliwice 2003.
  • J.Grębosz: Symfonia C++ (tom 1, 2, 3). Oficyna Kallimach, Kraków 2002.
  • J.Grębosz: Pasja C++ (tom 1, 2). Oficyna Kallimach, Kraków 2003.
  • S.B.Lippman, J.Lajoie: Podstawy języka C++. WNT, Warszawa 2001.
  • C.L.Tondo, B.P.Leung: Podstawy języka C++. Ćwiczenia i rozwiązania. WNT, Warszawa 2001.

Literatura elektroniczna polska i angielska:

Terminarz

  • wykład: środa 18-20 s.25 (Paweł Rzechonek)
  • laboratoria:
    wtorek 16-18 s.107 (Patryk Filipiak) - w rzeczywistości jest to laboratorium wirtualne
    środa 12-14 s.107 (Krzysztof Sornat) - ten termin ulegnie zmianie
    czwartek 10-12 s.107 (Paweł Rzechonek)

Laboratorium

Zasady zaliczenia przedmiotu

Ogólnie:
W semestrze będzie opublikowanych (na tej stronie) kilkanaście prostych zadań do zaprogramowania. Za każde poprawnie 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 kolegów czy koleżanki). W trakcie prezentacji programu trzeba się liczyć z pytamiami dotyczącymi zadania: metoda rozwiązania, zastosowane konstrukcje językowe, wykorzystane funkcje i klasy z biblioteki standardowej, itp.
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.

Lista zadań laboratoryjnych

  1. 3-5.03.2015: liczby rzymskie (pdf)
  2. 10-12.03.2015: punkty, odcinki i trójkąty na płaszczyźnie (pdf)
  3. 17-19.03.2015: stos napisów (pdf)
  4. 24-26.03.2015: tablica bitów (pdf)
  5. 31.03-2.04.2015: kolejka dwustronna (pdf)
  6. 14-16.04.2015: wyrażenia (pdf)
  7. 21-23.04.2015: długie liczby całkowite (pdf)
  8. 28-30.04.2015: mieszanie i sortowanie (pdf)
  9. 12-14.05.2015: opakowanie tablicy (pdf)
  10. 19-21.05.2015: kalkulator ONP (pdf)
  11. 26-28.05.2015: grafy (pdf)
  12. 9-11.06.2015: obiekty funkcyjne i lambdy (pdf) - zadanie dodatkowe

Ranking

Wykład

Materiał omawiany na wykładach

Spis wykładów:

1: wprowadzenie do C++ 2: klasy i obiekty 3: semantyka przenoszenia
4: przeciążanie operatorów 5: dziedziczenie 6: polimorfizm
7: konwersje, przestrzenie nazw 8: wyjątki 9: szablony
10: strumienie 11: kolekcje i iteratory 12: własne biblioteki
13: obiekty funkcyjne i lambdy 14: narzędzia programistyczne 15: programowanie współbieżne
25.02.2015 (sprawy organizacyjne)
Omawiane zagadnienia:
zakres materiału przedstawiany na wykładzie, zadania laboratoryjne i zasady zaliczania przedmiotu, kontakt z wykładowcą, literatura, historia C++, najważniejsze cechy języka.
Prezentacja:
sprawy organizacyjne (ppt)
25.02.2015 (wprowadzenie do C++)
Omawiane zagadnienia:
pierwsze programy, struktura programu (pliki źródłowe i nagłówkowe), referencje, napisy, klasa jako nowy typ danych, składowe w klasie, tworzenie i usuwanie obiektów na stosie i na stercie, konstruktor, standardowe wejście i wyjście.
Prezentacja:
łagodne wprowadzenie do C++ (ppt)
Programy z wykładu:
program powitalny (witaj.cpp)
program przeliczający milimetry na cale (mm2inch.cpp)
program przepisujący standardowe wejście na wyjście z dodaniem numerów linii (nrlinii.cpp)
4.03.2015 (klasy i obiekty)
Omawiane zagadnienia:
klasy i obiekty, pola i metody składowe, ukrywanie składowych, przeciążanie funkcji i metod, konstruktory i destruktor, pola i metody stałe, wyrażenia stałe, obiekty tymczasowe.
Prezentacja:
klasy i obiekty (ppt)
Programy z wykładu:
klasa Punkt, jej implementacja i program testowy (punkt.cpp, punkt.cpp, test_punkt.cpp)
kiedy ulotność ma znaczenie (constvolatile.cpp)
funkcja z parametrem tymczasowym (rwartosci.cpp)
11.03.2015 (semantyka przenoszenia)
Omawiane zagadnienia:
argumenty tymczasowe, semantyka przenoszenia, inicjalizacja za pomocą list, składowe statyczne, funkcje i metody wbudowane, argumenty domyślne.
Prezentacja:
semantyka przenoszenia (ppt)
18.03.2015 (przeciążanie operatorów)
Omawiane zagadnienia:
funkcje i klasy zaprzyjaźnione, przeciążanie operatorów, operatory składowe i zaprzyjaźnione, operatory zwiększania ++ i zmniejszania --, operator przypisania kopiującego =, 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 <<.
Prezentacja:
przeciążanie operatorów (ppt)
Programy z wykładu:
lzesp.hpp / lzesp.cpp / test_lzesp.cpp
25.03.2015 (dziedziczenie)
Omawiane zagadnienia:
istota dziedziczenia, dostęp do odziedziczonych składników, projektowanie hierarchii klas, dziedziczenie wielobazowe, dziedziczenie wirtualne, konwersje standardowe wskaźników i referencji.
Prezentacja:
dziedziczenie (ppt)
1.04.2015 (polimorfizm)
Omawiane zagadnienia:
funkcje wirtualne, implementacja wywołań polimorficznych, wczesne i późne wiązanie, klasy abstrakcyjne.
Prezentacja:
polimorfizm (ppt)
8.04.2015 (konwersje, przestrzenie nazw)
Omawiane zagadnienia:
konstruktory konwertujące, operatory konwersji w klasie, konwersje w tradycyjnym stylu i nowoczesne operatory konwersji, RTTI, automatyczne określanie typu, wydobycie typu wyrażenia;
przestrzenie nazw, deklaracja użycia i dyrektywa użycia, przestrzeń anonimowa, komponowanie i wybór w przestrzeniach nazw, standardowa przestrzeń nazw.
Prezentacja:
konwersje, przestrzenie nazw (ppt)
15.04.2015 (wyjątki)
Omawiane zagadnienia:
obsługa błędów, zgłaszanie i łapanie wyjątków, grupowanie wyjątków, dopasowywanie wyjątków, zdobywanie zasobów poprzez inicjalizację, wyjątki w konstruktorach i w destruktorach, specyfikacja wyjątków, wyjątki standardowe, definiowanie własnych wyjątków.
Prezentacja:
wyjątki (ppt)
22.04.2015 (szablony)
Omawiane zagadnienia:
definicja szablonu, funkcje i klasy szablonowe, przeciążanie szablonów funkcji, specyfikowanie strategii za pomocą parametrów szablonu, parametry domyślne w szablonach, specjalizacja szblonów, klasy szablonowe, składowe statyczne w szablonach, przyjaźń a szablony, dziedziczenie w przypadku szablonów.
Prezentacja:
szablony (ppt)
29.04.2015 (strumienie)
Omawiane zagadnienia:
strumienie w bibliotece standardowej, operatory >> i << do operacji formatowanych, sterowanie formatem, manipulatory, nieformatowane operacje na strumieniach, błędy w strumieniach, strumienie związane z plikami, strumienie związane z łańcuchami, synchronizacja strumieni.
Prezentacja:
strumienie (ppt)
13.05.2015 (kolekcje i iteratory)
Omawiane zagadnienia:
struktura STL, pary i tuple, minimum i maksimum, zamiana wartości, ograniczenia liczbowe, operatory porównania i przestrzeń rel_ops, sprytne wskaźniki do zasobów wspierają technikę zdobywania zasobów poprzez inicjalizację;
kolekcje, iteratory.
Prezentacja:
kolekcje i iteratory (ppt)
20.05.2015 (własne biblioteki)
Opisane zagadnienia:
modularyzacja kodu, tworzenie bibliotek.
Prezentacja:
własne biblioteki (ppt)
27.05.2015 (obiekty funkcyjne i lambdy)
Omawiane zagadnienia:
obiekty funkcyjne, lambdy.
Prezentacja:
obiekty funkcyjne i lambdy (ppt)
3.06.2015 (narzędzia programistyczne)
Omawiane zagadnienia:
współczynniki wymierne, pomiar czasu, liczby pseudolosowe.
Prezentacja:
narzędzia programistyczne (ppt)
10.06.2015 (programowanie współbieżne)
Omawiane zagadnienia:
pojęcie wątku w procesie, uruchamianie wątków w C++, synchronizacja wątków, muteksy i semafory, zmienne warunkowe.
Prezentacja:
programowanie współbieżne (ppt)

Instytut Informatyki