Elektrotehnički Fakultet Univerziteta u Beogradu                     Beograd, 03.10.2005.

Prvi deo ispita iz programskih jezika

Ispit traje 90 minuta

Napomene:

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

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

c) Na testu se može osvojiti najviše 100 poena.

PITANJA

1) Na nekom računaru realni brojevi se predstavljaju u duhu IEEE standarda, po formatu seeeemmmmmmm gde je s bit za predznak broja, e bitovi za predstavljanje eksponenta u kodu sa viškom 7, a m bitovi za predstavljanje normalizovane mantise (1 <= M < 2) sa skrivenim bitom. Ako je izgled broja A po opisanom formatu 5B216, a izgled broja B po opisanom formatu 4B716, koju vrednost ima zbir ova dva broja? Eventualna zaokruživanja se vrše u skladu sa IEEE standardom.

(A)    28

 B) 28.125

 C) 28.03125

2) Šta ispisuje sledeći program na PicoComputer-u?

                      

P=1

N=2

X=3

Z=6

Q=7

ORG 8

MOV N,#Z

MOV X,#P

MOV Z,#N

MOV Q,N

MOV P,#X

LAB: ADD P,P,1

ADD (P),N,X

SUB N,N,X

BGT Q,P,LAB

OUT X,3

STOP

 

(A)    1 7 6

 B) 7 6 5

 C) 6 5 6

         

3) Koja sintaksna definicija odgovara zadatom sintaksnom dijagramu:

 A)     BNF:

<x>::= B{P}<z>

<z>::= WB{P}<z>

<z>::= <prazno>

<prazno>::=

 B) EBNF

x = "B"["BP"]{"WBP"}.

 

(C)     EBNF

x = "B" ["P"] { z }.

z = [ "WB" ["P"] z ].

 

4) Funkcija f, pod pretpostavkom da su oba  stvarna  argumenta  pozitivni brojevi i da je drugi manji ili jednak prvom, izračunava:

     FUNCTION f(x, y: INTEGER): INTEGER;

     IF y=1 THEN f:=x ELSE f:=f(x+1,y-1)+2*y END_IF END_FUNCTION

 A)     yx/(x-1)!

 B) y!/(y-x+1)!

 C) yx /x!

5) Dat je nestrukturiran deo programa:

10:A; IF p THEN C; IF r THEN GOTO 10 ELSE D; GOTO 30 END_IF END_IF;

20:B; 30: IF not q THEN GOTO 20;

Koji je od ponuđenih strukturiranih segmenata ekvivalentan datom?

(A)    flag:=true; WHILE flag DO A; IF not(p) THEN B; flag:=false ELSE C; IF not(r) THEN D; flag:=false; END_IF END_IF END_WHILE; WHILE not(q) DO B END_WHILE

 B) A; flag:=not(p); REPEAT IF not(p) THEN B ELSE C; IF not(r) THEN D; flag:=true

   ELSE A END_IF END_IF UNTIL flag and q END_REPEAT

 C) A; REPEAT flag:=p; IF p THEN C; flag:=r; IF r THEN A ELSE D END_IF  END_IF;

   IF not(flag) THEN REPEAT B UNTIL q END_REPEAT END IF UNTIL not(flag)    END_REPEAT

6) Red funkcije složenosti priloženog algoritma je:

FOR M:=1 TO N DO

  K:=0;

  FOR J:=1 TO M DO

     K:=K+J

  END_FOR;

  FOR J:=1 TO K DO

     a[J]:=a[J]+K

  END_FOR

END_FOR;

 

 A)     N1/2

(B)     N3

 C) N2K

 

 

Elektrotehnički Fakultet Univerziteta u Beogradu                     Beograd, 03.10.2005.

Drugi deo ispita iz programskih jezika

Ispit traje 90 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 testu se može osvojiti najviše 50 poena.

d) Zadaci nose po 25 poena.

I. ZADACI

1) Napisati program na programskom jeziku C koji prepisuje tekst iz ulazne datoteke u izlaznu datoteku. Ime ulazne i izlazne datoteke se učitavaju sa standardnog ulaza. Pri prepisivanju, svako malo slovo treba pretvoriti u veliko, svako veliko slovo u malo, a svaki broj koji se pojavljuje u tekstu ulazne datoteke u izlaznoj datoteci zamenjuje se odgovarajućom oktalnom reprezentacijom tog broja. Pretpostaviti da se u ulaznoj datoteci pojavljuju samo nenegativni celi dekadni brojevi. Brojem se smatra svaki niz od jedne ili više uzastopnih cifara. Brojevi mogu biti razdvojeni bilo kojim znacima koji nisu cifre.

 

2) U programu koji kontroliše alarmni sistem svaki alarmni uređaj opisan je zapisom koji sadrži opis pozicije uređaja u zgradi (znakovni niz dužine 256) i njegovo trenutno stanje (pozar, provala, neaktivan, pokvaren) koje je opisano odgovarajućom skupovnom promenljivom. Napisati potprogram u programskom jeziku Pascal, koji od jednostruko ulančane liste alarma formira tekstualnu datoteku u koju upisuje poziciju i stanje svakog alarma. Ime datoteke i pokazivač na prvi element liste zadaju se kao parametri potprograma. Stanje alarma može istovremeno da označava više događaja: može istovremeno biti požar i provala. Napisati glavni program koji sa standardnog ulaza učitava ime tekstualne datoteke u kojoj treba sačuvati informacije o alarmima, zatim dohvata informacije o alarmima i pozivanjem gore opisanog potprograma snima te podatke. Za dohvatanje informacija o alarmima koristiti funkciju dohvatiAlarme koja ne prima nijedan argument a kao rezultat vraća pokazivač na prvi element liste. Obratiti pažnju da pomenuta funkcija kao rezultat može da vrati nevažeći pokazivač (u tom slučaju ne treba ništa snimati u datoteku).

 

II. PITANJA

1) Šta ispisuje sledeći program na programskom jeziku Pascal?

program pazljivo(Output); var x,y,z: integer;

procedure p(x:integer; var y:integer; a,b:integer; var c: integer);

begin x:=x+1; y:=y+x; z:=z+y; a:=a+z; b:=b+a; c:=c+a end;

begin x:=1; y:=0; z:=0; P(x,z,x,z,x); P(x,y,z,y,x); writeln(x:3, y:3, z:3) end.

 

 A)     22 8 12

 B) 8 12 14

(C)     21 7 11

2) Sledeći program na programskom jeziku Pascal prepisuje sadržaj datoteke f1 u f2 tako što:

Program P(f1, f2);

Var f1,f2:Text;

Procedure PP; Var c:char;

Begin

  If Not Eoln(f1) Then

  Begin

     Read(f1, c);

     Write(f2, c);

     PP

  End

End;

Begin

  Reset(f1);

  Rewrite(f2);

  While Not Eof(f1) Do

  Begin

     Readln(f1);

     PP;

     Writeln(f2)

  End

End.

 

 A)     zadržava isti redosled redova i znakova u redovima

 B) prepiše redove obrnutim redosledom (prvi postaje poslednji itd.)

 C) prepiše svaki red unatrag, a zadrži redosled redova

3) Pod pretpostavkom da je i definisano kao promenljiva tipa int, šta ispisuje sledeći programski segment na programskom jeziku C?

for( i = 1; i <= 20; i++ ) if (((i % 7) == 1) && ((i % 3) != 1)) printf("%d ", i%4);

 

(A)    0 3

 B) 3 5

 C) 2 2

4) Šta ispisuje sledeći program na programskom jeziku C ako se u komandnoj liniji navede broj 212? (tj. program je pozvan na sledeći način: ime_programa 212)

#include <stdlib.h>

#include <stdio.h>

main (int argc, char *argv[])

{ int m, k; unsigned char j;

  m=atoi(argv[1]); j = (unsigned char) (m&0xA0A);

  k=(((j|218)>>3) + (~(j^13)<<2));

  printf("0x%x", k);

}

 

 A)     0xa2

 B) 0xca

(C)     0xe3

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

#include<stdio.h>

main() {

  int a[] = {1, 2, 2, 4, 5}, *ap, *ak, i;

  ap = a; ak=ap+5;

  while (ap++<--ak)

     a[ak-ap] = ak[0] - a[ap[0]];

  for(i = 0; i < 5; i++) printf("%d", a[i]);

}

 

 A)     11321

 B) 50301

(C)     11235

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

#include <stdio.h>

#include <stdlib.h>

void main(){  

int *p, *q, *r, m, n;

    p = malloc(sizeof(int)); q = malloc(sizeof(int));

    n = 3; m = 2; *p = m; *q = n, r = &n; 

    for(n=2,m=1; n<5; n++)

      switch((*p * *r)%9 ){

          case 0: case 2: case 3: m++;

          case 4: case 5: case 6: m+=2; break;

          default: m=n;

      }

    printf("%d%d%d%d", m, n, *p, *q);

    free(p); free(q);

}

 

(A)    4523

 B) 8513

 C) 3213