Elektrotehnički Fakultet Univerziteta u Beogradu                     Beograd, 28.02.2008.

Ispit iz Programiranja 2

Trajanje: 150 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 50 poena.

I. ZADACI

1) Napisati potprogram na programskom jeziku C koji pronalazi svako pojavljivanje zadatog broja u prosleđenoj dinamički kreiranoj matrici. Potprogram kao argumente prihvata još dimenzije matrice. Potprogram treba da vrati broj pojavljivanja zadatog broja i da ispiše niz uređenih parova (u svakom redu po jedan par), gde svaki uređeni par predstavlja broj kolone i broj vrste gde je traženi broj nađen. Komunikacija sa ostatkom sveta se odvija isključivo preko liste argumenata i povratne vrednosti. Takođe, potrebno je napisati glavni program koji bi dinamički kreirao matricu, pozvao prethodni potprogram i ispisao rezultat izvršavanja. Dimenzije matrice učitava korisnik programa. Smatrati da korisnik unosi korektne vrednosti.

2) Napisati program na programskom jeziku C koji iz ulazne tekst datoteke potros.txt čita zapise o potrošačima i za svakog potrošača koji ima dug, na standardni izlaz ispiše podatke o potrošaču, uključujući dug, i potom u narednim redovima prepiše sve račune i sve uplate tog potrošača. Podaci o računima i uplatama nalaze se u tekst datoteci ulaz.txt. U svakom redu datoteke potros.txt nalazi se podatak o jednom potrošaču i to: šifra (ceo četvorocifren broj) i ime i prezime (znakovni nizovi do 10 znakova). U svakom redu datoteke ulaz.txt je šifra jednog kupca i iznos. Računi imaju negativan iznos, a uplate pozitivan. Broj računa i uplata nije unapred definisan. Primer:

potros.txt

ulaz.txt

Standardni izlaz

1024 Misa Petrovic

3212 Pera Mali

1024 +56.2

3212 -43.1

1024 -143.54

3212 +50.32

1024 +11.1

1024 -30.8

1024 Misa Petrovic 107.04

1024 +56.2

1024 -143.54

1024 +11.1

1024 -30.8

 

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 5.6875 i 1.26875. 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)     4.41875

(B)     4.5

 C)     4.375

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

#include<stdio.h>

void main(){

int i,a = 4;

for (i = 5; i < 6; i++) {

  switch (i){

     case 1:i+=2;

     case 2:if (i != 2)

        i -= 2; a += i; continue;

     case 3: a -= 4;

     case 4: i += 2;break;

     case 5: if (i%2 == 0)

             a += i; i++;

     default:i-=6;

  }

  a = a + (i + 1) * (i + 2);

}

printf("%d",a);

}

 

(A)    47

 B) 52

 C)     64

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

#include<stdio.h>

#include<stdlib.h>

void main() {

int *b, i, j, s, a[4][4] = {  { 2,  2,  3,  3}, { 0,  2,  2,  1},

                              { 1, -2,  3, -3}, { 1, -2, -1, -3} };

s = 0; b = a[0];

for (i = 0; i < 4; i++){ b = b + *b;  s += abs(*b);  b = b + *b * 4;  s += abs(*b);}

printf("%d",s);}

 A)     16

 B) 15

(C)     14

4) Koja od sledećih tvrđenja su tačna za sledeći program na programskom jeziku C?

#include <stdio.h>

int f(void *a) {return *(a+1);}

main() {

int n[10] = {3, 4, 2, -1, 6, 8, 6, 2, 9, 6 }, s = 0, *i = n;

for(;f(i)>=0;i=&n[f(i)]) s += n[i];

printf("%d",s);}

(A)Izraz a + 1 u funkciji f nije korektan.

 B) Indeksiranje niza n preko poziva funkcije f(i) nije korektno.

 C) Upotreba for petlje nije korektna jer ne postoji brojačka promenljiva.

5) Šta ispisuje sledeći program na programskom jeziku C ako se pri pozivu programu proslede sledeći argumenti redom: 6 7 6 7 8?

#include <stdio.h>

#include <stdlib.h>

int f(int* a,int b) {

  int r=0;

  if (*a >= b && b > 0) { *a -= 2; r = *a - 1; return r + f(&b, *a);

  }else if (*a > 0) { r = --b; return r + f(&b, *a+1);

  };return *a;}

int main(int argn, char* argc[]) {

int s = atoi(argc[3]);

printf("%d",f(&s,s));

return 0;}

 A)     4

(B)     5

 C) 6

6) Šta ispisuje sledeći potprogram na programskom jeziku C, ako se pri pozivu kao stvarni argument prosledi pokazivač na početak liste? Tip eliste je strukturni tip koji ima jedno celobrojno polje i jedan pokazivač na sledeći element tipa eliste.

void f(eliste* p) {

  int z=0, x=1;

  while (p) { z += x; x = -x;

     if (z % 2) printf(˛%d ˛,p->val);

     else p = p->sled;};

 A) Ispisuje elemente liste sa parnih pozicija.

 B) Ispisuje elemente liste sa neparnih pozicija.

(C)Ispisuje sve elemente liste.