OO1PP2 – DZ4 Rok
za izradu: 07.06.2007.
PRAKTIKUM IZ PROGRAMIRANJA 2
- domaći
zadatak broj 4 -
Sastaviti program
na programskom jeziku C kojim se vrši određena vrsta obrade nad
jednom ili više jednostruko ulančanih
lista. Program treba
da omogući učitavanje svih potrebnih ulaznih podataka, njihovo
ispisivanje, obradu, ispis dobijenih rezultata, i ponavljanje navedenih koraka
sve dok korisnik ne unese vrednost koja označava kraj programa. Navedene
korake u izvršavanju programa realizovati kao zasebne funkcije.
Zavisno od rednog broja problema, sastaviti
jedan od sledećih programa, kojim se:
Sve
funkcije smestiti u odgovarajuće .c datoteke (prema donjem spisku),
a prototipove svih funkcija smestiti u zajedničku .h datoteku. Učitavanje liste/lista
realizovati pomoću funkcije kojoj se kao argument dostavlja adresa
pokazivača na početak liste i broj elemenata koji treba učitati,
a preko povratne vrednosti vraća podatak o uspešnosti
učitavanja. Potrebno je napisati funkcije kojima se vrši ispisivanje
liste, brisanje liste, ubacivanje elementa na početak i na kraj liste i
izbacivanje proizvoljnog elementa iz liste. Napraviti interaktivni meni kojim
se omogućava učitavanje liste, brisanje liste, izbacivanje elementa
iz liste, ubacivanje elemenata na početak i kraj liste, ispisivanje liste
i prekidanje programa. Voditi računa o pravilnom alociranju
i dealociranju dinamičke memorije. Potprogrami ne smeju komunicirati pomoću globalnih promenljivih,
već samo preko liste argumenata i povratne vrednosti.
Ako nešto u postavci zadatka nije dovoljno precizno definisano ili ako su neki od zahteva međusobno suprotstavljeni, usvojiti razumnu pretpostavku i rešiti zadatak korišćenjem te pretpostavke. Odabrati nekoliko skupova podataka sa kojima će se program testirati. Odabrane test primere priložiti na listu papira pre odbrane. Kandidati koji ne na odbrani nemaju spremna makar tri suštinski različita test primera ne mogu dobiti maksimalan broj poena. Programski kod rešenja zadatka treba da bude uredno komentarisan, tako da se pri pregledu programa lako može uočiti šta radi bilo koja programska celina. Takođe, poštovati pravila identacije određenih celina prilikom pisanja koda.
Važno:
kada se reši osnovni zadatak, promeniti implementaciju ulančane
liste tako da se koristi dvostruko ulančana
lista. U skladu sa tim, potrebno je dodati odgovarajuće funkcije za
ubacivanje i izbacivanje elemenata u listu, kao i sve ostale relevantne delove programskog
koda. Takođe, potrebno je na početku i na kraju izvršavanja
programa ispisati tačno vreme, a na kraju i vreme koje je utrošeno na
izvršavanje programa. Opis funkcija za rad sa vremenom je u dodatku ovog
dokumenta.
1. Odbrana četvrtog domaćeg
zadatka je u RC ETF, u četvrtak, 7. juna, prema rasporedu koji se
može videti 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:
·
dz4.c, koja sadrži izvorni tekst
osnovnog programa na programskom jeziku C;
·
dz4.h, koja sadrži prototipe svih funkcija opisanih u postavci zadatka;
·
dz4_unos.c, dz4_ispis.c,
dz4_obrada.c, koje sadrže izvorne tekstove potrebnih funkcija;
·
dz4.dsp, koja sadrži informacije o projektu koji sadrži sve potrebno
za osnovni program;
·
dz4_mod.c, koja sadrži izvorni tekst modifikovanog programa na programskom
jeziku C;
·
dz4_ubl.dsp, koja sadrži informacije o projektu koji se odnosi na dodatni
program;
·
dz4.dsw, koja sadrži informacije o svim projektima relevatnim
za ovaj zadatak.
30.05.2007. godine sa predmeta
Operativni
sistem vodi evidenciju o iskorišćenom procesorskom
vremenu za svaki od trenutno aktivnih procesa. U programskom jeziku C, ovo
vreme se može dobiti pozivom funkcije clock() i
izraženo je u "otkucajima" sistemskog časovnika (engl. clock ticks). Svaka
implementacija jezika C podrazumeva sopstvenu vrednost simboličke
konstante CLOKS_PER_SEC (u ranijim verzijama standarda CLK_TCK), koja
predstavlja broj "otkucaja" sistemskog časovnika u toku jedne
sekunde.
Sa druge strane, u svakom trenutku je moguće od operativnog sistema dobiti informaciju o vremenu u sistemskom časovniku, kako i o datumu i vremenskoj zoni gde se dati računar nalazi. Jednom kada se tačno vreme očita, ne postoji nikakva prepreka da se ono pretvori u odgovarajuću strukturu, odnosno prikaže na željeni način preko proizvoljnog znakovnog niza. Priloženi programski segment ilustruje prikaz tačnog vremena bez prikaza datuma:
time_t pIntTime = time(NULL);
struct tm* currentLocalTime = localtime(&pIntTime);
char* dateTimeString = calloc(100, sizeof(char));
/* if time setting and memory allocation was succesfull, create complete message */
if (currentLocalTime && dateTimeString)
/* format the time as needed */
strftime(dateTimeString, 99, "%H:%M:%S", currentLocalTime);
Dodatne informacije o ovde
navedenim funkcijama (i svim ostalim koje se nalaze u zaglavlju time.h)
se mogu naći u zbirci prof. Krausa, na msdn.microsoft.com i na stranici predmeta programiranje 2,
koja sadrži dokument sa kompletnim ISO standardom za programski jezik C.