ОО1/Лаб 2 2021

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

В2

Поставка задатка без модификација се може наћи на страници предмета. Испод су дате модификације:

  • Књига има назив, аутора и јединствени аутоматски генерисан целобројни индентификатор.[sic] Назив књиге и име аутора се задају при стварању. Сви подаци могу да се дохвате. Могуће је направити копију књиге (!knjiga) која враћа показивач на новонаправљену књигу са истим називом и аутором. Није могуће копирати књигу ни на један други начин. Могуће је исписати књигу у излазни ток (it<<knjiga) у облику KNJIGA id : naslovautor.
  • Библиотека има назив, број књига који се налази у библиотеци и највећи број књига који може да смести. Сви подаци могу да се дохвате. Приликом стварања задаје се назив и највећи број књига који може да се смести у библиотеку. Могуће је додати књигу у библиотеку (biblioteka+=knjiga). Приликом додавање[sic] књиге у библиотеку, библиотека направи копију књиге и сачува је по адреси. Књига се може дохватити из библиотеке навођењем идентификатора књиге. Могуће је исписати библиотеку у излазни ток (it<<biblioteka) тако што се у првом реду испише име и капацитет библиотеке у облику BIBLIOTEKA naziv br_knjiga/kapacitet, а у засебним редовима све књиге које се налазе у њој.
  • Датум има дан, месец и годину који се задају при стварању (подразумевано 01.01.1970.) и могу да се дохвате. Могуће је исписати датум у излазни ток (it<<datum) у облику дан.месец.година., при чему се дан и месец исписуји на ширини од две децимале са водећом нулом по потреби.
  • Позајмица прима књигу, датум почетка и датум краја зајма и статус који говори да ли је позајмица завршена. Могуће је дохватити књигу. Приликом стварања задају се књига и датум почетка позајмице, док је датум краја позајмице недефинисан све док књига не буде враћена. Могуће је проверити да ли је књига враћена (~pozajmica) и комплетирати позајмицу враћањем књиге. Могуће је исписати позајмицу у излазни ток (it<<vreme)[sic] у облику књига (датум_почетка - датум_краја). Уколико књига није враћена датум краја не треба исписивати.
  • Листа позајмица има произвољан број позајмица и ствара се празна након чега јој се позајмице појединачно додају. Могуће јој је додати позајмицу (lista+=pozajmica), дохватити позајмицу на основу задате књиге (уколико се више позајмица односи на исту књигу, вратити ону позајмицу која је прва додата у листу) и уклонити позајмицу из листе (lista-=pozajmica). Могуће је исписати листу позајмица у излазни ток (it<<lista) тако што се свака позајмица испише у засебном реду.
  • Библиотека додатно има листу историје позајмица, и листу текућих позајмица. Могуће је позајмити књигу из библиотеке, при чему се задаје датум почетка позајмице и идентификатор књиге, а одговарајуће место у библиотеци анулира. Књига се том приликом само пребацује из библиотеке у позајмицу, која се памти у листи текућих позајмица. Могуће је вратити књигу у библиотеку, којом приликом се одговарајућа позајмица комплетира датумом враћања и пребацује у историју позајмица, а књига из позајмице враћа у библиотеку. Приликом исписа библиотеке, за књиге које су тренутно на позајмици исписати ?, а затим исписати и све текуће позајмице и историју позајмица.

Написати главну функцију која детаљно тестира функционалности претходно описаних класа. Направити главну функцију која ствара једну библиотеку, у њу додаје 3 књиге и исписује библиотеку. Затим се две књиге позајме, а једна од њих врати, те се поново испише библиотека.

В3

Поставка задатка без модификација се може наћи на страници предмета. Испод су дате модификације:

  • Скуп се састоји од произвољног броја карактера. Ствара се задатoм C++ ниском (string), чији се карактери одмах додају. Могуће је додати карактер у скуп (skup+=karakter), при чему се додавање карактера који се већ налази у скупу игнорише, као и испитати да ли се карактер налази у скупу (skup(karakter)). Скуп није могуће копирати ни на који начин.
  • Реч се ствара задатoм C++ ниском (string) и састоји се само од слова енглеског алфабета. Могуће је одредити дужину речи (+rec), као и број слогова речи (~rec). Број слогова речи одређује се бројем носилаца слогова речи. Носилац слога је сваки самогласник у скупу {a, e, i, o, u} или сваки сонант у скупу {l, n, r} испред/иза кога се не налази самогласник. Могуће је одредити позицију слова н-тог носиоца слога у речи (rec(n)), при чему позиције слова крећу од 0. Вредност n==0 одређује први слог на почетку речи, позитивне вредности n означавају претрагу од почетка речи, а негативне вредности n од краја речи. У случају неуспешне претраге повратна вредност је -1. Две задате речи се римују (rec1^rec2) ако им се поклапају одговарајућа слова последња два слога, односно последњег слога ако је нека од речи једносложна. Провера поклапања слова врши се од носилаца претпоследњих слогова у речима, односно носилаца последњих слогова ако је нека од речи једносложна. Реч је могуће учитати из једне линије улазног тока (it>>rec), при чему се игноришу сви знакови који нису слова енглеског алфабета и при чему се губи претходни садржај речи. Реч се исписује у излазни ток (it<<rec) исписивањем њених слова.
  • Стих садржи променљих број речи. Ствара се празан, а некон тога је могуће додавати појединачне речи на крај стиха (stih+=rec). Могуће је одредити број слогова стиха изражен у збиру слогова његових речи (~stih). Стих се исписује у излазни ток (it<<stih) исписивањем његових речи раздвојених тачно једним бланко знаком, у једном реду.
  • Строфа је секвенца стихова ограниченог капацитета. Ствара се празна, а након тога је могуће додавати стихове на крај строфе (strofa+=stih) при чему је операција без ефекта уколико се покуша додавање стиха у пуну строфу или стиха са различитим бројем слогова од стихова који се већ налазе у строфи. Строфа се исписује у излазни ток (it<<strofa) исписивањем њених стихова у посебним редовима.

Написати главну функцију која детаљно тестира функционалности претходно описаних класа. Направити главну функцију која ствара једну строфу, у њу додаје неколико стихова и исписује их.

Напомене

Модификације су написане по сећању студената који их су радили.