Modul 1

Grile - Modulul 1 1 Algoritmi si programare 2 Structuri de date si tehnici de elaborare a algoritmilor 3 Programare orientata obiect 4 Tehnologii Java 5 Metode de analiza a algoritmilor 6 Algoritmica grafurilor

published on February 27, 2020
1/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include void main(){
int a,b = 0;
int i;
for (i=0;i<10;i++){
b = a; a = i;
}
printf("%d", b);
}

8
9
10
0123456789
2/144

Care din urmatoarele expresii sunt echivalente cu a[i]?

Hint: 2 choices
*(a+i)
i[a]
&a[i]
*(a+a)
*(a+i*sizeof(a[i]))
3/144

Instructiunea k++ este echivalenta cu:

Hint: 3 choices
k = k + 1
k += 1
++k
k = k + k
k += k
k = k + sizeof(k)
4/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?
#include <stdio.h>
int a,b;
void f1 (int r, int s){
int temp;
temp = r;
r = s;
s = temp;
}
void f2 (int x, int y){
if (x > y) f1(x,y);
}
void main(){
a = 064;
b = 042;
f2(a,b);
printf("%d,%d\n",a,b);
}

52,34
64,42
42,62
34,52
0,0
rezultatul nu poate fi determinat avand ın vedere valorile variabilelor a si b
5/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?
#include <stdio.h>
void main(){
int k[ ] = {100,200,300,400,500,600,700};
int *t=k+2;
printf("%d ",*t);
printf("%d ",*(t+2) + *t);
*t = *t + 10;
printf("%d ",*t);
t = t+3;
printf("%d ",*t);
*t = *t + *(t-2);
printf("%d ",*t);
}

300 800 310 600 1000
200 300 110 600 1100
300 900 320 600 1000
300 800 310 600 900
100 900 310 600 1000
nici una din variante nu este corecta
6/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include
int a,b;
void f1 (int *r, int *s){
int temp;
temp = *r;
*r = *s;
*s = temp;
}
void f2 (int *x, int *y){
if (*x > *y) f1(x,y);
}
main(){
a = 64;
b = 42;
f2(&a,&b);
printf("%d,%d\n",a,b);
}

42,64
64,42
64,64
42,42
eroare de compilare pentru ca lipseste void la declararea functiei main
7/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include <stdio.h>
void main(){
int p[] = {50,60,70,80,90,100};
int *q[6],i;
for(i =0;i<6;i++)
q[i] = &p[i];
for(i=5;i>=1;i--){
q[i] = q[i-1];
*q[i] = *q[i] + *p * 2;
}
for(i=0;i<6;i++)
printf("%d ",p[i]);
}

150 160 170 180 190 100
160 160 170 180 190 100
150 150 150 150 150 150
150 160 170 180 190 190
150 160 170 180 190 200
nici una din variante nu este corecta
8/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include <stdio.h>
#include <stdlib.h>
void f(int *x){
x=(int *) malloc(sizeof(int));
*x=12;
}
void main(){
int v=15/10;
f(&v);
printf("%d",v);
}

1
12
15
1.5
adresa variabilei v
adresa variabilei x
9/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include <stdio.h>
void main(){
int i, p=0x10;
for(i=1;;i+=2){
if (i=5)
break;
p+=i;
}
printf("%d",p);
}

16
10
26
25
14
programul cicleaza la infinit
10/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include <stdio.h>
int a = 10, b = 5;
void f (int a, int t[]){
b = a;
t[2] = a % 2;
a = (t[0]+t[1])/2;
t[0]^=t[1];
t[1]^=t[0];
t[0]^=t[1];
}
void main(){
int t[]={4,3,1};
f(t[2],t);
printf("%d %d %d %d %d",a,b,t[0],t[1],t[2]);
}

10 1 3 4 1
10 5 4 3 1
1 5 3 4 1
7 5 3 4 1
5 5 10 4 0
nici una din variante nu este corecta
11/144

Consideram urmatoarea secventa de program:

float x = 10;
int y = 7;
float t[]={3,4,1};
float *q = &x;
int *r = &y;
void *p;

Care din urmatoarele atribuiri sunt corecte?

Hint: 4 choices
q = t;
p = t;
p = &y;
p = r;
x = &t[2];
t = q;
q = r;
r = q;
r = p;
12/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include <stdio.h>
void main(){
char s[]="abcdef";
char *p,*q,c;
p=s;
q=p+4;
while(p < q){
c=*p;
*p=*q;
*q=++c;
p++;q--;
}
printf("%s",s);
}

bcdefg
edccbf
fedcba
feddca
edcbaf
nici una din variante nu este corecta
13/144

Care din urmatoarele linii vor genera eroare la compilare?
1: void main() {
2: int a[2] = {1,2};
3: int b[3] = {3};
4: int* x = a;
5: int* const y = a;
6: b = x;
7: b = y;
8:}

6, 7
3, 5, 6, 7
3, 4, 6, 7
3, 5
5, 6, 7
5
nici una
14/144

Consideram urmatorul program:
1: #include <stdio.h>
2: void main(){
3: int t[10];
4: printf("sizeof(int)=%d\n",sizeof(int));
5: printf("%p\n",t);
6: printf("%p\n",t+3);
7:}
Daca ın urma executiei liniilor 4 si 5 se afiseaza 2 respectiv 0xF004, ce se va afisa ın urma executiei
liniei 6?

0xF00A
0xF010
0xF007
0xF006
0xF003
15/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include <stdio.h>
void main(){
int x=7;
x = 1,2,3;
printf("%d",x);
}

1
7
2
3
6
nimic (programul nu se compileaza)
16/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include <stdio.h>
void main() {
int array[3][] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
int s = 0, i ,j;
for (i = 0; i < 3 ; ++i){
for (j = 2; j < 3 ; j++){
s += array[i][j];
}
}
printf("%d",s);
}

nimic (programul nu se compileaza)
15
0
27
36
17/144

Ce se va afisa pe ecran ın urma executiei urmatorului program?

#include <stdio.h>
int f(int y);
void main(){
int x = 3;
int y = 6;
printf("%d", f(x));
}
int f(int x){
return x+1;
}

4
7
3
6
nimic (eroare de compilare deoarce functia f a fost apelata ınainte de a fi definita)
nimic (eroare de compilare deoarce numele argumentului functiei f este y la declarare si
x la definire)
18/144

Cate elemente ale vectorului a vor avea valoarea 9 dupa executia programului de mai jos?:
void main(){
int a[] = {0, 1, 2, 3, 0, 4, 5, 6};
int i = 0, x = 9;
do{
a[i++] = x;
}while(i<6&&a[i]);
}

nici unul
unu
doua
patru
toate
19/144

Fie urmatorul program:
void main (){
int v[20], i, n, D;
scanf("%d", &n);
for(i=0;i<n;i++)
v[i]=i%2?i:-i;
for(D=1,i=0;i<n;D*=v[i++]);
D++;
printf("%d",D);
}
In urma executiei sale sunt posibile urmatoarele situatii:

Hint: 2 choices
Expresia conditionala din primul ciclu for este eronata din punct de vedere sintactic
Daca variabila n primeste la citire valoarea 6, atunci elementele vectorului v
vor fi, ın ordine (0,1,-2,3,-4,5).
Prezenta caracterului ” ; ” dupa al doilea ciclu for constituie o eroare
Daca variabila n primeste la citire valoarea 5, atunci programul afiseaza 1
Programul functioneaza corect pentru orice valoare intreaga a lui n mai mica sau egala
cu MAXINT.
20/144

Fie programul :
void main(){
int v[]={0, 1, 2, 3, 4, 5, 0};
int i=0, n=0;
do{
if (i == v[i])
n++;
}while(i<6 && v[i++]);
}

In urma executiei programului sunt posibile urmatoarele situatii:

variabila n va avea valoarea 0
variabila n va avea valoarea 1
programul va intra ıntr-un ciclu infinit
variabila n va avea valoarea 5
variabila n va avea valoarea 2
21/144

Se considera secventa urmatoare, ın care valorile lui n si x se presupun cunoscute, v este un vector
cu elementele(v[0],v[1],...,v[n-1])

p=n;
for(i=0;i<n;i++)
if (v[i]==x)
p=i;
for(i=p+1; i<n; i++)
v[i-1]=v[i];
for(i=0; i<n-1; i++)
printf("%3d",v[i]);

Precizati care dintre urmatoarele afirmatii sunt adevarate:

Pentru n=5, x=3 ¸si v=(5,6,2,7,1), se afi¸seaza ultimele patru elemente nemodificate ale
vectorului:6 2 7 1.
Pentru n=5, x=1 ¸si v=(2,1,3,1,4), se afiseaza: 2 3 1 4;
Secventa contine erori de sintaxa
Algoritmul sterge din vector elementul cu valoarea x, prin mutarea cu o pozitie mai la
dreapta a elementelor aflate ınaintea lui.
Algoritmul sterge din vector elementul cu valoarea x, prin mutarea cu o
pozitie mai la stanga a elementelor aflate dupa el.
22/144

In programul urmator, care dintre secventele de instructiuni (I), (II), (III) realizeaza corect citirea
unui sir de caractere de la tastatura si afisarea acestuia?

void main(){
char s1[10],s2[10],s3[10];
scanf("%s", &s3[3]);
printf("%s", s3[3]); //(I)
scanf("%s", s2);
printf("s2=%s", s2); //(II)
scanf("%s",&s1);
printf("%s", s1[10]); //(III)
}

numai (I)
toate
(I) si (II)
(I) si (III)
numai (II)
23/144

Pentru programul urmator, analizati corectitudinea afirmatiilor de mai jos:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void main(){
char s1[4], s2[4];
long x;
scanf("%s %s", s1, s2) ;
if (strcmp(s1, s2)>0)
x=atol(s1);
else
if(strcmp(s1, s2)==0)
x = 0;
else x = atol(s2);
printf("%d", x);
}

Hint: 3 choices
Conditiile din cele doua linii if sunt gresite.
Apelurile functiei atol sunt corecte
Daca de la tastatura se introduc sirurile ”98” si ”123” atunci se va afisa 98.
Daca de la tastatura se introduc sirurile ”123” si ”121”, atunci programul va
afisa sirul ”123”.
Daca de la tastatura se introduc sirurile ”ab” si ”ac”, atunci se va semnala un mesaj de
EROARE
24/144

In conformitate cu standardul ASCII, codurile literelor mari sunt succesive ıncepand cu 65, ce va
afisa programul de mai jos?

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void main(){
int x = 20, e;
char s[15] ="ABC", t[15], u[15];
e = s[1] + s[2];
itoa(e, t, 10);
strcpy(u, t);
strcat(s, u);
printf("%s ", s);
}

Nimic, sirul s fiind vid
ABC13
AB13
ABC133
ABC131
25/144

Care dintre specificatorii modului de acces al fisierelor binare sau text, pentru functia fopen, sunt
corecti:

Hint: 4 choices
ab
rb
ap
wt
at
ba
toate variantele sunt corecte
26/144

Stiind ca fisierul f1.txt exista ın directorul curent iar f2.txt nu este creat, care dintre urmatoarele
secvente de instructiuni este gresita?

f1=fopen(”f1.txt”,”w”);
f1=fopen(”f1.txt”,”r+”);
f2=fopen(”f2.txt”,”r+”);
f2=fopen(”f2.txt”,”’w+”);
toate variantele anterioare sunt gresite
27/144

Care este efectul subprogramului alaturat?

void X(char *a, char *b){
FILE *f,*g;
char s[255];
f=fopen(a,"a");
g=fopen(b,"r");
while(!feof(g)){
fgets(s,255,g);
fputs(s,f);
}
fclose(f);
fclose(g);
}

copiaza continutul fisierului g peste continutul fisierului f
citeste informatiile din cele doua fisiere ale caror nume se transmit ca parametri
concateneaza doua fisiere, rezultatul concatenarii fiind pus ın fisierul f
concateneaza doua fisiere, rezultatul concatenarii fiind pus ın fisierul g
toate variantele anterioare sunt gresite
28/144

Care dintre urmatoarele afirmatii sunt adevarate?

Pentru a ınchide un fisier se foloseste functia unlink;
Pentru redenumirea unui fisier ın cadrul programului se foloseste functia remove
Pentru a deschide un fisier se foloseste functia fopen
Nu pot fi adaugate informatii ıntr-un fisier
Toate celelalte variante sunt eronate
29/144

Ce valori se vor gasi ın fisierul numere.txt dupa executia urmatorului program?

#include <conio.h>
#include <stdio.h>
FILE *f;
int i=0, a[10]={20,11,17,4,5,10,14,34,23,11};
void main(){
f=fopen("c:\\numere.txt","w");
for(i=0; i<5; i++){
if(a[i]%2!=0)
fprintf(f,"%d \n",a[i]);
}
fclose(f);
}

11 17 5 23 11
20 4 10 14 34
11
17
5
11
17
5
23
11
30/144

Ce se ıntampla ın urma executiei urmatorului program daca fisierul nr.txt contine valorile 7 14 6 3
8 10 ?

FILE *f, *g;
int x;
void main(){
f=fopen("nr.txt","r+");
g=fopen("nr2.txt","w+");
while(!feof(f)){
fscanf(f,"%d", &x);
if(x%2==0)
fprintf(g,"%d \n",x);
}
fclose(f);
fclose(g);
}

Fisierul nr2.txt va contine valorile 14 6 8 10
Fisierul nr2.txt va contine valorile 14 6 8 10, fiecare pe alta linie
Fisierul nr.txt va contine valorile 7 14 6 8 10
Fisierul nr.txt va contine valorile 7 14 6 8 10, fiecare pe alta linie
31/144

Se da urmatorul algoritm:

Algorithm 1 Algoritm
procedure algoritm(a, n)
for i ← 1, n − 1 do
for j ← n, i + 1ST EP − 1 do
if aj < aj−1 then aj−1 ←→ aj
end if end if
end forend for j
end forend for i
end procedureend procedure

Care vor fi valorile vectorului a dupa terminarea pasului i = 5, a = (8, 6, 4, 2, 3, 5, 7)?

(2, 3, 4, 5, 6, 8, 7)
. (2, 3, 4, 5, 8, 7, 6)
(2, 3, 4, 8, 7, 6, 5)
(8, 7, 6, 5, 4, 2, 3)
(2, 3, 4, 5, 6, 7, 8)
32/144

Care dintre urmatoarele conditii nu este conditia necesara pentru un algoritm de cautare binara:

lista trebuie sa fie sortata
ar trebui sa existe acces direct catre elementul din mijlocul fiecarei subliste
ar trebui sa existe un mecanism de stergere sau/si de inserare a elementelor
ın lista
niciuna de mai sus
33/144

Care dintre urmatoarele nu este afirmatii nu este adevarata in cazul unui algoritm de cautare
binara?

trebuie folosit un array sortat
cerinta de a avea un array sortat necesita multa memorie si timp atunci cand sunt necesare
multe stergeri si inserari
trebuie sa existe un mecanism care sa permita accesul direct la elementul din mijloc
algoritmul de cautare binar nu este eficient atunci cand avem mai mult de
1000 de elemente
34/144

Ce va afisa urmatorul program?

String name;
int i;
boolean startWord;
name = "Franklin D. Roosevelt";
startword = true;
for (i = 0; i < name.length(); i++) {
if (startWord)
System.out.println(name.charAt(i));
if (name.charAt(i) == ’ ’)
startWord = true;}
else
startWord = false;
}

FDR
Franklin
D
Roosevelt
Franklin D. Roosevelt
35/144

Ce metoda de sortare este descrisa in pseudo-codul urmator:

procedure sort(A)
n = length(A)
repeat
swapped = false
for i = 1 to n-1 do
if (A[i-1]>A[i] then
swap (A[i-1],A[i])
swapped = true
end if
end for
until not swapped
end procedure

HeapSort
MergeSort
BubbleSort
SwapSort
36/144

Coloana din stanga reprezinta un input de stringuri ce trebuie sortate; coloana din dreapta reprezinta strigurile sortate; celelalte coloane reprezinta un pas intermediar al unuia dintre algoritmii:
quicksort, mergesort top-down, merge sort botton-up, heapsort. Care este ordinea algoritmilor
tinand cont de coloanele afisate?

navy wine mist blue blue bark
plum teal coal gray coal blue
coal silk jade rose gray cafe
jade plum blue mint jade coal
blue sage cafe lime lime corn
pink pink herb navy mint dusk
rose rose gray jade navy gray
gray jade leaf teal pink herb
teal navy dusk coal plum jade
ruby ruby mint ruby rose leaf
mint pine lime plum ruby lime
lime palm bark pink teal mint
silk coal corn silk bark mist
corn corn navy corn corn navy
bark bark wine bark dusk palm
wine gray silk wine leaf pine
dusk dusk ruby dusk silk pink
leaf leaf teal leaf wine plum
herb herb sage herb cafe rose
sage blue rose sage herb ruby
cafe cafe pink cafe mist sage
mist mist pine mist palm silk

Input, quicksort, heapsort, merge bottom-up, merge top-down, output
Input, heapsort, merge top-down, merge bottom-up, quicksort, output
Input, quicksort, heapsort, merge top-down, merge bottom-up, output
Input, merge top-down, merge bottom-up, quicksort, heapsort, output
Input, merge top-down, quicksort, heapsort, merge bottom-up, output
37/144

Analizand algoritmul de mai jos precizati ce timp de executie are.

public static int f1(int N){
int x = 0;
for (int i = 0; i < N, i++)
x++;
return x;
}

logN
N
NlogN
N^2
2^N
N!
38/144

Analizand algoritmul de mai jos precizati ce timp de executie are.

public static int f2(int N){
int x = 0;
for (int i = 0; i < N, i++)
for (int j = 0; j < i; j++)
x++;
return x;
}

logN
N
NlogN
N^2
2^N
N!
39/144

Analizand algoritmul de mai jos precizati ce timp de executie are.

public static int f3(int N){
if (N==0) return 1;
int x=0;
for (int i = 0; i < N; i++)
x+=f3(N-1);
return x;
}

logN
N
NlogN
N^2
2^N
N!
40/144

Analizand algoritmul de mai jos precizati ce timp de executie are.

public static int f1(int N){
int x = 0;
for (int i = 0; i < N, i++)
x++;
return x;
}
public static int f4(int N){
if (N==0) return 0;
return f4(N/2) + f1(N) + f4(N/2);
}

logN
N
NlogN
N^2
2^N
N!
41/144

Analizand algoritmul de mai jos precizati ce timp de executie are.

public static int f1(int N){
int x = 0;
for (int i = 0; i < N, i++)
x++;
return x;
}
public static int f5(int N){
int x = 0;
for (int i = N; i > 0; i = i/2)
x+=f1(i);
return x;
}

logN
N
NlogN
N^2
2^N
N!
42/144

Analizand algoritmul de mai jos precizati ce timp de executie are.

public static int f6(int N){
if (N==0) return 1;
return f6(N-1) + f6(N-1);
}

logN
N
NlogN
N^2
2^N
N!
43/144

Analizand algoritmul de mai jos precizati ce timp de executie are.

public static int f7(int N){
if (N==1) return 0;
return 1+f7(N/2);
}

logN
N
NlogN
N^2
2^N
N!
44/144

Algoritmul Quiksort este cel mai potrivit pentru:

Sortarea unui liste mari de chei care sunt in ordine aleatoare
Sortarea unei liste de chei care sunt aproape ordonate
Gasirea celui mai scurt drum
Sortarea unei liste scurte de chei
45/144

Un program orientat obiect reprezinta:

o colectie de obiecte care coopereaza prin intermediul mesajelor ın vederea
realizarii unui obiectiv comun
o varianta de program procedural
un program care poate fi considerat un obiect de catre alte programe
un program specific mediului de programare Windows
un program format din mai multe fisiere sursa si header
46/144

O clasa ın modelul de programare orientat obiect reprezinta:

o colectie de obiecte cu aceleasi caracteristici si cu un comportament comun
o colectie de caracteristici
un obiect din program
o interfata
un grup de comportamente specific unui obiect
47/144

Obiectele apartinand unei aceleiasi clase se diferentiaza prin:

Hint: 3 choices
starea lor
valorile datelor membru declarate ın cadrul clasei
valorile caracteristicilor clasei
caracteristicile diferite specifice fiecarui obiect
comportamentul diferit specific fiecarui obiect
48/144

Consideram urmatorul program C++

#include <iostream>
using namespace std;
class C
{
private:
int _i;
public:
C(int i):_i(i){}
C():_i(3){}
~C(){cout<<_i<<endl;}
};
void main()
{
C c1(4);
C c2;
}

Care din urmatoarele afirmatii sunt adevarate:

Hint: 3 choices
programul nu contine erori de sintaxa
exista erori de sintaxa in definitiile metodelor constructor
destructorul nu poate contine instructiuni de afisare
ın cadrul programului principal sunt create doua instante ale clasei C
programul afiseaza la consola numerele 3 si 4
49/144

Care din urmatoarele afirmatii referitoare la mostenire sunt adevarate relativ la limbajul de programare C++:

Hint: 3 choices
Relatia de mostenire ın care clasa de baza si clasa derivata au aceeasi interfata se numeste
mostenire pura
Dintr-o clasa de baza se poate obtine prin intermediul mostenirii cel mult o clasa derivata
O clasa derivata are exact o clasa de baza
Obiectele apartinand unei clase derivate pot fi convertite la tipul unei clase de baza din care
clasa derivata provine
Specificatorul protected este folosit pentru a arata ca elementele care ıl urmeaza pot fi
accesate
si din cadrul claselor derivate
50/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:
#include <iostream.h>
class Test {
int n;
public:
Test(int x):n(x){}
int f(int n, int &x, int *p){
n=this->n;
x=n++;
*p=this->n + n;
return n;
}
};
void main(){
Test t(2);
int n=6,x=0x10,p=1;
cout<<t.f(n,x,&p)<<" ";
cout<<n<<" "<<x<<" "<<p;
}

3 6 2 5
3 6 16 1
6 6 10 1
3 7 10 1
Eroare de compilare deoarce constructorul nu contine nici o intructiune
51/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
class B1 {
public:
B1(){cout<<"B1 ";}
~B1(){cout<<"DB1 ";}
};
class B2 {
public:
B2(){cout<<"B2 ";}
~B2(){cout<<"DB2 ";}
};
class D: public B1, public B2{
public:
D():B2(),B1(){cout<<"D ";}
~D(){cout<<"DD ";}
};
void main(){
D d1;
D d2=d1;
}

B1 B2 D DD DB2 DB1 DD DB2 DB1
B2 B1 D DD DB2 DB1 DD DB2 DB1
B1 B2 D B1 B2 D DD DB2 DB1 DD DB2 DB1
B1 B2 D DD DB1 DB2 DD DB1 DB2
D DD
52/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
class B1 {
public:
B1(){cout<<"B1 ";}
~B1(){cout<<"DB1 ";}
};
class B2 {
public:
B2(){cout<<"B2 ";}
~B2(){cout<<"DB2 ";}
};
class D: public B1, public B2{
static int idGen;
int id;
public:
D():B2(),B1(){id=idGen++;cout<<"D("<<id<<") ";}
D(const D &o){id=idGen++;cout<<"CD("<<id<<") ";}
~D(){cout<<"DD ";}
};
int D::idGen = 0;
void main(){
cout<<endl;
D d1;
D d2=d1;
}

B1 B2 D(0) B1 B2 CD(1) DD DB2 DB1 DD DB2 DB1
B1 B2 D(0) DD DB2 DB1 DD DB2 DB1
B1 B2 D(0) DD DB2 DB1
B2 B1 D(0) B1 B2 CD(1) DD DB2 DB1 DD DB2 DB1
B1 B2 D(0) B2 B1 CD(1) DD DB2 DB1 DD DB2 DB1
rezultatul executiei nu poate fi determinat deoarce depinde de continul memoriei
53/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
class B1 {
public:
B1(){cout<<"B1 ";}
~B1(){cout<<"DB1 ";}
};
class B2 {
public:
B2(){cout<<"B2 ";}
~B2(){cout<<"DB2 ";}
};
class D: public B1, public B2{
public:
D():B2(),B1(){cout<<"D ";}
D(const D &o){cout<<"CD ";}
~D(){cout<<"DD ";}
};
void main(){
D *d1 = new D;
D *d2 = d1;
delete d1;
}

B1 B2 D DD DB2 DB1
B1 B2 D DD DB2 DB1 DD DB2 DB1
B2 B1 D DD DB2 DB1
B2 B1 D DD DB2 DB1 DD DB2 DB1
B1 B2 D B1 B2 D DD DB2 DB1 DD DB2 DB1
B1 B2 D B1 B2 D DD DB2 DB1
54/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
class A {
public:
A(){cout<<"A()";}
A(int n,int m=0){cout<<"A(int,int)";}
A(const A &o){cout<<"A(const A&)";}
~A(){cout<<"~A";}
};
void main(){
cout<<endl;
A a1;
A a2=a1;
A a3=1;
A a4(1);
A a5(1,1);
}

A()A(const A&)A(int,int)A(int,int)A(int,int)∼A∼A∼A∼A∼A
A(const A&)A(const A&)A(int)A(int,int)A(int,int)∼A∼A∼A∼A∼A
A()A(const A&)A(int,int)A(int,int)A(int,int)∼A∼A∼A∼A
A()A(const A&)A(int)A(int)A(int,int)∼A∼A∼A∼A∼A
A()A()A(int,int)A(int)A(int,int)∼A∼A∼A∼A∼A
Eroare de compilare la declararea obiectului a2 deoarece nu e supraıncarcat operatorul =.
55/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
class B {
public:
virtual void f() { cout<<"B::f() ";}
void g() { cout<<"B::g() ";}
};
class D1: public B{
public:
void f() { cout<<"D1::f() ";}
void g() { cout<<"D1::g() ";}
};
class D2: public B{
public:
void g() { cout<<"D2::g() ";}
};
void main(){
int i;
B *b[] = {new B(), new D1(), new D2()};
for (i=2;i>=0;i--) {b[i]->f();}
for (i=0;i<=2;i++) {b[i]->g();}
}

B::f() D1::f() B::f() B::g() B::g() B::g()
D2::f() D1::f() B::f() B::g() B::g() B::g()
B::f() D1::f() D::f() B::g() D1::g() D2::g()
B::f() D1::f() B::f() B::g() D1::g() D2::g()
B::f() B::f() D2::f() B::g() B::g() D2::g()
56/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
class B {
public:
virtual void f() { cout<<"B::f() ";}
};
class D1: public B{
public:
void f() { cout<<"D1::f() ";}
};
class D2: public B{
public:
void f() { cout<<"D2::f() ";}
};
void main(){
int i;
B b[] = { B(), D1(), D2()};
for (i=2;i>=0;i--) {b[i].f();}
}

B::f() B::f() B::f()
D2::f() D1::f() B::f()
B::f() D1::f() D2::f()
B::f() D1::f() D2::f().
57/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
class B {
protected:
int x;
public:
B(int x=0){this->x=x;}
virtual void f() {x=x+1;}
void print(){cout<<x<<" ";}
};
class D1: public B{
public:
void f() {x=x+5;}
};
class D2: public B{
public:
void f() {x=x+2;}
};
void main(){
int i;
B *b[] = { new B(2), new D1(), new D2(), new B};
for (i=3;i>0;i--) (*b[i]).f();
for (i=0;i<=3;i++) b[i]->print();
}

2 5 2 1
2 0 0 0
3 5 2 1
2 1 1 1
2 5 2 0
2 5 2
Eroare de compilare
58/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
class B {
int x;
public:
B(int x=0){this->x=x;}
virtual void f() {x=x+1;}
void print(){cout<<x<<" ";}
};
class D1: public B{
public:
void f() {x=x+5;}
};
class D2: public B{
public:
void f() {x=x+2;}
};
void main(){
int i;
B *b[] = { new B(2), new D1(), new D2(), new B};
for (i=3;i>0;i--) (*b[i]).f();
for (i=0;i<=3;i++) b[i]->print();
}

2 5 2 1
2 0 0 0
3 5 2 1
2 1 1 1
2 5 2 0
2 5 2
Eroare de compilare
59/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
class B {
int x;
static int y;
public:
B(int x=0){this->x=x;}
void setX(int vx) {x=vx;}
void setY(int vy) {y=vy;}
void print(){cout<<x<<" "<<y<<" ";}
};
int B::y=0;
void main(){
B b1=3;
B b2(4);
b1.print(); b2.print();
b1.setX(5); b2.setY(2);
b1.print(); b2.print();
}

3 0 4 0 5 2 4 2
3 0 4 0 5 0 4 2
3 4 5 2 4 2
3 3 4 4 5 2 4 2
3 0 4 0 5 2 5 2
3 0 4 0 5 0 2 0
60/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
struct A{
int x;
operator double() {
return 21.4;
}
};
void main(){
A a;
a.x = 11;
cout << (0?3:a);
}

21
21.4
3
11
programul nu se compileaza
61/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
struct A {
A(int d) : x(d) {}
int x;
};
void main(){
double x = 3.14;
A f( int(x) );
cout << f.x << endl;
}

nimic (eroare de compilare)
0
3
3.14
depinde de implementarea compilatorului
62/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
int f(int x, int y = x) {
return x+y+1;
}
void main(){
cout << f(2);
}

nimic (eroare de compilare)
1
3
5
depinde de implementarea compilatorului
63/144

Ce se va afisa pe ecran ın urma executiei urmatorului program:

#include <iostream.h>
struct A {
virtual int f(int x = 5){
return x * 2;
}
};
struct B : public A{
int f(int x = 10) {
return x * 3;
}
};
void main(){
A* a = new B;
cout << a->f();
}

15
10
20
3
nimic (eroare de compilare)
64/144

Fie secventa de program:

class A {
private:
int x,y;
public:
A(){x=0;y=0; }
A(int xi,int yi){
x=xi;y=yi;
Page 28
}
void afis(){
cout <<x ” ” << y;
}
};
void main(){
A A1,A2(10,20);
A1.afis();
A2.afis();
}

Care din urmatoarele afirmatii sunt adevarate:

Metoda afis() este incorect definita
Constructorul este incorect definit
Declaratie incorecta pentru obiectul A1
Programul afiseaza valorile (10 20 0 0 )
Programul afiseaza valorile (0 0 10 20 )
65/144

Fie secventa de program:

class C{
public:
C(){n++;}
static int index(){return n;}
private:
static int n;
};
int C :: n = 0;
class A{
private:
C c;
int a;
};
class B{
public:
B(int i = 0) :b(i)
{cout <<C :: index() <<” ”;}
private:
A a;
C c;
int b;
};
void main(){
A a1;
cout <<C :: index() <<’ ’;
B b1[3];
}

Rezultatul executiei programului este:

1 2 3 4
1 3 4 5
1 7 3 4
1 3 5 7
0 1 2 3
66/144

Se considera secventa de program:

class C {
private:
int x,y;
public:
C(int xi,int yi){ x=xi;y=yi; }
C(const C &a){
x=a.x;y=a.y;
}
};
In care din urmatoarele situatii se realizeaza copierea unui obiect ın altul:

Hint: 2 choices
C c1(4,5)
C c2(0.0, 0,0)
C c3=c1
D. C c4(1)
C c5(c1)
67/144

Se considera secventa de program:
class Punct {
private:
double x,y;
public:
Punct(double xi,double yi){
x=xi;y=yi;
}
};
In care din urmatoarele situatii se realizeaza copierea unui obiect:

Hint: 2 choices
Punct P1(10,20)
Punct P2(P1(3))
Punct P3
Punct P4=P1
Punct P5(P1)
68/144

Se da programul :
class P {
double x,y;
public:
P(double x1 = 0,double y1 = 0){
x=x1;y=y1;
}
void afis(){
cout <<x <<” ” << y;
}
P operator++ (){
++x;++y;
return *this;
}
};
void main(){
P p1(1,2),p2;
p2=++p1;
p2.afis();
}
Care din afirmatiile urmatoare sunt corecte:

Hint: 2 choices
Obiectul p2 nu poate fi instantiat
Asignarea p2 = + + p1 este incorecta
In program se realizeaza supraancarcarea operatorului prefix de incrementare
Programul va afisa valorile: 23
Programul afiseaza valorile lui p1
69/144

5. Se da programul :
class A {
int x,y;
public:
A(int xi = 0, int yi=0){
x=xi;y=yi;
}
void afis(){
cout <<” x” << y;
}
A operator+ (A o2);
friend A operator++ (A &a);
};
A A::operator+ (A o2){
A temp;
temp.x=x+o2.x;
temp.y=y+o2.y;
return temp;
}
A operator++ (A &a){
++a.x;++a.y;
return a;
}
void main(){
A a1(20,30),a2(2,2),a3;
a3=++a1+a2;
a3.afis();
}
Care din afirmatiile urmatoare sunt corecte:

Utilizarea cuvantului predefinit ” friend ” nu este permisa ˆın acest context
Functia operatorului ++ nu este definita corect
Programul va afisa valorile: 23 33
Atribuirea a3=++a1+a2 este incorecta
programul va afisa valorile: 22 32
70/144

Supraıncarcarea unor operatori se poate realiza prin functii operator sau functii friend. Diferenta consta ın:

Hint: 2 choices
Precedenta operatorilor
Asociativitatea operatorilor
Obiectul returnat
Lista de parametri
Numarul parametrilor din lista functiei
71/144

Se considera secventa:
class A {
int a[3];
public:
A(int xi, int yi, int zi ){
a[0]=xi;a[1]=yi;a[2]=zi;
}
int &operator[](int i){
return a[i];
}
};
void main() {
A o(1, 2, 3);
cout<<o[0];
o[1]=10;
cout<<o[1];
}
Ce se poate afirma despre operator[]()?

Supraıncarca operatorul()
Supraıncarca un operator unar
Este o metoda oarecare a clasei care nu produce supraıncarcarea unor operatori
Este un constructor
Supraıncarca operatorul[]
72/144

Se considera secventa:
class B{
int a;
protected:
int b;
public:
int c;
void set a(int x){a = x;}
void set b(int y){b = y;}
void set c(int z){c = z;}
Page 32
};
class D : public B{ int d;
public:
void set b(int y) {b = y;}
void set c(int z) {c = z;}
};
void main(){
D o;
o.a = 1; //(1)
o.B::set a(2); //(2)
o.b = 3; //(3)
o.B::set b(4); //(4)
o.c = 5; //(5)
}
Care din instructiunile (1)-(5) acceseaza corect membrii claselor:

Toate
(1), (2) si (5)
(1), (3) si(4)
(1), (2), (3), (4)
(2), (4) si (5)
73/144

In programul urmator, care din instructiunile (1)-(5) acceseaza corect membrii claselor:
class B{
int a;
protected:
int b;
public:
int c;
void set a(int x){a = x;}
void set b(int y){b = y;}
void set c(int z){c = z;}
};
class D : protected B{
int d;
public:
void set b(int y) {b = y;}
void set c(int z) {c = z;}
};
void main(){
D o;
o.a = 1; //(1)
o.B::set a(2); //(2)
o.b = 3; //(3)
o.B::set b(4); //(4)
o.c = 5; //(5)
}

Toate
Nici una
Numai (5)
(2), (4) si (5)
74/144

In programul urmator, care din instructiunile (1)-(6) acceseaza corect membrii claselor:
class B{
int a;
protected:
int b;
public:
int c;
void set a(int x){a = x;}
void set b(int y){b = y;}
void set c(int z){c = z;}
};
class D : private B{
int d;
public:
void set b(int y) {b = y;}
void set c(int z) {c = z;}
};
void main(){
D o;
o.a = 1; //(1)
o.B::set a(2); //(2)
o.b = 3; //(3)
o.B::set b(4); //(4)
o.c = 5; //(5)
o.set c(6); //(6)
}

(1) si (4)
(2), (3), (4)
Toate
(6)
75/144

Fie urmatoarea declaratie Java:
public private int h;
Care afirmatii sunt adevarate:

Variabila h va fi accesata ın mod public, deoarece se ia ın considerare primul modificator
de acces;
Variabila h va fi accesata ın mod private, deoarece se ia ın considerare ultimul modificator
de acces;
Va fi eroare la compilare deoarece o variabila nu poate fi ın acelasi timp
accesata public si private;
Nici una din variantele de mai sus;
76/144

Fie urmatorul cod Java:
int x=0;
if (Double.isInfinite(2/x))
System.out.println("Infinit");
else
System.out.println("2/0");
Ce puteti spune despre acest cod, daca este integrat ın cadrul unui program Java?

Va produce eroare la compilare din cauza ımpartirii la 0;
Va produce eroare la executie din cauza ımpartirii la 0 (se arunca o exceptie:
”ArithmeticExpetion”);
Codul este corect si va afisa Infinit;
Codul este corect si va afisa NaN;
77/144

Fie urmatorul program Java:
public class Program{
static void f(int k){
switch(k){
default: System.out.print("i "); break;
case 1: System.out.print("1 "); break;
case 2: case 3: System.out.print("23 "); break;
case 4: case 5: System.out.print("45 ");
}
}
public static void main(String []args){
for(int i=0;i<6;i++)
f(i);
}
}
Care afirmatii sunt adevarate?

Programul produce eroare la compilare;
Programul se compileaza si la executie afiseaza
i 1 23 23 45 45 ;
Programul se compileaza si la executie afiseaza
i 1 23 45 ;
Programul se compileaza si la executie afiseaza
i 1 23 23 45 45 i;
78/144

Fie urmatorul cod Java:
byte b=-7 >>> 1;
System.out.println(b);
Ce se poate spune despre acest cod, daca este integrat intr-un program Java?

Va produce eroare la compilare;
Va produce eroare la executie;
Programul se compileaza si la executie afiseaza -3;
Programul se compileaza si la executie afiseaza -4;
79/144

Ce puteti afirma despre urmatorul program Java?
public class Static1{
public static void main(String []args){
Static2 a=new Static2();
Static2 b=new Static2();
System.out.print("a.x= "+ a.x);
a.x=100; b.x=200;
System.out.print("a.x= "+a.x);
}
}
class Static2{
static int x=0;
Static2()
{
x++;
};
}

Afiseaza:
a.x=2 a.x=200;
Afiseaza:
a.x=0 a.x=100;
Afiseaza:
a.x=1 a.x=100;
Programul nu este corect deoarece asignarea lui x, conform obiectului b, este ilegala ın Java;
80/144

Ce se va afisa la executia urmatorului program Java?
interface I1{
float x=2.3f;
}
public class Test implements I1{
public static void main(String [] args){
System.out.print(x+" ");
x=6.7f;
System.out.print(x);
}
}

Va aparea eroare la compilare deoarece valoarea variabilei x nu se mai poate
modifica;
La executie se va afisa:
2.3f 6.7f;
La executie se va afisa:
2.3f 2.3f;
La executie se va afisa:
2.3 6.7;
81/144

Ce puteti spune despre urmatorul program Java?
class C1{
int x=1;
void f(int x){
this.x=x;
}
int getX_C1(){
return x;
}
}
class C2 extends C1{
float x=5.0f;
int f(int x){
super.f((int)x);
}
float getX_C2(){
return x;
}
}
public class Subiect9{
public static void main(String []args){
C2 obiect = new C2();
obiect.f(4);
System.out.print(obiect.getX_C2() + " ");
System.out.println(obiect.getX_C1());
}
}

Programul este corect si va afisa la executie 5 4;
Programul este corect si va afisa la executie 4.0 4;
Va aparea eroare la compilare deoarece ın clasa C2 s-a suprascris gresit atributul x din
clasa C1;
Va aparea eroare la compilare deoarece metoda suprascrisa f() din clasa C2
ıntoarce un tip diferit de void;
82/144

Ce puteti spune despre urmatorul program Java?
public class Test{
public static void main(String []args){
C1 obiect =new C1();
obiect.f(4,3);
}
}
class C1{
public void f(int xx, final int yy){
int a=xx+yy;
final int b=xx-yy;
class C2{
public void g(){
System.out.print("a= "+a);
System.out.print(", b= "+b);
}
}
C2 obiect2 = new C2();
obiect2.g();
}
}

Programul este corect si va afisa la executie a=4, b=3;
Va aparea eroare la compilare, deoarece clasa C2 nu poate fi definita ın metoda f() din
clasa C1;
Va aparea eroare la compilare deoarece ın metoda g() nu putem accesa variabila locala a din
metoda f();
Va aparea eroare la compilare deoarece nu se creeaza ın clasa Test un obiect de tip C1.C2
83/144

Un fir de executie poate intra ın starea ”blocat” (blocked) astfel?

Hint: 2 choices
Prin apelul metodei sleep();
Automat de catre sistemul de operare;
Prin apelul metodei block();
Prin apelul metodei wait();
84/144

Care dintre urmatoarele propozitii referitoare la metodele unui applet sunt adevarate?

Hint: 2 choices
Trebuie sa redefinim macar o metoda altfel obtinem eroare la compilare;
Sunt apelate automat de navigatorul Web;
Pot fi apelate direct de catre utilizator;
Nu se pot declara noi metode;
85/144

Care dintre gestionarii de pozitionare (Layout Managers) de mai jos pot fi utilizati pentru appleturi?

Hint: 2 choices
GridBagLayout;
TableLayout;
DefaultLayout;
FlowLayout;
86/144

Ce metode trebuie definite pentru a putea desena pe suprafata applet-ului?

Nu trebuie definita nici o metoda;
update();
paint();
repaint();
87/144

Care sunt deosebirile dintre Swing si AWT?

Hint: 2 choices
Componentele Swing sunt scrise ın totalitate ın Java, pe cand ın AWT, componentele sunt
scrise
folosind cod nativ;
Componentele AWT au vizualizarea dependenta de sistemul de operare, iar
ın Swing componentele pot avea o aceeasi vizualizare, indiferent de sistemul
de operare;
In sistemele de operare Unix componentele AWT nu sunt vizibile, pe cand cele din Swing da;
Fiecare componenta AWT are o componenta corespondenta ın Swing;
88/144

Care din fragmentele de cod Java de mai jos dauga un buton unui container de baza JFrame?

Hint: 2 choices
JFrame f= new JFrame();
JPanel p = (JPanel)f.getContentPane();
p.add(new JButton("Buton")) ;
JFrame f= new JFrame();
f.getContentPane().add(new JButton("Buton"));
JFrame f= new JFrame();
f. add(new JButton("Buton"));
JFrame f=new JFrame();
JButton b=new JButton("Buton");
f.add(b);
89/144

Fie urmatoarea secventa de cod:
JPanel p =new JPanel();
Jlabel e = new JLabel("Eticheta:");
e.setDisplayedMnemonic(’E’);
p.add(e, BorderLayout.EAST);
JTextField t = new JTextField(7);
e.setLabelFor(t);
p.add(t, BorderLayout.WEST);

Ce se va ıntampla la apasarea combinatiei de taste: Alt + E?

Eticheta e va detine focusul;
Campul t va detine focusul;
Nici o componenta nu va detine focusul;
Panoul p va detine focusul;
90/144

Care dintre urmatoarele afirmatii referitoare la componenta grafica JTable sunt adevarate?

Hint: 2 choices
Intotdeauna o componenta JTable are asociata un model de date, chiar daca
nu specificam explicit acest lucru;
Prin modificarile efectuate asupra datelor unui model, se va actualiza automat
si vizualizarea tabelului;
Pentru a crea o tabela folosind modelul AbstractModelTable, este ındeajuns sa suprascriem
metodele getRowCount() si getColumnCount();
Modelul de date AbstractTableModel tine datele ıntotdeauna ıntr-un Vector avand elemente
Vector;
91/144

JDesktopPane este un exemplu de:

Hint: 2 choices
Container pentru JInternalFrame;
Subclasa pentru JLayeredPane;
Subclasa pentru JInternalFrame;
Componenta atomica simpla;
92/144

Fie urmatorul program Java:
public class Afisare {
public static void main (String[] args) {
for (int i = 0; i < args.length; i++)
System.out.println(args[i]);
}
}
Un apel de genul java Afisare ”Hello Java”; va produce urmatorul rezultat:

Hello Java;
Hello
Java;
Programul este incorect, deoarece nu sunt prezente argumentele;
NaN;
93/144

Fie urmatorul program Java:
public class Program{
static void f(int k){
switch(k){
default: System.out.print("i "); break;
case 1: System.out.print("1 "); break;
case 2: case 3: System.out.print("21 "); break;
case 4: case 5: System.out.print("26 ");
}
}
public static void main(String []args){
for(int i=0;i<6;i++)
f(i);
}
}
Care afirmatii sunt false?

Hint: 3 choices
Eroare la compilare;
Programul se compileaza si la executie afiseaza
i 1 21 21 26 26 ;
Programul se compileaza si la executie afiseaza
i 1 21 26 ;
Programul se compileaza si la executie afiseaza
i 1 21 21 26 26 i;
94/144

Se utilizeaza protected ın Java pentru date si metode la care nu este necesar:

Sa facem o initializare;
Sa le accesam ın subclase;
Ca utilizatorul sa aiba acces;
Accesul direct atunci cand clasa este utilizata dar care prezinta interes atunci
cand cineva creeaza o subclasa a acesteia ca parte a unui pachet diferit, ın...
95/144

O subclasa a unei clase abstracte poate fi instantiata numai daca:

Se foloseste cuvantul cheie abstract;
Suprascrie fiecare metoda declarata abstracta ın superclasa sa, si furnizeaza
implementari pentru toate acestea;
Se foloseste mostenirea multipla;
O subclasa abstracta nu poate fi instantiata;
96/144

Prin modalitatea sa de tratare a except¸iilor, Java are urm˘atoarele avantaje fat¸˘a de mecanismul
tradit¸ional de tratare a erorilor:

Hint: 3 choices
Exista o metoda care se ocupa cu acest lucru;
Separarea codului pentru tratarea unei erori de codul ın care ea poate sa apara;
Propagarea unei erori pana la un analizor de exceptii corespunzator;
Gruparea erorilor dupa tipul lor;
97/144

Metodele care sunt apelate uzual pentru un obiect de tip exceptie sunt definite ın clasa Throwable si sunt:

Declarate cu modificatorul de acces private;
dinamice;
publice;
exceptii;
98/144

Cand browser-ul ıntalneste tag-ul < AP P LET >, rezerva o zona pentru afisare cu dimensiunile
specificate de paramterii WIDTH, HEIGHT si:

Se instaleaza un manager de securitate, adica un obiect de tip SecurityManager care va
monitoriza activitatea metodelor appletului, aruncand except¸ii de tip...
Incarca codul compilat al applet-ului cu numele specificat de parametrul CODE;
Creaza o instanta a clasei Applet dupa care apeleaza metodele init() si start();
Se deschid mai multe procese pe masina client;
99/144

Care dintre urmatoarele coduri nu reprezinta arhivarea fisierelor unui applet?

Hint: 2 choices
jar cvf arhiva.jar ClasaPrincipala.java imagine.jpg;
jar cvf arhiva.jar *.class *.jpg *.au;
jar cfv arhiva.jar *.class *.jpg *.au;
jar cvf arhiva.jar ClasaPrincipala.class AltaClasa.class imagine.jpg sunet.au
100/144

In care din exemplele de mai jos se foloseste corect variabila iLocation?

Hint: 2 choices
tabbedPanel.insertTab( "Inserted Page", new ImageIcon( "image.gif" ),
pagePanel,"My tooltip text",iLocation );
JFrame f= new JFrame();
f.getContentPane().add(new JButton("Buton", iLocation));
C. tabbedPanel.removeTabAt( iLocation );
JFrame f=new JFrame();
JButton b=new JButton("Buton");
f.add(b, iLocation);
101/144

Ce rezulta din urmatorul fragment de cod Java?

int x=1;
String []names={"Fred","Jim","Sheila"};
names[--x]+=".";
for(int i=0;i<names.length;i++)
System.out.println(names[i]);

Output-ul include Sheila.;
Output-ul include Fred.;
Output-ul include Jim.;
Nimic din cele de mai sus;
102/144

Applet-urile se diferentiaza de aplicatiile Java standard prin:

Restrictiile impuse de necesitatea asigurarii unui anumit nivel de securitate
si faptul ca nu au o metoda main();
Faptul ca trebuie sa suprascrie toate metodele: init(), start(), stop(), pause() si destroy();
Faptul ca detin un instrument cu ajutorul caruia se creaza relatii de mostenire;
Faptul ca detin un instrument care desemneaza meniurile din cadrul unei forme;
103/144

Declararea constructorilor trebuie sa tina cont de:

relatia de mostenire dintre clase;
numele constructorului, care trebuie sa fie identic cu numele clasei;
comportamentul obiectelor pe care le instantiaza;
o metoda prin care poate fi accesat de toate tipurile din Java sau de tipuri mostenite din
tipul care contine membrul in discutie;
104/144

Un fir de executie poate intra ın starea de ready astfel:

Prin apelul metodei sleep();
Automat de catre sistemul de operare;
Prin apelul metodei join();
Niciodata;
105/144

Care este expresia timpului de executie T(n) al urmatorului algoritm ın cazul cel mai favorabil,
ın cazul mediu si ın cazul cel mai defavorabil, unde n noteaza dimensiunea setului de intrare, iar
k, k1, . . . , k8 - orice constanta pozitiva:
procedure algoritm(v, n)
for i ← 2, n do
key ← v[i]
j ← i − 1
while (j > 0) and (v[j] > key) do
v[j + 1] ← v[j]
j ← j − 1
end while
v[j] ← key
end for
end procedure

k, k1n, k2n + k3
k1n + k2, k3n + k4, k5n + k6
k, k1n + k2, k2n^2 + k3n + k4
k1n + k2, k3n + k4, k5n^2 + k6n + k7
k, k1n^2 + k2n + k3, k4n^2 + k5n + k6
k1n + k2, k3n^2 + k4n + k5, k6n^2 + k7n + k8
106/144

Determinati ın care caz timpii de executie T1(n) si T2(n) au acelasi ordin de crestere, unde prin n
notam dimensiunea datelor de intrare iar k noteaza o constanta oarecare pozitiva:

limn→∞T1(n)/T2(n) = 0
limn→∞T1(n)/T2(n) =∞
limn→∞T1(n)/T2(n) =k
107/144

Pentru limn→∞f(n)/g(n) = ∞, care din urmatoarele afirmatii sunt adevarate?

Hint: 2 choices
f(n) ∈ ω(g(n))
f(n) ∈ Θ(g(n))
f(n) ∈ Ω(g(n))
108/144

Pentru f(n) ∈ Θ(n) si g(n) ∈ Ω(n) atunci:

f(n)g(n) ∈ Ω(n^2)
f(n)g(n) ∈ Θ(n^2)
f(n)g(n) ∈ O(n^2)
109/144

Pentru f(n) = 6n^3 + 14n^2 − 8n + 4 si g(n) = 2n^3 care din urmatoarele afirmatii sunt adevarate?

f(n)g(n) ∈ O(2n^3)
f(n)g(n) ∈ O(n^3)
f(n) ∈ O(6n^3) si g(n) ∈ O(2n^3)
110/144

Pentru f(n) ∈ Ω(n) si g(n) ∈ O(n^2) atunci:

f(n)/g(n)∈ Ω(n)
f(n)/g(n)∈ O(n)
f(n)/g(n)∈ Θ(n)
111/144

Pentru f(n) ∈ O(h(n)) si h(n) ∈ O(g(n)) atunci:

functia f(n) este echivalenta cu g(n)
f(n) ∈ O(g(n))
f(n) ∈ Θ(g(n))
112/144

Pentru n - numar natural nenul si f(n) = 1 + 2 + . . . + n atunci:

Hint: 2 choices
f(n) ∈ O(n)
f(n) ∈ O(n^2)
f(n) ∈ Θ(n^2)
113/144

Care este ordinul de complexitate al algoritmului de cautare binara?

procedure binsearch(start, f inish)
if start=finish then
return start
end if
mij ← (start + f inish + 1)/2
if x ≤ v[mij] then
binsearch(start, mij)
else
binsearch(mij+1, finish)
end if
end procedure

Hint: 2 choices
Ω(log n)
O(log n)
O(n)
114/144

Care este ordinul de complexitate al algoritmului de ridicare la putere al unui numar x^n?

Hint: 2 choices
Θ(n)
Θ(logn)
Θ(x^n)
115/144

Care este ordinul de complexitate al functiei f(n) cu relatia de recurentat (n) = 2t(√n) + log n?

f(n) ∈ O(log n log(log n))
f(n) ∈ O(log n)
f(n) ∈ O(n^1/2 )
116/144

Care este ordinul de crestere al unui algoritm avand timpul de executie de forma urmatoare:
t(n) = { t(n − 1) + n, n > 0
0, n = 0

Hint: 2 choices
f(n) ∈ O(n^2)
f(n) ∈ Θ(n^2)
f(n) ∈ O(n)
117/144

Care este ordinul de crestere al unui algoritm avand timpul de executie de forma urmatoare:
t(n) = { t(n/2), n > 1
1, n = 1

f(n) ∈ O(log2,n)
f(n) ∈ O(log n)
f(n) ∈ O(lg n)
118/144

Care este ordinul de crestere al algoritmului pentru problema Turnurilor din Hanoi avand timpul
de executie de forma t(n) = { 2t(n − 1) + 1, n > 1
1, n = 1

f(n) ∈ O(n)
f(n) ∈ O(2n)
f(n) ∈ O(log n)
119/144

Care este ordinul de crestere al unui algoritm avand timpul de executie de forma urmatoare:
t(n) = { 2t(n/2) + 1, n > 2
1, n = 2

Hint: 2 choices
f(n) ∈ O(n)
f(n) ∈ O(2^log n)
f(n) ∈ O(log n)
120/144

Care este ordinul de complexitate al algoritmului mergesort avand relatia de recurenta t(n) =2t(n/2) + Θ(n)?

Hint: 2 choices
f(n) ∈ Θ(n log n)
f(n) ∈ Θ(n)
f(n) ∈ Θ(n + n log n)
121/144

Sa se indice ordinul de crestere al functiei f(n) cu urmatoarea relatie de recurenta:
t(n) = { t(n − 1) + 1, n > 0
0, n = 0

f(n) ∈ O(n^2)
f(n) ∈ Θ(n)
f(n) ∈ O(log n)
122/144

Sa se indice ordinul de crestere al functiei f(n) cu urmatoarea relatie de recurenta:
t(n) = { 2t(n/2) + n, n > 1
1, n = 1

Hint: 2 choices
f(n) ∈ Θ(n)
f(n) ∈ Θ(n + n log n)
f(n) ∈ Θ(n log n)
123/144

Care din urmatoarele interpretari fac adevarata formula F ilustrata ın graficul din Figura 5?

Care din urmatoarele interpretari fac adevarata formula F ilustrata ın graficul din Figura 5?
x1 = true, x2 = true, x3 = true
x1 = false, x2 = true, x3 = false
x1 = true, x2 = f alse, x3 = true
124/144

Sa se indice ordinul de crestere al functiei f(n) cu urmatoarea relatie de recurenta:
t(n) = { n(t(n − 1) + 2), n > 1
0, n = 1

f(n) ∈ O(n!)
f(n) ∈ O(n^2)
f(n) ∈ O(n)
125/144

O procedura ce parcurge arborele binar ın postordine va afisa:
A
B C
D E F

A B C D E F
A B D E C F
D B E A F C
D E B F C A
D E F B C A
126/144

O procedura ce parcurge arborele binar ın preordine va afisa:

J
D P
B H L R
F N

J D P B H L R F N
J D B H F P L N R
N F R L H B P D J
B D H F N L P R J
B D F H L J N P R
127/144

O procedura ce parcurge arborele binar ın inordine va afisa:

J
D P
B H L R
F N

B H F D L N P R J
B D H F N L P R J
N F R L H B P D J
J D P B H L R F N
B D F H J L N P R
128/144

O procedura ce parcurge arborele binar ın A-preordine va afisa:


A
B C D
E F G H I L

A B C E F D G H I J
A B C D E F G H I J
B E F C G H I J D A
B A E C F G D H I J
B E F G H I J C D A
129/144

Care este numarul maxim de componente conexe pe care le poate avea un graf neorientat cu 20 de noduri si 12 muchii?

6
12
10
15
18
130/144

Cate grafuri neorientate, distincte, cu 4 varfuri se pot construi? Doua grafuri se considera distincte
daca matricele lor de adiacenta sunt diferite.

4^6
2^6
6^6
4
2^10
131/144

Intr-un graf neorientat cu 10 muchii, fiecare nod are gradul un numar nenul. Doar trei dintre noduri
au gradul un numar par, restul nodurilor avand gradele numere impare. Care este numarul maxim
de noduri pe care poate sa le aiba graful?

14
10
17
16
19
132/144

Determinati numarul de frunze ale arborelui cu radacina descris prin urmatorul vector tata:
(6, 5, 5, 2, 0, 3, 3, 3, 8, 7, 7)?

1
2
4
5
7
133/144

Care dintre urmatoarele valori pot reprezenta gradele nodurilor unui graf neorientat cu 6 noduri?

(3, 2, 2, 2, 3, 3)
(4, 2, 2, 2, 3, 2)
(5, 2, 2, 2, 0, 3)
(5, 2, 2, 2, 1, 2)
(5, 2, 3, 2, 1, 2)
134/144

Se considera graful neorientat cu multimea varfurilor {1, 2, 3, 4, 5, 6} si multimea muchiilor
{[1, 2], [2, 3], [3, 4], [3, 5], [4, 5], [1, 3], [2, 6], [2, 4], [4, 6]}.

Care este numarul minim de muchii ce trebuie eliminate (care sunt aceste muchii) astfel ıncat graful partial obtinut sa nu mai fie conex?

1
3
2
5
nici una
135/144

Se considera graful neorientat G cu 8 noduri, care are urmatoarele proprietati:
I. suma gradelor tuturor nodurilor este 12;
II. graful are exact 3 noduri cu gradul 1.
Care este numarul maxim de noduri de grad 0 ale grafului G?

1
4
2
3
0
136/144

Se considera graful neorientat cu 80 de noduri si 3160 de muchii. Care este numarul de muchii ce
pot fi eliminate astfel ıncat graful partial obtinut sa devina arbore?

80
3160
3081
6320
2450
137/144

Se considera graful orientat G reprezentat prin listele de adiacenta alaturate. Care este lungimea
maxima a unui drum elementar din acest graf? Sa se specifice arcele ce compun un drum cu aceste
proprietati.
1 2 6 5
2 3
3 1
4 6
5 6
6 2

1
7
3
4
5
138/144

Pentru care dintre urmatorii arbori cu radacina, fiecare avand 9 noduri, numerotate de la 1 la 9,
memorati cu ajutorul vectorilor tata, nodul 3 are cei mai multi descendenti?

(2, 0, 2, 3, 2, 3, 4, 4, 3)
(3, 3, 4, 0, 2, 3, 4, 4, 4)
(4, 2, 4, 0, 3, 3, 3, 3, 3)
(0, 1, 1, 3, 4, 3, 4, 4, 3)
(0, 1, 2, 3, 4, 5, 6, 7, 8)
139/144

Care dintre urmatoarele proprietati este adevarata pentru un graf orientat cu n varfuri si n arce
(n > 3) si care prezinta un circuit de lungime n:

exista un varf cu gradul intern n − 1.
pentru orice varf, gradul intern si gradul extern sunt egale.
graful nu are drumuri de lungime strict mai mare decat 2.
gradul intern al oricarui varf este egal cu 2.
daca notam graful cu G = (V, E), |V | = n, atunci |E| = n − 1.
140/144

Deteminati ordinul si dimensiunea grafului din figura 3?
Figure 3: Un exemplu de graf neorientat

1 2 3
4
5 6
7

5, 6
8, 5
7, 6
7, 7
6, 7
141/144

Daca pentru un arbore binar avem un numar de N muchii, sa se determine numarul de muchii
critice ale arborelui?

N-1
N+1
N/2
(N+1)/2
N
142/144

Daca avem un arbore binar plin cu 9 nivele, sa se determine numarul de varfuri ce se afla pe nivelul
cu numarul 5?

15
31
2^5
2^4
14
143/144

Avand un arbore binar reprezentat prin urmatoarea expresie cu paranteze:
1(2(3(0, 4(0, 0)), 5(6(0, 0), 7(0, 0))),8(0, 9(0, 0))).
Sa se determine numarul de frunze ale grafului.

4
3
5
9
6
144/144

Avand graful ponderat din figura 4, sa se determine un arbore de acoperire de cost minim. Vom
considera nodul A ca nod de plecare. Care este ordinea de parcurgere a nodurilor?

A, C, B, D, E;
A, B, D, E, C;
A, D, E, C, B;
A, B, D, C, E;
A, B, E, B, D;