Paradygmaty i języki programowanie
Zagadnienia są tylko
przykładowe i nie wyczerpują tematyki wykładu.
Student powinien opierać się na własnych notatkach oraz podanej
do wykładu literaturze.
Pytania kontrolne, przykładowe (w 1-5)
- Co oznacza paradygmat?
- wymień i scharakteryzuj główne paradygmaty programowania
- jaki jest związek między paradygmatami i językami programowania?
- Co to jest TIOBE?
- na czym polega analiza leksykalna?
- co to jest analiza składni języka?
- opisz paradygmat programowania imperatywnego; podaj przykłady języków
imperatywnych
- co oznacza termin "programowanie obiektowe"?
- czym jest programowanie zorientowane obiektowo? Podaj przykłady języków.
- scharakteryzuj paradygmat programowania funkcyjnego; podaj przykłady
języków funkcyjnych
- co to jest programowanie w logice?
- co to są predykaty i rachunek predykatów?
- co to jest programowanie współbieżne?
- programowanie rozproszone - charakterystyka
- czym się różni programowanie współbieżne od rozproszonego?
- jak definiujemy język?
- BNF, EBNF co to jest?
- co to jest automat skończony?
jak działa (schematycznie) komputer von Neumanna?
- wymień i scharakteryzuj etapy pracy kompilatora
- omówić cel pracy analizatora leksykalnego
- co to są tokeny?
- co to są leksemy?
- podać przykłady tokenów
- omówić typ skanera ad hoc
- skaner oparty na wyrażeniach regularnych i automatach skończonych
- Co to jest deterministyczny automat skończony DAS?
- Co to jest niedeterministyczny automat skończony NAS?
- podaj przykład DAS
- podaj przykład NAS
- alfabet
- pojęcie słowa, napisu
- co to język DAS?
- Co to jest funkcja przejścia dla DAS?
- Co to jest tablica przejść DAS? NAS?
- Co to są wyrażenia regularne (RE)? Definicja.
- Co oznacza symbol epsilon?
- operacje na wyrażeniach regularnych
- Omówić priorytety operacji dla wyrażeń regularnych
- do czego służą wyrażenia regularne?
- Podać przykłady RE
- Język wyrażeń regularnych. Definicja.
- Zastosowania RE
- związek RE, DAS, NAS itd
- równoważność NAS i RE
- co to są reguły Thompsona?
- wyrażenia regularne UNIXA
- lex
- bison
- symbole terminalne i nieterminalne
- definicja gramatyki formalnej
- typy gramatyk wg Chomsky'ego
- co to jest gramatyka niejednoznaczna?
- co to jest drzewo parsowania?
- co to są produkcje?
- wyprowadzenia lewostronne i prawostronne
- Jak poznać, że gramatyka jest rekurencyjna?
- usuwanie rekurencji lewostronnej
- faktoryzacja (?) Przykład
- ukryta rekurencja
- scharakteryzować język Algol
- Jak dziala lex?
- jak działa bison?
- na czym polega analiza syntaktyczna?
- parser LL(1)
- parser LR(1)
- co oznacza analiza top-down?
- co to jest analiza bottom-up?
- zbiory FIRST, def.
- zbiory FOLLOW, def.
- wykorzystanie zbiorów FOLLOW i FIRST
- parser wspomagany tablicą; charakterystyka
Pytania kontrolne, przykładowe (w 6)
- do czego służą typy?
- co oznacza, że język jest "silnie typowany", "statycznie typowany"?
- podaj przykład języka dynamicznie, silnie typowanego
- podaj przykład języka bez typów Boole'owskich. Co jest w zamian?
- podaj różnice między równoważnością i zgodnością typów
- wyjaśnij różnicę m. konwersją i konwersją wymuszoną (koercją) typów
- Podaj "za" i "przeciw" koercji
- co to jest wnioskowanie typów? Podaj okoliczności, w których ma to miejsce?
- różnice m. krotkami i rekordami
- dlaczego łatwiej jest zrealizować przypisanie rekordów niż ich porównanie?
- co oznacza "packed"?
- opisz potrzebę stosowania unii/wariantów. Podaj przykład.
- typ tablicowy
- co to jest przekrój (plaster) tablicy?
- jaka jest różnica m. tablicą dwuwymiarową, a tablicą jednowymiarową tablic jednowymiarowych?
- co to jest kształt tablicy?
- Kiedy tablica zadeklarowana w podprogramie może być umieszczona na stosie?
- przedyskutuj korzyści umieszczania tablic w pamięci ciągłej
i w pamięci typu "wiersz-wskaźnik"
- wyjaśnij zapis tablic według wierzy i wg. kolumn w tablicach zajmujących ciągłą pamięć. Dlaczego musimy znać porządek zapisu?
- wylicz adres element (i,j) tablicy 2-wuymiarowej o wymiarach n*m.
- typ "zbiór" (set)
- typ napisowy (string); charakterystyka; różnice z typem tablicowym (array)
- różnica m. wskaźnikiem i adresem
- co to są wiszące wskaźniki?
- co to są nieużytki?
- co to jest czas wiązania?
- co oznaczają decyzje a) statyczne b) dynamiczne?
- różnice między czasem życia wiązania nazwa-obiekt i widocznością
- Jakie dane (informacje) umieszcza się na stosie?
- Kiedy obiekty umieszczane są na stosie, a kiedy na stercie?
- co to jest wskaźnik ramki?
- scharakteryzuj zakres statyczny, dynamiczny?
- scharakteryzuj typ wiązania płytkiego i głębokiego
Zagadnienia kontrolne, przykładowe (w 7)
- co to jest podprogram
- nagłówek
- sygnatura podprogramu
- deklaracja i definicja
- różnica między funkcją i procedurą
- protokół podprogramu
- organizacja stosu podprogramu
- inicjalizacja
- finalizacja podprogramu
- prolog podprogramu
- epilog podprogramu
- parametry formalne i aktualne
- semantyczne tryby przekazywania parametrów (in, out, in-out)
- sposoby przekazywania parametrów
- przekazanie przez wartość
- przekazanie przez wynik
- przekazywanie przez wartość-wynik
- przekazywanie przez referencję
- typy wiązań w wywołaniach z parametrem podprogram
- wiązanie głębokie, słabe (płytkie) i ad hoc
- delegatyw C#
- charakterystyka
- wywołania niebezpośrednie (pośrednie)
Zagadnienia kontrolne, przykładowe (w 8)
- Co to jest współprogram?
- Co to są domknięcia?
- Funkcje Pythona działające na listach
- Python: funkcja eval
- Python: funkcje lambda; przykład
- ,, : iteratory
- ,, : Co to jest generator?
- ,, : liczby zespolone
- ,, : Różnica między generatorem a funkcją
- Python: przeciążanie operatorów na przykładzie działań na liczbach zespolonych
- Python: krotki
- Python: dodawanie elementów do listy
- Zdefiniować generator kwadratów liczb całkowitych
- Instrukcja yield
- Jak działa funkcja reduce?
- Jak działa f. filter() i f. map()?
- Ile wartości i jak mogą zwracać funkcje w Pythonie?
- definiowanie funkcji w Pythonie
- Klasy j. Python
- Jak można wykorzystać generatory w j. Python?
- Na czym polega leniwe wartościowanie, obliczanie?
- Obliczanie pierwiastka kwadratowego z zadaną dokładnością - algorytm
- Algorytm funkcyjny obliczania pierwiastka kwadratowego z liczby
- Błąd metody obliczania pochodnej. Algorytm Richardsona.
- Całkowanie funkcji w języku funkcyjnym
- Rekurencja. Przykład.
Zagadnienia kontrolne, przykładowe (w 9)
- scharakteryzować wybrany język programowania funkcyjnego
- co to jest lambda wyrażenie?
- funkcja lambda
- funkcja tożsamościowa
- funkcje samoobliczalne
- lambda reprezentacja liczb naturalnych
- co to jest lista?
- Jak zbudowana jest lista? - reprezentacja listy
- para
- funkcje cons, car, cdr, caadr itd.
- głowa i ogon listy (head, tail)
- funkcja append
- definicja rekurencyjna f. append
- Algorytm rekurencyjny dodawania liczb naturalnych
- odejmowanie liczb naturalnych (rekurencja)
- potęgowanie (rekurencja)
- redukcja wyrażeń lambda
- normalne przekazywanie wyrażeń do funkcji
- aplikacyjny tryb przekazywania wyrażeń
- Co to jest funkcja jednoargumentowa?
- Funkcje wyższego rzędu
- redukcja Curry'ego
- czy LISP jest językiem o zakresach statycznych, czy dynamicznych?
- Typy danych w LISP
- Co to są efekty uboczne?
- Co określa stan obliczeń (programu)?
- jak najkrócej można scharakteryzować języki fnkcyjne
- Różnice między językami imperatywnymi i funkcyjnymi
- Podaj podstawowe funkcje LISP/SCHEME
- co oznacza CAR, CDR?
- Rekurencja, a iteracje
- Jak definiujemy funkcje w LISP/SCHEME?
Programowanie funkcyjne. Scheme (w-10)
- Reprezentacja list w SCHEME (LISP)
- Co oznacza homogeniczność LISPa?
- Do czego służy polecenie let?
- Co to są atomy?
- Co oznacza QUOTE?
- Opisz działanie CAR, CDR, CDDR, CAADDR
- Co toj est (A.B) w LISPie?
- Zakresy dynamiczne czy statyczne?
- Definicja funkcji
- Jak działa COND?
- Iteracje, do i foreach
- Czy w LISPIe wykorzystuje się rekurencję?
Programowanie funkcyjne. Haskell (w-11)
- Co to są funkcje czyste?
- Leniwe wartościowanie
- Typowanie w haskell
- Co oznacza modularność haskella
- Głowa i ogon listy w haskellu
- Opisz działanie head.tail
- Podaj wynik "polecenia" [0,2..]
- Podaj wynik "polecenia" [(y,x) | (x,y) <- [(1,2), (3,4), (5,6)]
- Co to są funkcje anonimowe? Podaj przykład.
- Działanie i przykłady funkcji filter, foldl, foldr, take
- scharakteryzuj funkcje: cycle, zip, unzip, zipWith, filter, map
- co to jest klasa typów?
- Przykłady klas typów Haskella
- klasy Show, Eq, Ord, Num, Integral, Fractional, Floating
- Co to jest funktor?
- Jak rozumiemy monady?
- Po co są monady?
- Opisz Monady: Id, Maybe, [], IO
- Notacja do dla monad
- Co oznacza informacja: zip :: [a] -> [b] ->[(a, b)] ?
- Co oznacza informacja: unzip :: [(a, b)] -> ([a], [b]) ?
- Opisz związki:
return a >>= \x -> b === (\x -> b) a
f >>= \x -> return x === f
f >>= (\x -> g >>= \y -> h) === (f >>= \x -> g) >>= \y -> h
- Co oznacza cury i uncury w Haskellu?
- Co to są funkcje wyższego rzędu?
- Dlaczego Haskell jest leniwy?
Programowanie w logice. Prolog (w-12)
- Programowanie w logice, charakterystyka
- co to są predykaty?
- podaj definicje stałych, zmiennych, atomów, termów, funktora
- zaprzeczenie, alternatywa, koniunkcja
- Kwantyfikator ogólny i egzystencjalny
- Wymień nazwiska twórców PROLOGu
- Kiedy i gdzie powstał PROLOG?
- Jak tworzy sie fakty?
- co to są klauzule Horna?
- co to jest baza wiedzy w PROLOGU?
- na czym polega metoda rezolucji?
- co oznacza unifikacja zmiennych?
- zdefiniuj pojęcie celu w PROLOGu
- czym są klauzule z głową?
- co to są klauzule bez głowy?
- co oznacza nieproceduralny?
- napisz w PROLOGu prosty program sortowania listy
- co oznacza w PROLOGU nast. zapis: .(a .(b .(c, []))) ?
- wymień dziedziny zastosowań PROLOGu
- Dlaczego programowanie w logice nazywamy deklaratywnym?
Programowanie współbieżne i rozproszone
- Programowanie równoległe
- Programowanie rozproszone
- Prawo Amdahla
- MPI - co oznacza?
- openMP - co to jest?
- Architektura dzielonej pamięci
- Architektura klastra
- Wymień 6 podstawowych funkcji MPI
- Co oznacza MPI_Bcast(...)?
- Równoległość strukturalna danych
- Co to jest ranga procesu (rank)?
- Pojęcie komunikatora
- MPI_send
- MPI_recv
- Przykłady operacji kolektywnych
- Operacje redukcji
- Synchronizacja
- Semafory
- Monitory
- Operacje atomowe
- Pojęcie sekcji krytycznej
- Wątek
- Uruchamianie wątków (Java)
- Realizacja wątków w Java
- Wyścig do zasobów
- Impas, zakleszczenie - wyjaśnij na przykładzie