OO1/Lab 3 2021
V1
Postavka zadatka bez modifikacija se može naći na stranici predmeta. Ispod su date modifikacije:
- (20 poena) Transakcija se stvara sa zadatim računom sa koga se vrši prenos (
racun1
), računom na koji se prenosi (racun2
), iznosom za prenos i datumom transakcije. Svi podaci koji se zadaju prilikom stvaranja mogu da se dohvate. Transakcija sadrži još i informaciju o tome da li je uspešna. Prilikom stvaranja transakcije vrši se prenos zadatog iznosa sa računaracun1
na računracun2
i postavlja informacija da li je transakcija uspešna. Moguće je transakciju proglasiti neuspešnom (~transakcija
) i dohvatiti informaciju da li je uspešna (*transakcija
). Transakcija se u izlazni tok ispisuje (it<<transakcija
) u obliku T:racun1
->racun2
:iznos-datum-uspeh. - (25 poena)
Dinarski račun je bankovni račun čija je oznaka valute RSD.Ukoliko se prenos vrši na zadati račun koji je devizni, potrebno je izvršiti konverziju zadatog iznosa iz valute RSD u valutu EUR i na taj konvertovani iznos dodati deviznom računu. Devizni račun je bankovni račun čija je oznaka valute EUR. Devizni račun sadrži srednji kurs po kome može da se vrši konverzija valute EUR u RSD i obrnuto. Srednji kurs je isti za sve račune, može da se dohvati i može da mu se postavi nova vrednost. Ukoliko se prenos vrši na zadati račun koji je dinarski, potrebno je izvršiti konverziju zadatog iznosa iz valute EUR u valutu RSD i taj konvertovani iznos dodati dinarskom računu. - (10 poena) Lista sadrži proizvoljan broj podataka nekog tipa. Može da se doda jedan element u listu, kao i da se dohvati broj elemenata liste. Može da se postavi na prvi element, da se prelazi na sledeći element u odnosu na tekući, da se ispita da li postoji tekući element i da se dohvati podatak u tekućem elementu uz mogućnost promene. Moguće je izbaciti tekući element iz liste. Greška je ako ne postoji tekući element u momentu pokušaja dohvatanja i izbacivanja.
- (10 poena) Klijent je osoba koja sadrži listu bankovnih računa. Stvara se bez računa, a računi mogu naknadno da se dodaju. Moguće je dohvatiti račun sa zadatim brojem računa, greška je ako nema takvog računa. Klijent se izlazni tok ispisuje (
it<<klijent
) tako što se prvo ispiše osoba, a zatim u zasebnim redovima njeni računi. - (25 poena) Evidencija banke je lista klijenata i sadrži listu njihovih transakcija. Stvara se prazna sa zadatim nazivom banke. Moguće je dodati novu transakciju koja će biti stvorena u memoriji za dinamičku dodelu; greška je ako bar jedan vlasnik od dva računa transakcije nije u listi klijenata. Moguće je dohvatiti sve uspešne transakcije koje su se dogodile na zadati datum. Prilikom nestajanja evidencije treba obrisati i sve transakcije. Evidencija se u izlazni tok ispisuje (
it<<evidencija
) tako što se prvo ispiše naziv banke, a u zasebnim redovima njeni klijenti.
(5 poena) Napisati glavnu funkciju koja napravi jednu osobu, jedan devizni i jedan dinarski račun čiji je ona vlasnik. Zatim doda neke iznose na te račune, napravi jednu uspešnu transakciju prenosa sa jednog na drugi račun i ispiše transakciju. (5 poena) Napraviti jednog klijenta, jedan devizni i jedan dinarski račun čiji je vlasnik klijent. Zatim klijentu dodati te račune, a računima dodati neki iznos i napraviti jednu transakciju prenosa između ta dva računa. Napraviti evidenciju, dodati joj prethodno napravljenu transakciju i ispisati evidenciju.
V2
Postavka zadatka bez modifikacija se može naći na stranici predmeta. Ispod su date modifikacije:
- Jelo sadrži listu namirnica. Stvara se sa zadatim nazivom koji je moguće dohvatiti. Moguće je dodati namirnicu (
jelo+=namirnica
). Moguće je izračunati nutritivnu vrednost i kalorije jednog jela kao zbir nutritnivnih vrednosti odnosno kalorija svih namirnica. Jelo se u izlazni tok ispisuje (it<<jelo
) tako što se prvo ispiše naziv a zatim u svakom sledećem redu po namirnica koju sadrži. - Posno jelo je jelo koje je posno. Greška je ukoliko se u posno jelo pokuša dodati namirnica koja nije posna.
- Dijetalno jelo je jelo koje ne sadrži više od 10 grama masti. Greška je ukoliko se u dijetalno jelo doda namirnica koja ovo ograničenje narušava.
- Vežba sadrži tekstualni naziv vežbe i celobrojni broj kalorija koji se potroši za jedan minut vežbe sa kojima se stvara. Sva polja je moguće dohvatiti. Vežba se u izlazni tok ispisuje (
it<<vezba
) u obliku V:naziv-broj kalorija. - Trening se stvara sa trajanjem i vežbom. Može da se dohvati broj potrošenih kalorija tokom treninga. Trening se u izlazni tok ispisuje (
it<<trening
) u obliku T:broj potrošenih kalorija. - Osoba se stvara sa stvara sa nazivom osobe i kilažom. Osoba sadrži listu jela koja je pojela tokom dana. Moguće je dodati jelo osobi (
osoba+=jelo
). Osoba sadrži listu treniga koje je odradila u toku dana. Moguće je odraditi trening (osoba+=trening
). Greška je ukoliko se dodavanjem treninga padne ispod 2000kcal. Moguće je završiti dan (!osoba
). Na kraju dana izračunati novu kilažu osobe (4kcal dodaju 1 gram kilaži). Osoba se ispisuje u izlazni tok (it<<osoba
) u obliku o:Naziv - Kilaža, u sledećem redu lista jela a zatim lista treninga.
(5 poena) Napraviti glavnu funkciju koja stvara nekoliko namirnica i odštampati ih. (5 poena) Napraviti glavnu funkciju koja stvara osobu, nekoliko jela i nekoliko treninga. Odštampati osobu. Dodati jela i treninge osobi a zatim završiti dan. Ponovo odštampati osobu.
V4
Ova modifikacija je došla na popravnoj trećoj laboratorijskoj vežbi. Postavka zadatka bez modifikacija se može naći na stranici predmeta. Ispod su date modifikacije:
- (5 poena) Vrednosni operand je operand čija realna vrednost može da se dohvati. Oznaka vrste je
V
. - (10 poena) Literal je vrednosni operand, čiji zadati natpis predstavlja vrednost literala decimalnog realnog broja (podrazumevano 0.0) sa proizvoljnim brojem cifara ispred tačke i proizvoljnim brojem cifara iza tačke. Greška
GLiteral
je ukoliko zadata[sic] tekstualni natpis nije u formi decimalnog realnog broja. - (10 poena) Promenljiva je vrednosni operand, čiji zadati natpis sadrži samo slova i cifre, pri čemu prvi znak mora da bude slovo. Greška
GPromenljiva
je ukoliko zadat tekstualni natpis nije u navedenoj formi. Promeljiva[sic] sadrži literal, koji predstavlja njenu trenutnu vrednost i koji može da se postavi. - (10 poena)
Binarni operator je element, kome celobrojni prioritet može da se dohvati. Dva operatora se mogu uporediti koristeći relaciju veće (Moguće je izračunati realnu vrednost primene operatora nad zadatom listom vrednosnih operanada (op1 > op2
), pri čemu im se upoređuju njihovi celobrojni prioriteti. Prioritet operatora određuje prvenstvo grupisanja operanada. Oznaka vrste jeO
.operator[lista]
), pri čemu je greškaGOperator
ukoliko se pokuša primena operatora, a broj operanada nije tačno 2. - (2 poena)
Sabiranje je binarni operator čiji je tekstualni natpis +, a celobrojni prioritet 1.Primenom operatora sabiraju se realne vrednosti operanada. - (4 poena) Množenje je binarni operatora čiji je tekstualni natpis *, a celobrojni prioritet 2. Primenom operatora množe se realne vrednosti operanada.
- (4 poena) Stepenovanje je binarni operator čiji je tekstualni natpis ^, a celobrojni prioritet 3. Primenom operatora stepenuje se realna vrednost prvog operanda na stepen drugog.
- (25 poena) Procesor izraza u postfiksnom obliku postoji kao jedinstveni objekat u sistemu. Stvara se prazan samo jedanput, a zatim se (po potrebi) dohvata objekat već napravljenog procesora. Može da izračuna realnu vrednost zadatog izraza u postfiksnom obliku (
procesor[izraz]
). GreškaGVrednost
je ukoliko nije moguće izračunati vrednost izraza. Procesor ne može da se kopira ni na koji način. - (20 poena) Generator izraza u infiksnom obliku postoji kao jedinstveni objekat u sistemu. Stvara se prazan samo jedanput, a zatim se (po potrebi) dohvata objekat već napravljenog generatora. Može da generiše izraz u infiksnom obliku na osnovu zadatog izraza u postfiksnom obliku (
generator[izraz]
). Operandi svakog operatora su zajedno sa tim operatorom okruženi jednim parom zagrada. GreškaGInfiks
je ukoliko nije moguće generisati ispravan izraz u infiksnom obliku. Generator ne može da se kopira ni na koji način.
Napisati glavnu funkciju koja (5 poena) napravi promenljive a, b i c, na osnovu njih sledeći izraz: a + b * c i ispiše ga na standardnom izlazu, a zatim koristeći generator izraza u postfiksnom obliku generiše postfiksni izraz na osnovu prethodnog izraza i ispiše ga na standardnom izlazu. Dobijeni postfiksni izraz je a b c * +. (5 poena) Postaviti promenljivoj a vrednost literala 1.5, promenljivoj b vrednost literala 2, a promenljivoj c vrednost literala 3.5. Koristeći procesor postfiksnog izraza izračunati vrednost prethodno dobijenog postfiksnog izraza i ispisati je na standardnom izlazu (dobijena vrednost je 8.5), a zatim koristeći generator izraza u infiksnom obliku generisati infiksni izraz na osnovu prethodnog postfiksnog izraza i ispisati ga na standardnom izlazu. Dobijeni infiksni izraz je ( a + ( b * c ) ).
V5
Postavka zadatka bez modifikacija se može naći na stranici predmeta. Ispod su date modifikacije:
Prevoz se stvara sa zadatom destinacijom i realnom cenom karte u oba smera. Moguće je dohvatiti destinaciju i cenu prevoza, podrazumevano jednaku ceni karte.Moguće je dohvatiti tip prevoza.- Autobus je prevoz čiji je tip AUTOBUS. Avion je prevoz čiji je tip AVION i sadrži aero taksu sa kojom se stvara. Aero taksa se dodaje na cenu prevoza aviona.
- Lista sadrži proizvoljan broj podataka nekog tipa. Može da se doda jedan element na kraj liste. Može da se postavi na prvi element liste, da se prelazi na sledeći element u odnosu na tekući, da se ispita da li postoji tekući element i da se dohvati podatak u tekućem elementu. Greška je ako ne postoji tekući element prilikom dohvatanja. Listu je moguće isprazniti. Listu nije moguće kopirati ni na koji način.
- Polisa osiguranja se stvara sa zadatim tipom polise (ZDRAVSTVENO, ODUSTANAK). Sva polja mogu da se dohvate. Polisa se u izlazni tok ispisuje (
it<<putnik
) u obliku P:tip. - Putnik se stvara sa tekstualnim imenom putnika, preferiranim tipom smeštaja, destinacijom i brojem zvezdica smeštaja, kao i logičkim vrednostima koje određuju da li hoće polisu osiguranja za svaku vrstu polise. Putnik se u izlazni tok ispisuje (
it<<putnik
) u obliku: P:ime. - Turistički aranžman je aranžman koji se dodatno stvara sa procentom marže. U turistički aranžman mogu da se naknadno dodaju polise osiguranja, po jedna za svaki tip (nije bilo rečeno u tekstu, ali turistički aranžman je vlasnik polise). Greška je ukoliko se pokuša dodavanje tipa polise koji je već dodat. Cena turističkog aranžmana se izračunava tako što se na cenu običnog aranžamana doda po 1000 za svaku polisu osiguranja koja je obuhvaćena a zatim se pomnoži s procentom marže.
- Turistička agencija se stvara s procentom marže i sadrži listu dostupnih destinacija, prevoza i smeštaja u koje se naknadno mogu dodavati destinacije, prevozi i smeštaji (
agencija += destinacija, agencija += prevoz, agencija += smestaj
). Moguće je za zadatog putnika i početak i kraj putovanja napraviti turistički aranžman koji zadovoljava preference putnika (nije naglašeno u zadatku, ali ovo podrazumeva i dodavanje polisa) a greška je ukoliko se preference putnika ne mogu zadovoljiti.
Napraviti glavnu funkciju koja napravi nekoliko destinacija, smeštaja, prevoza, datuma, polisa i jednog putnika i sve ih ispiše. Zatim napravi agenciju, doda destinacije, smeštaje i prevoze u nju, napravi turistički aranžman preko agencije za putnika i ispiše ga.