OO1PP2 – DZ5 Rok za izradu: 28.05.2009.
PRAKTIKUM IZ PROGRAMIRANJA 2
- domaći zadatak broj 5 -
Sastaviti program na programskom jeziku C koji vrši obradu datoteka koje predstavljaju muzičke plej-liste i konverziju tih datoteka iz jednog formata u drugi. Program dobija imena datoteka sa kojima će raditi preko argumenata komandne linije. Program treba da učita sve podatke iz ulazne datoteke/ulaznih datoteka u listu, izvrši obradu nad učitanim podacima, upiše podatke u izlaznu datoteku i i na kraju dealocira svu dinamički alociranu memoriju.
Zavisno od rednog broja problema, sastaviti jedan od sledećih programa, koji:
0. sortira po dužini trajanja muzičke numere iz liste u M3U formatu, izbacuje sve koje u imenu izvođača imaju string učitan sa standardnog ulaza i čuva dobijenu listu u ASX formatu;
1. sortira po nazivu pesme muzičke numere iz liste u PLS formatu, zatim izbacuje sve koje su kraće od vremena učitanog sa standardnog ulaza i čuva dobijenu listu u ASX formatu;
2. sortira po imenu izvođača muzičke numere iz liste u M3U formatu, zatim izbacuje sve koje su duže od vremena koje je učitano sa standardnog ulaza i čuva dobijenu listu u PLS formatu;
3. sortira po dužini trajanja muzičke numere iz liste u PLS formatu, izbacuje sve koje u nazivu sadrže string koji je učitan sa standardnog ulaza i čuva dobijenu listu u M3U formatu;
4. učitava dve plej-liste u M3U formatu, koje su već sortirane po nazivu numere, iz svake izbacuje numere čija je dužina trajanja van zadatog intervala i dobijene liste spaja u jednu listu u PLS formatu, takođe sortiranu po nazivu; granice intervala unosi korisnik sa standardnog ulaza;
5. učitava dve plejliste u PLS formatu, koje su već sortirane po dužini trajanja numere; iz svake izbacuje numere koje u nazivu sadrže string učitan sa standardnog ulaza i dobijene liste spaja u jednu listu u ASX formatu, takođe sortiranu po dužini trajanja numere;
Svaki naziv numere ima format Ime izvođača – naziv numere. Po završenoj obradi na standardni izlaz ispisati broj numera u ulaznoj datoteci/ulaznim datotekama i izlaznoj datoteci, trajanje dobijene plej-liste, kao i ime izvođača koji u izlaznoj plej-listi ima najveći broj numera.
Glavni program treba da poziva funkcije koje obavljaju iznad navedene radnje. Sve funkcije smestiti u odgovarajuće .c datoteke (prema donjem spisku), a prototipove svih funkcija smestiti u zajedničku .h datoteku. Nije dozvoljeno korišćenje globalnih promenljivih, sva razmena podataka između funkcija mora ići preko liste argumenata. Elemente liste koja sadrži informacije o numeri u plej-listi realizovati kao strukturu sa tačno tri polja – pokazivač na prethodni element, pokazivač na sledeći element i pokazivač na strukturu sa informacijama o samoj numeri. U slučaju bilo kakve greške (poziv programa sa neodgovarajućim brojem argumenata komandne linije, ili sa neispravnim argumentom za pomeraj, neuspešna dodela dinamičke memorije, greška pri radu sa datotekom), ispisati odgovarajuću poruku i prekinuti izvršavanje. Na početku i na kraju izvršavanja programa ispisati tačno vreme, a na kraju i procesorsko vreme (u milisekundama) koje je program utrošio za svoje izvršavanje. Tačno vreme ispisivati samo ako je pri prevođenju definisana simbolička konstanta TACNO_VREME. Informacije o formatima i primere plej-listi, o funkcijama potrebnim za očitavanje trenutnog i utrošenog vremena, kao i o uslovnom prevođenju, su u pratećem dokumentu.
Napomene:
1. Odbrana petog domaćeg zadatka je u lab. 26, u četvrtak, 28. maja, prema rasporedu objavljenom na sistemu WebLab.
2. Formula za redni broj problema i koji treba rešavati je sledeća (R – redni broj indeksa, G – poslednje dve cifre godine upisa): i = (R + G) mod 6
3. Kao rešenje domaćeg zadatka potrebno je na odbrani pokazati sledeće datoteke:
· dz5.c, koja sadrži izvorni tekst osnovnog programa na programskom jeziku C;
· dz5.h, koja sadrži prototipove svih funkcija opisanih u postavci zadatka;
· dz5_init.c, dz5_load.c, dz5_save.c, dz5_process.c, koje sadrže izvorne tekstove funkcija potrebnih za inicijalizaciju programa, čitanje, snimanje i obradu titlova;
· dz5.vcproj, koja sadrži informacije o projektu koji sadrži sve potrebno za osnovni program;
· dz5.sln, koja sadrži informacije o svim projektima relevatnim za ovaj zadatak.
13.05.2009. godine sa predmeta