Elektrotehnički Fakultet Univerziteta u Beogradu                     Beograd, 04.05.2007.

Kolokvijum iz Programiranja 2

Kolokvijum traje 90 minuta

Napomene:

a) Pažljivo proučite Uputstvo pre popunjavanja Obrasca za odgovore.

b) Vrednost odgovora: tačan = 9; netačan = -2.25; nevažeći (nula ili više zacrnjenih kružića) = 0.

c) Na pitanjima se može osvojiti najviše 27 poena.

d) Zadatak nosi 23 poena.

I. ZADACI

1) Napisati program na programskom jeziku C, za određivanje potrebnog broja listova papira potrebnih da se odštampa deo knjige date u elektronskoj formi. Štampanje se vrši dvostrano, a može biti umanjeno tako da na jednu stranicu pri štampanju mogu da se smeste 1, 2 ili 4 stranice originala. Pri tome se stranice uklapaju tako da nema praznog prostora, osim eventualno na poslednjoj stranici. Korisnik sa standardnog ulaza najpre unosi broj opsega stranica za štampanje, a zatim toliko parova celih brojeva (početna i krajnja strana opsega) i na kraju broj stranica knjige na jednoj odštampanoj stranici. Opsezi su navedeni prema rastućem redosledu početne stranice. Program treba da ispiše potreban broj listova da bi se obavilo štampanje sa zadatim parametrima. U slučaju da postoji preklapanje opsega stranica za štampanje, program treba da izveštava o nastaloj grešci.

Primer 1

Primer 2

3

2 5

8 12

14 20

2

 

Program ispisuje:

4

2

5 12

10 18

4

 

Program ispisuje:

Greska: opsezi se preklapaju

II. PITANJA

1) Na nekom računaru, realni brojevi se smeštaju u 10-bitnu lokaciju, u skladu sa IEEE standardom za predstavljanje realnih brojeva prema sledećem formatu: seeeemmmmm, gde je s bit za predznak broja, eeee bitovi za predstavljanje eksponenta u kodu sa viškom 7, a mmmmm bitovi za predstavljanje normalizovane mantise sa skrivenim bitom (1M<2). Na istom računaru, celi brojevi se takođe smeštaju u 10-bitne lokacije, a predstavljaju se u drugom komplementu. Neka je na lokaciji X smešten realan, a na lokaciji Y ceo broj. Sa standardnog ulaza se u lokaciju X učitava broj 55.1, a nakon učitavanja nekog broja u lokaciju Y, njen sadržaj je 3CA16. Kako izgleda sadržaj memorijske lokacije u koju je smešten realan broj koji predstavlja rezultat operacije X+Y? Sabiranje se obavlja sa realnim brojevima.

 A)     11016

(B)     E016

 C) 18

2) Šta ispisuje sledeći program na programskom jeziku C?

#include <stdio.h>

main()

{

  int k=0, i=8, s=0;

  do {

    if (i%4)

      s++;

    else

      for (k=0; k<i; k++)

        if (k*k==i) break;

    s+=k;

  }

  while (i++<10); printf ("%d\n", s);

}

 A)     12

(B)     26

 C) 28

3) Ako se za predstavljanje brojeva tipa int i unsigned int koriste 16-bitne lokacije i ako su tipovi i vrednosti promenljivih definisani kao

unsigned x=145; int p=5, n=4;

koja vrednost će biti ispisana naredbom

printf (" %u " , x = (x>>(p+1-n)) & ~((~0)<<n));

 A)     0

(B)     4

 C) 65476

4) Šta ispisuje sledeći program? Podsetnik: konverzija %s ispisuje sadržaj datog stringa (znakovi bez završnog znaka '\0').

#include <stdio.h>

main() {

char *a[] = { "abc", "def", "ghi" };

char **b, **c = a;

int i;

   for(b=c+1, c=b+1; b>=a; *c--=*b--);

   for(i = 0; i < 3; i++) printf("%s\n", a[i]);

}

(A)    abc

     abc

     def

 B) abc

     def

     ghi

 C) def

     ghi

     ghi