Вариант А

Задача 1. (30 т.) Да се реализира абстрактен базов клас Question, който описва следните операции върху въпрос от тест:

  • ask, която извежда въпроса и въвежда негов отговор;

  • grade, която оценява въпрос и връща броя точки.

Да се реализират следните видове въпроси:

  • YesNoQuestion, който описва въпрос с два възможни отговора: да или не. При конструиране се задават текст, точки и верен отговор. Въпросът дава 0 т. при грешен и пълен брой точки при верен отговор.

  • MultipleChoice, който описва въпрос с няколко възможни отговори, от които някои са верни. При конструиране се задават текст, точки x, възможни и верни отговори. Всеки правилно посочен отговор добавя x точки, а всеки погрешно посочен отговор отнема x точки.

  • OpenQuestion, който описва въпрос със свободен текст. При конструиране се задават текст и брой точки. При оценяване се извеждат въпроса и отговора и се въвежда оценка в проценти. Ако отговор не е даден, въпросът автоматично се оценява с 0 т.

Да се реализира клас Test, представящ тест с въпроси от всякакъв вид. Да се реализират функциите:

  • addQuestion, която добавя нов въпрос към теста;

  • doTest, която задава всички въпроси подред и събира отговорите им;

  • gradeTest, която оценява теста и връща броя събрани точки.


Задача 2. (20 т.) Да се реализира шаблон на клас Counters<T>, съдържащ два брояча, които помнят колко пъти е прочетена и колко пъти е променена стойността на данна от тип T. За шаблона да се реализират подходящи селектори, мутатори и операция +=, която добавя броячите на подаден обект от тип Counters<T>, но само ако данната от тип T съвпада (в смисъла на ==). Да се реализира шаблон на клас CounterArray<T>, който представя масив от данни от тип T с броячи. За шаблона да се реализират функциите:

  • операция [], която дава достъп за четене до пореден елемент;

  • sort, която сортира масив от елементи от тип T по метода на пряката селекция и извежда статистика за това кой елемент от масива колко пъти е бил използван;

  • statistics, която използва операцията +=, за да изведе статистика за използването всеки уникален елемент от масива.

Вариант Б

Задача 1. (30 т.) Да се реализират абстрактни базови класове Input и Output, който описва входно и изходно устройство и позволяват работа с цели числа. Входните устройства поддържат следните операции:

  • read, която прочита число от входното устройство;

  • canRead, която проверява дали могат да се въведат още числа.

Изходните устройства поддържат следните операции:

  • print, която извежда число на изходното устройство;

  • canPrint, която проверява дали могат да се изведат още числа.

Да бъдат реализирани следните устройства:

  • Reader, входно устройство, което въвежда цели числа от стандартния вход, като спира при прочитане на числото 0;

  • PrintSum, изходно устройство, което натрупва изведените на него числа и извежда текущата сума, като спира приемане на нови числа при получаване на сума по-голяма от 10000;

  • StackMemory, входно-изходно устройство, представено от стек с фиксиран капацитет, като извеждането на числа ги добавя на върха на стека, а въвеждането ги премахва.

Дадени са два масива с еднаква дължина от входни и от изходни устройства. Да се напише функция transfer, която обхожда циклично устройствата, като въвежда по едно число от поредно входно устройство и го извежда на съответното му изходно устройство, ако двете операции са възможни, и след това преминава на следващата такава двойка устройства.


Задача 2. (20 т.) Да се реализира шаблон Named<T>, който позволява добавяне на име (низ с произволна дължина) към данна от произволен тип T. За шаблона да се реализират голяма четворка, подходящи селектор и мутатор и операции за въвеждане (>>) и извеждане (<<). Да се реализира подходящ наследник Variable, който описва целочислена променлива със име и стойност. За Variable да се реализират:

  • едноместна операция *, която връща стойността на променливата;

  • операция =, която присвоява стойността на една променлива на друга без да променя името;

  • операции == и !=, които сравняват две променливи. Две променливи се считат равни, ако имената и стойностите им са равни.


Последно модифициране: понеделник, 22 юни 2015, 22:53