ТЕСТ 2

(въпросите на теста, един верен и един грешен отговор)

Дадени са свързан списък и итератор:
   list<int> bip;
 list<int>::iterator it;

Списъкът съдържа 10 елемента и итераторът сочи втория елемент на свързания списък. Верни ли са (синтактично и/или логически) дадените изрази?
(да) *it > 0
(не) *it != *bip.end()

Верни ли са твърденията за достъп на член-функции от един клас до членове на друг клас за класовете, дефинирани във файла list2.cpp?
(да) Член-функциите на класа List имат достъп до частните членове на класа Node.
(не) Член-функциите на класа Iterator имат достъп до частните членове на класа List.

Даден е свързан списък от цели числа, състоящ се от 3 елемента. Полето next сочи към следващия елемент, полето prev - предишния елемент от списъка, а h е указател за началото на списъка.
   struct Item
   {
       Item *next, *prev; int data;
   };
   Item *h;
Определете верните и неверните твърдения.
(да) (h->next)->next е адресът на последния елемент от списъка.
(не) (h->next)->prev е NULL.

Определете верните и неверните дефиниции и твърдения за структури от данни и свързан списък.
(да) Опашката е линейна структура от данни.
(не) Стекът е нелинейна структура от данни.

Посочете верните и грешни твърдения от текста на програмата list2.cpp за реализация на свързан списък.
(да) Операторът friend class List; в дефиницията на класа Node дава достъп на член-фукциите на класа List до частните членове на класа Node.
(не) class Iterator; е оператор за дефиниране на класа Iterator.
Проверете твърденията за стандартната библиотека шаблони (STL) на езика С++.
(да) Контейнерът map осигурява пряк и ефективен достъп до елементите.
(не) Контейнерът list осигурява пряк достъп (операция индекс) до елементите на свързания списък.

Заместете многоточието (...) с дадения оператор.
void rec(int i)
{
...
if (i/10 != 0) rec(i/10);
}
int main()
{
rec(122);
return 0;
}

Съдържа ли се низът 121 в изхода на програмата?
(да) cout << i;
(не) cout << i%10;

Отбележете верни и грешни твърдения относно сортиране и търсене.
(да) За метода сортиране чрез избор удвояване на броя на елементите води до четирикратно учеличаване на времето за сортиране.
(не) За метода сортиране чрез сливане удвояване на броя на елементите води до четирикратно учеличаване на времето за сортиране.

Ако 10000 записа се сортират за 4 секунди от двата метода за сортиране (избор и сливане), то
(да) методът сортиране чрез сливане ще сортира 1000000 записа за около 10 минути.
(не) методът сортиране чрез избор ще сортира 1000 записа за повече от 1 секунда.

Намерете броят N(b) на посещенията на елементите на масива
int a[10] = {14,43,76,100,115,290,400,511,512,601};
необходими за намиране на стойност b при прилагане на алгоритъма за двоично търсене. Отговорете със стойността на математическия израз N(b) mod 2 за дадените стойности на b.
(0) b = 90
(1) b = 10

Пребройте посещенията на елементите на дадения масив, необходими за сортиране на масива по метода сортиране чрез избор и отбележете с ,,да'', ако този брой съвпада с числото, написано след елементите на масива.
(да) {5, 8, 7} 7
(не) {5, 7, 8} 7

Отбележете с ,,да'' случаите, когато числото в скобите е броят на размените в алгоритъма за сортиране чрез селекция на дадения масив.
(да) {1, 2, 4, 5} (0)
(не) {1, 4, 2, 5} (2)

Дадени са две взаимно рекурсивни функции.
int s(int n)
{
    if (n != 0) return n + m(n - 1);
    else return 1;
 }
int m(int n)
{
    if (n != 0) return n * s(n - 1);
    else return 0;
}
Пресметнете стойността на следния израз:
(true) s(2) == 3
(false) s(0) == 0

Дадена е рекурсивната функция:
bool s_is_p(string s, int start, int end)
{
    if (start >= end) return true;
    if (s[start] == s[end]) return s_is_p(s, start + 2, end - 2);
    else return false;
}
Намерете върнатата от функцията стойност при следното извикване::
    s_is_p(s, 0, s.length() - 1);
Стойността на променливата s е дадена по-долу.
(true) aaaa
(false) aaaabbbb