Programowanie (lic) lato 2011/12

Język wykładowy Polski
Opiekun Paweł Rychlikowski
Liczba godzin
Rodzaj Obowiązkowy 2
ECTS 6
Polecany dla I roku Nie
Egzamin Tak

Opis przedmiotu:

**Cel zajęć** Celem wykładu jest zapoznanie studentów z problematyką tworzenia oprogramowania, ze szczególnym uwzględnieniem struktury języków programowania, kompilacji programów i zaawansowanych konstrukcji językowych wspierających tworzenie programów. Zasadniczo jako języka programowania ilustrującego omawiane zagadnienia używa się C++. Dlatego zakłada się, że studenci posiedli umiejętność programowania w języku ANSI C na poziomie podstawowym. Konstrukcje języka C++ nie występujące w języku C są omawiane na wykładzie. Niektóre mechanizmy, nie występujące w języku C++ lub trudne do opisania w tym języku omawia się na przykładzie języków Ada 95 (modularyzacja programów, programowanie współbieżne), Standard ML (programowanie funkcjonalne) i Prolog (programowanie logiczne). Zakłada się, że po zakończeniu zajęć studenci będą posiadać elementarną zdolność programowania w tych trzech językach. W porównaniu z przedmiotem o tej samej nazwie wykładanym na studiach magisterskich, większy nacisk jest położony na praktyczną stronę omawianych zagadnień, natomiast problemy matematycznej teorii języków programowania są ograniczone do niezbędnego minimum. **Program:** 1. Składnia (6 godz.). Opis składni języków. Opis składni języka C. Notacja EBNF. Drzewa rozbioru. Automatyczna analiza składniowa. Konstruowanie parserów dla prostych języków (wyrażenia itp). Wyrażenia: operatory, priorytety, kierunki łączności. Odwrotna notacja polska. Algorytm przekładu wyrażeń na odwrotną notację polską z użyciem stosu. Automaty skończone i wyrażenia regularne. Wyszukiwanie wzorca w tekście z użyciem automatu skończonego. 2. Programowanie niskopoziomowe (6 godz.). Język maszynowy, asembler i język wysokiego poziomu. Budowa kompilatorów: schematy przekładu instrukcji, generowanie kodu wynikowego. 3. Konstruowanie oprogramowania metodą systematyczną (1 godz.). Projektowanie oprogramowania metodą wstępującą i zstępującą. Strukturalna, proceduralna i obiektowa technika programowania. Projektowanie, programowanie i kodowanie strukturalne. 4. Programowanie imperatywne (4 godz.). Dane i typy danych. Przydział pamięci dla typów złożonych. Instrukcje sterujące. Diagramy przepływu. Wyjątki. Bloki i procedury. Przekazywanie parametrów. Zarządzanie pamięcią. Stos wywołań i pamięć dynamiczna. Rekursja, rekursja ogonowa. 5. Specyfikacja i weryfikacja programów (4 godz.). Asercje. Reguły wnioskowania. Dowodzenie własności programów. Wyprowadzanie programów z niezmienników. 6. Parametryzacja i modularyzacja programów (6 godz.). Polimorfizm. Wzorce w C++. Moduły i rozdzielna kompilacja. Pliki nagłówkowe w C++. Pakiety w Adzie. Abstrakcyjne i konkretne typy danych. 7. Problemy inżynierii oprogramowania (4 godz.). Proces tworzenia oprogramowania. Specyfikacja problemu. Projektowanie rozwiązania: metoda wstępująca, zstępująca i mieszana. Strategie: "dziel i rządź", "programowanie z nawrotami", "metoda kolejnych ulepszeń", algorytmy zachłanne. Implementacja: oprogramowanie przyjazne, prototypowanie, efektywność. Testowanie (przygotowywanie danych testowych). Pielęgnacja oprogramowania. Dokumentacja: dokumentacja wewnętrzna programisty). Dokumentacja zewnętrzna (podręcznik użytkownika). 8. Programowanie obiektowe (6 godz.). Obiekty. Ukrywanie danych. Dziedziczenie. Obiekty w języku C++. 9. Programowanie funkcjonalne (7 godz.). Podstawy programowania w języku Standard ML. Trwałe i ulotne struktury danych. Skutki uboczne. Przetwarzanie list. Algorytmy rekurencyjne. 10. Programowanie współbieżne (8 godz.). Zadania w Adzie. Mechanizm spotkań. Problem pięciu filozofów. 11. Programowanie logiczne (8 godz.). Podstawy programowania w języku Prolog. **Wymagania:**

Wykłady

Lista
Prowadzący Termin zajęć Limit Zapisani Kolejka
Tomasz Wierzbicki
300 203 0

UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.

Ćwiczenia

Lista
Prowadzący Termin zajęć Limit Zapisani Kolejka
Antoni Kościelski
22 22 0
Małgorzata Biernacka
22 17 0
Antoni Kościelski
22 23 0
Tomasz Wierzbicki
22 15 0
Wojciech Kleszowski
22 21 0
Wojciech Kleszowski
22 21 0
Małgorzata Biernacka
22 20 0
Dariusz Biernacki
22 22 0
Antoni Kościelski
22 7 0
Antoni Kościelski
12 16 0
Witold Charatonik
22 22 0

UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.

Pracownie

Lista
Prowadzący Termin zajęć Limit Zapisani Kolejka
Nieznany Prowadzący
200 175 0

UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.

Repetytoria

Lista
Prowadzący Termin zajęć Limit Zapisani Kolejka
Marek Piotrów
300 195 0

UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.


Konsultacje prowadzących:


Imię i nazwisko Pokój Konsultacje
Dariusz Biernacki 242 wtorek 14-16 (po uzgodnieniu przez e-mail)
Marek Piotrów 348 Czwartek 13-15 - należy zapowiedzieć się przez email
Małgorzata Biernacka 348 wt., pt. 13-14 + możliwe inne terminy, po wcześniejszym umówieniu się
Tomasz Wierzbicki 303 Po wcześniejszym umówieniu pocztą elektroniczną. Nie w trakcie lub bezpośrednio przed moimi zajęciami (plan zajęć jest dostępny w systemie Zapisy).
Wojciech Kleszowski 324 wtorek 12.15-14.15
Witold Charatonik 347 wtorek 14-16 lub po indywidualnym uzgodnieniu terminu (semestr letni 2024)
Nieznany Prowadzący
Antoni Kościelski 311 sem. letni 2023/24: piątki, godz. 12.30-13.30, pokój 311, a także konsultacje zdalne za pośrednictwem MSTeams, w piątki, godz. 19.15 - 19.30 i dłużej, jeżeli będą zainteresowani. Zapraszam też na konsultacje zdalne lub w Instytucie w terminach uzgodnionych ze stosownym wyprzedzeniem np. pocztą elektroniczną.