KARTA MODUŁU / KARTA PRZEDMIOTU Załącznik nr 7 do Zarządzenia Rektora nr 10/12 z dnia 21 lutego 2012r. Kod modułu Nazwa modułu Nazwa modułu w języku angielskim Obowiązuje od roku akademickiego 2012/1013 EiT_S_I_PwJC Programowanie w języku C/C++ Programming in C/C++ A. USYTUOWANIE MODUŁU W SYSTEMIE STUDIÓW Kierunek studiów Poziom kształcenia Profil studiów Forma i tryb prowadzenia studiów Specjalność Jednostka prowadząca moduł Koordynator modułu Zatwierdził: Elektronika i Telekomunikacja I stopnień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny) stacjonarne (stacjonarne / niestacjonarne) przedmiot kierunkowy Katedra Elektroniki i Systemów Inteligentnych dr inż. Filip Rudziński Dr hab. inż. Andrzej Kapłon, prof. PŚk. B. OGÓNA CHARAKTERYSTYKA PRZEDMIOTU Przynależność do grupy/bloku przedmiotów Status modułu Język prowadzenia zajęć Usytuowanie modułu w planie studiów - semestr Usytuowanie realizacji przedmiotu w roku akademickim Wymagania wstępne Egzamin iczba punktów ECTS 4 przedmiot kierunkowy (podstawowy / kierunkowy / inny HES) obowiązkowy (obowiązkowy / nieobowiązkowy) polski semestr II semestr letni (semestr zimowy / letni) Metodyka i technika programowania (kody modułów / nazwy modułów) nie (tak / nie) Forma prowadzenia zajęć wykład ćwiczenia laboratorium projekt inne w semestrze 30 30
C. EFEKTY KSZTAŁCENIA I METODY SPRAWDZANIA EFEKTÓW KSZTAŁCENIA Cel modułu Celem modułu jest wykształcenie studentów w zakresie implementacji programów komputerowych, z wykorzystaniem języków programowania C i C++ oraz paradygmatów programowania imperatywnego, proceduralnego i obiektowego. (3-4 linijki) Symbol efektu U_01 Efekty kształcenia Posiada elementarną wiedzę z zakresu technik projektowania i kompilacji programów oraz inżynierskich narzędzi wspomagających proces programowania. Posiada uporządkowaną wiedzę dotyczącą programowania imperatywnego oraz proceduralnego, w tym sposobów reprezentacji danych w pamięci komputera, sekwencyjnego przetwarzania danych, technik bezpośredniego dostępu do pamięci i urządzeń wejścia/wyjścia. Dysponuje podstawową wiedzą z obszaru programowania obiektowego, rozumie pojęcia hermetyzacji oraz wielopostaciowości, mechanizmy obsługi wyjątków i przeciążania operatorów. Wie jak projektować abstrakcyjne typy danych. Zna techniki programowania generycznego, w tym implementacji uniwersalnych szablonów typów danych lub funkcji. Opanował posługiwanie się kompilatorem, w tym systemem pomocy i dokumentacją języka C/C++. Potrafi zaprojektować i zaprogramować podstawowe konstrukcje algorytmiczne do przetwarzania danych typów podstawowych lub złożonych. Umie tworzyć przejrzysty i zrozumiały kod źródłowy, zachowując podstawowe zasady hermetyzacji oraz jednolitą konwencję nazewnictwa, dekomponować kod źródłowy na niezależne funkcjonalnie oraz łatwe w utrzymaniu moduły, procedury lub obiekty. Potrafi sukcesywnie rozwijać i udoskonalać kod źródłowy programu, uzupełniając istniejące w nim obiekty o nowe funkcjonalności lub tworząc nowe, pochodne obiekty na bazie istniejących. Posiada świadomość wpływu jakości kodu źródłowego (jednolite konwencje nazewnicze, przejrzystość i formatowanie tekstu) na koszt i stopień trudności jego utrzymania oraz zarządzania. Rozumie znaczenie hermetyzacji i prawidłowego podziału funkcjonalnego kodu w pracy zespołowej. Forma prowadzenia zajęć (w/ć/l/p/inne) W W odniesienie do efektów kierunkowych K_W07 K_W07 K_U01 K_U24 K_U24 K_U24 W, K_K02 W, K_K03 odniesienie do efektów obszarowych T1A_W04 T1A_W07 T1A_W04 T1A_W07 T1A_U01 T1A_U09 T1A_U16 T1A_U09 T1A_U10 T1A_U16 T1A_U09 T1A_U16 T1A_K02 T1A_K03 Treści kształcenia: 1. Treści kształcenia w zakresie wykładu Nr wykładu Treści kształcenia 1 Wprowadzenie do programowania w języku C/C++. Wielomodułowa budowa aplikacji. Konwencje nazewnicze. Etapy tworzenia pliku wykonywalnego (wstępna analiza, kompilacja, konsolidacja). Rodzaje Odniesienie do efektów kształcenia dla modułu
kompilacji (debug, release). Narzędzia wspomagające (debugger, codeguard). 2 Podstawowe typy danych. iczby całkowite w systemie liczbowym NKB i U2. iczby rzeczywiste w reprezentacji zmiennopozycyjnej. Dane logiczne, wyliczeniowe, znaki ASCII i UNICODE. Deklaracja i definicja zmiennych. Referencje do danych. Modyfikatory typów const, volatile, extern, register. 3 Operatory. Operatory arytmetyczne, logiczne, bitowe i przypisania. Operator specjalne: warunkowy i sizeof. Różnice w funkcjonowaniu wybranych operatorów w językach Pascal i C/C++. 4 Instrukcje sterujące. Graficzna reprezentacja instrukcji sterujących (tzw. schematy blokowe) oraz ich implementacja w języku C/C++. Wprowadzenie do złożoności obliczeniowej algorytmów. 5 Procedury i funkcje. Deklaracja i definicja funkcji. Zakres ważności zmiennych/stałych. Metody przekazywania argumentów do funkcji (przez wartość, referencję). Argumenty domniemane, nieznane. Rekurencja. Przeciążanie nazw funkcji. Modyfikator typów static oraz modyfikatory funkcji const, volatile, inline. 6 Złożone typy danych. Tablice jedno- i dwuwymiarowe automatyczne. Łańcuchy znaków. Struktury. Unie. Pola bitowe. Klasy. Funkcje składowe klas. Przeciążanie nazw funkcji składowych. Funkcje specjalne (konstruktory i destruktory). Definiowanie własnych typów danych. 7 Dynamiczna alokacja pamięci. Wskaźniki do danych i funkcji. Przekazywanie argumentów do funkcji, z wykorzystaniem wskaźników. Funkcje malloc i free oraz operatory new i delete. Dynamiczna alokacja danych typów podstawowych i złożonych. Wprowadzenie do abstrakcyjnych typów danych (lista, drzewo, graf). 8 Operacje wejścia/wyjścia. Narzędzia modułu <stdio.h>. Narzędzia modułu <iostream.h>. Zapisywanie/odczytywanie danych do/z plików tekstowych oraz binarnych. 9 Preprocesor. Dyrektywy preprocesora. Definiowanie wyrażeń i makr. Wyrażenia predefiniowane. Kompilacja warunkowa. Stały typ danych kontra stała preprocesora. Wady i zalety makr preprocesora w przykładach. 10 Dziedziczenie. Klasa bazowa i pochodna. Składniki klas private, protected, public. Dziedziczenie jednokrotne. Dziedziczenie wielokrotne. Wskaźnik this. 11 Polimorfizm. Mechanizm wczesnego i późnego wiązania. Funkcje składowe wirtualne. Funkcje składowe abstrakcyjne. Klasy abstrakcyjne. Omówienie ważniejszych różnic pomiędzy językami C/C++ i JAVA w kontekście polimorfizmu. 12 Przeciążanie operatorów. Przeciążanie operatorów arytmetycznych globalnych i lokalnych. Przeciążanie operatorów new i delete. 13 Obsługa wyjątków. Rodzaje wyjątków. Obsługa wyjątków arytmetycznych w języku C. Obsługa wyjątków w C++. Znaczenia słów kluczowych try, catch, try, finally, except. Typowe konstrukcje programistyczne obsługujące wyjątki. 14 Rzutowanie typów danych. Rzutowanie typów podstawowych i złożonych. Mechanizm RTTI (ang. Runtime Type Information). Operatory static_cast, dynamic_cast, reinterpret_cast, const_cast. Przeciążanie operatorów rzutowania. 15 Programowanie generyczne. Szablony funkcji i klas. Makra preprocesora kontra funkcje szablonowe. Wykorzystanie szablonów do rekurencji.
2. Treści kształcenia w zakresie zadań laboratoryjnych Nr zajęć lab. Treści kształcenia 1 Wprowadzenie do programowania w języku C/C++. Zapoznanie się ze środowiskiem programistycznym (Embracadero C++ Builder lub Microsoft Visual Studio). Tworzenie wielomodułowego projektu aplikacji. Kompilacja projektu w trybie debug i release. Ćwiczenia w obsłudze debuggera. Kompilacja z włączonym narzędziem codeguard. 2 Podstawowe typy danych. Definiowanie zmiennych i stałych w programie. Zapoznanie się z binarnymi reprezentacjami liczb całkowitych w systemie NKB i U2 oraz rzeczywistych zmiennopozycyjnych. Definiowanie wyliczeniowych typów danych. 3 Operatory. Zapoznanie się z funkcjonowaniem operatorów arytmetycznych, w tym z problemami przekroczenia dopuszczalnych wartości liczb. Zastosowanie operatorów bitowych do podstawowych operacji na liczbach całkowitych: ustawianie, zerowanie, negacja i badanie wartości pojedynczych (lub grup) bitów w liczbie, dzielenie i mnożenie przez wielokrotność liczby 2, badanie znaku lub parzystości liczby, itp. 4 Instrukcje sterujące. Tworzenie podstawowych konstrukcji algorytmicznych wykorzystujących instrukcje warunkową (if..else), pętle z ustaloną i nieustaloną "z góry" liczbą iteracji (for, while, do..while), instrukcje wielokrotnego wyboru (switch) oraz skoków warunkowych (break, continue) i skoku bezwarunkowego (goto). 5 Procedury i funkcje. Definiowanie i deklarowanie funkcji w aplikacjach wielomodułowych. Przekazywanie argumentów do funkcji przez wartość i przez referencję. Programowanie funkcji obliczających wybrane wyrażenia matematyczne (np. silnia, liczba pi), metodami iteracyjnymi lub rekurencyjnymi. 6 Złożone typy danych. Definiowanie tablic jedno i dwuwymiarowych, struktur, unii oraz klas. Badanie reprezentacji binarnej wybranych typów złożonych. Przekazywanie danych typu złożonego do funkcji przez wartość i przez referencję oraz badanie wpływu obu metod na złożoność obliczeniową algorytmów. 7 Dynamiczna alokacja pamięci. Dynamiczne alokowanie danych typu złożonego (tablic dwuwymiarowych oraz klas). Przekazywanie argumentów do funkcji z wykorzystaniem wskaźników. Zapoznanie się z wybranymi operacjami arytmetycznymi na wskaźnikach (funkcje analizujące łańcuchy znaków). 8 Operacje wejścia/wyjścia. Programowanie operacji zapisu/odczytu danych typów podstawowych i złożonych do/z pliku, z wykorzystaniem funkcji modułu <stdio.h>. Techniki uporządkowania danych w plikach binarnych: uporządkowanie w pakietach o stałych rozmiarach (rekordach) lub w pakietach o zmiennych rozmiarach. 9 Preprocesor. Definiowanie własnych stałych oraz makr preprocesora (makra MAX, MIN, ABS, SQR, SQRT, itp.). Zastosowanie dyrektyw preprocesora do kompilacji warunkowej kodu źródłowego. 10 Dziedziczenie. Programowanie hierarchicznej (drzewiastej) bazy danych, z wykorzystaniem klas i dziedziczenia jednokrotnego - część I. 11 Polimorfizm. Programowanie hierarchicznej (drzewiastej) bazy danych, z wykorzystaniem klas i dziedziczenia jednokrotnego - część II. 12 Przeciążanie operatorów. część I. Przeciążanie operatorów arytmetycznych dla liczby zespolonej. Odniesienie do efektów kształcenia dla modułu U_01
13 Obsługa wyjątków. część II. Definiowanie wyjątków dla liczby zespolonej. 14 Rzutowanie typów danych. część III. Przeciążanie operatorów rzutowania liczby zespolonej na typy danych podstawowych. 15 Programowanie generyczne. część IV. Projekt szablonu liczby zespolonej, przygotowanego do tzw. konkretyzacji z wykorzystaniem jednego z trzech podstawowych typów liczb rzeczywistych w reprezentacji zmiennopozycyjnej. Metody sprawdzania efektów kształcenia Symbol efektu U_01 Metody sprawdzania efektów kształcenia (sposób sprawdzenia, w tym dla umiejętności odwołanie do konkretnych zadań projektowych, laboratoryjnych, itp.) Pisemny test nr 1 (w 10-tym tygodniu zajęć). Pisemny test nr 2 (w 15-tym tygodniu zajęć). Test z wykorzystaniem komputera - implementacja wybranego problemu algorytmicznego (w 10-tym tygodniu zajęć). Projekt domowy - implementacja specjalistycznego typu danych do obliczeń numerycznych (w 15-tym tygodniu zajęć).
D. NAKŁAD PRACY STUDENTA Bilans punktów ECTS obciążenie Rodzaj aktywności studenta 1 Udział w wykładach 30 2 Udział w ćwiczeniach 3 Udział w laboratoriach 30 4 Udział w konsultacjach (2-3 razy w semestrze) 1 5 Udział w zajęciach projektowych 6 Konsultacje projektowe 7 Udział w egzaminie 8 9 iczba godzin realizowanych przy bezpośrednim udziale nauczyciela 61 akademickiego (suma) 10 iczba punktów ECTS, którą student uzyskuje na zajęciach wymagających bezpośredniego udziału nauczyciela akademickiego (1 punkt ECTS=25-30 godzin obciążenia studenta) 2,44 11 Samodzielne studiowanie tematyki wykładów 0,2 12 Samodzielne przygotowanie się do ćwiczeń 13 Samodzielne przygotowanie się do kolokwiów 0,4 14 Samodzielne przygotowanie się do laboratoriów 0,56 15 Wykonanie sprawozdań 15 Przygotowanie do kolokwium końcowego z laboratorium 17 Wykonanie projektu lub dokumentacji 0,4 18 Przygotowanie do egzaminu 19 20 iczba godzin samodzielnej pracy studenta 39 (suma) 21 iczba punktów ECTS, którą student uzyskuje w ramach samodzielnej pracy (1 punkt ECTS=25-30 godzin obciążenia studenta) 1,56 22 Sumaryczne obciążenie pracą studenta 100 23 Punkty ECTS za moduł 1 punkt ECTS=25-30 godzin obciążenia studenta 4 24 Nakład pracy związany z zajęciami o charakterze praktycznym Suma godzin związanych z zajęciami praktycznymi 65 25 iczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym 1 punkt ECTS=25-30 godzin obciążenia studenta 2,6 E. ITERATURA Wykaz literatury Witryna WWW modułu /przedmiotu 1. Faison T.: "Borland C++ 4.5 programowanie obiektowe", ReadMe, 1996. 2. Grębosz J.: "Symfonia C++", Oficyna Kallimach, 1996. 3. Kernighan B.W., Ritchie D.M.: "Język ANSI C", WNT, 2001. 4. Mayers S.: "Język C++ bardziej efektywny", WNT, 1998. 5. Stroustrup B.: "Język C++", WNT, 2000. http://www.tu.kielce.pl/wydzial-elektrotechniki-automatyki-i-informatyki/katalog-ects/