Elektrotehnički Fakultet Univerziteta u Beogradu                       Beograd, 12.2.2007.

Ispit iz Programiranja 2

Ispit traje 180 minuta

Napomene:

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. ZADACI

1) Podaci o prometu registrovanom putem fiskalnih kasa se smeštaju u tekstualnu datoteku promet.txt. Za svaki izdat fiskalni račun u jednom redu datoteke se pamte sledeći podaci: identifikacioni broj kase, godina, mesec i dan izdavanja (četiri cela broja), iznos računa (realan broj). Napisati program na programskom jeziku C koji čita navedenu datoteku, računa i na standardnom izlazu ispisuje ukupan promet obavljen na datoj kasi, počevši od datog datuma. Identifikacioni broj kase i datum od kojeg treba vršiti obračun se unose sa standardnog ulaza.

2) Napisati potprogram unsigned int zbir (char *a, char *b) na programskom jeziku C koji određuje decimalnu vrednost zbira brojeva a i b. Odgovarajući stvarni argumenti su znakovni nizovi (stringovi) od maksimalno 3 znaka i predstavljaju pozitivne cele brojeve u heksadecimalnom brojnom sistemu. Pri tome, znak koji predstavlja cifru najveće težine je prvi u znakovnom nizu. Napisati glavni program na programskom jeziku C koji sa standardnog ulaza učitava dva niza od po 3 znaka koji treba da predstavljaju heksadecimalne cifre, potom poziva potprogram zbir i na standardnom izlazu ispisuje rezultat zbira ta dva broja.

II. PITANJA

1)Realni brojevi se smeštaju u duhu IEEE standarda za predstavljanje realnih brojeva. Ako je k broj bita za predstavljanje eksponenta, a p broj bita za predstavljanje normalizovane mantise sa skrivenim bitom, koje vrednosti mogu da imaju k i p da bi se broj 47.28 u decimalnom brojnom sistemu mogao smestiti sa greškom manjom od 10-1?

 A)     k=5, p=6

 B) k=4, p=6

(C)     k=4, p=8

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

#include <stdio.h>

main()

{

        int i;

        int m = 12;

        int* ptrm = &m;

        int ar[3] = {34, 56, 78};

        int* aptr[4] = {&m, ar+1, &ar[2], ptrm};

        int (*ptra)[3] = &ar;

        (*ptra)[0] = 21;

        *aptr[2] = 43;

        *(aptr+3) = ar;

        for (i=0; i<4; i++) printf("%d ", *aptr[i]);

}

 A)     21 56 43 21

 B) 34 56 43 56

(C)     12 56 43 21

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

#include <stdio.h>

main()

{

  int i, s = -1;

  for (i = 0; i<9; i++) switch(i)

  {

    case 1: s++;

    default: s+=2;

    case 3: s -= 1; break;

    case 9: s += 16;

  }

  printf("\n%d", s);

}

 A)     23

(B)     7

 C) 8

4) Koji od sledećih programa na jeziku C od znakova zadatih putem standardnog ulaza ispisuje na standardnom izlazu prvi znak koji nije decimalna cifra?

 A)  #include <stdio.h>

     #include <ctype.h>

     void main()

     { char c; for (;c=getchar(); !(isdigit(c))); printf("%c", c); }

(B)   #include <stdio.h>

     void main()

     { char c; while((c=getchar())>='0' && c<='9'); printf("%c", c); }

(C)  #include <stdio.h>

     void main()

     { char c; int i='0'; while(c=getchar(), c>=0+i && c<=9+i); printf("%c", c);}

5)Koja od sledećih tvrđenja su tačna na programskom jeziku C?

 A)     Promenljiva b tipa strukture (struct) može biti upotrebljena za kontrolnu strukturu switch(b).

(B)     Ako su promenljive deklarisane sa int *c; double t[20]; ispravna je dodela vrednosti t[2]=*c;

 C) Poziv fopen("test.dat", "rb"); kreira datoteku test.dat ukoliko ona već ne postoji.

6)Šta treba da stoji na mestu *** u datom potprogramu na programskom jeziku C da bi se poslednji element jednostruko ulančane liste prebacio na početak liste? Stvarni argument poziva je pokazivač na lokaciju u kojoj se nalazi adresa prvog elementa liste.

typedef struct Elem {

int n; struct Elem *sled; } LElem;

 

void Prebaci(LElem **lh){

LElem *tek, *preth;

  if( lh != NULL && *lh != NULL ) {

     tek = *lh; preth = NULL;      

     while( tek->sled != NULL )    

       ***

  }

}

 

 A)     tek=tek->sled;

   if( tek != NULL)

   {

      preth->sled = NULL;

      *lh = tek;

      tek->sled = *lh;

   }

(B)     {

          preth=tek;
          tek=tek->sled;

   }

   if(preth != NULL)

   {

      preth->sled = NULL;

      tek->sled = *lh;

      *lh = tek;

   }

 C) {
          tek=tek->sled;

          preth=tek;

   }

   if(preth->sled != NULL)

   {

      preth->sled = NULL;

      tek->sled = *lh;

      *lh = tek;

   }