ОО2/Лаб 3 2021

Извор: SI Wiki
< ОО2
Датум измене: 27. јун 2021. у 00:08; аутор: Fedja (разговор | доприноси) (pls `<@190174976932970497>` `)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу

В1

Задатак се појавио на јунској трећој лабораторијској вежби у прве две групе, и поставка основног задатка је доступна на страници предмета.

  • Укус се ствара са задатим називом, ценом по 20ml и бојом (Color). Сви параметри могу да се дохвате. Могуће је упоредити два укуса на једнакост. Два укуса су једнака уколико су им имена једнака. Могуће је саставити текстуални опис укуса у облику [име].
  • Сладолед у чаши се састоји од произвољног броја укуса. За сваки укус се памти и количина у милилитрима. Сладолед се ствара празан са задатом величином чаше у милилитрима. Могуће је додати задату количину задатог укуса. Уколико би се таквим додавањем превазишла величина чаше, додаје се одговарајућа количина до пуне чаше. Додавањем већ постојећег укуса ажурира се само његова количина у сладоледу. Текстуални опис сладоледа је у облику укуси, где су укуси сви садржани укуси и њихове количине, раздвојени размацима, у облику количинаmlукус. Могуће је израчунати цену сладоледа. Могуће је упоредити два сладоледа на једнакост, чиме се пореде сви укуси и њихове количине. Могуће је поставити величину чаше.
  • Наруџбина садржи сладолед. (?)
  • Генератор наруџбина има могућност да генерише сладолед насумичне величине (једне од 100, 200 или 400ml), са насумичним бројем укуса (од 1 до 3) и насумичним укусима (од расположивих у апарату), тако да збир количина укуса буде једнак величини чаше.[1]
  • Активни списак наруџбина генерише по наруџбину на сваких 4 секунде. Ствара се са максималним бројем наруџбина на списку, и док је списак пун не генеришу се даље наруџбине. Могуће је додати и обрисати наруџбину са списка. При додавању наруџбине на списак, додаје се у текстуални списак наруџбина као и у листу наруџбина.
  • Место за точење сладоледа је активно платно (Canvas). Ствара се са задатим апаратом за точење (видети ниже) који је власник места за точење и садржи сладолед који може да се дохвати. Место за точење циклично исцртава прогрес точења укуса у сладолед на сваких 0.5 секунди. У свакој итерацији исцртава се правоугаоник у боји укуса који се тренутно точи у сладолед, додаје се количина од 20ml тог укуса у сладолед и поставља се текст натписа (лабеле) у апарату (видети ниже). Правоугаоници се исцртавају од доње ка горњој ивици платна једни изнад других. Висина правоугаоника се добија као процентуални део висине платна који одговара количини од 20ml у односу на величину чаше. Точење се завршава када се исцрта целокупан прогрес точења до врха и тада се апарату за точење омогућава продаја (видети ниже). Могуће је покренути точење при чему се тада креира сладолед од задате величине. Могуће је привремено зауставити, наставити или завршити точење. Могуће је испитати да ли је точење у току. Могуће је поставити тренутни укус који се точи у сладолед.
  • Апарат за точење је панел који садржи место за точење, панел са произвољним бројем доступних укуса, дугме за продају сладоледа које је иницијално неактивно, дугме за брисање сладоледа које је иницијално неактивно, дугмад за бирање величине сладоледа (100ml, 200ml и 400ml) и лабелу за приказ сладоледа из места за точење, чији је текст могуће поставити. Панел са доступним укусима садржи дугмад у формату решетке. Натпис дугмета одговара тексту укуса. Могуће је додати ново дугме за задати укус у панел са доступним укусима. Грешка је уколико укус већ постоји. Притиском тастера миша на дугме доступног укуса, месту за точење се поставља тренутни укус на основу притиснутог дугмета и покреће точење уколико није покренуто, односно наставља већ започето точење. Отпуштањем тастера миша привремено се зауставља точење. Могуће је омогућити продају сладоледа и тада дугме за продају постаје активно. Притиском на дугме за продају, завршава се точење и брише цртеж на месту за точење (канвасу), сладолед на месту за точење се исписује на стандардном излазу и дугме за продају постаје поново неактивно. Уколико се продати сладолед поклапа са једном од наруџбина, наруџбина се уклања из листе наруџбина и омогућава се генерисање следеће. Притиском на дугме за брисање сладоледа одбацује се тренутни сладолед на месту за точење. Бирањем величине сладоледа мења се величина чаше тренутног сладоледа у месту.
  • Сладоледџиница је главни прозор апликације (са слике) који садржи апарат за точење, листа у којој се се приказују наруџбине које пристижу (максимално 4 наруџбине), лабела која приказује тренутну количину новца зарађеног од продаје сладоледа која се ажурира при свакој продаји сладоледа, дугме за отварање и затварање сладолеџинице којим се покреће генерисање наруџбина и панел за додавање новог укуса у апарат за точење са задатим називом, бојом и ценом на 20ml и у коме се такође налази дугме за почетак генерисања наруџбина. Боја укуса који се додаје се задаје у хексадецималном формату. Преласком миша преко једног дугмета за бирање величине сладоледа на њему треба да се повећа величина фонта и подебља и врати на претходно стање када миш више не прелази преко дугмета.

В2

Задатак се појавио на јунској трећој лабораторијској вежби у друге две групе, и поставка основног задатка је доступна на страници предмета.

  • Генератор случајних целих бројева генерише случајне целе бројеве на захтев. Могуће је захтевати један случајан цео број или низ од n елемената у задатом опсегу доње и горње границе. Задате границе су инклузивне.
  • Генератор јединствених целих бројева је генератор који генерише низ са јединственим бројевима помоћу хеш сета(HashSet).
  • Поље је платно (Canvas) које се ствара са задатом дводимензионом мрежом (видети ниже) којој припада и задатом целобројном вредношћу (број) која представља натпис (лабелу) на пољу и која може да се дохвати. Поље може имати један од следећих статуса: SLOBODNO, IZABRANO, OZNACENO, POGODJENO и PROMASENO, који се може поставити и дохватити. Подразумевано, поље има статус SLOBODNO, а ширина и висина су му 75 пиксела, боја позадине му је наранџаста, а број је исписан црном бојом на средини поља и заузима једну трећину мање димензије поља (потребно је обезбедити промену величине садржаја поља при промени величине прозора). Поље статуса IZABRANO унутар целог поља исцртава елипсу попуњену плавом бојом, а број је исписан белом бојом. Поље статуса OZNACENO унутар целог поља исцртава елипсу попуњену белом бојом, а број је исписан црном бојом. Поље статуса POGODJENO унутар целог поља исцртава елипсу попуњену зеленом бојом, а број је исписан црном бојом. Поље статуса PROMASENO унутар целог поља исцртава елипсу попуњену црвеном бојом, а број је исписан црном бојом. Кликом левог тастера миша на поље мења се његов статус (уколико је статус поља SLOBODNO оно постаје IZABRANO и обрнуто) и поље прослеђује мрежи информацију да се његов статус променио.
  • Мрежа је панел који садржи правоугаону матрицу поља и листу (ArrayList) поља која имају статус IZABRANO и која може да се дохвати. Ствара се са задатим целобројним димензијама (подразумевано 4 х 5) и игром (видети ниже) којој припада. Приликом стварања мреже, поља се додају у мрежу редом по врстама, при чему се пољима задају сукцесивне целобројне вредности, а нумерација креће од вредности 0. Поља су размакнута једна од других за 3 пиксела, а боја позадине мреже је црна, тако да се постигне ефекат поља распоређених у мрежи. Могуће је дохватити скуп (HashSet) који чине сви цели бројеви поља мреже са статусом IZABRANO. Променом статуса неког њеног поља, мрежа ажурира листу поља са статусом IZABRANO и прослеђује игри информацију да је поље променило статус. Могуће је закључати поља мреже, чиме та поља не реагују на притиске миша. Могуће је променити пољима чији се бројеви налазе у задатој листи статус на IZABRANO, док се осталима мења на SLOBODNO.
  • Активан рулет је класа која анимира избор бројева. Ствара се са задатом мрежом. Садржи низ бројева поља која се анимирају који се насумично генеришу и не морају бити јединствени. Величина низа је случајно генерисана вредност између 30% и 70% величине мреже. Може се дохватити последњи анимирани број, чиме се позивајућа нит блокира уколико рулет није завршио (ово служи само за проверу погодтка броја). Анимација треба бити следећа за сваки члан низа: почиње тако што се поље које представља тај члан низа постави на статус OZNACENO, затим се чека одређено време чекања (иницијално 200ms, а сваке следеће итерације се повећава 10%) и затим вратити претходни статус пољу.
  • Активно извлачење је класа која извлачи број с рулета. Ствара се са задатом игром и бројем рунди. Потребно је имплементирати тако да при покретању ова класа понови исти циклус колико има рунди. Циклус се састоји од тога да покрене рулет, покупи с рулета последњи анимирани број и обавести игру да је извучен број. Ако је број који је извучен би изабран, потребно је поставити статус тог поља на POGODJENO у супротном статус је PROMASENO. Затим треба чекати 1000ms после чега треба повратити стари статус поља. Док траје извлачење, није могуће бирати поља, односно мрежа треба бити онемогућена. Могуће је дохватити тренутни број рунде, као и укупан број рунди.
  • Историја извлачења је панел који садржи листу ставки (видети слику) и ствара се са максималним капацитетом. Ставке су објекти класе TextArea без вертикалног и хоризонталног скрол бара. Могуће је додати ставку. У случају да се додаје ставка која би прешла максимални капацитет, потребно је избацити најранију ставку. Ставка треба да садржи број рунде, извучен број, улог и добитак.
  • Игра је главни прозор апликације (са слике) који садржи једну мрежу подразумеване величине (у центру), која може да се дохвати, један панел за историју извлачења (са леве стране), један панел за управљање (са десне стране) и статусну траку (на дну). Игру је могуће започети само уколико се изабере барем једно поље. Улог има подразумевану вредност 100. Број рунди има подразумевану вредност 4. Избором поља (променом његовог статуса) или изменом вредности улога врши се ажурирање вредности квоте и добитка који се приказују у прозору апликације. Вредност квоте се рачуна као количник укупног броја поља и броја поља са статусом IZABRANO. Вредност добитка се рачуна као производ квоте и улога. Игра се започиње кликом на дугме Igraj након чега се покреће извлачење. Генерисани број исписује се у статусној траци на дну прозора, која се боји зеленом бојом уколико је генерисани број један од бројева на изабраним пољима мреже (број је погођен), односно црвеном бојом у супротном (број је промашен). Уколико је генерисани број погођен, врши се додавање вредности добитка на вредност баланса, док се, уколико је број промашен, врши одузимање вредности улога од вредности баланса. Без обзира на погодак, са баланса се додатно одузима вредност улога. Иницијална вредност баланса је 0. Иницијално, боја статусне траке је тамно-сива. Главни прозор садржи мени са опцијама Par (бира све парне бројеве мреже), Nepar (бира све непарне бројеве мреже), Pola (изабере насумично пола мреже) и опцију Brisi која свим пољима ставља статус SLOBODNO. Треба онемогућити ове опције док траје процес извлачења.

В3

Задатак се појавио на јулској трећој лабораторијској вежби, и поставка основног задатка је доступна на страници предмета.

  • Број телефона се ствара са задатим кодом државе, позивним бројем и бројем претплатника. Могуће је проверити да ли су два задата броја регистрована у истој држави (да ли имају исти код државе). Могуће је проверити да ли су два задата броја у истој мрежи (да ли имају исти код државе и позивни број). Могуће је проверити да ли је број телефона једнак другом задатом броју телефона. Могуће је саставити текстуални опис броја телефона у облику +код_државе позивни_број број_претплатника. Број телефона је могуће створити и са задатом ниском карактера која је у истом формату као и текстуални опис без знакова размака, при чему се сматра да је код државе дужине 3 карактера, позивни број 2 карактера, а преостали карактери представљају број претплатника.
  • Ставка је панел који садржи два натписа (лабеле) који се приказују један испод другог. Први натпис представља наслов и приказан је подебљаним словима, док други натпис представља текст. Наслов и текст се задају приликом стварања ставке. Могуће је накнадно променити наслов ставке.
  • Листа ставки је панел који садржи произвољан број ставки. Ствара се празна након чега се ставке додају појединачно. Ставке се приказују у једној колони и потребном броју редова.
  • Контакт је ставка која се ствара са задатим именом корисника и његовим бројем телефона. Име корисника представља наслов ставке, а број телефона текст ставке.
  • Именик је листа ставки у које је могуће додати само контакте. Могуће је дохватити име корисника са задатим бројем телефона. Грешка је (GNePostoji) уколико се задати број телефона не налази у именику. Могуће је дохватити број телефона корисника са задатим именом. Грешка је (GNePostoji) уколико се задато име не налази у именику.
  • Порука је ставка која се ствара са задатим бројем телефона пошиљаоца, бројем телефона примаоца и текстом. Број телефона пошиљаоца је наслов ставке, а текст поруке је текст ставке. Примаоца поруке је могуће накнадно променити. Могуће је дохватити реалну цену поруке.
  • СМС је порука. Уколико се СМС шаље у иностранство његова цена је 10. Уколико се СМС шаље унутар земље, али у другу мрежу његова цена је 6. Уколико се СМС шаље унутар земље, унутар исте мреже његова цена је 3.
  • Извештај о слању је порука која се ствара са задатом СМС поруком на коју се односи и статусом слања (DOSTAVLJENO, NEMA_KREDITA, KORISNIK_NIJE_REGISTROVAN). Број телефона пошиљаоца извештаја је једнак броју телефона примаоца поруке. Број телефона примаоца извештаја је једнак броју телефона пошиљаоца поруке. Текст извештаја је једнак текстуалној репрезентацији статуса слања. Цена извештаја је 0.
  • Сандуче је листа ставки у коју је могуће додати само поруке.
  • Телефон је панел који се ствара са задатим бројем телефона, оператером (видети ниже) и бојом. Може да се дохвати број телефона. Телефон садржи сандуче за пријем порука (подразумевано празно), именик и тастатуру (видети ниже). Приликом креирања телефон се региструје код оператера. Именик телефона при стварању има само један контакт и то број телефона оператера са именом корисника "ОПЕРАТЕР". Телефон може да прими задату поруку, при чему се порука убацује у сандуче за пријем порука. Уколико се ради о СМС поруци, додатно се оператеру шаље извештај са статусом DOSTAVLJENO. Приликом приказа приспелих порука, уколико се број телефона пошиљаоца налази у именику телефона, у наслову ставке се приказује име корисника, а не број телефона. Могуће је послати СМС поруку тако што се помоћу тастатуре телефона унесе број телефона примаоца поруке и текст поруке СМС порука се прослеђује оператеру који је даље обрађује. Могуће је додати нови контакт у именик тако што се помоћу тастатуре унесе број телефона, а затим и име корисника. Телефон је могуће укључити и искључити. Када је телефон искључен, одговарајуће дугме је црвене боје са текстом „Укључи телефон“. Уколико је телефон искључен, операција примања поруке блокира позиваоца док се телефон не укључи.
  • Активна тастатура је панел који се ствара са задатим натписом чији текст се мења куцањем по тастатури. Натпис је могуће накнадно променити. Тастатура се састоји од 12 дугмади поређаних у мрежу 4 x 3. Тастатура има два режима рада. У првом режиму се уноси број телефона и на дугмадима су приказани бројеви 0-9 и знакови * и + (видети слику). У другом режиму се уноси текст и на дугмадима су приказана слова алфабета и знак за размак (видети слику). Режим рада тастатуре је могуће променити. Приликом уноса текста једно дугме се односи на више различитих слова. Уколико након притиска дугмета протекне више од једне секунде, унето слово остаје сачувано у откуцаном тексту. Такође, унето слово остаје сачувано и уколико протекне мање од једне секунде, али се притисне друго дугме тастатуре. Уколико се исто дугме притисне поново у року од једне секунде, мења се тренутно слово у следеће слово по кружном редоследу слова на дугмету које је притиснуто. Пример: да би се откуцала реч CAO потребно је притиснути дугме на којем је исписано ABC три пута како би се дошло до слова C (интервал између притисака треба да буде мањи од 1s), затим сачекати да протекне једна секунда, притиснути поново дугме на којем је исписано ABC како би се исписало слово A, а затим три пута притиснути дугме на којем је исписано MNO како би се исписало слово O. Након слова А није потребно чекати једну секунду.
  • Активни Оператер је задужен за праћење регистрованих корисника и прослеђивање порука. Ствара се са задатим бројем телефона који користи за број пошиљаоца када шаље корисницима извештаје и понављајуће поруке (+38164000000 у видео снимку). Корисник се код оператера региструје задатим телефоном. Приликом регистрације сваки корисник добија кредит у износу од 10. Оператер чува информације о износима кредита својих корисника. Кредит се користи за слање порука. Оператеру је могуће доставити поруку која се шаље. Обрада и слање сваке поруке се врши у засебној нити. Трајање обраде се симулира чекањем 2 секунде. Након тога оператер проверава да ли су и пошиљалац и прималац поруке регистровани код њега. Уколико барем један није, шаље се пошиљаоцу поруке извештај са статусом KORISNIK_NIJE_REGISTROVAN. Уколико пошиљалац нема довољно кредита за слање поруке, шаље му се извештај са статусом NEMA_KREDITA. Уколико су испуњени сви услови за слање поруке, порука се доставља телефону примаоца, а кредит пошиљаоца се умањује за цену поруке. Уколико је телефон примаоца поруке искључен, нит за слање поруке се блокира док се телефон не укључи. Оператер мора бити све време на располагању корисницима. Оператеру је могуће поставити понављајућу поруку која се шаље свим корисницима на задати временски интервал. Приликом постављања понављајуће поруке задаје се текст поруке и интервал у милисекундама. Радња оператера се састоји у слању задате понављајуће поруке свим корисницима на задати временски интервал. У примеру приказаном на слици оператер на 75 секунди шаље свим својим корисницима поруку "Hello'"

Напомене

  1. На лабораторијској вежби је напоменуто да сваки укус мора минимално да има 20ml.