ТЕСТ 1

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

Разгледайте програмата, дадена във файла clock3.cpp и посочете верните и грешни твърдения.
(да) Векторът clocks е полиморфна колекция от различни часовници.
(не)  Изразът clocks[i]->get_minutes() е реализация на динамично свързване.

Дадена са следните дефиниции на класове:
      class Point { ... };
      class Circle : public Point { ... };
Определете верните и неверните твърдения за връзките между класовете Point и Circle:
(да) Класът Circle е производен клас на класа Point.
(не) Частните членове на Point са частни членове на Circle.

Нека класът D наследява класа B, b е обект от класа Bd е обект от класа D, pb е указател от класа B и pd е указател от класа D. Кои от следните оператори са верни и кои - не?
(да) b = d;
(не) d = b;

Дадени са следните дефиниции на класове:
class A {
public:
  void af();
... };
class B : public A {
public:
  void bf();
... };
и обекти oa от клас A и ob от клас B. Отбележете верни/неверни оператори (относно синтаксис) за извикване на член-функциите af и bf от блока на функция main.
(да) oa.af();
(не) oa.bf();

Отбележете верните/неверните твърдения за виртуални функции и полиморфизъм.
(да) Извикване на виртуална функция е по-бавно от извикване на невиртуална функция.
(не) Когато член-функция се вика чрез указател (с операция ->), тя винаги е статично свързана.

Дадени са файловите променливи:
ifstream fin;
ofstream fout;
fstream f;
и променливите
int k = 10;
double x = 15.5;
char ch = 'N';
string s = "alabala";
Отбележете верните оператори.
(не) fout >> x;
(да) fout << x << " " << s;

Отбележете верните и неверни твърдения относно йерархията на потоковите класове.
(да) fstream е производен на iostream.
(не) fstream е производен на ofstream.

Отбележете верните и неверни твърдения за потокови класове, обекти и член-функции.
(да) Член-функцията get е дефинирана за istream обекти.
(не) Член-функцията getline е дефинирана за istream обекти.

Даден е следният команден ред:
>prog -a -b2 d.txt < inp.txt > out.txt
при което операционната система стартира и успешно изпълнява програма myprog.
Вярно ли е следното обяснение:
(да) Името на изпълнимия файл е prog.exe в ОС Windows.
(не) Броят на аргументите от командния ред е 6.

От главната функция main във файла database.cpp определете верността на твърденията.
(да) Операторът fs.seekg(0, ios::end); премества позицията за четене в края на файла.
(не) Стойността на променливата nrecord е големината на файла.

Дадени са две взаимно рекурсивни функции.
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 или false) на следния израз:
(true) s(2) == 3
(false) s(0) == 0

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

Във функцията rec121 заместете многоточието (...) с дадения оператор.
void rec121(int i)
{
  ...
  if (i/10 != 0) rec121(i/10);
}
int main()
{
  rec121(122);
  return 0;
}

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

Отбележете верни и грешни твърдения за ефективност на рекурсията.
(да) Рекурсията е мощен метод за сложни алгоритми, но тя може да доведе до програми, които работят бавно.

(не) Винаги итерационното решение е по-ефективно (по-бързо) от рекурсивното.

Отбележете верни и грешни твърдения за функцията generate_permutations, дадена във файла permute.cpp.
(да) generate_permutations e функция, която генерира всички пермутации на една дума.
(не) Рекурсивното извикване връща една пермутация на по-къса дума.