←
↑
⇑
↓
→

Ласло Краус |
Објектно програмирање 1
Домаћи задатак за 2010/11
|
Поставка задатка
Пројектовати и реализовати на језику C++ следеће класе:
- Домина садржи два целобројна поља (a,b) у опсегу од 0 до n−1. Параметар n је заједнички за сва домина и може да се поставља и дохвата. Може да се дохвати вредност првог и другог поља домине, да се изврши међусобна замена поља, да се одреди да ли су две домине једнаке не водећи рачуна о редоследу поља и да се домина упише у излазни ток у облику
(
a,
b)
.
- Скуп домина може да садржи задат број различитих домина. Ствара се празан после чега се домине додају једна по једна. Може да се испита да ли се нека домина налази у скупу, да се дохвати број домина у скупу, да се приступа домини задатог редног броја, да се домина задатог редног броја извади из скупа, да се скуп испразни и да се скуп упише у излазни ток (по 10 домина у једном реду).
- Кутија је скуп домина. Може да се напуни свим могућим доминама, по случајном редоследу (број таквих домина је n(n+1)/2) и да се узме домина с краја кутије.
- Табла је скуп домина код којег се домине додају на почетак или крај тако да суседна поља суседних домина буду једнака (тј. да друго поље претходне домине буде једнако првом пољу наредне домине; поља додаване домине могу да се замене).
- Рука је скуп домина капацитета n које неки играч држи у руци.
- Апстрактан играч има јединствен, аутоматски генерисан целобројни индикатор и игра доминама из задате кутије на задатој табли држећи неколико домина у садржаној руци. Играч не може да се копира ни на који начин. Може да се дохвати идентификатор играча, да се рука (уз претходно пражњење) напуни до пола доминама из кутије и да се одигра један потез. Одиграње потеза подразумева стављање једне од домина из руке на таблу. Ако ниједна домина не може да се стави, узима се по једна домина из кутије док не успе да се стави на таблу или се напуни рука или испразни кутија. Повратна вредност је индикатор исхода потеза и то:
DALJE
(домина је стављена и рука није празна), POBEDA
(домина је стављена и рука је празна) или PORAZ
(домина није стављена и рука је пуна или је кутија празна).
- Човек је играч који потез одиграва интерактивно уз поновљено извршавање следећих радњи по избору: 1. исписивање табле; 2. исписивање руке; 3. стављање домине на таблу; 4. узимање домине из кутије; 5. предаја игре.
- Рачунар је играч који потез одиграва аутоматски и на крају испише домину коју је ставио на таблу.
- Игра организује одигравање партије задатог броја играча на задатој табли коришћењем задате кутије. Ствара се празним низом играча после чега се играчи додају један по један. Може да се одигра партија што подразумева пражњење свих скупова домина, попуњавање кутије доминама и циклички извршавање потеза појединих играча уз прескакање играча који су предали игру. Партија може да се заврши победом једног од играча или нерешено ако сви играчи предају игру. Пре савког потеза испише се садржај табле и идентификатор играча који је на потезу. На крају се испише начин завршетка партије.
Написати на језику C++ програм који с главног улаза прочита n, направи игру са три играча (један човек и два рачунара) и одигра једну партију.
а) Детаљи решења (унутрашња структура објеката, списак операција, начин спољашњег приказивања објеката) препуштају се студентима. Све класе треба да буду снабдевене неопходним елементима за безбедно коришћење у било ком окружењу (конструктори, деструктор, додела вредности). Конфликтне ситуације разрешавати изузецима типа класа специјално пројектованих за то. Користити операторске функције где је примерено.
б) Решење домаћег задатка се припрема у потребном броју датотека са изворним текстовима програма (не користити редове дужих од 70 знакова).
в) За пролазну оцену неопходно је да програм може да изврши бар нешто од очекиване функционалности.
г) Домаћи задаци се предају слањем електронском поштом на адресу kraus@etf.rs у облику једне архивске датотеке (.zip
или .rar
). У пошиљку не укључити пројектну датотеку, изводљиви облик програма итд., већ само изворне текстове програма.
д) Недозвољена сарадња међу студентима се кажњава дисквалификацијом свих учесника.
ђ) Студенти који испит положе кроз колоквијуме (само у јунском испитном року) домаће задатке треба да пошаљу у року који ће бити објављен заједно са резултатима другог колоквијума. Тај рок неће бити дужи од два до три дана. Одбрана домаћих задатака биће око 5 до 7 дана после тог рока.
е) Остали студенти решења домаћих задатака треба да пошаљу најкасније три дана пре полагања испита. Без унапред предатог домаћег задатка не може да се полаже испит. Домаћи задаци ће се бранити пар дана после успешно положеног испита. Ако се испит не положи, приликом следећег полагања потребно је послати домаћи задатака.
(садржај)
←
↑
⇑
↓
→
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs
Copyright © 2012, Laslo Kraus
Последња ревизија: 8.3.2012.