KDP/Lab 1 2022

Izvor: SI Wiki
< КДП
Datum izmene: 26. jul 2022. u 19:59; autor: KockaAdmiralac (razgovor | doprinosi) (Postavka naše lab vežbe od ove godine)
(razl) ← Starija izmena | Trenutna verzija (razl) | Novija izmena → (razl)
Pređi na navigaciju Pređi na pretragu
Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.

Prva laboratorijska vežba 2022. godine nosila je 10 bodova. Isti tekst ponovio se i na narednih nekoliko prvih laboratorijskih vežbi. Za razliku od laboratorijske vežbe za samostalnu vežbu, nije bio dat skelet koda.

Grupa 1

Postavka

Potrebno je napisati Java aplikaciju koja pronalazi broj još uvek aktivnih serija po decenijama. Rešenje mora biti maksimalno konkurentno i otporno na prekide.

Delovi aplikacije:

  • Klasa Producer obrađuje ulaznu datoteku sa filmovima i informaciju o svakom pojedinačnom filmu ubacuje u deljeni objekat za dalju obradu. Za implementaciju deljenog objekta koristiti Lock ili semafore u zavisnosti od grupe, ali tako da poštuju FIFO poredak. Ova klasa obradu obavlja u svom toku kontrole. Podaci o filmovima se čitaju red po red iz arhive sa filmovima (title.basics.tsv.gz).
  • Klasa Consumer obrađuje informacije o dobijenom filmu i rezultate obrade na kraju prosleđuje na dalju obradu. Ova klasa obradu obavlja u svom toku kontrole. Klasa čita informacije o nekom filmu iz deljenog objekta. Čuva se samo broj serija koje su započele (startYear nije \N) a nisu završile (endYear je \N) po decenijama. Na svakih K (zadaje se) obrađenih filmova koje jedan Consumer obradi, ažurira informaciju o svom broju obrađenih filmova koristeći poseban poseban deljeni objekat. Kada ne bude bilo više filmova za obradu, Consumer prosleđuje svoj broj serija po decenijama dalje korišćenjem deljenog objekta koji mora biti implementiran preko monitora ili regiona u zavisnosti od grupe.
  • Klasa Combiner na osnovu prikupljenih brojeva nezavršenih serija po decenijama određuje ukupan broj nezavršenih serija po decenijama. Ova klasa obradu obavlja u svom toku kontrole. Klasa preuzima podatke iz deljenog objekta i nakon završene obrade rezultat ubacuje u sledeći deljeni objekat.
  • Klasa Printer na svakih M (zadaje se) sekundi štampa informacije o broju obrađenih filmova, sve dok se ne prikupe konačni podaci i na kraju štampa njih na osnovu podataka koje je dostavila klasa Combiner. Ova klasa obradu obavlja u svom toku kontrole. Izlaz aplikacije je lista koja sadrži deceniju i broj nezavršenih serija u toj deceniji.
  • Klasa Test testira ovaj sistem. Klasa u svojoj početnoj main metodi kreira sve potrebne deljene objekte, pokreće jednu instancu klase Producer, veći (podesiv) broj instanci klase Consumer, jednu instancu klase Combiner i jednu instancu klase Printer. Nakon kompletno završene obrade, štampa koliko je iznosilo ukupno vreme obrade za dati broj niti koje rade obradu.
  • Nijedna klasa niti (Producer, Consumer, Combiner, Printer) ne sme da zna za broj instanci klase Consumer!

Rešenje

Grupa 2

Postavka

Potrebno je napisati Java aplikaciju koja pronalazi broj živih osoba koje su se bavile određenom profesijom po decenijama. Rešenje mora biti maksimalno konkurentno i otporno na prekide.

Delovi aplikacije:

  • Klasa Producer obrađuje ulaznu datoteku sa osobama i informaciju o svakoj pojedinačnoj osobi ubacuje u deljeni objekat za dalju obradu. Za implementaciju deljenog objekta koristiti Lock ili monitora u zavisnosti od grupe, ali tako da poštuju FIFO poredak. Ova klasa obradu obavlja u svom toku kontrole. Podaci o osobama se čitaju red po red iz arhive sa osobama (name.basics.tsv.gz).
  • Klasa Consumer obrađuje informacije o dobijenoj osobi i rezultate obrade na kraju prosleđuje na dalju obradu. Ova klasa obradu obavlja u svom toku kontrole. Klasa čita informacije o osobama iz deljenog objekta. Čuva se samo broj osoba koje su još uvek žive (deathYear je \N) po zanimanjima i decenijama. Na svakih K (zadaje se) obrađenih osoba koje jedan Consumer obradi, ažurira informaciju o svom broju obrađenih osoba koristeći poseban poseban deljeni objekat. Kada ne bude bilo više osoba za obradu, Consumer prosleđuje svoj broj osoba po decenijama dalje korišćenjem deljenog objekta koji mora biti implementiran preko regiona ili semafora u zavisnosti od grupe.
  • Klasa Combiner na osnovu prikupljenih brojeva nezavršenih serija po decenijama određuje ukupan broj nezavršenih serija po decenijama. Ova klasa obradu obavlja u svom toku kontrole. Klasa preuzima podatke iz deljenog objekta i nakon završene obrade rezultat ubacuje u sledeći deljeni objekat.
  • Klasa Printer na svakih M (zadaje se) sekundi štampa informacije o broju obrađenih filmova, sve dok se ne prikupe konačni podaci i na kraju štampa njih na osnovu podataka koje je dostavila klasa Combiner. Ova klasa obradu obavlja u svom toku kontrole. Izlaz aplikacije je lista koja za svaku deceniju ispisuje zanimanja osoba koje su se u njoj rodile i koliko je bilo osoba sa tim zanimanjem.
  • Klasa Test testira ovaj sistem. Klasa u svojoj početnoj main metodi kreira sve potrebne deljene objekte, pokreće jednu instancu klase Producer, veći (podesiv) broj instanci klase Consumer, jednu instancu klase Combiner i jednu instancu klase Printer. Nakon kompletno završene obrade, štampa koliko je iznosilo ukupno vreme obrade za dati broj niti koje rade obradu.
  • Nijedna klasa niti (Producer, Consumer, Combiner, Printer) ne sme da zna za broj instanci klase Consumer!

Rešenje