PSI/Jun 2022

Izvor: SI Wiki
< ПСИ
Datum izmene: 8. jul 2022. u 02:22; autor: KockaAdmiralac (razgovor | doprinosi) (Postavka junskog roka sa rešenjem trećeg zadatka, videću za prvi i drugi sutra)
(razl) ← Starija izmena | Trenutna verzija (razl) | Novija izmena → (razl)
Pređi na navigaciju Pređi na pretragu

Junski ispit 2022. godine održan je 10. juna. Trajao je 165 minuta, ukupno je nosio 40 bodova (teorijski deo 12, praktični 28), praktični deo se radio većinom na računaru a teorijski u potpunosti na papiru i radili su se istovremeno. Štampana literatura nije bila dozvoljena, dok je za radne okvire koji su se koristili na praktičnom delu (Django, Laravel, CodeIgniter) bila dostupna dokumentacija.

1. zadatak

Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.

Postavka

Razmotrimo sledeći fragment napisan na objektno-orijentisanom pseudojeziku:

public class Button {
    private Lamp itsLamp;
    // other necessary instance variables
    public void poll() {
        if (/* some condition */)
            itsLamp.turnOn();
    }
    // other necessary methods
}
  1. Koji SOLID princip(i) dizajna su prekršeni? Pomoć: klasa Button ne treba da vidi "iznutrice" klase Lamp.
  2. Popraviti i dopuniti dati pseudokod da ne krši SOLID principe i da se pravilno inicijalizuje instance klase Button.

Rešenje

2. zadatak

Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.

Postavka

Želi se implementirati skup celih brojeva (klasa TreeSet) pomoću binarnog stabla pretrage, čiji su čvorovi opisani klasom Node. Dat je nepotpun UML dijagram koji opisuje takvu implementaciju.

Dijagram iz postavke drugog zadatka.
  1. Koja od sledećih ograničenja se mogu izraziti kardinalnostima na dijagramu? Za ona koja mogu zaokružite T i unesite kardinalnost na dijagram, a za ona koja ne mogu zaokružite F.
    1. [T / F] Stablo sastavljeno od Node čvorova je aciklično.
    2. [T / F] A TreeSet može biti prazan skup.
    3. [T / F] Čvor Node ne mora imati dece.
    4. [T / F] Čvor Node može imati jedno dete.
    5. [T / F] Čvor Node može imati najviše dvoje dece.
    6. [T / F] Stablo čvorova Node je uravnoteženo, tako da put od korenog čvora do najudaljenijeg lista nije više nego dvostruko duži od putanje od korenog čvora do najbližeg lista.
    7. [T / F] Čvorovi Node ne dele se među različitim TreeSet skupovima.
    8. [T / F] Ceo broj se može pojaviti u bilo kom TreeSet skupu.
    9. [T / F] Svaki čvor Node ima tačno jedan celobrojni ključ.
    10. [T / F] Podstabla se ne dele u okviru stabla Node čvorova.
    11. [T / F] TreeSet nema više od jednog korenog čvora.
  2. Za klase TreeSet i Node napišite odgovarajuće modele u nekom ORM frejmvorku koji je pominjan na predavanjima i vežbama.

Rešenje

3. zadatak

Postavka

Posmatra se informacioni sistem za usluge rezervisanja raftinga, smeštaja za rafting i dodatnih aktivnosti. Sistem omogućava prijavu koja zahteva izbor rafting ture, broja noćenja, broja gostiju i opcioni izbor jedne ili više dodatnih aktivnosti.

Svaka rafting tura ima svoj naziv i cenu. Isto važi i za svaku od dodatnih aktivnosti. Cena noćenja zavisi od broja noćenja, tako da su niže cene ako se rezerviše veći broj noćenja. Za svaku od izabranih dodatnih aktivnosti, kao i za rafting koji je obavezno uključen, potreban je po jedan dan boravka, tako da sistem pri prijavi rezervacije, osim provere da li su sva zahtevana polja popunjena, treba da proveri i da li je izabrani broj noćenja odgovarajući. Prijava je validna i ako je izabrani broj noćenja takav da neki dani budu bez aktivnosti ili nije izabrana nijedna dodatna aktivnost. Obavezno polje Nosilac prijave treba da sadrži ime i prezime osobe koja je glavni gost koji rezerviše turu, a broj gostiju (uključujući nosioca) je obavezno polje gde treba upisati numeričku vrednost između 2 i 10.

U slučaju da je forma za prijavu ispravno popunjena, obračunava se i na novoj stranici prikazuje ukupna cena boravka i korisniku daje opcija da potvrdi rezervaciju ili se vrati na stranicu za kreiranje prijave. Ukupna cena se računa na osnovu cene noćenja, rafting ture, uključenih dodatnih aktivnosti i broja gostiju . U slučaju povratka na stranicu za kreiranje prijave, prethodni sadržaj forme za prijavu treba da bude sačuvan. Ako korisnik potvrdi da želi rezervaciju, podaci iz forme za rezervaciju i ukupna cena boravka se čuvaju i prikazuje se početni ekran sa porukom o uspešnoj prijavi.

U slučaju da forma za prijavu nije bila ispravno popunjena, na istoj stranici se prikazuje poruka o grešci, bez brisanja sadržaja forme za prijavu. Poruka treba da kratko i jasno obrazloži kakva je greška napravljena pri popunjavanju prijave (nije popunjeno jedno ili više polja, izabrano više dodatnih aktivnosti nego što je moguće na osnovu broja noćenja itd.).

  1. Realizovati MVC (Model-View-Controller) aplikaciju korišćenjem programskog jezika PHP ili Python. Implementaciju je moguće raditi korišćenjem objektno orijentisanog PHP koda, ili korišćenjem radnih okvira CodeIgniter, Laravel ili Django MTV (Model-Template-View). Aplikacija je potrebno da sadrži isključivo deo sistema koji se odnosi na prijavu rafting ture.
    Očekivani rezultat zadatka 3a): čitav projekat veb aplikacije komprimovati u ZIP arhivu i iskopirati na disk Rad (L:). Isto je potrebno uraditi i ukoliko se radi u radnom okviru.
  2. Korišćenjem alata Selenium IDE, napisati test primere kojim ćete testirati formu za prijavu rafting ture, koja je opisana u tekstu zadatka i implementirana u tački a).
    Očekivani rezultat zadatka 3b): projekat okruženja Selenium IDE, sa svim testovima, snimiti kao fajl sa ekstenzijom .side i prekopirati na disk Rad (L:) . Dovoljno je testove pokrenuti samo u okruženju Google Chrome ili Mozilla Firefox.
  3. Nacrtati dijagram sekvence za funkcionalnost prijave rafting ture, prema opisanoj specifikaciji sistema.
    Očekivani rezultat zadatka 3c): dijagrame nacrtati na ovom papiru.

Rešenje

Dijagram sekvence tražen u trećoj stavci trećeg zadatka.