Kolokwium 2 2016 gr. 1

Transkrypt

Kolokwium 2 2016 gr. 1
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; i<size; i++)
zwrocWezel(i)->first = ………………………;
}
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<int> 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<typ> zwraca NULL w przypadku niepowodzenia.
dynamic_cast<typ> 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

Podobne dokumenty