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++ (semestr letni 2013/2014)

Adres:

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

2 czerwca 2014 r.

Ostatni wykład:

Na ostatnim wykładzie pan Andrzej Krawczyk z firmy Human Dialog opowie o nowoczesnych technikach programowania w języku C++ w jego firmie. Po jego wystąpieniu przewiduję krótką dyskusję z prelegentem. Serdecznie zapraszam wszystkich zainteresowanych, również tych niezapisanych na wykład.

2 czerwca 2014 r.

Zadanie 11:

Zadanie 11 jest zadaniem dodatkowym - jego realizacja jest dobrowolna. Punty z tego zadania będa się doliczały do sumy punktów uzyskanych przez studenta, ale nie będą zmieniały progów punktowych na zaliczenie.

19 maja 2014 r.

Zadanie 9:

Umieściłem niewłaściwy link do zadania 9, dlatego przesuwam na następny tydzień 26-29 maja 2014 termin jego wykonania.

14 kwietnia 2014 r.

Wykład 8 i 9:

Zaraz po Świętach Wielkanocnych w poniedziałek 28 kwietnia przeprowadzę dwa wykłady jeden po drugim (o 17:15 i o 19:15).

14 kwietnia 2014 r.

Zadanie 7:

Ze względu na Święta Wielkanocne, weekend majowy i juwenaliia termin oddania zadania 7 jest dość odległy - myślę jednak, że to nie zdemoralizuje studentów tylko da im czas na porządne zaprogramowanie tego zadania.

1 marca 2014 r.

Szybki kurs programowania w C/C++:

Studentom, którzy słabo znają język C, polecam weekendowy sprint po tym kursie.

1 marca 2014 r.

Pierwsze laboratorium:

Pierwsze laboratoria dla wszystkich grup odbędą się w przyszłym tygodniu 3-6 marca 2014.

24 lutego 2014 r.

Pierwszy wykład:

Pierwszy wykład z języka C++ odbędzie się 3 marca 2014.

24 lutego 2014 r.

Punkt informacyjny:

W tym miejscu będą się pojawiać ważne ogłoszenia dotyczące organizacji zajęć związanych z tym przedmiotem. Proszę zaglądać do tych 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: poniedziałek 17-19 s.119 (Paweł Rzechonek)
  • laboratoria:
    poniedziałek 19-21 s.7 (Paweł Rzechonek)
    wtorek 14-16 s.7 (Piotr Wnuk-Lipiński)
    środa 10-12 s.110 (Paweł Rzechonek)
    czwartek 10-12 s.108 (Piotr Wnuk-Lipiński)

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-6.03.2014: prosta statystyka tekstu (pdf)
  2. 10-13.03.2014: punkty i odcinki na płaszczyźnie (pdf)
  3. 17-20.03.2014: stos napisów (pdf)
  4. 24-27.03.2014: liczby pierwsze (pdf)
  5. 31.03-3.04.2014: tablica bitów (pdf)
  6. 7-10.04.2014: stos i kolejka (pdf)
  7. 14-17.04.2014: wyrażenia (pdf)
  8. 30.04-7.05.2014: macierze (pdf)
  9. 12-15.05.2014: konwersje napisowe (pdf)
  10. 26-29.05.2014: manipulatory i bezpieczne pliki tekstowe (pdf)
  11. 2-5.06.2014: kalkulator ONP (pdf)
  12. 9-12.06.2014: producenci i konsumenci (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: wyjątki 8: sprytne wskaźniki, przestrzenie nazw 9: konwersje
10: szablony 11: strumienie 12: narzędzia programistyczne
13: kolekcje i algorytmy 14: programowanie współbieżne 15: własne biblioteki
3.03.2014 (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)
3.03.2014 (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)
10.03.2014 (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)
7.03.2013 (semantyka przenoszenia)
Omawiane zagadnienia:
semantyka przenoszenia, składowe statyczne, funkcje i metody wbudowane, argumenty domyślne.
Prezentacja:
semantyka przenoszenia (ppt)
24.03.2014 (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
31.03.2014 (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)
7.04.2014 (polimorfizm)
Omawiane zagadnienia:
funkcje wirtualne, implementacja wywołań polimorficznych, wczesne i późne wiązanie, klasy abstrakcyjne.
Prezentacja:
polimorfizm (ppt)
14.04.2014 (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)
28.04.2014 (sprytne wskaźniki, przestrzenie nazw)
Omawiane zagadnienia:
wskaźniki do składowych, opakowane wskaźniki do zasobów wspierają zdobywanie zasobów poprzez inicjalizację, sprytne wskaźniki;
przestrzenie nazw, deklaracja użycia i dyrektywa użycia, przestrzeń anonimowa, komponowanie i wybór w przestrzeniach nazw, standardowa przestrzeń nazw.
Prezentacja:
sprytne wskaźniki, przestrzenie nazw (ppt)
28.04.2014 (konwersje)
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.
Prezentacja:
konwersje (ppt)
05.05.2014 (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)
19.05.2014 (narzędzia programistyczne)
Omawiane zagadnienia:
pary, tuple, ..., funkcje lambda.
Prezentacja:
strumienie (ppt)
12.05.2014 (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)

Instytut Informatyki