Elektrotehnički Fakultet Univerziteta u Beogradu                     Beograd, 27.09.2007.

Prvi kolokvijum iz Programiranja 2

Trajanje: 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) Napraviti program na programskom jeziku C kojim se vrši uređivanje niza reči. Prvo treba učitati reči sa standardnog ulaza, zatim izvršiti uređivanje tih reči po leksikografskom poretku i, na kraju, ispisati uređen niz reči. Reči treba učitavati dok se ne unese prazan red ili dok se ne učitaju sve reči za koje je predviđeno mesto. Pretpostaviti da ima najviše 30 reči, od kojih svaka ima najviše 20 znakova.

II. PITANJA

1) Realni brojevi se predstavljaju u formatu seeeemmmmm, gde je s predznak, eeee eksponent sa viškom 7 i mmmmm biti normalizovane mantise sa skrivenim bitom. U dve lokacije A i B se učitaju brojevi čije su vrednosti 26.75 i 1.75. U lokaciju C se smešta rezultat operacije A+B. Pod uslovom da su sve lokacije 10-bitne, koju vrednost predstavlja sadržaj lokacije C, ako se posmatra u zadatom formatu?

 A)     28.5

(B)    29

 C) 28

2) Šta ispisuje priloženi segment programa na programskom jeziku C?

int i, a = 8;

for (i = 3 ; i < 7 ; i++) {

  switch (i) {

  case 3: i -= 3; break; i+=15;

  case 1: i+=2;

  case 2: if (i != 2) i = i + 2; continue;

  case 6: i -= 2;

  case 5: if (i%2) i++;

  default: a++;

  }

  a += i;

  printf("%d",a);

}

 A)     8131825

 B) 8111622

(C)  81320

3) Šta ispisuje sledeći program na programskom jeziku C? Napomena: pretpostaviti da ne dolazi do greške prilikom alokacije memorije.

#include <stdio.h>

#include <stdlib.h>

void main() {

  int *a, i, j;

  int *b;

  a  = (int*) malloc(sizeof(int)*8);

  for (i = j = 0; i < 8; j = i++) a[i] = i * j;

  b = &i;

  for (i = 0; i < 7; i++) { j += (*b)++; j+= *(a+i); };

  printf("%d", j);

  free(a);

}

 A)     98

(B)     87

 C) 63

4) Šta će ispisati sledeći program na programskom jeziku C, ako se unese nenegativan broj koji se sigurno može smestiti u broj bita predviđen za podatak tipa unsigned int na računaru na kome se program izvršava?

#include <stdio.h>

main()

{

  int c = sizeof(unsigned int)*8;

  unsigned int x;

  scanf("%u", &x);

  while (x != 0) { c -= x % 2; x >>= 1; }

  printf("%d", c);

}

(A)    Broj nula u binarnoj predstavi unetog broja x

 B) Broj jedinica u binarnoj predstavi unetog broja x

 C) Razliku između broja nula i broja jedinica u binarnoj predstavi unetog broja x

 

Elektrotehnički Fakultet Univerziteta u Beogradu                     Beograd, 27.09.2007.

Drugi 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) Napraviti program na programskom jeziku C koji obrađuje datoteku koja sadrži izvorni program na programskom jeziku C. Potrebno je datoteku prepisati u novu datoteku, tako da se izostave svi komentari i očuva uređenost teksta po redovima. Primer:

Ulazna datoteka

Odgovarajuća izlazna datoteka

#include <stdio.h>

/* ispis proizvoda i kolicnika dva broja */

main()

{

  int a, b;

  scanf("%d%d", &a, &b);

  printf("%d", a*b); /* ispis a*b */

  /* ispis a/b */ printf("%d", a/b);

}

#include <stdio.h>

 

main()

{

  int a, b;

  scanf("%d%d", &a, &b);

  printf("%d", a*b);

   printf("%d", a/b);

}

Imena ulazne i izlazne datoteke se zadaju kao prvi i drugi parametar komandne linije i imaju najviše 30 znakova. U slučaju da dođe do greške pri otvaranju neke od datoteka, ispisati poruku o greški i prekinuti izvršavanje programa.

II. PITANJA

1) Koja od priloženih funkcija na ispravan način računa sumu faktorijela prvih n pozitivnih brojeva, ako je n pozitivan broj (vrednost n je takva da prilikom proračuna ne dolazi do prekoračenja)?

 A)    

long f(long n) {

if (n>2)

  return (n+1)*f(n-1)+n*f(n-2);

else

  return 2*n-1;

}

(B)    

long p, t;

long f(long n) {

if (n>1)

  return ( t = f(n-1), t +(p*=n));

else {

  p = 1;

  return n;

  }

}

 C)

long p;

long f(long n) {

if (n>1)

  return (p*=n,  p + f(n-1));

else {

  p = 1;

  return 1;

  }

}

2) Koje od sledećih tvrdnji su tačne na programskom jeziku C?

(A)    Tip vrednosti koji funkcija vraća može da bude struktura, a ne može da bude niz.

 B) Funkcije printf i scanf se mogu koristiti za pisanje i čitanje i tekstuelnih i binarnih datoteka.

 C) Lokalnim promenljivama iz jedne funkcije može se pristupiti iz drugih funkcija koje se nalaze u istoj datoteci.

3) Šta ispisuje sledeći program ako se pozove sa program 4 2 2 0 1 1? Napomena: pretpostaviti da ne dolazi do greške prilikom alokacije memorije.

#include<stdlib.h>

#include<stdio.h>

#define N 20

typedef struct s { struct s *p; int i; } S;

void main(int argc, char *argv[]) {

  int i, n = atoi(argv[1]);

  S *b, *a[N];

 

  for(i = 0; i < n; ) a[i++] = (S *) malloc(sizeof(S));

  for(i = 0; i < n; i++) {

     a[i]->i = i;

     a[i]->p = *( a + atoi( argv[i+2] ) );

  }

  b = a[0];

  for(i = 0; i < 4; i++) printf("%d",(b = a[(b->p->i + i) % n])->i);

  for(i = 0 ; i < n; free(a[i++]));

}

 A)     2230

 B) 2031

(C)     2101

4) Šta ispisuje sledeći program na programskom jeziku C? Napomena: pretpostaviti da ne dolazi do greške prilikom alokacije memorije.

#include <stdio.h>

#include <stdlib.h>

typedef struct El {int i; struct El *sled;} Eliste;

void ispis(Eliste *p) {

  if (p != NULL)

     if (p->i % 2) {

       ispis(p->sled);

       printf("%d",p->i);

     } else {

       printf("%d",p->i);

       ispis(p->sled);

     }

}

main() {

  Eliste *prvi = NULL, *pom;

  int x;

  for (x=0; x<7; x++) {

     pom=(Eliste*)malloc(sizeof(Eliste)); pom->i=(x*11)%7; pom->sled=prvi; prvi=pom;

  }

  ispis(prvi);

  pom=prvi;

  while (pom!=NULL) { pom=pom->sled; free(prvi); prvi=pom; }

}

(A)    6240153

 B) 6243510

 C) 3510426