12.07.2015 Views

Ispit iz Programiranja 2

Ispit iz Programiranja 2

Ispit iz Programiranja 2

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, 01.10.2006.<strong>Ispit</strong> <strong>iz</strong> <strong>Programiranja</strong> 2<strong>Ispit</strong> traje 180 minutaNapomene:a) Pažljivo proučite Uputstvo pre popunjavanja Obrasca za odgovore.b) Vrednost odgovora: tačan = 10; netačan = -2.5; nevažeći (nula ili više zacrnjenih kružića) = 0.c) Na pitanjima se može osvojiti najviše 50 poena.d) Zadaci nose po 25 poena.I. ZADACI1) Napisati program na programskom jeziku C koji <strong>iz</strong>računava broj osvojenih bodova na šampionatutrka Formule 1. Podaci o vozačima i timovima se nalaze u tekst datoteci vozaci.txt prema sledećemformatu: u svakom redu datoteke redom su zapisani prezime i ime vozača i naziv tima za koji vozačvozi (svako polje po 30 karaktera najviše). Poznato je da ima tačno 28 vozača koji učestvuju utrkama i da se na šampionatu vozi 20 trka. Podaci o rezultatima trka smešteni su tekst datotecitrke.txt tako da se u svakom redu datoteke nalaze redni brojevi pozicija jednog vozača po završetkusvake trke (20 pozicija, za svaku trku po jedna). U slučaju da vozač ne prođe cilj (odustane od trke),broj pozicije za tu trku je 0. Podaci u prvom redu datoteke trke.txt odgovaraju vozaču <strong>iz</strong> prvog redadatoteke vozaci.txt, itd. Bodovi za vozače za jednu trku se računaju na sledeći način: prvih 8 vozačadobija 10, 8, 6, 5, 4, 3, 2 i 1 bod respektivno, ostali 0 bodova. Program treba da <strong>iz</strong>računa i nastandardnom <strong>iz</strong>lazu ispiše osvojene bodove tako da u jednom redu stoje prezime i ime vozača,osvojen broj bodova i naziv tima.2) Napisati potprogram na jeziku C kojim se na osnovu n<strong>iz</strong>a znakova A dužine 2n formira n<strong>iz</strong>nenegativnih celih brojeva B dužine n. Znaci u n<strong>iz</strong>u A se interpretiraju kao heksadecimalne cifre, takoda su prva dva elementa n<strong>iz</strong>a A cifre prvog broja n<strong>iz</strong>a B, druga dva elementa n<strong>iz</strong>a A cifre drugogbroja n<strong>iz</strong>a B, itd. U n<strong>iz</strong>u A smeštena je prvo cifra veće težine, pa cifra manje težine odgovarajućegbroja <strong>iz</strong> n<strong>iz</strong>a B. Prostor za smeštaj n<strong>iz</strong>a B rezervisati u potprogramu. Napisati glavni program kojiučitava broj elemenata n<strong>iz</strong>a A, alocira potrebnu dinamičku memoriju za smeštaj n<strong>iz</strong>a A, učitavaelemente n<strong>iz</strong>a A, poziva opisani potprogram, ispisuje elemente n<strong>iz</strong>a B u dekadnom obliku nastandardnom <strong>iz</strong>lazu i dealocira svu korišćenu dinamičku memoriju. Pretpostaviti da su sve cifre u n<strong>iz</strong>uA ispravne.II. PITANJA1) Realni brojevi se smeštaju u 10-bitnu lokaciju, u duhu IEEE standarda za predstavljanje realnihbrojeva, a prema sledećem formatu: seeeemmmmm, gde je s bit za predznak broja, e bitovi zapredstavljanje eksponenta u kodu sa viškom 7, a m bitovi za predstavljanje normal<strong>iz</strong>ovane mantise saskrivenim bitom (1≤M


3) Dat je deo programskog koda na jeziku C za <strong>iz</strong>bacivanje elementa <strong>iz</strong> jednostruko ulančane liste.Kao argument, funkcija <strong>iz</strong>baci prima pokazivač na element koji treba <strong>iz</strong>baciti i pokazivač na prvielement liste, a kao rezultat funkcija vraća pokazivač na prvi element liste nakon <strong>iz</strong>bacivanja. Štatreba da stoji na mestu ##### da bi ova funkcija ispravno obavljala tu operaciju?#include #include typedef struct elem { int broj; struct elem *sled; } Elem;Elem *<strong>iz</strong>baci(Elem *e, Elem *prvi){Elem *tek=prvi, *pret=NULL;while(tek!=NULL){#####}return prvi;}A)if(tek==e) {free (e);tek->sled = e->sled;if (e=prvi) prvi=e->sled;}pret=tek;tek=tek->sled;4) Šta ispisuje sledeći program na jeziku C?#include main(){unsigned int x, i = 0;for (x = 0xabc; x; x>>=2)if (x & 02) i++;printf("%d\n", i);}B)if (tek==e) {prvi=e==prvi?e:e->sled;free (e);return prvi;}pret=tek;tek=e->sled;A) 7 (B) 5 C) 2(C)if (e==tek) {if (e==prvi) prvi=prvi->sled;else pret->sled = tek->sled;free (e);tek = NULL;} else {pret=tek;tek=tek->sled;}5) Šta treba da stoji u funkciji veci umesto *** da bi rezultat funkcije bio jednak adresileksikografski većeg od n<strong>iz</strong>ova znakova a i b (koji nisu duži od 199 znakova)?#include char *veci (char a[], char b[]) { *** }A) return (a > b)? a : b;B) if (strcmp(a,b) > 0) veci=a; else veci=b; return;C) char c[200]; return (strcpy(c,(strcmp(a,b)>0)?a:b));6) Šta ispisuje sledeći C program?#include #include void main() {int *a, *b, *c, i;a=b=c=(int*)malloc(s<strong>iz</strong>eof(int)*10);for(i=0;i

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!