←
↑
⇑
↓
→
Ласло Краус |
ИР2ОО1/СИ2ОО1
Испит
9. 2. 2012.
|
Аутори: Игор Тартаља, Ђорђе Ђурђевић и Ласло Краус
Задаци: 1
2
| Напоменe
Поставка задатка 1 (30 поена)
(⇒ почетак)
Одговорити концизно (једна или две реченице) и прецизно на следећа питaња:
а) Колико (1) декларација, (2) дефиниција истог објекта, функције или корисничког типа сме бити у C++ програму?
б) Како се тумачи (преводи) израз: a+b
ако су a
и b
објекти класе X
која је преклопила оператор +
као методу класе, а како за пријатељску глобални функцију класе X
?
в) Да ли је конверзија навише (upcast) безбедна и зашто?
Поставка задатка 2 (укупно 70 поена)
(⇒ почетак)
Написати на језику C++ следеће класе (класе опремити оним конструкторима, деструктором и оператором за доделу вредности, који су потребни за безбедно коришћење класа; грешке пријављивати изузецима типа једноставних класа које су опремљене писањем текста поруке):
- (5 поена) Позиција се састоји од целобројне врсте и колоне, чије су подразумеване вредности 0. Може да се дохвати врста и колона и да се позиција упише у излазни ток (
it<<poz
) у облику (
vrsta,
kolona)
. Може да се створи случајна позиција за задат број врста v и колона k, у опсегу од 0 до v−1, односно од 0 до k−1. Стандардна функција rand()
из библиотеке cstdlib
за сваки позив даје један псеудослучајан позитиван цео број из опсега од 0 до RAND_MAX
.
- (20 поена) Табла садржи матрицу података неког типа задатог броја врста и колона. Могу да се дохвате димензије табле, да се табла попуни задатом вредношћу, да се приступи податку на задатој позицији (
tbl[poz]
; грешка је ако је позиција ван опсега) и да се табла упише у излазни ток (it<<tbl)
; једна врста по реду.
- (30 поена) Апстрактан играч има јединствен, аутоматски генерисан идентификатор и две табле (своју и туђу) за игру "потапање бродова". Могуће вредности поља (елемената матрица) табли су: празно, промашај, брод, потопљен. Може да се дохвати једнословна ознака врсте играча, да се поставе почетна стања табли, да се одигра потез и да се прими потез противника. При постављању почетног стања задају се димензије табле, број бродова величине једног поља и противнички играч. Том приликом распоређују се бродови на својој табли на случајан начин, а туђа остаје празна. Повлачење потеза се састоји од бирања позиције празног поља на туђој табли на неки начин, достављања изабране позиције противнику, бележења на туђој табли одговора противника и провере да ли је потопљен последњи брод противника. Повратна вредност повлачења потеза је индикатор да ли је игра завршена победом текућег играча. Пријем достављеног потеза састоји се од провере на својој табли ли је погођен неки непотопљен брод или је направљен промашај, уз мењање стања своје табле. Повратна вредност пријема је исход гађања противника. Играч може да се упише у излазни ток (
it<<igr
), када се у првом реду упише његова ознака врсте и идентификатор, а у наредним редовима табле за игру. Играч не сме да се копира на било који начин.
- Рачунар је играч чија је ознака врсте
R
. Позиције за потезе бира генерисањем случајних координата. Човек je играч чија је ознака врсте C
. Позиције за потезе бира читањем координата с главног улаза. Приликом бирања позиције сваког потеза испише се садржај његових табли на главном излазу.
- (15 поена) Игра се ствара задавањем два играча, димензија табли за игру и бројем бродова. Може да се одигра партија која се састоји од постављања почетног стања оба играча, наизменичним повлачењем потеза играча док један играч не пријави победу и исписивања на главном излазу играча који је победио и играча који је изгубио.
Написати на језику C++ програм који одигра једну игру с два рачунара на таблама са 4x4 поља и са по 4 брода.
- Испит траје 180 минута.
- Рад се предаје искључиво у факултетској вежбанци за испите (-5 поена за неадекватну вежбанку). Није дозвољено имати поред себе друге листове папира.
- Водити рачуна о уредности. Нечитки делови текста ће бити третирани као непостојећи. Решења задатака навести по гoрњем редоследу (-1 поен за лош редослед). Препоручује се рад обичном графитном оловком.
- Решење задатка не треба раздвајати у датотеке. Довољно је за сваку класу навести дефиницију класе и одмах иза ње евентуалне дефиниције метода које нису дефинисане у самој класи.
(⇒ почетак)
←
↑
⇑
↓
→
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs
Copyright © 2013, Laslo Kraus
Последња ревизија: 17.1.2013.