Imię i nazwisko: 1 2 3 4 suma Kolokwium PROE 2 czerwca 2016 Zadanie 1 (10 punktów) Mamy do dyspozycji listę jednokierunkową, w której każdy węzeł prze...
12 downloads
29 Views
849KB Size
kol. 2
Imię i nazwisko: 1
2
3
4
grupa 1
suma
Kolokwium PROE 2 czerwca 2016 Zadanie 1 (10 punktów)
Mamy do dyspozycji listę jednokierunkową, w której każdy węzeł przechowuje wskaźnik na kolejny węzeł – next oraz wskaźnik na pierwszy węzeł listy first. Lista jest cykliczna. Uzupełnij proces przestawienia wybranego elementu n z elementem kolejnym, tzn. jeśli n==2, to element trzeci zostanie podmieniony z elementem czwartym, jeśli n==size-1, to ostatni element zostanie zamieniony z pierwszym itd. W punktach (1), (2), (3) narysuj stan listy, wstawiając odpowiednie strzałki w bloczkach (najlepiej ołówkiem, aby łatwiej było poprawiad), będący stanem listy po wykonaniu tej linijki. Każdy wskaźnik powinien byd przypisany. Na rysunku przyjmij, że wymieniamy drugi element od lewej strony. Zakładamy, że dysponujemy funkcją Wezel* zwrocWezel(int n), która zwraca wskaźnik na n-ty węzeł. Jeśli n jest równe „-1”, funkcja zwraca ostatni element listy, jeśli n jest równe wielkości listy, funkcja zwraca pierwszy element listy. Działa ona poprawnie przy założeniu że struktura listy jest poprawna (tzn. first wskazuje na początek listy i węzły są powiązane wskaźnikami next). Mamy do dyspozycji zmienną size określającą wielkośd listy. Zakładamy, że w liście są co najmniej 3 węzły. Wezel* nth_prev = zwrocWezel(n-1);
T first next
T first next
T first next
T first next
T first next
T first next
T first next
T first next
T first next
T first next
T first next
T first next
T first next
T first next
T first next
T first next
Wezel* nth = nth_prev->next; (1) nth_prev->next = …………………………………….. Wezel* nth_next = …………………………………….
(2) nth->next = ………………………………….; (3) nth_next->next = …………………………………; if (n==0 || n==size-1) { if (n==0) first = …………………………………; else first = …………………………………; for (i=0; ifirst = ………………………; }
Zadanie 2 (5 punktów) Wskaż błędy w niniejszym kodzie. Proszę zaznaczyd błędne linijki i opisad występujący błąd. Podpowiedź: kod poprawnie się kompiluje.
Zadanie 3 (5 punktów) Napisz co zostanie wypisane do strumienia cout po wykonaniu następującego programu:
Zadanie 4 (5 punktów) Za każdą poprawnie udzieloną odpowiedź Student otrzymuje 0,25 punktu, za błędną -0,25. Brak odpowiedzi na pytanie oznacza 0. Za całe podzadanie (każde z pięciu) nie można otrzymad ujemnych punktów. 1.
Czy następujące stwierdzenia o iteratorach są poprawne? TAK/NIE Wykorzystanie iteratorów jest niezbędne aby uzyskad dostęp do elementów kontenera typu vector. Wszystkie iteratory mają zaimplementowany operator indeksowania. Dostęp do obiektu na który ustawiony jest aktualnie iterator it można uzyskad poprzez operację (*it). Mając kontener vector k można usunąd 3 pierwsze elementy kontenera poprzez funkcję k.erase(k.begin(), k.begin()+3)
2.
Określ prawdziwośd zdao dotyczących GUI: TAK/NIE W większości przypadków GUI napisane w WinAPI działa szybciej od GUI Qt Wskazane jest oddzielenie warstwy widoku (interfejs) od warstwy modelu. Qt jest wieloplatformowe. WinAPI jest oparte na przetwarzaniu kolejki komunikatów.
3.
Określ prawdziwośd zdao dotyczących rzutowania obiektów: TAK/NIE static_cast zwraca NULL w przypadku niepowodzenia. dynamic_cast zwraca NULL w przypadku niepowodzenia. W przypadku poprawnego rzutowania reinterpret_cast i dynamic_cast dadzą ten sam efekt działania. reinterpret_cast jest stosowane zamiennie z static_cast.
4.
Odpowiedz na pytania dotyczące kontenerów (zakładamy, że kontenery zawierają więcej niż jeden element): TAK/NIE Wykorzystanie mechanizmu szablonów zwykle powoduje wydłużenie czasu kompilacji. Dostęp do ostatniego elementu listy jednokierunkowej (zakładając, że nie ma wskaźnika na ostatni element last) zajmuje zawsze tyle samo czasu. Dostęp do ostatniego elementu wektora (obiekt klasy vector) zajmuje zawsze tyle samo czasu. Klasa stl::deque umożliwia efektywne wstawianie elementów na koniec kontenera.
5.
Odpowiedz na pytania dotyczące optymalizacji programów: TAK/NIE Debugger służy do badania czasu wykonania poszczególnych części programu. Profiler służy do wyszukiwania linii kodu, które są krytyczne ze względu na szybkośd działania programu ("wąskie gardła"). Funkcje inline zwykle powodują spowolnienie działania programu. Programy skompilowane w trybie RELEASE działają szybciej niż skompilowane w trybie DEBUG