Elektrotehnički Fakultet Univerziteta u Beogradu Beograd, 03.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) Napisati program na programskom jeziku C za šifrovanje i dešifrovanje znakovnog niza (stringa). Program sa standardnog ulaza učitava sledeće podatke: znakovni niz maksimalne dužine 100 znakova nad kojim se vrši operacija (poruka), niz od 10 celih brojeva koji predstavljaju šifru (šifra) i ceo broj koji označava vrstu operacije koju treba izvršiti (1 za šifrovanje, 2 za dešifrovanje). Po unosu, na standardnom izlazu ispisati unete podatke. Obrada znakovnog niza se vrši na sledeći način: na prvih 10 znakova poruke se redom primenjuju elementi šifre, na sledećih 10 znakova poruke se opet redom primenjuju elementi šifre i tako redom dok se ne obrade svi znakovi u poruci. U slučaju da je broj neobrađenih znakova poruke N manji od 10, koristi se samo prvih N znakova šifre. Šifrovanje se vrši dodavanjem vrednosti odgovarajućeg elementa šifre na vrednost znaka koji se obrađuje, a dešifrovanje se vrši oduzimanjem. Sabiranje i oduzimanje raditi po modulu 256. Izmene vršiti direktno nad nizom koji se učitava (ne treba praviti nov niz). Na kraju, ispisati obrađeni znakovni niz na standardnom izlazu.

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 (1<M2). U dve lokacije A i B se učitaju brojevi čije su vrednosti 22.75 i 6.93749. 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) 30

B) 29.69

C) 29.5

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

int i = 5, a = 8;

while (i > 0) {

switch (i) {

case 5: i -= 2; break;

case 3: i++;

case 2: if (i != 4) i--; continue;

case 6:

case 1: i = 0;

default: i -= 3;

}

a += i;

printf("%d",a);

}

A) 11151613

B) 97

(C) 11129

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

#include <stdio.h>

#include <stdlib.h>

void main() {

int *a, *b, *c, i;

a = b = c = (int*) malloc(sizeof(int)*10);

for (i = 0; i < 10; i++) a[i] = i; b = b+9;

while (++a < b--)

if (*a % 2) { int c; c=*a, *a=*b, *b=c; }

for (i = 9; i >= 0; i--) printf("%d", *(c+i));

free(c);

}

A) 0826453719

(B) 9173546280

C) 0123456789

4) Šta će ispisati sledeći program na programskom jeziku C, za pozitivnu vrednost učitanog broja x?

#include <stdio.h>

main()

{

int c = 0, x;

scanf("%d", &x);

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

printf("%d", c);

}

(A) Poziciju najmanje značajne jedinice u binarnoj predstavi unetog broja x

B) Broj nula u binarnoj predstavi unetog broja x

C) Najveći ceo broj c takav da je uneti broj x deljiv sa c


Elektrotehnički Fakultet Univerziteta u Beogradu Beograd, 03.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) Napisati program na programskom jeziku C koji prepisuje ulaznu tekst datoteku u izlaznu uz sledeće izmene:

    sva mala slova se zamenjuju velikim,

    sva velika slova se zamenjuju malim,

    sve cifre se zamenjuju svojim slovnim imenima ('1' sa "JEDAN", '2' sa "DVA" i tako redom).

Imena datoteka se unose sa standardnog ulaza i mogu imati maksimalno 30 znakova. Po završenoj obradi, ispisati koliko je u ulaznoj datoteci bilo malih slova, velikih slova, cifara i ostalih znakova. Dužina ulazne datoteke može biti veća od ukupnog kapaciteta memorije koju program ima na raspolaganju, pa se podaci ne mogu u celini učitati u memoriju pre obrade. Prilikom otvaranja datoteka, proveravati da li je došlo do greške i, ako jeste, prekinuti izvršavanje programa.

II. PITANJA

1) Koja od priloženih funkcija na ispravan način računa n-ti element Fibonačijevog niza, ako je n pozitivan broj? Napomena: n-ti element Fibonačijevog niza u oznaci Fn je jednak zbiru prethodna dva elementa niza, a usvaja se da je F1 = 1, F2 = 1.

A)

long fib(long n) {

if (n--)

return n+fib(n-1);

else return n+1;

}

(B)

long fib(long n) {

if (n>2)

return fib(n-1)+fib(n-2);

else return 1;

}

C)

long fib(long n) {

if (n>2)

return fib(n-1)+fib(n-2);

else if (n==2)

return n+1;

else return n;

}

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

A) Naredba return; nije sintaksno ispravna jer se uvek mora zadati izraz za vrednost koja se vraća iz funkcije.

B) Znakovni nizovi (stringovi) s1 i s2 se mogu nadovezivati izrazom s1 += s2.

(C) U naredbi preprocesora #define mogu se koristiti argumenti.

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

#include<stdlib.h>

#include<stdio.h>

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

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

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

S *p, **s = (S**) calloc(k, sizeof(S *));

for(i = 0; i < k; i++) s[i] = (S*) calloc(1, sizeof(S));

for(--i; i >= 0; i--) s[i]->i = i, s[i]->p = s[(i+2)%k];

for( ; k; k--) {

for(p = s[0], i=0; i < k; p = p->p, i++);

printf("%d", p->i-s[0]->i);

}

for(i = 0; i < m; i++) free(s[i]);

free(s);

}

A) 02413

B) 01234

(C) 03142

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

#include <stdio.h>

#include <stdlib.h>

typedef struct Element {int x; struct Element *next;} ElListe;

void obradi(ElListe *p) {

ElListe *p1,*p2;

for (p1=NULL; p!=NULL; p2=p->next,p1=p,p=p2);

}

main() {

ElListe *pok=NULL,*pt;

int i;

for (i=5; i>0; i--) {

pt=(ElListe*)malloc(sizeof(ElListe)); pt->x=i; pt->next=pok; pok=pt;

}

obradi(pok);

for (pt=pok; pt!=NULL; pt=pt->next) printf("%d", pt->x);

}

(A) 12345

B) 54321

C) 1