На програмском језику C++ имплементирати класу Funkcija (\(f(x) = kx + n\)). Класа садржи три заштићена атрибута: коефицијенте k и n (представљени реалним бројевима) и назив функције (знаковни низ запамћен у динамичкој зони меморије). Такође, поседује и следеће јавне чланице:
подразумевани конструктор који иницијализује коефицијенте k на 1, n на 0, а назив на „Linearna funkcija”,
конструктор којим се постављају вредности k и n,
виртуалну методу која одређује вредност функције за x,
виртуалну методу prikaziFunkciju за штампање атрибута класе,
виртуални деструктор који брише податке из динамичке зоне меморије уколико постоје.
Из класе Funkcija извести класе KvadratnaFunkcija, облика \(f(x) = (x + n)^k\), и EksponencijalnaFunkcija, облика \(f(x) = k^{x + n}\) где је \(k = e\). Обе класе треба да имплементују следеће јавне чланице:
подразумевани конструктор,
конструктор којим се постављају вредности свих атрибута,
предефинисану методу која одређује вредност функције за x,
предефинисану методу prikaziFunkciju која штампа податке о класи,
деструктор који брише податке из динамичке зоне меморије уколико постоје.
У функцији main направити низ од 2019 показивача на објекте класе Funkcija. Поставити низ тако да садржи објекте све три класе по 673 пута. Приказати податке из низа на стандардни излаз. За произвољно унету вредност x приказати податке о функцији која има минималну вредност.
На програмском језику C++ имплементирати класу Figura. Класа садржи два заштићена атрибута: број страница и низ страница (низ реалних бројева запамћених у динамичкој зони меморије). Такође, поседује и следеће јавне чланице:
подразумевани конструктор који иницијализује број страница на 0,
конструктор којим се постављају странице као и њихов број,
виртуалну методу која рачуна површину,
виртуалну методу Prikazi за штампање атрибута класе,
виртуални деструктор који брише податке из динамичке зоне меморије уколико постоје.
Из класе Figura извести класе Kvadrat и Pravougaonik. Обе класе треба да имплементују следеће чланице:
подразумевани конструктор,
предефинисану методу Prikazi која штампа податке о класи,
деструктор који брише податке из динамичке зоне меморије уколико постоје.
За класу Kvadrat додати конструктор којим се све странице постављају на вредност a. За класу Pravougaonik додати конструктор којим се све странице постављају одговарајућим вредностима a и b.
У функцији main инстанцирати низ од 2018 показивача на објекте класе Figura. Поставити низ тако да садржи по најмање 1009 објеката класе Kvadrat и Pravougaonik. Приказати податке из низа на стандардни излаз. Сортирати низ по површини, а затим сачувати низ у текстуалну датотеку.
#include"Kvadrat.h"#include<iostream>Kvadrat::Kvadrat():Figura(4,newdouble[4]){}Kvadrat::Kvadrat(doublea):Figura(4,newdouble[4]){stranice[0]=stranice[1]=stranice[2]=stranice[3]=a;}doubleKvadrat::Povrsina(){returnstranice[0]*stranice[0];}voidKvadrat::Prikazi(){std::cout<<"Kvadrat: a = "<<stranice[0]<<std::endl;}Kvadrat::~Kvadrat(){delete[]stranice;}
#include"Pravougaonik.h"#include<iostream>Pravougaonik::Pravougaonik():Figura(4,newdouble[4]){}Pravougaonik::Pravougaonik(doublea,doubleb):Figura(4,newdouble[4]){stranice[0]=stranice[2]=a;stranice[1]=stranice[3]=b;}doublePravougaonik::Povrsina(){returnstranice[0]*stranice[1];}voidPravougaonik::Prikazi(){std::cout<<"Pravougaonik: a = "<<stranice[0]<<", b = "<<stranice[1]<<std::endl;}Pravougaonik::~Pravougaonik(){delete[]stranice;}
На програмском језику C++ имплементовати класу Point. Класа садржи два заштићена атрибута: координате x и y (представљене реалним бројевима) и следеће јавне чланице:
подразумевани конструктор који иницијализује вредност координата на 0,
конструктор којим се постављају вредност x и y координата,
методу за одређивање растојања између две тачке,
виртуалу методу printData за штампање атрибута класе,
виртуални деструктор.
Из класе Point јавно извести класу PointCity која означава локацију града на географској карти. Ова класа саджи приватне атрибуте: назив града (знаковни низ запамћен у динамичкој зони меморије), назив државе којој припада (знаковни низ запамћен у динамичкој зони меморије) и број становника, као и следеће јавне чланице:
подразумевани конструктор,
конструктор којим се постављају вредности свих атрибута,
предефинисану методу printData која штампа податке о класи (додати назив и број становника),
деструктор који брише податке из динамичке зоне меморије уколико постоје.
У функцији main инстанцирати низ објеката класе PointCity на основу података из унапред спремљене датотеке (LV3Zad3.txt). Подаци су уписани у формату назив града, па назив државе којој припада па број становника. Подаци су међусобно одвојени табулатом, а називи градова и држава могу да имају бланко знак у себи, па је потребно да се и томе води рачуна.
Пример тест података
Belgrade Serbia 1,166,763[210]
Los Angeles United States 3,884,307[103]
Обратити пажњу да број становника није приказан као стандардни цео број, већ има и симболе груписања цифара које би требало да се избаце. Такође, након броја становника (у већини случајева) стоји и референца на извор које треба да се уклоне пре конвертовања текстуалне у бројну вредност. У датом примеру 1,166,763[210] треба да се евалуира као 1166763.
Листу градова сортирати по броју становника и сортирану листу уписати у датотеку на исти начин као што је листа из почетне датотеке (подаци о једном граду смештени у оквиру једног реда, најпре назив града, па државе и на крају број становника).
#include<iostream>#include<fstream>#include<random>#include<sstream>#include"PointCity.h"intmain(){std::ifstreamfile("LV3Zad3.txt");if(!file.is_open()){std::cout<<"File not found!"<<std::endl;return1;}intcount=0;std::stringline;while(std::getline(file,line)){if(!line.empty())count++;}file.clear();file.seekg(0,std::ios::beg);autocities=newPointCity*[count];std::random_devicerd;std::mt19937mt(rd());std::uniform_int_distribution<int>dist(-100,100);inti=0;while(std::getline(file,line)){if(line.empty()){continue;}std::istringstreamiss(line);std::stringcountry,city,population;std::getline(iss,city,'\t');std::getline(iss,country,'\t');std::getline(iss,population,'\t');intpopNum=0;for(intj=0;j<population.length();j++){if(population[j]=='['){break;}if(std::isdigit(population[j])){popNum*=10;popNum+=population[j]-'0';std::cout<<population[j];}}cities[i++]=newPointCity(city.data(),country.data(),popNum,dist(mt),dist(mt));}file.close();for(intj=0;j<count-1;j++){for(intk=j+1;k<count;k++){if(cities[j]->Population()<cities[k]->Population()){autotemp=cities[j];cities[j]=cities[k];cities[k]=temp;}}}std::ofstreamoutFile("LV3Zad3Out.txt");for(intj=0;j<count;j++){outFile<<*cities[j];}out.close();delete[]cities;return0;}
На програмском језику C++ направити класу Buffer која као приватне чланове садржи:
капацитет бафера,
број уписаних елемената у бафер,
динамички низ елемената типа int који представља сам бафер.
Класа садржи и јавне чанове:
конструктор који иницијализује капацитет бафера,
деструктор,
виртуелну методу push за додавање новог елемента на крају бафера,
виртуелну методу pop за избацивање елемента са почетка бафера,
виртуелну методу Clear која избацује све елементе из бафера.
Из класе Buffer извести класе QueueBuffer и OrderedBuffer.
Функционалност за QueueBuffer треба да буду следеће:
метода push треба да дода елемент на прво слободно место у бафер,
метода Clear функционише исто као и из основне класе,
метода pop треба да избацује претпоследњи елемент из бафера. Ако бафер има само један елемент, онда треба да избаци њега.
Функционалност за OrderedBuffer треба да буду следеће:
метода Clear треба да вредност свих елемената постави на 0,
метода push треба да дода нови елемент у бафер тако да садржај бафера остане сортиран у растућем редоследу,
метода pop треба да избаци елемент из средине бафера.
У функцији main декларисати три показивача на класу Buffer, а затим динамички направити објекте класе Buffer, QueueBuffer и OrderedBuffer и испробати све методе чланице, тако што кроз 2018 пута се понови следећа секвенца за сваки од објеката:
три пута позвати push са случајно генерисаним целим бројем,
два пута позвати pop,
у сваком педесетом циклусу позвати Clear,
након сваког стотог циклуса штампати садржај бафера.
На програмском језику C++ направити класу Command која представља апстракцију команди и која као чланове има:
title - назив команде,
value - вредност параметра (char*),
конструктор који поставља параметре title и value,
виртуалну методу execute (извршење команде) која исписује назив команде (title).
Из класе Command извести три класе: Draw, Save и Print. Свака класа дефинише title („Draw”, „Save”, „Print”) и предефинише execute методу (исписује параметре title и value извршене операције).
Направити класу CommandHistory која памти команде и има реализован undo механизам тако што класа садржи следеће чланове:
вектор показивача на објекте класе Command величине 2019,
тренутни број запамћених команди,
методу undo() која брише задњи елемент листе,
методу create(int x) која на основу параметра x прави одговарајућу команду (објекат класе Draw, Save, Print - уколико у вектору команди нема више места брише се прва уписана команда и додаје нова),
методу execute() која позива методу execute() задње издате команде.
У функцији main инстанцирати објекат класе CommandHistory и испробати све методе свих направљених класа. Напунити CommandHistory са по 673 Draw, Save и Print команди, извршити их и испразнити бафер.
#include"CommandHistory.h"#include"Draw.h"#include"Save.h"#include"Print.h"intmain(){autocmd0=newCommand(newchar[]{"Test command"},newchar[]{"This is a test"});autocmd1=newDraw(newchar[]{"Command to Draw"});autocmd2=newSave(newchar[]{"Command to Save"});autocmd3=newPrint(newchar[]{"Command to Print"});cmd0->Execute();cmd1->Execute();cmd2->Execute();cmd3->Execute();deletecmd0;deletecmd1;deletecmd2;deletecmd3;autohistory=newCommandHistory();for(intj=0;j<673;j++){history->Create(j%3);}for(inti=0;i<2019;i++){history->Execute();history->Undo();}deletehistory;return0;}
виртуелну јавну методу Print за приказ врсте и вредности броја на стандардни излаз,
заштићену виртуелну методу за постављање вредности броја,
виртуелну методу за враћање вредности броја.
класу RacionalanBroj изведену из класе Broj за представљање бројева облика \(\frac{a}{b}\), где су \(a\) и \(b\) цели бројеви.
класу KompleksanBroj изведену из класе Broj за представљање бројева облика \(a + j\cdot b\), а под вредношћу броја подразумева се његов модул.
У изведеним класама дефинисати приватне атрибуте којима је одређен одговарајући број и конструкторе који постављају одређене атрибуте.
У функцији main инстанцирати низ од 2018 показивача на објекте типа Broj, од којих 1009 указују на рационалне, а 1009 на комплексне бројеве. Вредности бројева или учитати из унапред дефинисане датотеке или их случајно генерисати. Сортирати бројеве у низу по вредности у опадајућем редоследу и уписати их у текстуалниу датотеку.
На програмском језику C++ направити класу Window која као чланове има:
title - назив прозора,
state - стање прозора (отворен/затворен),
виртуалну методу draw() која исписује вредности параметара title и state,
методу open() - отварање прозора,
методу close() - затварање прозора.
При отварању и затварању прозора се модификује стање прозора (state). Из класе Window извести две класе: DialogWindow и DocumentWindow. Класа DialogWindow предефинише методу draw тако што исписује на екрану „DialogWindow nacrtan”, и има додатне две методе:
confirm() - затвара прозор и затим враћа вредност 1,
cancel() - затвара прозор и затим враћа вредност 0.
Класа DocumentWindow предефинише draw тако што исписује на екрану „DocumentWindow nacrtan”.
У функцији main дефинисати низ од 2018 показивача типа Window, инстанцирате по 1009 објеката класе DialogWindow и DocumentWindow и испробати све методе направљених класа. На крају сортирати све прозоре по називу и сортирани низ уписати у текстуалну датотеку.
На програмском језику C++ направити класу Artikal која као чланове има:
назив,
цену,
виртуалну методу showDescription() која исписује параметре назив и цена,
методу getPrice() која враћа цену артикла.
Из класе Artikal извести две класе: Laptop и Torba. Класа Laptop поседује следеће чланове:
opis (char*),
stanje (укључен-искључен),
предефинисану методу showDescription() која исписује на екрану naziv, cenu и opis,
методу turnOn() - модификује се стање и исписује се порука на екрану,
методу turnOff() - модификује се стање и исписује порука на екрану.
Класа Torba садржи следеће чланове:
атрибут sadrzaj - типа Artikal, показивач на артикал тренутно смештен у торби,
предефинисати методу showDescription() која исписује на екрану текст „Torba za Laptop računar” и након тога зове методу showDescription() за артикал смештен у торби,
методу put(Artikal &a) - симулација смештања артикла у торбу уколико је празна и исписује поруку да ли је артикал смештен или не,
методу remove() - симулира вађење артикла из торбе.
У функцији main инстанцирати низ од 2018 показивача типа Artikal и по 1009 објеката класе Laptop и Torba и испробати све методе обе класе. На крају, сортирати све производе по цени и резултат сортирања уписати у текстуалну датотеку.
#include"Torba.h"#include<iostream>Torba::Torba(char*naziv,intcena):Artikal(naziv,cena){}voidTorba::ShowDescription(){std::cout<<"Torba za Laptop računar. ";if(this->sadrzaj==nullptr){std::cout<<"Prazna."<<std::endl;return;}this->sadrzaj->ShowDescription();}boolTorba::Put(Artikal*artikal){if(this->sadrzaj!=nullptr){std::cout<<"Torba je puna!"<<std::endl;returnfalse;}this->sadrzaj=artikal;std::cout<<"Artikal je uspešno smešten u torbi."<<std::endl;returntrue;}boolTorba::Remove(){if(this->sadrzaj==nullptr){std::cout<<"Torba je prazna!"<<std::endl;returnfalse;}this->sadrzaj=nullptr;std::cout<<"Artikal je uspešno izvađen iz torbe."<<std::endl;returntrue;}
На програмском језику C++ направити класу GeometrijskaSlika која садржи приватне атрибуте:
боја (дефинисана својим компонентама: R-црвено, G-зелено и B-плаво чије су вредности у опсегу 0–255),
тежиште (одређено x и y координатама).
Класа садржи следеће јавне чланице:
конструктор који иницијализује све приватне атрибуте,
методу за израчунавање растојања фигуре (њеног тежишта) од координатног почетка,
методу за транслирање фигуре за задати померај (дефинисан својим x и y компонентама),
виртуелну методу Show за приказ атрибута боја и тежиште на стандардни излаз,
заштићену виртуелну методу за израчунавање површине фигуре,
методу за испитивање да ли је фигура већа (по површини) од друге задате фигуре.
Направити и класе Krug (чији је приватни атрибут полупречник) и Kvadrat (чији је приватни атрибут стрница). У изведеним класама дефинисати конструкторе и методе за израчунавање површине. Предефинисати методе за приказ атрибута тако што ће пре приказа атрибута бити исписан тип фигуре, а после приказа атрибута родитељске класе приказати и атрибуте дефинисане у изведеним класама.
У функцији main инстанцирати по 2018 објеката класе Kvadrat и Krug у динамичкој зони меморије. Поставити све њихове атрибуте на случајне вредност из опсега 0–255. Након тога транслирати их за вектор \((a, b)\). За сваку фигуру одредити посебно \(a\) и \(b\) као случајно изабрану вредност из интервала \((-12{,}8, 12{,}8)\).
Сортирати све инстанциране фигуре по површини у неопадајућем редоследу и у текстуалну датотеку уписати све њихове атрибуте, површину и растојање од координатног почетка. Водити рачуна да се подаци о једној фигури уписују у један ред излазне датотеке.
#include"Krug.h"#include<cmath>#include<iostream>Krug::Krug(Bojaboja,Vek2teziste,doublepoluprecnik):GeometrijskaSlika(boja,teziste){this->poluprecnik=poluprecnik;}Krug::Krug(shortr,shortg,shortb,doublex,doubley,doublepoluprecnik):GeometrijskaSlika(r,g,b,x,y){this->poluprecnik=poluprecnik;}doubleKrug::Povrsina(){returnstd::pow(poluprecnik,2)*M_PI;}voidKrug::Show(){std::cout<<"Krug: ";GeometrijskaSlika::Show();std::cout<<"; r ="<<poluprecnik<<std::endl;}
#include"Kvadrat.h"#include<cmath>#include<iostream>Kvadrat::Kvadrat(Bojaboja,Vek2teziste,doublestranica):GeometrijskaSlika(boja,teziste){this->stranica=stranica;}Kvadrat::Kvadrat(shortr,shortg,shortb,doublex,doubley,doublestranica):GeometrijskaSlika(r,g,b,x,y){this->stranica=stranica;}doubleKvadrat::Povrsina(){returnstd::pow(stranica,2);}voidKvadrat::Show(){std::cout<<"Kvadrat: ";GeometrijskaSlika::Show();std::cout<<"; a ="<<stranica<<std::endl;}
#include<iostream>#include"DekadniMatricniDisplej.h"#include"Displej.h"#define M 7#define N 5voidSimulation(Displej*d1,DekadniMatricniDisplej*d2){for(intk=0;k<100000;k++){d1->Increment();d2->Increment();if(k%2018==0){d1->Show();d2->Show();}}}intmain(){autod1=newDisplej();autod2=newDekadniMatricniDisplej(M,N);d1->Set(9);d2->Set(9);Simulation(d1,d2);d1->Reset();d2->Reset();Simulation(d1,d2);deleted1;deleted2;return0;}