P

Download as pdf or txt
Download as pdf or txt
You are on page 1of 552

1. Fie urmatorul program: // Public redeclarat private // #include <iostream.

h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este incorecta: a. b.v(); b. p=&a; c. p->m(); d. p->v();

2. Fie urmatorul program: // Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b;

b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este corecta: a. b.m(); b. b.v(); c. p->f(); d. p->m(); 3. Fie urmatorul program: // Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este corecta: a. b.m(); b. b.v(); c. p->f(); d. p->v(); 4. Fie urmatorul program: // Public redeclarat private // Metoda PRIVATE DEVINE ACCESIBILA PRIN MECANISMUL DE LEGARE DINAMICA

#include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este incorecta: a. b.m(); b. p=&a; c. p->m(); d. p->v(); 5. #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc& operator--(){raza--;return *this;}// return by reference private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ;

} Programul afiseaza: a. 3300 b. 3201 c. 3200 d. 3211 6. Fie urmatorul program, in care se utilizeaza clase abstracte:// abselem.h#ifndef ABSTRACTELEM_H#define ABSTRACTELEM_Hclass AbstractElem{public: virtual void display()=0; virtual void process()=0;};#endif//LIST.h#ifndef LIST_H#define LIST_H#include "abselem.h"class LIST{public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove();private: int nrmax; int nrelem; int first; int free; AbstractElem* *support;};#endif//LIST.cpp#include "LIST.h"LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1];}void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++;}AbstractElem* LIST::get(){ return support[first];}void LIST::remove(){ first= ++first % nrmax; --nrelem;}Care afirmatie este adevarata: a 3200 b 3 30 1 c 3311 d 3212 7. Fie programul: #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; }

Programul afiseaza : a. 3201 b. 3200 c. 3301 d. 3211 8. Fie programul://destructor explicit#include <string.h>#include <iostream.h>class Person{public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;}private: char *name;};void f(){Person *p = new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java}void main(){ while(1)f();} a obiectelor Punct in obiecte Complex b obiectelor Complex in obiecte Punct c obiectelor Complex in numere reale d Numere reale in obiecte Complex 9. Fie programul: // singleton // constructor private #include <iostream.h> #include <conio.h> class S{ public: static S* create() { if(i==0){ refS=new S(); i++; } return refS; } void setName(char *s){name=s;} char* getName(){return name;} static int getNr(){return nr;} private: static S* refS; static int i; static int nr; S(){nr++;} char *name;

}; int S::i=0; int S::nr=0; S* S::refS=0; void main(){ S *o1, *o2; o1=S::create(); o2=S::create(); o1->setName("Matematica"); o2->setName("Informatica"); cout<<o1->getName()<<endl; cout<<o2->getName()<<endl; cout<<S::getNr()<<endl; getch(); } Programul afiseaza: a. Matematica Informatica 1 b. Informatica Informatica 1 c. Informatica Informatica 2 d. Matematica Informatica 2 10. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove();

private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){

support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } a. Clasa C defineste o structura de tip coada (FIFO) b. Clasa C defineste o structura de tip stiva (LIFO) c. Clasa C este un vector d. Clasa C este abstracta

11. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove();

private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; };

#endif //elements.h #include "abselem.h" #include "iostream.h" class Person: public AbstractElem{ public: Person(char *name); virtual void display(); virtual void process(); private: char *name; }; class Car: public AbstractElem{ public: Car(char *name); virtual void display(); virtual void process(); private: char *name; }; //driver.cpp #include "elements.h" #include "LIST.h" LIST x(3); void main(){ x.put(new Person("Tudor")); x.put(new Person("Andrei")); x.put(new Car("B-39-TDR")); x.get()->process(); x.remove(); x.get()->process(); x.remove(); x.get()->process(); x.remove(); } //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; }

AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } //elements.cpp #include "elements.h" Person::Person(char *name):name(name){}; void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); }

Programul afiseaza datele in ordinea: a. Tudor Andrei B-39-TDR b. B-39-TDR Andrei Tudor c. Andrei B-39-TDR Tudor d. B-39-TDR Tudor Andrei 12. Fie urmtoarea clas Java: class C{ public static void main(String args[]){ System.out.println(args[0]); System.out.println(args[1]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: a. C Curs b. Curs Java An

c. d.

3 Curs Java An Curs Java Fie urmtorul program Java:

13.

import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit"); exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){}

public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); } public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; }

} class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } }

Care afirmaie este adevrat, dac se face de click pe butonul stang mouse asupra butonului modifica din fereastra fo1 sau fo2: a. Doar in cmpul de text field al ferestrei fo1 este afiat valoarea actualizata a atributului Observator.m.i b. Doar in cmpul de text field al ferestrelor fo1 si fo2 este afiat valoarea actualizata a atributului Observator.m.i c. n cmpul de text field al tuturor ferestrelor este afiat valoarea actualizata a atributului Observator.m.i d. Doar in cmpul de text field al ferestrei fo2 este afiat valoarea actualizata a atributului Observator.m.i 14. Fie urmtoarele clase Java:

class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;}

private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); }

Care afirmaie este adevrat: a. Programul afieaz: Varful stivei: 10 b. Programul afieaz: Varful stivei: aa c. Programul afieaz: stiva Tudor d. Programul afieaz: 2 15. Fie urmtoarele clase Java:public interface Actualizare{ public void actualizareNume(String nume); public void actualizareVarsta(int varsta);}interface Afisare{ public void afisare(); public void actualizareVarsta(int varsta);}public class Persoana{ public Persoana(String nume, int varsta){ this.nume=nume; this.varsta=varsta; } public Persoana(){} protected String nume="XXXX"; protected int varsta=0;} class PersoanaSpecializata extends Persoanaimplements Actualizare, Afisare{ public void actualizareNume(String nume){this.nume=nume;} public void actualizareVarsta(int varsta){this.varsta=varsta;} public void afisare(){ System.out.println("nume= "+nume); System.out.println("varsta= " + varsta); }} public class Client{ public static void main(String args[]){ PersoanaSpecializata p=new PersoanaSpecializata(); Actualizare act=p; Afisare afis=p; act.actualizareNume("Ionescu"); act.actualizareVarsta(58); afis.afisare(); } } Care afirmaie este adevrat: Programul afieaz: Varful stivei: aa a Programul afieaz: Varful stivei: 10 b Programul afieaz: stiva Tudor c Programul afieaz: 2 d nume ionescu varsta 58 (VARIANTE greite) 16. Fie urmtoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{

public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;}

private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s1.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); }

} }

Care afirmaie este adevrat: a. Programul afieaz: Underflow la stiva Andrei b. Programul afieaz: Overflow la stiva Tudor c. Programul afieaz: Underflow la stiva Tudor d. Programul afieaz: Overflow la stiva Andrei

17. Fie programul: // destructor static, #include <iostream.h> class B{ public: ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza : a. ~ B() ~B() ~D() b. ~ B() ~D() c. ~ B()~D()~B() ~D() d. ~ B() ~D() ~B() 18. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&);

private: int dim; int *pi; }; C::C(int n, int v[]) dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); x=y; y.set(0,-1000); cout<<x<<endl; } Programul afiseaza: a. -100 20 b. -1000 20 c. 100 2 3 d. 1 20 30 {

19. Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} };

int main(){ B *pb; D d; // pointing to a subclass pb=&d; ((D*)pb)->v(); ((D*)pb)->st(); return 0; } Programul afiseaza: a. virtual method v() of D static method st() of D b. virtual method v() of B static method st() of D c. virtual method v() of D static method st() of B d. virtual method v() of B static method st() of B 20. Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B b, *pb; D d, *pd; pb=&d; pb->st(); pb->v(); return 0; } Programul afiseaza: a. static method s() of D virtual method v() of D b. static method s() of B virtual method v() of B c. static method s() of D

virtual method v() of B d. static method s() of B virtual method v() of D

21. Fie programul#include <string.h>#include <iostream.h>class Person{public: Person(char *p){nr=0; name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){delete[] name;}private: char *name; long nr;};void f(){Person *p = new Person("Balanescu"); delete p;}void main(){ for (int i=0; i<5; i++)f();}Programul afiseaza: a virtual method v() of Dstatic method st() of D bvirtual method v() of B static method st() of D c virtual method v() of Dstatic method st() of B dvirtual method v() of Bstatic method st() of B 22. Fie programul : // constructor de copiere in clasa de baza; dar absent in clasa derivata // compilatorul creeaza un constructor de copiere implicit // care apeleaza constr de copiere al clasei de baza pentru copierea atributelor din clasa de baza // si copiaza membru cu membru atributele din D #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} }; void main(){ B b; // apel B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()! D d; // apel B();D() D d1(d); B bd(d); // conversie implicita la clasa de baza; getch(); } Programul afiseaza : a. B() B() B(B&b) B() D() B(B &b) B(B &b) b. B() B() B(B&b) B() D() B(B &b) D() B(B &b)

c. d.

B() B(B&b) B() B(B&b)

B() D() B(B &b) B(B &b) D() B(B &b) D() B(B &b)

23. Fie urmtorul bloc de instruciuni Java: { int x = 12; q=1; { int q = 96; // Both x & q available x=q; } q = x; x = 1; } Care afirmaie este adevrat: a. instruciunea q=x; este corect; b. instruciunea x=1; este incorect; c. instruciunea x=q; este corect; d. instruciunea q=1; este corect; 24. Fie urmtoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; }

public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; }

public String nume(){return nume;} private Object v[];

private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } }

Care afirmaie este adevrat: a. Programul nu afiseaza nimic b. Programul afieaz: X=Y X=Y c. Programul afieaz: X=Y d. Programul afieaz: 3

25. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Constructorul Persoana(char *) poate fi utilizat pentru: Conversia obiectelor Persoana in siruri de caractere Conversia sirurilor de caractere in obiecte Persoana Construirea de siruri de caractere Conversia obiectelor Complex in obiecte Persoana

Fie programul: //destructor explicit #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;} private: char *name; }; void f(){Person *p = new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java } void main(){ while(1)f(); } a. La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu nu este eliberat si memoria va fi epuizata b. La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu este eliberat c. Programul se termina datorita epuizarii memoriei d. Programul se termina dupa primul apel al functiei f() (la aia cu while) b (aia cu balanescu) 26. Fie urmatorul program: #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; Care afirmatie este corecta: a. Definitia virtual void v()supraincarca definitia virtual void v(int i) b. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v. c. void v() este metoda ce va fi legata static. d. in expresia p->v(); metoda v este legata static

27. Fie urmatorul program:// Constructor cu semantica prin referinta// Operatorul = este cel implicit#include <iostream.h>class C{public: C(int n=0, int v[]);friend ostream& operator<<(ostream &o, const C&);private: int dim; int *pi;};C::C(int n, int v[]) { dim=n; pi= v; }ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o;}void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]=100; cout<<(x=y)<<endl; }Programul afiseaza: a instruciunea int x = 100; este incorect; b instruciunea int x = 10; este incorect; c instruciunea x=1; este incorect; dinstruciunea x=2; este incorect; AFIZEAZA 10, 20, NU ESTE NICI UN X

28. Fie programul : #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} void operator++(){raza++;} private: float raza; }; class Cilindru: public Cerc{ public: Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){}; void operator++(){inaltime++;} float getInaltime(){return inaltime;} private: float inaltime; }; void main(){ Cerc *pc; Cilindru c(1,5); pc=&c; ++ *pc; cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl; getch(); }

Programul afiseaza : a. 1 6 b. 2 5 c. 2 6 d. 1 5 29. Fie programul: #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); delete p; } void main(){ while(1)f(); } Care afirmatie este adevarata: a. Programul afiseaza un sir finit de numere 1 2 3 4...etc. pana memoria este epuizata b. Programul afiseaza secventa infinita 1 2 3 4...etc. deoarece memoria nu este epuizata c. Programul nu afiseaza nimic d. Programul afiseaza 1 apoi se opreste 30. Fie programul //static atribut #include <conio.h> #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){nr--; delete[] name;} private: char *name;

static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); } void main(){ for (int i=0; i<5; i++)f(); getch(); } Programul afiseaza: a. 1 2 3 4 5 b. 1 1 1 1 1 c. 0 0 0 0 0 d. 0 1 2 3 4 31. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Constructorul Persoana(char *) poate fi utilizat pentru: a. Conversia obiectelor Persoana in siruri de caractere b. Conversia sirurilor de caractere in obiecte Persoana c. Construirea de siruri de caractere d. Conversia obiectelor Complex in obiecte Persoana 32. Fie urmtorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void actiune(){x++;System.out.println(x);}; } public class View extends Frame{ private Button b; private Model m; private Controller c; public static void main(String args[]){ Frame f= new View(); } public View(){

setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add(b); m=new Model(); c=new Controller(m); b.addActionListener(c); setSize(100,50); setVisible(true); } } class Controller implements ActionListener{ private Model md; public Controller(Model p){ md=p; } public void actionPerformed(ActionEvent e){ md.actiune(); } }

Care afirmaie este adevrat, dac se face de dou ori click pe butonul stang mouse asupra butonului Actiune: a. Programul afieaz: 0 1 b. Programul afieaz: 1 2 c. Programul nu afieaz nimic d. Valoarea atributului f.m.x rmne mereu la valoarea 0 33. Fie urmtoarea clas Java: public class Person{ public Person(String p){name=new String(p); System.out.println(++nr); } public static void main(String[] args){ while(true)f();

} private static void f(){Person p = new Person("Ionescu"); // obiectele NU se acumuleaza // in heap si NU blocheaza executarea, spre deosebire de C++ } private String name; private static long nr=0; }; Care afirmaie este adevrat: a. Programul nu se oprete din executare; b. Programul se termin, cu mesaj de eroare, deoarece la un moment dat nu mai exist memorie suficient pentru crearea obiectelor Person; c. Programul are erori de sintax; d. Programul se termin, fr mesaj de eroare. 34. de pe forum
Fie programul : // destructor virtual, #include <iostream.h> class B{ public: virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza:

a. b. c. d.

~ B()~D()~B() ~D() ~ B() ~B() ~D() ~ B() ~D() ~ D()~B()~D() ~B()

Programare si proiectare orientata obiect


MULTIPLE CHOICE 1. Un program scris n Java poate rula pe orice platforma deoarece: a. Limbajul Java e derivat din C++ b. Compilatorul este identic cu cel de C++ c. Masina virtuala interpreteaza programul si translateaza apelurile sistem d. Api-ul este portabil

2. Un program scris n Java se va compila cu comanda: a. javac Test c. javac Test.java b. java Test.java d. javac Test.class

3. Un program scris n Java se va lansa cu comanda: a. javac Test.java c. java Test.java b. java Test d. java Test.class

4. Ce este un Applet? a. Un tip de calculator b. Un program care ruleaza direct pe orice calculator c. Un sit web interactiv d. Un program care ruleaza n contextul unui browser

5. Un applet va rula n orice browser deoarece a. Serverul are o masina virtuala incorporata b. Browserul are o masina virtuala incorporata c. Browserul interpreteaza direct codul sursa d. Appleturile nu au nevoie de o masina virtuala

6. Care este scopul metodei statice main ? a. Sa creeze o interfata cu utilizatorul b. Actioneaza ca un punct de intrare n program c. Creaza ferestrele si butoanele aplicatiei d. Actioneaza ca o poarta spe sistemul de operare

7. O clasa Applet furnizeaza: a. Un browser care s ruleze apletul b. Metode care definesc aspectul si comportamentul apletului c. A pagina HTML speciala d. Permisiunile de a comunica cu serverul

8. Ce metoda apeleaza browserul pe un applet nou incarcat? a. Main c. Paint b. Start d. Init

9. Care este rolul declaratiilor import? a. Permite referirea claselor fara utilizarea de prefixe b. Elimina necesitatea declararii variabilelor c. Permite importul imaginilor folosite d. Elimina apelurile directe a functiilor fara clase

10. In cazul implementarii unei interfete trebuie s definim in mod obligatoriu : a. Doua metode ale interfetei c. Orice metoda a interfetei b. Numai anumite metode ale interfetei d. Toate metodele interfetei

11. Aplicatiile Java ruleaza pe urmatorul sistem de operare: a. Windows c. UNIX b. Linux d. Toate cele trei

12. Urmatorul cod sursa Java se afl ntr-un fiier. Cum se numeste fiierul?
class Foo { public static void println() { } System.out.println("Foo"); }

public class FooDemo { public static void main(String[] argv) { System.out.println("FooDemo"); Foo.println(); } }

a. b.

Foo.java Foo.class

c. d.

FooDemo.java FooDemo.class

13. Daca bo este boolean, numr este int, sir este string atunci care din urmtoarele linii este incorecta? a. If(bo) c. If(numar<=1) b. If(numar<0) d. If(sir==Java)

14. Care sunt valorile variabilelor a i b dupa executarea instructiunilor: int a = 1, b = -2; a = a + b; b = a b; a = a b; a. a=1, b=2 c. a=2, b=-3 b. a=0, b=1 d. a=-2, b=1

15. Care sunt valorile variabilelor a i b dupa executarea instructiunilor: int a = -1, b = 2; a += b; b = a- b; a -= b; a. a=-1, b=2 c. a=-2, b= 1 b. a=2, b=-1 d. a=-2, b=-1

16. Care sunt valorile variabilelor a i b dupa executarea instructiunilor: int a = 1, b = -2; a = a ^ b; b = a ^ b; a = a ^ b; a. a=-2, b=1 b. a=2, b=-2

c. d.

a=-1, b=1 a=1, b=-2

17. Care sunt valorile variabilelor a i b dupa executarea instructiunilor: int a = -1, b = 2; a ^= b; b = a ^ b; a ^= b; a. a= -1, b=2 b. a= 1, b=-2

c. d.

a=2, b=-1 a=-2, b=1

18. Care sunt valorile variabilelor a i b dupa executarea instructiunilor: int a = -1, b = 2; a = (a > b ? a : b); b = (a < b ? a : b); a. a= 2, b=-1 b. a= -1, b= 2

c. d.

a=1, b=2 a= 2, b= 2

19. Care sunt valorile variabilelor a i b dupa executarea instructiunilor: int if if a. b. a = 1, b = 2; (a < b ) a = b; (a < b) b = a; a= 1, b=1 a= 1, b= 2

c. d.

a=2, b=2 a= 2, b= 1

20. Clasa BorderLayout contine campuri statice pentru: a. Adaugarea unor componente in anumite zone ale containerul b. Introducerea unor metode noi c. Specificarea culorii si a fontului d. Afisarea ferestrei unui applet

21. Constructorul are foloseste la: a. Eliberarea memoriei b. Importa pachete

c. d.

Initializeaza masina virtuala Initializeaza noile obiecte create

22. System.out.println este a. O variabila b. O clasa

c. d.

Un obiect O metoda

23. Ce valori poate lua o variabila de tip boolean? a. 1 c. b. 0 d.

true false

24. Ce valori nu poate lua o variabila de tip boolean? a. 1 c. b. a==b (a i b sunt variabile de tip int) d.

true false

25. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a i b sunt variabile de tip c. boolean) b. true d.

false 0

26. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a i b sunt variabile de tip int) b. true c. false d. false==x (x este o variabila de tip boolean)

27. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a i b sunt variabile de tip boolean) b. a==b (a i b sunt variabile de tip int) c. true d. false==x (x este o variabila de tip boolean)

28. Care din urmtoarele tipuri de date poate retine valori de la -32.768 la 32.767 ? a. char c. byte b. short d. int

29. Ce valoare va avea variabila x dupa executarea operaiilor?


int x = 0; x = (5*4) % 7; x = x / 5;

a. b.

6 1.2

c. d.

1 0

30. Ce valoare va avea variabila numar la finalul buclei?


int numar = 1; for (int x = 0; x < 4; x++) { numar = numar << 1; }

a. b.

1 4

c. d.

16 32

31. Ce valoare va avea variabila numar la finalul buclei?


int numar = -1; for (int x = 0; x < 4; x++) { numar = numar << 1; }

a. b.

0 -4

c. d.

16 -16

32. Un vector se instaniaz astfel? a. int vector[100]; b. String [100]sir;

c. d.

float [] numere={1.1, 1.2}; byte [] buffer;

33. Un vector se instaniaz astfel? a. int vector[100]; b. String [100]sir;

c. d.

float [] numere; byte [] buffer = new byte[100];

34. Ce efect are urmtoarea secvenade cod?


char a[] = {a, b, c}; char [] b = new char[3]; a=b;

a. b. c. d.

b se va copia n a a se va copia n b a i b se refer la aceiai zona de memorie se va genera o excepie

35. Ce efect are urmtoarea secven de cod?


char a[] = {a, b, c}; String b = new String(data); if(a==b) System.out.println(egale); else System.out.println(inegale);

a. b.

Se afiseaz egale Se afieaz inegale

c. d.

Eroare la compilare Se va genera excepie la rulare

36. Ce efect va avea intruciunea urmtoare?


System.out.println("The answer is: "+17+3);

a. b.

Programul nu se compileaza Se va afisa: The answer is 20

c. d.

Se va afisa: The answer is 173 Se va genera o excepie

37. Care este efectul liniilor de cod urmatoare?


if("String".toString() == "String") System.out.println("Equal"); else System.out.println("Not Equal");

a. b.

Programul nu se compileaza Afiseaza Equal

c. d.

Afiseaza Not Equal Genereaza o excepie

38. O clasa care implementeaza interfata urmatoare


public interface AQuestion { public abstract void someMethod() throws Exception; }

a. b. c. d.

Va fi in mod necesar o clasa abstracta Ar trebui sa defineasca metoda public abstract void someMethod(); Ar trebui s defineasca o metoda public void someMethod() care va emite exceptii Ar trebui s defineasca o metoda public void someMethod() care nu va emite exceptii

39. O clas care implementeaz interfaa urmtoare va implementa n mod obligatoriu


public interface AQuestion { void someMethod(); }

a. b. c. d.

o metoda public void someMethod(); o metoda void someMethod(); o metoda public void someMethod(); care obligatoriu va emite exceptii o metoda public abstract void someMethod();

40. Care din liniile din codul de mai jos prezint o problem de ncapsulare ?
1. class BadCode { 2. int num; 3. public int getNum() { 4. return num; 5. } 6. public void setNum(int num) { 7. this.num = num; 8. } 9. ... 10. }

a. b.

Linia 1 Linia 2

c. d.

Linia 4 Linia 7

41. Care din liniile urmtoare va genera o excepie ?


1. class BadCode { 2. private Foo foo; 3. public BadCode (Foo f) { 4. foo = f; 5. } 6. public BadCode() {} 7. protected void useFoo() { 8. int num = foo.num; 9. String name = foo.name; 10. .... 11. } 12. .... 13. }

a. b.

Linia 2 Linia 4

c. d.

Linia 6 Linia 8

42. Dorim s implementam o clas total protejat i care s nu mai fie extensibil, care din liniile urmatoare ar trebui modificata?
1. class Test { 2. private int key = 1234; 3. //... 4. protected void setKey(int privateKey) { 5. this.key = privateKey; 6. } 7. protected int getKey() { 8. return this.key; 9. } 10. //... 11. }

a. b.

Linia 1 Linia 2

c. d.

Linia 4 Linia 8

43. Functia Clone() are ca scop:


class Test { private int key = 1234; //... public Test () {} public Test (int k) { this.key = k; } protected int getKey(){return this.key; } public final Object clone() throws java.lang.CloneNotSupportedException { throw new java.lang.CloneNotSupportedException(); } //... }

a. b. c. d.

definirea unei clase clonabile definirea unei clase extensibile definirea unei clase care nu poate fi extinsa clasa si orice derivare a acesteia va fi neclonabila

44. Pentru a bloca serializarea unei clase trebuie sa: a. Definim clasa ca fiind finala c. b. Definim clasa ca fiind statica d.

Definim o metoda readObject Definim o metoda writeObject

45. Codul sursa urmator ne spune ca:


public boolean match(Object o) { return this.getName() == ((SomeClass)o).getName(); }

a. b.

obiectele sunt identice obiectele sunt egale

c. d.

obiectele fac parte din aceiasi clasa nici una

46. Pentru a defini un camp care sa stocheze informatii sensibile (conturi, nr. de card) se va folosi: a. String c. Char array b. StringBuffer d. Char

47. Ce efect va produce urmatorul program Java?


public class Test { public void method(Object o) { System.out.println("Object Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } }

a. b. c. d.

Programul nu se compileaza Se compileaza dar produce o exceptie la rulare Afiseaza Object Version Afiseaza String Version

48. Ce efect va produce urmatorul program Java?


public class Test { public void method(StringBuffer sb) { System.out.println("StringBuffer Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } }

a. b. c. d.

Programul nu se compileaza Se compileaza dar produce o exceptie la rulare Afiseaza StringBuffer Version Afiseaza String Version

49. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(Throwable t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } } a. Nu se complieaza: nici un obiect Throwable nu a fost emis in blocul try b. Nu se compileaza: nu pot fi prinse obiecte Throwable, ci numai obiecte Exception c. Afiseaza Before Try si At the End d. Afiseaza Before Try , Inside Catch si At the End

10

50. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(IOException t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } } a. Nu se complieaza: nici un obiect IOException nu a fost emis in blocul try b. Nu se compileaza: nu pot fi prinse obiecte IOException, ci numai Exception c. Afiseaza Before try si At the End d. Afiseaza Before try , Inside Catch si At the End

51. Care din urmatoarele afirmatii este adevarata? a. O metoda statica nu poate returna un obicet Exception b. O metoda statica nu poate emite un obiect Exception c. O metoda statica nu poate returna o variabila statica a clasei d. O metoda statica nu poate returna o variabila nestatica a clasei

11

52. Cum se va comporta urmatorul program?


public class A { private void method1() throws Exception { throw new RuntimeException(); } public void method2() { try { method1(); } catch(RuntimeException e) { System.out.println("Caught Runtime Exception"); } catch(Exception e) { System.out.println("Caught Exception"); } } public static void main(String args[]) { A a = new A(); a.method2(); } }

a. b.

Programul nu se compileaza Afiseaza Caught Exception

c. d.

Afiseaza Caught Runtime Exception Afiseaza ambele mesaje

12

53. Cum se va comporta urmatorul program?


class Base { public void aMethod() throws ClassNotFoundException { } } public class Derived extends Base { public void aMethod() throws RuntimeException { } }

a. b. c. d.

Programul nu se compileaza deoarece RuntimeException nu este derivata din


RuntimeException

Se lanseaza o exceptie ClassNotFoundException la compilare Se lanseaza o exceptie RuntimeException la rulare Se compileaza corect

13

54. Cititi cu atentie urmatorul co sursa:


import java.awt.*; public class TestFrame extends Frame { Button bNorth = new Button("North"); Button bSouth = new Button("South"); Button bEast = new Button("East"); Button bWest = new Button("West"); Button bCenter = new Button("Center"); public TestFrame() { setLayout(new BorderLayout()); add(bSouth,BorderLayout.SOUTH); add(bWest,BorderLayout.WEST); add(bEast,BorderLayout.EAST); add(bNorth,BorderLayout.NORTH); add(bCenter); setLayout(new FlowLayout()); validate(); pack(); setVisible(true); } public static void main(String args[]) { TestFrame tf = new TestFrame(); } }

a. b. c. d.

Programul nu se compileaza Se compileaza si afiseaza butoanele pe o singura linie Se compileaza dar genereaza o exceptie Se compileaza si afiseaza butoanele sub forma de grid

55. O clasa care are totii constructorii privati : a. Trebuie declarata clasa finala b. Poate fi instantiata

c. d.

Poate fi mostenita Nu poate fi mostenita

14

56. Urmariti cu atentie codul urmator:


public class NiceThreads implements Runnable { public void run() { while(true) { } } public static void main(String args[]) { NiceThreads nt1 = new NiceThreads(); NiceThreads nt2 = new NiceThreads(); NiceThreads nt3 = new NiceThreads(); nt1.run(); nt2.run(); nt3.run(); } }

a. b. c. d.

Programul se compileaza si lanseaza trei fire care vor rula la infinit Programul se compileaza si se lanseaza un singur fir Programul nu se compileaza Se compileaza dar genereaza o exceptie la rulare

57. Pentru a preveni executarea unei metode simultan de ctre mai multe fire de execuie folosim: a. public c. native b. final d. syncronized

58. Pentru a excuta o procedura n mod atomic delarm metoda ca fiind: a. syncronized c. final b. public d. native

59. Managerul de aezare implicit pentru o fereastr este: a. LayoutManager c. BorderLayout b. null d. FlowLayout

60. Managerul de aezare implicit pentru un panel este: a. BorderLayout c. null b. GridLayout d. FlowLayout

61. Constructorul clasei de baz se apeleaz prin intermediul cuvntului cheie: a. this c. super b. base d. interface

15

62. n Java o clasa poate extinde a. cel mult o interfa b. cel mult o clas

c. d.

oricte clase oricte interfee

63. n Java o interfa poate extinde a. cel mult o interfa b. cel mult o clas

c. d.

oricte clase oricte interfee

64. n Java o clasa poate implementa cel mult a. o clas b. o interfa

c. d.

oricte clase oricte interfee

65. Pentru a bloca utilizarea directa a unei clase aceasta se va declara folosind specificatorul: a. abstract c. protected b. final d. private

66. Pentru a bloca derivarea unei clase aceasta se va declara folosind specificatorul: a. abstract c. protected b. final d. private

67. Clasa Menu este derivata din: a. MenuComponent b. MenuItem

c. d.

PopupMenu MenuBar

68. Lansarea unei excepii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try

69. Prinderea unei excepii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try

70. Ce cuvnt nu face parte din limbaj: a. volatile b. transient

c. d.

dispose native

71. Ce cuvnt nu face parte din limbaj: a. const b. bool

c. d.

final finally

16

72. Ce cuvnt nu face parte din limbaj: a. const b. continue

c. d.

break delete

73. Ce cuvnt nu face parte din limbaj: a. short b. long

c. d.

awt do

74. Ce cuvnt nu face parte din limbaj: a. class b. struct

c. d.

interface enum

75. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. int c. goto b. true d. enum

76. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. class c. null b. const d. boolean

77. Ce cuvnt cheie al limbajului nu este folosit: a. strictfp b. const

c. d.

instanceof transient

78. Ce afieaz urmtorul program: public class Main { int x=0; int f() { return x+1; } public static void main(String[] args) { System.out.println("x este " + f()); } } a. x este 0 b. x este 1

c. d.

Eroare la compilare Exceptie la rulare

17

79. Ce afieaz urmtorul program: public class Main { int x=0; static int f() { return x+1; } public static void main(String[] args) { System.out.println("x este " + f()); } } a. Eroare la compilare b. Exceptie la rulare

c. d.

x este 0 x este 1

80. Ce afieaz urmtorul program: public class Main { static int x=0; static int f() { return x--; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+ f() ); } } a. Eroare la compilare c. x este 0 acum este 0 b. Exceptie la rulare d. x este 0 acum este -1

81. Ce afieaz urmtorul program: public class Main { static int x=0; static int f() { return ++x; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 1 c. x este 0 acum este 1 b. x este 1 acum este 2 d. x este 0 acum este -1

82. Ce afieaz urmtorul program: public class Main { static int x=0; static int f() { return (++x)*(x--); } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 0 c. x este 1 acum este 2 b. x este 1 acum este 1 d. x este 2 acum este 4

18

83. Ce afieaz urmtorul program: class Element{ public Element(){ System.out.print(" Element "); } } class Carte extends Element{ public Carte(){ System.out.print(" Carte "); } } class Revista extends Carte{ public Revista(){ System.out.print(" Revista "); } } public class Main { public static void main(String[] args) { Element revista = new Revista(); } a. Element c. Element Carte Revista b. Revista d. Revista Carte Element

84. Ce afieaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element>{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.Print(); } } a. Nu afiseaza nimic b. Nu se compileaza, eroare la compilare c. Se compileaza dar lanseaza exceptie la rulare d. Carte Revista

19

85. Ce afieaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.add(b); b.Print(); } } a. Nu afiseaza nimic b. Nu se compileaza, eroare la compilare c. Se compileaza dar lanseaza exceptie la rulare d. Carte Revista Carte Revista

20

86. Ce afieaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } System.out.println(); } } public class Main { public static void main(String[] args) { Biblioteca b1 = new Biblioteca(); Biblioteca b2 = new Biblioteca(); b2.add(b1); b1.add(b2); b1.Print(); } } a. Nu afiseaza nimic b. Se compileaza dar lanseaza exceptie la rulare c. Carte Revista Carte Revista d. Nu se compileaza, eroare la compilare

87. Cititi cu atentie urmatorul cod sursa:


class Memory{ } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } }

a. b. c. d.

Programul se compileaza dar se blocheaza Se compileaza, consuma toata memoria i se opreste Se compileaza si ruleaza la infinit deoarece nu se aloca nimic Se compileaza si ruleaza la infinit deoarece nu se poate consuma toata memoria

21

88. Cititi cu atentie urmatorul cod sursa:


class Memory{ int [ ] matrice; public Memory(){ matrice = new int[100]; } } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } }

a. b. c. d.

Ruleaza la infinit deoarece memoria se elibereaz automat Programul se compileaza dar se blocheaza Consuma toata memoria i se oprete Ruleaza dar emite o exceptie

89. Cititi cu atentie urmatorul cod sursa:


class Memory implements Serializable{ int [] matrice; public Memory(){ matrice = new int[100]; } }

a. b. c. d.

Clasa Memory extinde clasa Serializable Clasa Memory moteneste clasa Object Clasa Memory implementeaz interfaa Object Clasa Memory implementeaz clasa Serializable

90. n corpul unui constructor se poate apela un alt constructor? a. Doar constructorul clasei de baz prin intermediul cuvntului super b. Doar un constructor al clasei derivate prin intermediul cuvntului super c. Un constructor cu ali parametri d. Un constructor cu aceiai parametri

91. Obiectul curent se poate transmite ca parametru prin intermediul cuvntului: a. super c. class b. this d. object

92. n prezena firelor de execuie multiple incrementarea atomic a unei variabile partajate se obine prin intermediul specificatorului: a. X++ c. synchronized b. final d. static

22

93. n prezena firelor de execuie multiple decrementarea atomic a unei variabile partajate se obine prin intermediul specificatorului: a. const c. x-b. synchronized d. thread

94. Un fir de execuie se obine prin extinderea clasei: a. Runnable c. b. Thread d.

Object Frame

95. Un fir de execuie se obine prin implementarea interfeei: a. Runnable c. Object b. Thread d. Serializable

96. Un fir de execuie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init

97. Un fir de execuie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init

98. Urmatorul specificator are efect doar n prezenta firelor de execuie: a. run c. start b. synchronized d. static

99. O clas care implementeaz interfaa Runnable n mod obligatoriu trebuie: a. s fie public c. s fie declarat synchronized b. s implementeze metoda run d. s fie declarat ca fiind abstract

100. O interfa care extinde interfaa Runnable n mod obligatoriu trebuie: a. s fie public c. s implementeze metoda run b. s fie declarat synchronized d. nici una

101. Codul urmtor nu se compileaz, lipsete specificatorul: class NewThread implements Runnable{ } a. public c. abstract b. private d. run

23

102. Diagrama UML urmtoare reprezint

a. b.

O diagram de caz O diagram de clase

c. d.

O diagram de secven O diagram de obiecte

103. Care din diagramele UML urmtoare reprezint interaciunea actorilor asupra sistemui modelat: a. O diagram de clase c. O digram de caz b. O diagram de secven d. O diagram de obiecte

104. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de caz

c. d.

O diagram de secven O diagram de obiecte

24

105. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de secven

c. d.

O diagram de caz O diagram de obiecte

106. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de secven

c. d.

O diagram de caz O diagram de obiecte

107. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de secven

c. d.

O diagram de colaborare O diagram de obiecte

25

108. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de stri

c. d.

O diagram de comunicare O diagram de obiecte

109. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de stri

c. d.

O diagram de comunicare O diagram de obiecte

110. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de stare

c. d.

O diagram de activiti O diagram de obiecte

26

111. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de stare

c. d.

O diagram de activiti O diagram de obiecte

112. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de stare

c. d.

O diagram de activiti O diagram de colaborare

27

113. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de stare

c. d.

O diagram de activiti O diagram de colaborare

114. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de stare

c. d.

O diagram de activiti O diagram de colaborare

28

115. Diagrama UML urmtoare reprezint

a. b.

O diagram de clase O diagram de stare

c. d.

O diagram de activiti O diagram de colaborare

116. Diagrama UML urmtoare reprezint

a. b.

Relaia de asociere Relaia de dependen

c. d.

Relaia de generalizare Relaia de agregare

29

117. Diagrama UML urmtoare reprezint

a. b.

Relaia de asociere Relaia de implementare/realizare

c. d.

Relaia de generalizare Relaia de agregare

118. Fiecare student are un profesor coordonator, fiecare profesor poate coordona orici studeni, inclusiv niciunul. Care din diagramele de mai jos reflect n mod corect situaia descris?

a.

c.

b. 119. Diagrama UML urmtoare reprezint

d.

a. b.

Diagrama de clase i relaia agregare Relaia de implementare

c. d.

Relaia de generalizare Diagrama de obiecte i relaia de asociere

30

120. Diagrama UML urmtoare reprezint

a. b.

Diagrama de clase i relaia agregare Relaia de implementare

c. d.

Relaia de generalizare Diagrama de clase i relaia de asociere

121. Diagrama UML urmtoare reprezint

a. b.

Diagrama de componente Relaia de implementare

c. d.

Relaia de generalizare Diagrama de clase i relaia de asociere

122. Diagrama UML urmtoare reprezint

a. b. c. d.

Diagrama de componente i relaia de asociere Relaia de implementare Relaia de generalizare Diagrama de clase i relaia de inglobare

31

123. Diagrama UML urmtoare reprezint

a. b. c. d.

Diagrama de componente i relaia de asociere Diagrama de clase i relaia de implementare Diagrama de clase i relaia de asociere Diagrama de clase i relaia de nglobare

124. Diagrama UML urmtoare reprezint

a. b. c. d.

Diagrama de componente i relaia de asociere Diagrama de clase i relaia de implementare Diagrama de clase i relaia de asociere Diagrama de clase i relaia de nglobare

32

125. Diagrama UML urmtoare reprezint

a. b. c. d.

Diagrama de componente i relaia de asociere Diagrama de clase i relaia de asociere Diagrama de clase i relaia de comunicare Diagrama de desfurare i relaia de asociere

126. Diagrama UML urmtoare reprezint

a. b. c. d.

Diagrama de componente i relaia de asociere Diagrama de clase i relaia de asociere Diagrama de clase i relaia de comunicare Diagrama de desfurare i relaia de asociere

33

127. Diagrama UML urmtoare reprezint

a. b.

Diagrama de caz Diagrama de activiti

c. d.

Diagrama de stari Diagrama de secventa

34

128. Diagrama UML urmtoare reprezint

a. b.

Diagrama de caz Diagrama de activiti

c. d.

Diagrama de stari Diagrama de secventa

129. Diagrama UML urmtoare reprezint

a. b.

Diagrama de caz Diagrama de activiti

c. d.

Diagrama de stari Diagrama de secventa

35

130. Diagrama UML urmtoare reprezint

a. b.

Diagrama de caz Diagrama de activiti

c. d.

Diagrama de stri Diagrama de secvent

131. Obiectul A din diagrama de secven trimite mai multe mesaje obiectului B numite msg:

a.

c.

b.

d.

132. Cum arat simbolul unei componente ntr-o diagram de desfurare? a. Diagrama de desfurare nu poate conine componente b. Un dreptunghi rotunjit ca n diagrama de stri c. Un box 3D d. Un dreptunghi cu o etichet n partea stng superioar

133. Trei elemente principale apar n diagrama de caz: a. Obiecte, activiti i comunicaii c. b. Actori, mesaje i activiti d.

Obiecte, cazuri de utilizare i activiti Actori, cazuri de utilizare i comunicaii

36

134. Care din urmtoarele afirmaii este corect? a. Clasele din diagrama de clase pot fi grupate n pachete b. Daca pachetul A depinde de pachetul atunci orice schimbare n B oblig la schimbri n A c. Diagrama de clase i diagrama de obiecte sunt complet interschimbabile d. Diagrama de stri i diagrama de activiti sunt complet interschimbabile

135. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Visitor Observer

c. d.

State Strategy

136. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Visitor Proxy

c. d.

State State

37

137. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Visitor Decorator

c. d.

Bridge State

138. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Visitor Composite

c. d.

Strategy Bridge

38

139. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Composite Proxy

c. d.

Flyweight Bridge

140. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Prototype Interpreter

c. d.

Observer Iterator

39

141. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Decorator Prototype

c. d.

Observer Proxy

142. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Prototype Adapter

c. d.

Bridge Chain of responsability

40

143. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Facade Prototype

c. d.

Adapter Decorator

144. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Bridge Proxy

c. d.

Adapter Decorator

41

145. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Proxy Mediator

c. d.

Adapter Decorator

146. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Builder Mediator

c. d.

Command Facade

42

147. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Composite Memento

c. d.

State Visitor

148. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Iterator Compozite

c. d.

Observer Visitor

43

149. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Adapter Proxy

c. d.

Facade Mediator

150. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Decorator Proxy

c. d.

Observer Template Method

44

151. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Bridge Template Method

c. d.

Proxy Decorator

45

152. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Visitor Iterator

c. d.

Observer Interpreter

46

153. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Bridge Facade

c. d.

Factory Method Decorator

47

154. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Bridge Prototype

c. d.

Facade Decorator

48

155. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Bridge Facade

c. d.

Decorator Abstract Factory

49

156. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Factory Method Builder

c. d.

Bridge Decorator

157. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. b.

Bridge Facade

c. d.

Singleton Decorator

158. Ce sablon de proiectare nu este un sablon creational ? a. Builder c. Decorator b. Prototype d. Abstract Factory

50

1. C 2. C 3. B 4. D 5. B 6. B 7. B 8. D 9. A 10. D 11. D 12. C 13. D 14. D 15. B 16. A 17. C 18. D 19. C 20. A 21. D 22. D 23. D 24. A 25. D 26. A 27. C 28. B 29. B 30. D 31. D 32. C 33. D 34. C 35. C 36. C 37. B 38. C 39. A 40. B 41. D 42. D 43. D 44. A 45. D 46. A 47. D 48. A 49. C 50. B 51. D 52. C 53. D 54. B 55. D 56. B 57. D 58. D

59. C 60. D 61. C 62. B 63. D 64. D 65. D 66. D 67. B 68. B 69. C 70. C 71. B 72. D 73. C 74. B 75. B 76. C 77. B 78. C 79. A 80. D 81. B 82. B 83. C 84. D 85. C 86. B 87. C 88. A 89. D 90. C 91. B 92. A 93. C 94. A 95. A 96. A 97. A 98. B 99. B 100. C 101. C UML 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. A C B A B C B B B C D C

114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157.

C A C B A A D D D B A D C B D C C D C D A D D (Strategy) C C C B A D A C A C B A D C C A C B D B C

JAVA 1- A ,2-B ,3-C ,4-A ,5-D ,6-B ,7-C ,8-A ,9-B ,10-A ,11-B ,12-C ,13-D ,14-A ,15-B, 16-C ,17-D ,18-B ,19-C ,20-B ,21-C ,22-D ,23-A C++ 1-A, 2-D, 3-D, 4-A, 5-C, 6-C?, 7-A, 8-B, 9-A, 10-A, 11-D, 12-B, 13-A, 14-D, 15-?, 16C, 17-B, 18-A, 19-E, 20-B, 21-A, 22-A, 23-B?, 24-D, 25-C, 26A, 27-D, 28-B, 29-A, 30D, 31-A, 32-D, 33-A, 34-B, 35-A, 36-C, 37-D, 38-C, 39-B, 40-B, 41-C, 42-A, 43-C, 44C, 45-A, 46-A, 47-A, 48-D, 49-A, 50-C, 51-B, 52-C, 53-A?, 54-A, 55-A, 56-B, 57-A, 58A, 59-D?, 60-C, 61-D, 62-C, 63-A?

JAVA 1. Fie urmatorul bloc de instructiuni Java: { int x = 12; q=1; { int q = 96; // Both x & q available x=q; } q=x; x=1; } Care afirmatie este adevarata: a. instructiunea x=q; este corecta; b. instructiunea q=x; este corecta; c. instructiunea x=1; este incorecta; d. instructiunea q=1; este corecta; 2. Fie urmatorul bloc de instructiuni Java: { int x = 10; x=1; { int x = 100; } x=2; } Care afirmatie este adevarata: a. instructiunea x=1; este incorecta; b. instructiunea int x = 100; este incorecta; c. instructiunea x=2; este incorecta; d. instructiunea int x = 10; este incorecta; 3. Fie urmatoarea clasa Java: class D { int i; float f; boolean b; } Care afirmatie este adevarata: a. instructiunea D d = new D(1); este corecta; b. instructiunea D d = new D(1,1); este corecta; c. instructiunea D d = new D(); este corecta; d. instructiunea D d = new D(1,1,1); este corecta; 4. Fie urmatoarea metoda Java: int storage(String s) { return s.length() * 2; } si instructiunea int i=storage(Java); Care afirmatie este adevarata: a. instructiunea este incorecta; b. i va primi valoarea 4; c. i va primi valoarea 16; d. i va primi valoarea 8;

5. Fie urmatoarea clasa Java: class C{ public static int i=1; } si instructiunile: C x=new C(); C y=new C(); x.i =x.i ?+1; Care afirmatie este adevarata: a. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=2; b. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=1; c. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=2; d. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=1; 6. Fie urmatoarea clasa Java: class C{ public static void main(String args[]){ System.out.println(args[0]); System.out.println(args[1]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: a. Curs Java An b. Curs Java c. Java An 3 d. Curs Java An 3 7. Fie urmatoarea clasa Java: class C{ public static void main(String args[]){ for(int i=0;i<args.length; i++) System.out.println( + args[i]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: a. Curs Java b. Curs Java An c. Curs Java An 3 d. Java An 3 8. Fie urmatoarea clasa Java: public class Person{ public Person(String p){name=new String(p); System.out.println(++nr); } public static void main(String[] args){ while(true)f(); }

private static void f(){Person p = new Person("Ionescu"); // obiectele NU se acumuleaza // in heap si NU blocheaza executarea, spre deosebire de C++ } private String name; private static long nr=0; }; Care afirmatie este adevarata: a. Programul nu se opreste din executare; b. Programul se termina, cu mesaj de eroare, deoarece la un moment dat nu mai exista memorie suficienta pentru crearea obiectelor Person; c. Programul are erori de sintaxa; d. Programul se termina, fara mesaj de eroare. 9. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s1.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){

System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: a. Programul afiseaza: Overflow la stiva Tudor b. Programul afiseaza: Underflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Andrei d. Programul afiseaza: Underflow la stiva Andrei 10. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s2.insert("aa"); s2.delete(); s2.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } }

Care afirmatie este adevarata: a. Programul afiseaza: Underflow la stiva Andrei b. Programul afiseaza: Underflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Tudor d. Programul afiseaza: Overflow la stiva Andrei 11. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s2.insert("aa"); s2.insert( new Integer(10)); s2.insert("aa"); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: a. Programul afiseaza: Overflow la stiva Tudor

b. Programul afiseaza: Overflow la stiva Andrei c. Programul afiseaza: Underflow la stiva Tudor d. Programul afiseaza: Underflow la stiva Andrei

12. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: stiva Tudor c. Programul afiseaza: Varful stivei: 10 d. Programul afiseaza: 2 13. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name;

} public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: stiva Tudor b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: 2 d. Programul afiseaza: Varful stivei: aa 14. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: stiva Tudor d. Programul afiseaza: 2 15. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; }

public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); s1.insert("aa"); s2.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } } Care afirmatie este adevarata: a. Programul afiseaza: stiva Tudor b. Programul afiseaza: Varful stivei: aa c. Programul afiseaza: 2 d. Programul afiseaza: Varful stivei: 10 16. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } // specializarea metodei Object.equals // doua cozi sunt egale daca au aceleasi elemente // chiar daca ele au dimensiuni maxime sau nume diferite public boolean equals(Object obiectOarecare) { if (obiectOarecare instanceof CoadaCirculara) { CoadaCirculara cc= (CoadaCirculara)obiectOarecare; boolean b=true; b=b && (cc.numarElemente==numarElemente); int i=prim; int nr=numarElemente; while(b && (nr !=0)){ b=b && cc.v[i].equals(v[i]); nr--; i=(i+1)%maxDim;

} return b; } return false; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: a. Programul afiseaza: X=Y X=Y b. Programul nu afiseaza nimic c. Programul afiseaza: X=Y d. Programul afiseaza: 3 17. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii }

public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: a. Programul afiseaza: 3 b. Programul afiseaza: X=Y X=Y c. Programul afiseaza: X=Y d. Programul nu afiseaza nimic 18. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); x.adauga("a"); x.adauga("b"); x.adauga("c"); x.adauga("d"); x.adauga("e"); x.adauga("f"); System.out.println(x.element()); } } Care afirmatie este adevarata: a. Programul afiseaza: b

b. Programul afiseaza: d c. Programul afiseaza: c d. Programul afiseaza: a 19. Fie urmatoarele clase Java: public interface Actualizare{ public void actualizareNume(String nume); public void actualizareVarsta(int varsta); } interface Afisare{ public void afisare(); public void actualizareVarsta(int varsta); } public class Persoana{ public Persoana(String nume, int varsta){ this.nume=nume; this.varsta=varsta; } public Persoana(){} protected String nume="XXXX"; protected int varsta=0; } class PersoanaSpecializata extends Persoana implements Actualizare, Afisare{ public void actualizareNume(String nume){this.nume=nume;} public void actualizareVarsta(int varsta){this.varsta=varsta;} public void afisare(){ System.out.println("nume= "+nume); System.out.println("varsta= " + varsta); } } public class Client{ public static void main(String args[]){ PersoanaSpecializata p=new PersoanaSpecializata(); Actualizare act=p; Afisare afis=p; act.actualizareNume("Ionescu"); act.actualizareVarsta(58); afis.afisare(); } } Care afirmatie este adevarata: a. Programul este incorect deoarece o clasa nu poate implementa dou a interfete b. Programul este incorect deoarece metoda public void afisare() nu face parte din clasa Persoana c. Programul afiseaza: nume= Ionescu varsta= 58 d. Programul este incorect deoarece metoda public void actualizareVarsta(int varsta) nu face parte din clasa PersoanaSpecializata 20. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void actiune(){x++;System.out.println(x);}; } public class View extends Frame{ private Button b;

private Model m; private Controller c; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add(b); m=new Model(); c=new Controller(m); b.addActionListener(c); setSize(100,50); setVisible(true); } } class Controller implements ActionListener{ private Model md; public Controller(Model p){ md=p; } public void actionPerformed(ActionEvent e){ md.actiune(); } } Care afirmatie este adevarata, daca se face de doua ori click pe butonul stang mouse asupra butonului Actiune: a. Programul nu afiseaza nimic b. Programul afiseaza: 1 2 c. Valoarea atributului f.m.x ramane mereu la valoarea 0 d. Programul afiseaza: 0 1 21. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void increment(){x++;} public int get_x(){return x;} } public class View extends Frame{ private Button b; protected Model m; private Controller c; protected TextField tf; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add("North",b); m=new Model(); c=new Controller(this); b.addActionListener(c); tf=new TextField(10); add("Center",tf); setSize(100,250);

setVisible(true); } } class Controller implements ActionListener{ private View vw; public Controller(View v){ vw=v; } public void actionPerformed(ActionEvent e){ vw.m.increment(); vw.tf.setText(String.valueOf(vw.m.get_x())); } } Care afirmatie este adevarata, daca se face de doua ori click pe butonul stang mouse asupra butonului Actiune: a. n campul de text f.tf este afisata valoarea 1 b. Programul nu afiseaza nimic c. n campul de text f.tf este afisata valoarea 2 d. Valoarea atributului f.m.x ramane mereu la valoarea 0 22. Fie urmatorul program Java: import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit"); exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); }

public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; } } class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } } Care afirmatie este adevarata, daca se face de click pe butonul stang mouse asupra butonului modifica din fereastra fn: a. Doar in campul de text field al ferestrei fo2 este afisata valoarea actualizata a atributului Observator.m.i b. n campul de text field al tuturor ferestrelor este afisata valoarea actualizata a atributului Observator.m.i c. Doar in campul de text field al ferestrei fo1 este afisata valoarea actualizata a atributului Observator.m.i d. Doar in campul de text field al ferestrelor fo1 si fo2 este afisata valoarea actualizata a atributului Observator.m.i 23. Fie urmatorul program Java: import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit");

exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); } public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; } } class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } } Care afirmatie este adevarata, daca se face de click pe butonul stang mouse asupra butonului modifica din fereastra fo1 sau fo2: a. Doar in campul de text field al ferestrelor fo1 si fo2 este afisata valoarea actualizata a atributului Observator.m.i b. n campul de text field al tuturor ferestrelor este afisata valoarea actualizata a atributului Observator.m.i c. Doar in campul de text field al ferestrei fo1 este afisata valoarea actualizata a atributului Observator.m.i d. Doar in campul de text field al ferestrei fo2 este afisata valoarea actualizata a atributului Observator.m.i

C++
1. Fie urmatorul program: // Public redeclarat private // #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este incorecta: a. b.v(); b. p=&a; c. p->m(); d. p->v(); 2. Fie urmatorul program: // Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este corecta: a. b.m(); b. b.v(); c. p->f(); d. p->m(); 3. Fie urmatorul program:

// Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este corecta: a. b.m(); b. b.v(); c. p->f(); d. p->v(); 4. Fie urmatorul program: // Public redeclarat private // Metoda PRIVATE DEVINE ACCESIBILA PRIN MECANISMUL DE LEGARE DINAMICA #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este incorecta: a. b.m(); b. p=&a; c. p->m(); d. p->v(); 5. Fie urmatorul program: #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;}

Cerc operator++(){raza++;return *this;}// return by value Cerc& operator--(){raza--;return *this;}// return by reference private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza: a. 3300 b. 3201 c. 3200 d. 3211 6. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_Hclass AbstractElem { public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST { public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax) { first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe) {

support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get() { return support[first]; } void LIST::remove() { first= ++first % nrmax; --nrelem; } Care afirmatie este adevarata: a. 3200 b. 3301 c. 7. 3311 d. 3212 Fie programul: #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza : a. 3201 b. 3200 c. 3301 d. 3211 8. Fie programul: // singleton // constructor private #include <iostream.h> #include <conio.h> class S{ public: static S* create() { if(i==0){ refS=new S(); i++; } return refS; } void setName(char *s){name=s;} char* getName(){return name;}

static int getNr(){return nr;} private: static S* refS; static int i; static int nr; S(){nr++;} char *name; }; int S::i=0; int S::nr=0; S* S::refS=0; void main(){ S *o1, *o2; o1=S::create(); o2=S::create(); o1->setName("Matematica"); o2->setName("Informatica"); cout<<o1->getName()<<endl; cout<<o2->getName()<<endl; cout<<S::getNr()<<endl; getch(); } Programul afiseaza: a. Matematica Informatica 1 b. Informatica Informatica 1 c. Informatica Informatica 2 d. Matematica Informatica 2 9. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; }

a. b. c. d.

Clasa C defineste o structura de tip coada (FIFO) Clasa C defineste o structura de tip stiva (LIFO) Clasa C este un vector Clasa C este abstracta

10. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //elements.h #include "abselem.h" #include "iostream.h" class Person: public AbstractElem{ public: Person(char *name); virtual void display(); virtual void process(); private: char *name; }; class Car: public AbstractElem{ public: Car(char *name); virtual void display(); virtual void process(); private: char *name; }; //driver.cpp #include "elements.h" #include "LIST.h" LIST x(3);

void main(){ x.put(new Person("Tudor")); x.put(new Person("Andrei")); x.put(new Car("B-39-TDR")); x.get()->process(); x.remove(); x.get()->process(); x.remove(); x.get()->process(); x.remove(); } //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } //elements.cpp #include "elements.h" Person::Person(char *name):name(name){}; void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } Programul afiseaza datele in ordinea: a. Tudor Andrei B-39-TDR b. B-39-TDR Andrei Tudor c. Andrei B-39-TDR Tudor d. B-39-TDR Tudor Andrei 11. Fie programul: // destructor static, #include <iostream.h> class B{ public: ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *pb; D *pd; pd= new D();

pb=new D(); delete pb; delete pd; } Programul afiseaza : a. ~ B() ~B() ~D() b. ~ B() ~D() c. ~ B()~D()~B() ~D() d. ~ B() ~D() ~B() 12. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&);

private: int dim; int *pi; }; C::C(int n, int v[]) dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); x=y; y.set(0,-1000); cout<<x<<endl; } Programul afiseaza: a. -100 20 b. -1000 20 c. 100 2 3 d. 1 20 30 13. Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; {

int main(){ B *pb; D d; // pointing to a subclass pb=&d; ((D*)pb)->v(); ((D*)pb)->st(); return 0; } Programul afiseaza: a. virtual method v() of D static method st() of D b. virtual method v() of B static method st() of D c. virtual method v() of D static method st() of B d. virtual method v() of B static method st() of B 14. Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B b, *pb; D d, *pd; pb=&d; pb->st(); pb->v(); return 0; } Programul afiseaza: a. static method s() of D virtual method v() of D b. static method s() of B virtual method v() of B c. static method s() of D virtual method v() of B d. static method s() of B virtual method v() of D

15. Fie programul #include <string.h>#include <iostream.h>class Person{public: Person(char *p){nr=0; name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){delete[] name;}private: char *name; long nr;};void f(){Person *p = new Person("Balanescu"); delete p;}void main(){ for (int i=0; i<5; i++)f();} Programul afiseaza: 11111 16. Fie programul : // constructor de copiere in clasa de baza; dar absent in clasa derivata // compilatorul creeaza un constructor de copiere implicit

// care apeleaza constr de copiere al clasei de baza pentru copierea atributelor din clasa de baza // si copiaza membru cu membru atributele din D #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} }; void main(){ B b; // apel B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()! D d; // apel B();D() D d1(d); B bd(d); // conversie implicita la clasa de baza; getch(); } Programul afiseaza : a. B() B() B(B&b) B() D() B(B &b) B(B &b) b. B() B() B(B&b) B() D() B(B &b) D() B(B &b) c. B() B(B&b) B() D() B(B &b) B(B &b) d. B() B(B&b) D() B(B &b) D() B(B &b) 17. Fie programul: //destructor explicit #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;} private: char *name; }; void f(){Person *p = new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java } void main(){ while(1)f(); } a. La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu nu este eliberat si memoria va fi epuizata b. La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu este eliberat c. Programul se termina datorita epuizarii memoriei d. Programul se termina dupa primul apel al functiei f() 18. Fie urmatorul program: #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; Care afirmatie este corecta: a. Definitia virtual void v()supraincarca definitia virtual void v(int i)

b. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v. c. void v() este metoda ce va fi legata static. d. in expresia p->v(); metoda v este legata static 19. Fie urmatorul program: // Constructor cu semantica prin referinta// Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]=-100; cout<<(x=y)<<endl; } Programul afiseaza: a. instructiunea int=100; este incorecta b. . instructiunea int=10; este incorecta c. . instructiunea int=1; este incorecta d. . instructiunea int=2; este incorecta e. . 10 20 20. Fie programul : #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} void operator++(){raza++;} private: float raza; }; class Cilindru: public Cerc{ public: Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){}; void operator++(){inaltime++;} float getInaltime(){return inaltime;} private: float inaltime;

}; void main(){ Cerc *pc; Cilindru c(1,5); pc=&c; ++ *pc; cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl; getch(); } Programul afiseaza : a. 1 6 b. 2 5 c. 2 6 d. 1 5 21. Fie programul: #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); delete p; } void main(){ while(1)f(); } Care afirmatie este adevarata: a. Programul afiseaza un sir finit de numere 1 2 3 4...etc. pana memoria este epuizata b. Programul afiseaza secventa infinita 1 2 3 4...etc. deoarece memoria nu este epuizata c. Programul nu afiseaza nimic d. Programul afiseaza 1 apoi se opreste 22. Fie programul //static atribut #include <conio.h> #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){nr--; delete[] name;} private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); } void main(){ for (int i=0; i<5; i++)f();

getch(); } Programul afiseaza: a. 1 2 3 4 5 b. 1 1 1 1 1 c. 0 0 0 0 0 d. 0 1 2 3 4 23. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Constructorul Persoana(char *) poate fi utilizat pentru: a. Conversia obiectelor Persoana in siruri de caractere b. Conversia sirurilor de caractere in obiecte Persoana c. Construirea de siruri de caractere d. Conversia obiectelor Complex in obiecte Persoana 24 Fie programul : // destructor virtual, #include <iostream.h> class B{ public: virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza: a. ~ B()~D()~B() ~D() b. ~ B() ~B() ~D() c. ~ B() ~D() d. ~ D()~B()~D() ~B() 25. Fie programul: #include class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<ENDL;} void s(int i){i++;cout<<"void A::s(int)"< // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<ENDL;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<ENDL;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<

// 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"< // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<ENDL;} }; void main(){ A *pa; B b; pa=&b; pa->s(); pa->v(1); } Prin executarea sa, programul afiseaza: a) void B::v() void A::v(int) b) void A::v() void B::v(int) c) void A::s() void B::v(int) d) void A::v() void A::v(int) 26. Fie urmtorul program C++: #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; a.m(); p=&b; p->v(); } Care din afirmatiile urmtoare sunt adevrate: a. Expresia p->v()este incorect deoarece metoda v este inaccesibil b. Programul afiseaza mesajul: A:m() B:(v) c. Programul afiseaz mesajul: A:v() d. Expresia a.m() este incorect deoarece metoda m este inaccesibil 27. Fie urmtorul program C++: #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int i)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } }; class B:public A{ public: // 1.

int s(){ cout<<"int A::s()"<<endl; return 1; } // 2. void s(int i){ i++;cout<<"void A::s(int i)"<<endl; } // 3. virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } // 4. virtual int v(){ cout<<"int A::v()"<<endl; return 1; } }; Care din afirmatiile urmtoare sunt adevrate: a. //1. este incorect b. //2. este incorect c. //3. este incorect d. //4. este incorect 28. Fie urmtorul program C++, n care operatorul de insertie << este suprancrcat. Operatorul de atribuire = este cel predefinit, cu semantica prin referinta. #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: 10 20 10 20 b. Programul afiseaz: 10 20 1000 20 c. Programul afiseaz: 1000 20 10 20 d. Programul afiseaz:

1000 20 1000 20 29. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate chiar si n cazul de autoatribure d=d. #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } // supraincarcare cu semantica prin valoare C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // fara verificarea cazului de autoatribuire d=d delete[] pi; dim=x.dim; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: 10 20 10 20 xx yy b. a) Programul afiseaz: 10 20 1000 20 xx yy c. Programul afiseaz: 1000 20 10 20 xx yy

d. Programul afiseaz: 10 20 10 20 10 20 30. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate numai dac d?s. #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // numai daca destinatia difera de sursa if(this!=&x){ dim=x.dim; delete[] pi; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} } return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: 10 20 10 20 xx yy b. Programul afiseaz: 10 20 1000 20 xx yy c. Programul afiseaz: 1000 20 10 20

xx yy d. Programul afiseaz: 10 20 10 20 10 20 31. Fie urmtorul program C++, unde functia abs calculeaz valoarea absolut a unui numr real: #include <iostream.h> void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="<<a<<endl; int i=-1; abs(i); //temporary used for parameter x cout<<"i="<<i<<endl; // i=-1 } La compilare a fost emis urmtorul mesaj de avertizare: Warning: temporary used for parameter x in call to abs(float &) Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: a =1 i = -1 b. Programul afiseaz: a =1 i=1 c. Programul afiseaz: a = -1 i = -1 d. Programul afiseaz: a = -1 i=1 32. Fie urmtorul program C++: #include <iostream.h> class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: Cerc(double r=0.0, int x=0, int y=0);// constructor protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<<p.x<<", "<<p.y<< ']'; return output; } //implementare Cerc Cerc::Cerc(double r, int a, int b):Punct(a,b), raza(r){} ostream& operator<<(ostream& output, const Cerc& c){ output <<"Centru= "<< (Punct)(c) <<"; Raza= "<<c.raza; return output; };

void main(){ Punct *punctPtr=0, p(30,50); Cerc *cercPtr=0, c(2.7,120,89); cout<<p<<endl; cout<<c<<endl; // Cerc tratat ca Punct (prin pointer la clasa de baza): punctPtr=&c; cout<< *punctPtr << endl; /* Cerc tratat ca Cerc (prin pointer la clasa de baza, dar cu conversie explicita de la Punct la clasa derivata Cerc */ cercPtr= (Cerc *)(punctPtr); cout<< *cercPtr<<endl; /*Punct tratat ca Cerc: programatorul isi asuma responsabilitatea unor erori: anumite atribute sunt nedefinite */ punctPtr= &p; // punctPtr refera un Punct //Urmeaza conversie asumata de programator, //de la clasa de baza la clasa derivata cercPtr=(Cerc *)(punctPtr); // cercPtr refera p ca pe un cerc //dar acest asa-zis cerc are raza nedefinita cout<< *cercPtr <<endl; } Prin xx este desemnat o valoare nedefinit. Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx b. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Centru=Punct[30,50]; Raza=xx c. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx d. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx 33. Fie urmtorul program C++: // constructor de copiere in clasa de baza; // dar absent in clasa derivata #include <iostream.h> class B{ public: B(){cout<<"B();";} B(B &b){cout<<"B(B &b);";} }; class D: public B{ public: D(){cout<<"D();";}

}; void main(){ B b; B b1(b); D d; D d1(d); B bd(d); } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: B() B(B &b) B() D() B(B &b) B(B &b) b. Programul afiseaz: B() B() B() D() B(B &b) B(B &b) c. Programul afiseaz: B() B() B(B &b) D() B(B &b) B(B &b) d. programul afiseaz: B() B(B &b) B() D() B() B() 34. Fie urmtorul program C++: // destructor static #include <iostream.h> #include <conio.h> class B{ public: B(){cout<<"B()"<<endl;} ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *b=new B(); // apel B() delete b; b=new D(); // apel B();D() delete b; } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: B() ~B() B() D() ~D() b. Programul afiseaz: B() ~B() B() D() ~B() c. Programul afiseaz: B() ~B() B() ~B() d. Programul afiseaz: B() ~B() D() ~B() 35. Fie urmtorul program C++: // destructor virtual #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr();

B *b=new B(); delete b; b=new D();

// apel B() // apel B();D(); // destructorii, in ordine inversa

delete b; } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: B() ~B() B() D() ~D() ~B() b. Programul afiseaz: B() ~B() B() D() ~B() ~B() c. Programul afiseaz: B() ~B() B() D() ~B() ~D() d. Programul afiseaz: B() ~B() B() D() ~B() 36. Fie urmtorul program C++: #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ name=new char[strlen(p)+1]; strcpy(name,p); } ~Person(){delete[] name;} private: char *name; }; void f(){ // obiect nou, alocare dinamica in memoria heap Person *p =new Person("Balanescu"); delete p; } void main(){ while(1)f(); } Care din afirmatiile urmtoare sunt adevrate: a. Programul se termin, deoarece instructiunea delete p elibereaz memoria alocat pentru obiectul referit de p b. Programul se termin, deoarece la iesirea din functia f se elibereaz memoria alocat pe stiv pentru obiectul referit de p c. Programul nu se termin, deoarece conditia de continuare din instructiunea while este mereu ndeplinit d.Programul se blocheaz la epuizarea memoriei heap 37. Fie urmtorul program C++: #include <iostream.h> class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Persoana q="Balanescu"; void fvalue(Persoana p){p.afisare();} void faddress(Persoana *p){p->afisare();} void freference(Persoana &p){p.afisare();} void main(){ fvalue(q); faddress(&q); freference(q); fvalue("Tudor");

freference("Tudor");// Warning: temporary used for p } Care din afirmatiile urmtoare sunt adevrate: a. Expresia faddress(&q); este eronat; b. Instructiunea de declarare Persoana q="Balanescu"; este eronat; c. Expresia p->afisare() este eronat; d. Programul afiseaz: Balanescu Balanescu Balanescu Tudor Tudor 38. Fie urmtorul program C++: #include <iostream.h> class B{ public: B(int i):i(i){} protected: int i; }; class D1: public B{ public: D1(int i):B(i){} void inc(){i++;} }; class D2: public B{ public: D2(int i):B(i){} void afisare(){cout<<i=<<i<<endl;} }; class D: public D1, public D2{ public: D(int i):D1(i),D2(i){} }; void main(){ D d(0); d.inc(); d.afisare(); } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz i=-1 b. Programul afiseaz i=2 c. Programul afiseaz i=0 d. Programul afiseaz i=1 39. Fie urmtorul program C++: #include <iostream.h> class B{ public: B(int i=-1):valB(i){} B& operator=(const B &b){ valB=b.valB; cout<<"B::op= "; return *this; } private: int valB; }; class D:public B{ public: D(int i, int j):B(i),valD(j){} D& operator=(const D &d){ valD=d.valD;

cout<<"D::op= "; return *this; } private: int valD; }; void main(){ B b(0), b1(1); B *pB; D d(0,0), d1(1,1); b=b1; d=d1; b=d; pB=&d; *pB=d; pB->operator=(d); } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz : B::op= D::op= D::op= B::op= D::op= b. Programul afiseaz: B::op= D::op= B::op= B::op= B::op= c. Programul afiseaz: B::op= D::op= B::op= D::op= D::op= d. Programul afiseaz: B::op= D::op= D::op= D::op= B::op= 40. Fie urmtorul program C++: class A{ int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){ x=1; // 3 //b.x=1; //x nu este accesibil obiectelor } }; void main(){ B b(1); // 4 } Care din urmtoarele instructiuni sunt eronate: a. B b; // 1 b. B b(1) ; // 2 (din clasa D) c. x=1; // 3 d. B b(1); // 4 (din functia main) 41. Fie urmatorul program class A{ int x; public:

A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 public: void m(){ x=1; // 2 b.x=1; //3 } }; void main(){ B b(1); // 4 } Care din urmtoarele instructiuni sunt eronate: a. B b; // 1 b. x=1 // 2 c. b.x=1; // 3 d. B b(1); // 4 (din functia main) 42. Fie urmatorul program: #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} // 4. supraincarcare metoda virtuala, neacceptata: // B::v() conflicts with base class A // virtual int v(){cout<<"int B::v()"<<endl; return 1;} }; void main(){ A a, *pa; B b; pa=&a; pa->s(); pa->s(1); pa->v(); pa->v(1); pa=&b; pa->s(); pa->s(1); pa->v(); pa->v(1); } Care din rezultatele urmatoare sunt afisate prin executarea programului? a. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void A::v() virtual void B::v(int)

b. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) c. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void B::v() virtual void B::v(int) d. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) int B::s() void B::s(int) virtual void B::v() virtual void B::v(int) 43. Fie programul urmator: #include <iostream.h> class Calculator{ private: int value; int keep; char toDo; public: void add(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='+'; // what to do later } void subtract(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='-'; // what to do later } void multiply(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='*'; // what to do later } void compute(){ if (toDo=='+') value += keep; else if (toDo == '-') value = keep-value; else if (toDo == '*') value *= keep; } void clear(){value=keep=0;} void digit (int x){value=value*10+x;} int display(){ return value;} Calculator(){clear();} }; void main(){ Calculator c; c.digit(1); c.digit(0); c.add(); c.digit(2); c.digit(0); c.compute();

c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1); c.digit(0); c.subtract(); c.digit(2); c.digit(0); c.compute(); c.multiply(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Se cere sa indicati care din rezultatele urmatoare sunt afisate prin executarea acestui program: a. 25 -10 b. 35 50 c. 35 -50 d. 35 -20 44. Se considera programul: #include <iostream.h> class C{ public: C(){i=0;}; void set_i(int pi){cout << "C::set_i (int)"<<endl;i=pi;} //void set_i(int pi)const{i=pi;} // error: cannot modify a const object int get_i (){cout << "C::get_i ()"<<endl; return i;} int get_i()const {cout << "C::get_i ()const"<<endl;return i;} int i; }; void main(){ int j; C x; const C y; x.i=1; x.set_i(2); j= x.get_i(); //y.i=1; // error: cannot modify a const object //y.set_i(2); // warning: non-const function called for a const object j= y.get_i(); } Ce rezultate afiseaza acest program? a. C ::set_i(int) C::get_i() const C::get_i() b. C ::set_i(int) C::get_i() C::get_i() c. C ::set_i(int) C::get_i() C::get_i()const d. C ::set_i(int) C::get_i() const C::get_i()const 45. Se considera urmatoarele clase: class B{ public: int i;

protected: int j; private: int k; public: B(){i=j=k=0;} void set_j(int pj){j=pj;} int get_j(){return j;} void set_k(int pk){k=pk;} int get_k(){return k;} }; class D: public B{ public: D(){ i=1; j=1; k=1; // 1 set_k(1); // 2 } }; class C{ public: C(){ b.i=2; b.j=2; // 3 b.set_j(2); // 4 b.k=2; // 5 b.set_k(2); // 6 } private: B b; }; Care din afirmatiile urmatoare sunt adevarate? a. instructiunile // 1, // 3 si // 5 sunt toate incorecte b. doar instructiunile // 2, si // 4 sunt incorecte c. doar instructiunile // 3 si // 4 sunt incorecte d. instructiunile // 2, // 3 si // 4 sunt toate incorecte 46. Care este varianta corecta de completare a urmatoarei specificari (incomplete ) a clasei Data #include <iostream.h> class Data{ public: // metode si operatori private: int zi,luna, an; }; astfel incat programul urmator void main(){ Data d, e(31,12,2002); cout<<d<<" "<<e<<endl; } sa afiseze rezultatele: 1/1/2001 31/12/2002 a. dupa comentariul metode si operatori, se adauga: Data(int zi=1, int luna=1, int an=2001); friend ostream& operator<<(ostream&, Date &); b. dupa comentariul metode si operatori, se adauga: Data(int zi=31, char *luna=XII, int an=2002); friend ostream& operator<<(ostream&, Date &); c. dupa comentariul metode si operatori, se adauga: Data(int zi=31, int luna=12, int an=2002); friend ostream& operator<<(ostream&, Date &); d. dupa comentariul metode si operatori, se adauga: Data(int zi=1, int luna=1, int an=2001);

ostream& operator<<(ostream&, Date &); 47. Fie urmtorul program C++, unde funcia abs calculeaz valoarea absolut a unui numr real: #include <iostream.h> void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="<<a<<endl; int i=-1; abs(i); //temporary used for parameter x cout<<"i="<<i<<endl; // i=-1 } La compilare a fost emis urmtorul mesaj de avertizare: Warning: temporary used for parameter x in call to abs(float &) Care din afirmaiile urmtoare sunt adevrate: a. Programul afiseaz: a =1 i = -1 b. Programul afiseaz: a =1 i=1 c. Programul afiseaz: a = -1 i = -1 d. Programul afiseaz: a = -1 i=1 48.Fie urmtorul program C++: #include <iostream.h> class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: Cerc(double r=0.0, int x=0, int y=0);// constructor protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<<p.x<<", "<<p.y<< ']'; return output; } //implementare Cerc Cerc::Cerc(double r, int a, int b):Punct(a,b), raza(r){} ostream& operator<<(ostream& output, const Cerc& c){ output <<"Centru= "<< (Punct)(c) <<"; Raza= "<<c.raza; return output; }; void main(){ Punct *punctPtr=0, p(30,50); Cerc *cercPtr=0, c(2.7,120,89); cout<<p<<endl; cout<<c<<endl;

// Cerc tratat ca Punct (prin pointer la clasa de baza): punctPtr=&c; cout<< *punctPtr << endl; /* Cerc tratat ca Cerc (prin pointer la clasa de baza, dar cu conversie explicita de la Punct la clasa derivata Cerc */ cercPtr= (Cerc *)(punctPtr); cout<< *cercPtr<<endl; /*Punct tratat ca Cerc: programatorul isi asuma responsabilitatea unor erori: anumite atribute sunt nedefinite */ punctPtr= &p; // punctPtr refera un Punct //Urmeaza conversie asumata de programator, //de la clasa de baza la clasa derivata cercPtr=(Cerc *)(punctPtr); // cercPtr refera p ca pe un cerc //dar acest asa-zis cerc are raza nedefinita cout<< *cercPtr <<endl; } Prin xx este desemnat o valoare nedefinit. Care din afirmaiile urmtoare sunt adevrate: a. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx b. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Centru=Punct[30,50]; Raza=xx c. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx d. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx 49. Fie urmtorul program C++: // constructor de copiere in clasa de baza; // dar absent in clasa derivata #include <iostream.h> class B{ public: B(){cout<<"B();";} B(B &b){cout<<"B(B &b);";} }; class D: public B{ public: D(){cout<<"D();";} }; void main(){ B b; B b1(b); D d; D d1(d);

B bd(d); } Care din afirmaiile urmtoare sunt adevrate: a. Programul afiseaz: B() B(B &b) B() D() B(B &b) B(B &b) b. Programul afiseaz: B() B() B() D() B(B &b) B(B &b) c. Programul afiseaz: B() B() B(B &b) D() B(B &b) B(B &b) d. programul afiseaz: B() B(B &b) B() D() B() B() 50. Fie urmtorul program C++: #include <iostream.h> class B{ public: B(int i):i(i){} protected: int i; }; class D1: public B{ public: D1(int i):B(i){} void inc(){i++;} }; class D2: public B{ public: D2(int i):B(i){} void afisare(){cout<<i=<<i<<endl;} }; class D: public D1, public D2{ public: D(int i):D1(i),D2(i){} }; void main(){ D d(0); d.inc(); d.afisare(); } Care din afirmaiile urmtoare sunt adevrate: a. Programul afiseaz i=-1 b. Programul afiseaz i=2 c. Programul afiseaz i=0 d. Programul afiseaz i=1 51. Fie urmtorul program C++: class A{ int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){

x=1; // 3 //b.x=1; //x nu este accesibil obiectelor } }; void main(){ B b(1); // 4 } Care din urmtoarele instruciuni sunt eronate: a. B b; // 1 b. B b(1); // 2 (din clasa D) c. x=1; // 3 d. B b(1); // 4 (din funcia main) 52. Fie urmatoarea specificare de clasa: // file abslist.h #ifndef ABSLIST_H #define ABSLIST_H #include "d:\tudor\c_cpp\abstract\abselem.h" class AbstractList{ public: virtual void erase()=0; virtual void put(AbstractElem* ae){}; virtual AbstractElem* get(){}; virtual int isEmpty(){}; virtual int isFull(){}; }; #endif Care afirmatie este corecta: a. isEmpty() este metoda virtuala pura b.AbstractList este o clasa concreta c. AbstractList este o clasa abstracta d. obiectele clasei pot fi construite cu AbstractList(); 53. Fie urmatoarea specificare de clase: class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; }; Punct::operator Complex(){ return Complex(x,y);} Metoda Punct:: operator Complex() nu a fost implementat inline, precum operator Punct() deoarece a. Construcorul Complex(float, float) trebuie declarat inaintea metodei Punct:: operator Complex() b. Constructorul Punct (float, float) trebuie declarat inaintea metodei Punct:: operator Complex() c. Este metoda friend a clasei Complex ???? d. Este metoda friend a clasei Punct 54. Fie programul: // file Calc.h

class Calculator{ private: int value; int keep; char toDo; public: void add(); void multiply(); void compute(); void clear(); void digit (int x); int display(); Calculator(); }; //file Calc.cpp #include "Calc.h" void Calculator::clear(){ value=keep=0; } int Calculator::display(){ return value;} void Calculator::digit(int x){value=value*10+x;} void Calculator::add(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='+'; // what to do later } void Calculator::multiply(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='*'; // what to do later } void Calculator::compute(){ if (toDo=='+') value += keep; else if (toDo == '*') value *= keep; } Calculator::Calculator(){clear();} //file testdriver.cpp #include <iostream.h> #include "Calc.h" void main(){ Calculator c; c.digit(1);c.digit(0); c.add(); c.digit(2);c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1);c.digit(0); c.multiply(); c.digit(2);c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Programul afiseaza a. 35 205

b.10 20 c. 205 35 d. 20 10 55. Fie programul: #include "iostream.h" template <class T> class Fifo{ public: Fifo(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>Fifo<T>::Fifo(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void Fifo<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T Fifo<T>::get(){ return support[first]; } template <class T> void Fifo<T>::remove(){ first= ++first % nrmax; --nrelem; } class Person { public: Person(char *name); Person(); //necesar pentru a intializa tablouri virtual void display(); virtual void process(); private: char *name; }; class Car { public: Car(char *name); Car(); virtual void display(); virtual void process(); private: char *name; }; Person::Person(char *name):name(name){}; Person::Person(){}; void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: ";

display(); } Car::Car(char *name):name(name){}; Car::Car(){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } Fifo<Person> queuePerson(3); Fifo<Car> queueCar(3); void main(){ queuePerson.put(Person("Andrei")); queuePerson.put(Person("Tudor")); queueCar.put(Car("B-39-TDR")); queuePerson.get().process(); queuePerson.remove(); queueCar.get().process(); queueCar.remove(); queuePerson.get().process(); queuePerson.remove(); } Programul afiseaza: a. A Person: Andrei A Car:B-39-TDR A Person: Tudor b. c. d. 56.Fie programul // constructor de copiere atat in clasa de baza cat si in clasa derivata // constructorul de copiere din clasa derivata utilizeaza pe B() pentru constructia // // subobiectului B #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} D(D &d){cout<<"D(D &d)"<<endl;} }; void main(){ B b; // apel B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()! D d; // apel B();D() D d1(d); // nu se apeleaza B(B &b) } Programul afiseaza : a. B() B(B&b) B() D() B(B &b) D(D &d) b. B() B(B&b) B() D() B() D(D &d) c. B() B() B(B&b) B() D() B(B &b) D() B(B &b) d. B() B(B&b) D() B(B &b) D() B(B &b) 57. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]);

friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]= -100; cout<<x<<endl; } Programul afiseaza: a. -100 2 3 b. 1 2 3 c. 100 2 3 d. 1 20 30 58. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){

return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } Care afirmatie este adevarata: a. LIST este o structura de date de tip coada b. LIST este o structura de date de tip stiva c. LIST este o clasa abstracta d. LIST este un vector 59. Fie urmatoarea specificare de clase: class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; }; Metoda Complex:: operator float() este utilizata pentru a. Conversia unui numar real in obiect Complex b. Conversia unui obiect Complex in obiect Punct c. Conversia obiectelor Complex in numere reale d. Conversia unui obiect Punct in obiect Complex

60. Fie urmatorul program: #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; void main(){ A *pa; B b; pa=&b; pa->v(); pa->s(1); } Prin executarea sa, programul afiseaza: a. void B::v()

void A::v(int) b. void A::v() void B::v(int) c. void A::v() void A::v(int) d. void B::v() void A::s(int)

61. Fie programul: #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc& operator++(){raza++;return *this;}// return by reference Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza: a. 3 2 0 0 b. 3 2 0 1 c. 3 2 1 1 d. 3 3 1 2 62. Fie urmatorul program: #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1 ;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; void main(){ A *pa; B b; pa=&b; pa->s(); pa->v(1); } Prin executarea sa, programul afiseaza: a. void B::v() void A::v(int) b. void A::v() void B::v(int) c. void A::s()

virtual void B::v(int) d. void A::v() void A::v(int) 63. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } a. Clasa C este o clasa generica b. Clasa C este o clasa abstracta c. Clasa C este derivata din clasa T d. Clasa T este derivata din clasa C

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

1. Fie urmtorul bloc de instructiuni Java: JAVA { int x = 12; q=1; { int q = 96; // Both x & q available x=q; } q=x; x=1; } Care afirmatie este adevarata: a. instructiunea x=q; este corecta; b. instructiunea q=x; este corecta; c. instructiunea x=1; este incorecta; d. instructiunea q=1; este corecta; Nota: q=x si x=1 (apartin de primul bloc) nu sunt corecte, deoarece x este declarat de doua oriSunt corecte x=q si q=96 2. Fie urmtorul bloc de instructiuni Java: { int x = 10; x=1; { int x = 100; } x=2; } Care afirmatie este adevarata: b. instructiunea int x = 100; este incorecta; a. instructiunea x=1; este incorecta; c. instructiunea x=2; este incorecta; d. instructiunea int x = 10; este incorecta; Nota: X=100 este incorecta - variabila x nu a fost nca definita n momentul primei atribuiri. 3. Fie urmatoarea clasa Java: class D { int i; float f; boolean b; } Care afirmatie este adevarata: c. instructiunea D d = new D(); este corecta; a. instructiunea D d = new D(1); este corecta; b. instructiunea D d = new D(1,1); este corecta; d. instructiunea D d = new D(1,1,1); este corecta; 4. Fie urmatoarea metoda Java: 1

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

int storage(String s) { return s.length() * 2; } si instructiunea int i=storage(Java); Care afirmatie este adevarata: d. i va primi valoarea 8; a. instructiunea este incorecta; b. i va primi valoarea 4; c. i va primi valoarea 16; Nota: Sirul de caractere Java are 4 litere..Valoarea returnata va fi 4*2=8 5. Fie urmtoarea clas Java: class C{ public static int i=1; } Si instructiunile: C x=new C(); C y=new C(); x.i =x.i ?+1; Care afirmatie este adevarata: d. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=1; a. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=2; b. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=1; c. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=2; Nota: +x .afiseaza valoarea lui x si apoi aduna 1 deci +1 afiseaza 1 6. Fie urmtoarea clas Java: class C{ public static void main(String args[]){ System.out.println(args[0]); System.out.println(args[1]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: b. Curs Java a. Curs Java An c. Java An 3 d. Curs Java An 3 Nota: args[0]afiseaza Curs args[1]afiseaza Java 7. Fie urmtoarea clas Java: class C{ 2

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public static void main(String args[]){ for(int i=0;i<args.length; i++) System.out.println( + args[i]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: c. Curs a. Curs b. Curs Java An Java Java d. Java An 3 An 3 Nota: Incrementare: i<4 (patru cuvinte)..Pt. i=0 afiseaza Curs, pt. i=1..afiseaza Curs Java, pt. i=2..afiseaza Curs Java An si pt. i= 3 afiseaza Curs Java An 3 8. Fie urmtoarea clas Java: public class Person{ public Person(String p){name=new String(p); System.out.println(++nr); } public static void main(String[] args){ while(true)f(); } private static void f(){Person p = new Person("Ionescu"); // obiectele NU se acumuleaza // in heap si NU blocheaza executarea, spre deosebire de C++ } private String name; private static long nr=0; }; Care afirmatie este adevarata: a. Programul nu se opreste din executare; b. Programul se termina, cu mesaj de eroare, deoarece la un moment dat nu mai exista memorie suficienta pentru crearea obiectelor Person; c. Programul are erori de sintaxa; d. Programul se termina, fara mesaj de eroare. Nota: Vezi //comentarii (comp afiseaza numere crescatoare..nu se opreste) 9. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; 3

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=0; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s1.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: b. Programul afiseaza: Underflow la stiva Tudor a. Programul afiseaza: Overflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Andrei d. Programul afiseaza: Underflow la stiva Andrei Nota: Pe s1 se incearca o extragere s1.item(); (item de asemenea) din stiva deja goala Underflow (subdepasire) - extragere din stiva goala 10. Fie urmatoarele clase Java: 4

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s2.insert("aa"); s2.delete(); s2.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: 5

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. Programul afiseaza: Underflow la stiva Andrei b. Programul afiseaza: Underflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Tudor d. Programul afiseaza: Overflow la stiva Andrei Nota: Se lucreaza pe s2 si se incearca o extragere (s2.item();) (item de asemenea )din stiva deja goala Underflow (subdepasire) - extragere din stiva goala 11. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s2.insert("aa"); s2.insert( new Integer(10)); 6

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

s2.insert("aa"); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: b. Programul afiseaza: Overflow la stiva Andrei a. Programul afiseaza: Overflow la stiva Tudor c. Programul afiseaza: Underflow la stiva Tudor d. Programul afiseaza: Underflow la stiva Andrei Nota: Stiva s2 este deja plina si se incearca o noua inserare (s2.insert("aa"); Nota: Overflow (supradepasire) - inserare in stiva plina adica in S2 stiva Andrei 12. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: c. Programul afiseaza: Varful stivei: 10 7

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: stiva Tudor d. Programul afiseaza: 2 Nota: stiva se citeste de jos in sus Insert 10 rezulta varf stiva este 10 13. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: d. Programul afiseaza: Varful stivei: aa a. Programul afiseaza: stiva Tudor b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: 2 Nota: stiva se citeste de jos in sus 14. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } 8

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: stiva Tudor d. Programul afiseaza: 2 Nota: stiva se citeste de jos in sus 15. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; 9

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); s1.insert("aa"); s2.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } } Care afirmatie este adevarata: b. Programul afiseaza: Varful stivei: aa a. Programul afiseaza: stiva Tudor c. Programul afiseaza: 2 d. Programul afiseaza: Varful stivei: 10 16. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } // specializarea metodei Object.equals // doua cozi sunt egale daca au aceleasi elemente // chiar daca ele au dimensiuni maxime sau nume diferite public boolean equals(Object obiectOarecare) { if (obiectOarecare instanceof CoadaCirculara) { CoadaCirculara cc= (CoadaCirculara)obiectOarecare; boolean b=true; b=b && (cc.numarElemente==numarElemente); int i=prim; int nr=numarElemente; while(b && (nr !=0)){ b=b && cc.v[i].equals(v[i]); nr--; i=(i+1)%maxDim; } return b; 10

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} return false; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: c. Programul afiseaza: X=Y a. Programul afiseaza: X=Y X=Y b. Programul nu afiseaza nimic d. Programul afiseaza: 3 Nota:.. x.adauga("aa");y.adauga("aa");..rezulta ca X=Y (compilator) 17. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } 11

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: d. Programul nu afiseaza nimic a. Programul afiseaza: 3 b. Programul afiseaza: X=Y X=Y c. Programul afiseaza: X=Y Nota: Asemanator cu ex. 16, dar la acest ex. lipsesc liniile 17 34 (subliniate) de la ex. 16 18. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente 12

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); x.adauga("a"); x.adauga("b"); x.adauga("c"); x.adauga("d"); x.adauga("e"); x.adauga("f"); System.out.println(x.element()); } } Care afirmatie este adevarata: b. Programul afiseaza: d a. Programul afiseaza: b c. Programul afiseaza: c d. Programul afiseaza: a 19. Fie urmatoarele clase Java: public interface Actualizare{ public void actualizareNume(String nume); public void actualizareVarsta(int varsta); } interface Afisare{ public void afisare(); public void actualizareVarsta(int varsta); } public class Persoana{ public Persoana(String nume, int varsta){ this.nume=nume; this.varsta=varsta; } public Persoana(){} protected String nume="XXXX"; protected int varsta=0; } class PersoanaSpecializata extends Persoana implements Actualizare, Afisare{ public void actualizareNume(String nume){this.nume=nume;} public void actualizareVarsta(int varsta){this.varsta=varsta;} public void afisare(){ System.out.println("nume= "+nume); System.out.println("varsta= " + varsta); } } public class Client{ 13

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public static void main(String args[]){ PersoanaSpecializata p=new PersoanaSpecializata(); Actualizare act=p; Afisare afis=p; act.actualizareNume("Ionescu"); act.actualizareVarsta(58); afis.afisare(); } } Care afirmatie este adevarata: c. Programul afiseaza: nume= Ionescu varsta= 58 a. Programul este incorect deoarece o clasa nu poate implementa dou interfete b. Programul este incorect deoarece metoda public void afisare() nu face parte din clasa Persoana d. Programul este incorect deoarece metoda public void actualizareVarsta(int varsta) nu face parte din clasa PersoanaSpecializata 20. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void actiune(){x++;System.out.println(x);}; } public class View extends Frame{ private Button b; private Model m; private Controller c; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add(b); m=new Model(); c=new Controller(m); b.addActionListener(c); setSize(100,50); setVisible(true); } } class Controller implements ActionListener{ private Model md; public Controller(Model p){ md=p; } public void actionPerformed(ActionEvent e){ md.actiune(); } 14

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} Care afirmatie este adevarata, dac se face de dou ori click pe butonul stang mouse asupra butonului Actiune: a. Programul nu afiseaz nimic b. Programul afiseaz: 1 2 c. Valoarea atributului f.m.x rmne mereu la valoarea 0 d. Programul afieaz: 0 1 Nota: x=0 si x++..rezulta ca pt. primul click x=0 se afiseaza 1 si pt. al doilea click x=1..se afiseaza 2 21. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void increment(){x++;} public int get_x(){return x;} } public class View extends Frame{ private Button b; protected Model m; private Controller c; protected TextField tf; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add("North",b); m=new Model(); c=new Controller(this); b.addActionListener(c); tf=new TextField(10); add("Center",tf); setSize(100,250); setVisible(true); } } class Controller implements ActionListener{ private View vw; public Controller(View v){ vw=v; } public void actionPerformed(ActionEvent e){ vw.m.increment(); vw.tf.setText(String.valueOf(vw.m.get_x())); } 15

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} Care afirmatie este adevarata, dac se face de dou ori click pe butonul stang Mouse asupra butonului Actiune: c. n cmpul de text f.tf este afisat valoarea 2 a. n cmpul de text f.tf este afiat valoarea 1 b. Programul nu afiseaz nimic d. Valoarea atributului f.m.x rmne mereu la valoarea 0 Nota: Asemanator cu ex. 20 22. Fie urmatorul program Java: import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit"); exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); } 16

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; } } class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } } Care afirmatie este adevarata, dac se face de click pe butonul stang mouse asupra butonului modifica din fereastra fn: d. Doar in cmpul de text field al ferestrelor fo1 si fo2 este afisat valoarea actualizata a atributului Observator.m.i Nota..Vezi liniile subliniate de la frame a. Doar in cmpul de text field al ferestrei fo2 este afiat valoarea actualizata a atributului Observator.m.i b. n cmpul de text field al tuturor ferestrelor este afiat valoarea actualizata a atributului Observator.m.i c. Doar in cmpul de text field al ferestrei fo1 este afiat valoarea actualizata a atributului Observator.m.i

23 Fie urmtoarea clas Java: public class D { int i; float f; boolean b; private static void main(){ D d = new D(1); D d = new D(); D d = new D(1,1); D d = new D(1,1,1); 17

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} } Care afirmaie este adevrat: nstructiunea D d = new D(1); este corect; instructiunea D d = new D(); este corect; instructiunea D d = new D(1,1); este corect; instructiunea D d = new D(1,1,1); este corect; PROBLEME 1. Un program scris n Java poate rula pe orice platforma deoarece: c. Masina virtuala translateaza interpreteaza programul si translateaza apelurile sistem a. Limbajul Java e derivat din C++ b. Compilatorul este identic cu cel de C++ d. Api-ul este portabil 2. Un program scris n Java se va compila cu comanda: a. javac Test c. javac Test.java b. java Test.java d. javac Test.class 3. Un program scris n Java se va lansa cu comanda: a. javac Test.java c. java Test.java b. java Test d. java Test.class 4. Ce este un Applet? d. Un program care ruleaza n contextul unui browser a. Un tip de calculator b. Un program care ruleaza direct pe orice calculator c. Un sit web interactiv 5. Un applet va rula n orice browser deoarece c. Browserul interpreteaza direct codul sursa a. Serverul are o masina virtuala incorporata b. Browserul are o masina virtuala incorporata d. Appleturile nu au nevoie de o masina virtuala 6. Care este scopul metodei statice main ? b. Actioneaza ca un punct de intrare n program a. Sa creeze o interfata cu utilizatorul c. Creaza ferestrele si butoanele aplicatiei d. Actioneaza ca o poarta spe sistemul de operare 7. O clasa Applet furnizeaza: b. Metode care definesc aspectul si comportamentul apletului a. Un browser care s ruleze apletul c. A pagina HTML speciala d. Permisiunile de a comunica cu serverul 8. Ce metoda apeleaza browserul pe un applet nou incarcat? a. Main c. Paint b. Start d. Init 18

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

9. Care este rolul declaratiilor import? a. Permite referirea claselor fara utilizarea de prefixe b. Elimina necesitatea declararii variabilelor c. Permite importul imaginilor folosite d. Elimina apelurile directe a functiilor fara clase 10. In cazul implementarii unei interfete trebuie s definim in mod obligatoriu : a. Doua metode ale interfetei c. Orice metoda a interfetei b. Numai anumite metode ale interfetei d. Toate metodele interfetei 11. Aplicatiile Java ruleaza pe urmatorul sistem de operare: a. Windows c. UNIX b. Linux d. Toate cele trei 12. Urmatorul cod sursa Java se afla ntr-un fisier. Cum se numeste fisierul? class Foo { public static void println() { System.out.println("Foo"); } } public class FooDemo { public static void main(String[] argv) { System.out.println("FooDemo"); Foo.println(); } } a. Foo.java c. FooDemo.Java b. Foo.class d. Foodemo.class 13. Daca bo este boolean, numar este int sir este string atunci care din urmatoarele linii este incorecta? a. If(bo) c. If(numar<=1) b. If(numar<0) d. If(sir==Java) 14. Care sunt valorile variabilelor a i b dupa executarea instructiunilor: int a = 1, b = -2; a = a + b; b = a b; a = a b; a. a=1, b=2 c. a=2, b=-3 b. a=0, b=1 d. a=-2, b=1 Nota: a=1+(-2)=1-2=-1 b=-1 15.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a += b; b = a- b; a -= b; a. a=-1, b=2 c. a=-2, b= 1 b. a=2, b=-1 d. a=-2, b=-1 16.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = 1, b = -2; a = a ^ b; 19

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

b = a ^ b; a = a ^ b; a. a=-2, b=1 b. a=2, b=-2

c. a=-1, b=1 d. a=1, b=-2

17.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a ^= b; b = a ^ b; a ^= b; a. a= -1, b=2 c. a=2, b=-1 b. a= 1, b=-2 d. a=-2, b=1 18. Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a = (a > b ? a : b); b = (a < b ? a : b); a. a= 2, b=-1 c. a=1, b=2 b. a= -1, b= 2 d. a= 2, b= 2 19.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = 1, b = 2; if (a < b ) a = b; if (a < b) b = a; a. a= 1, b=1 c. a=2, b=2 b. a= 1, b= 2 d. a= 2, b= 1 20. Clasa BorderLayout contine campuri statice pentru: a. Adaugarea unor componente in anumite zone ale containerul b. Introducerea unor metode noi c. Specificarea culorii, si a fontului d. Afisarea ferestrei unui applet 21. Constructorul are foloseste la: a. Eliberarea memoriei b. Importa pachete 22. System.out.println este a. O variabila b. O clasa

c. Initializeaza masina virtuala d. Initializeaza noile obiecte create

c. Un obiect d. O metoda

23. Ce valori poate lua o variabila de tip boolean? a. 1 c. true b. 0 d. false 24. Ce valori nu poate lua o variabila de tip boolean? a. 1 c. true b. a==b (a si b sunt variabile de tip int) d. false 25. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip boolean) c. false b. true d. 0 20

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

26. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip int) c. false b. true d. false==x (x este o variabila de tip boolean) 27. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip boolean) c. true b. a==b (a si b sunt variabile de tip int) d. false==x (x este o variabila de tip boolean)

28. Care din urmatoarele tipuri de date poate retine valori de la -32.768 la 32.767 ? a. char c. byte b. short d. int 29. Ce valoare va avea variabila x dupa executarea operatiilor? int x = 0; x = (5*4) % 7; x = x / 5; a. 6 c. 1 b. 1.2 d. 0 Nota: 5*4=2020/7=2 rest 66/5=1 intreg si 30. Ce valoare va avea variabila numar la finalul buclei? int numar = 1; for (int x = 0; x < 4; x++) { numar = numar << 1; } a. 1 c.16 b. 4 d. 32 Nota: Pt. x=0 , x<4 si 0++=1 x=1, x<4 si 1++=2 x=2, x<4 si 2++=3 x=3, x<4 si 3++=4 Nota 4 in baza 2 este 0010 Numar=<<0010=0100 0100 in baza 2 este 16 31. Ce valoare va avea variabila numar la finalul buclei? int numar = -1; for (int x = 0; x < 4; x++) { numar = numar << 1; } a. 0 c. 16 b. -4 d. -16 32. Un vector se instantiaz astfel? a. int vector[100]; c. float [] numere={1.1, 1.2}; b. String [100]sir; d. byte [] buffer; 21

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

33. Un vector se instantiaz astfel? a. int vector[100]; c. float [] numere; b. String [100]sir; d. byte [] buffer = new byte[100]; 34. Ce efect are urmtoarea secventade cod? char a[] = {a, b, c}; char [] b = new char[3]; a=b; a. b se va copia n a c. a si b se refer la aceiasi zona de memorie b. a se va copia n b d. se va genera o exceptie 35. Ce efect are urmtoarea secvent de cod? char a[] = {a, b, c}; String b = new String(data); if(a==b) System.out.println(egale); else System.out.println(inegale); a. Se afiseaz egale c. Eroare la compilare b. Se afiseaz inegale d. Se va genera excepie la rulare 36. Ce efect va avea intructiunea urmatoare? System.out.println("The answer is: "+17+3); a. Programul nu se compileaza c. Se va afisa: The answer is 173 b. Se va afisa: The answer is 20 d. Se va genera o exceptie Nota: uniune de siruri de caractere 37. Care este efectul liniilor de cod urmatoare? if("String".toString() == "String") System.out.println("Equal"); else System.out.println("Not Equal"); a. Programul nu se compileaza c. Afiseaza Not Equal b. Afiseaza Equal d. Genereaza o exceptie 38. O clasa care implementeaza interfata urmatoare public interface AQuestion { public abstract void someMethod() throws Exception; } c. Ar trebui s defineasca o metoda public void someMethod() care va emite exceptii a. Va fi in mod necesar o clasa abstracta b. Ar trebui sa defineasca metoda public abstract void someMethod(); d. Ar trebui s defineasca o metoda public void someMethod() care nu va emite exceptii

39. O clasa care implementeaza interfata urmatoare va implementa n mod obligatoriu public interface AQuestion { 22

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void someMethod(); } a. o metoda public void someMethod(); b. o metoda friend void someMethod(); c. o metoda public void someMethod(); care obligatoriu va emite exceptii d. o metoda public abstract void someMethod(); 40. Care din liniile din codul de mai jos prezinta o problema de incapsulare ? 1. class BadCode { 2. int num; 3. public int getNum() { 4. return num; 5. } 6. public void setNum(int num) { 7. this.num = num; 8. } 9. ... 10. } a. Linia 1 c. Linia 4 b. Linia 2 d. Linia 7 41. Care din liniile urmatoare va genera o exceptie ? 1. class BadCode { 2. private Foo foo; 3. public BadCode (Foo f) { 4. foo = f; 5. } 6. public BadCode() {} 7. protected void useFoo() { 8. int num = foo.num; 9. String name = foo.name; 10. .... 11. } 12. .... 13. } a. Linia 2 c. Linia 6 b. Linia 4 d. Linia 8 42. Dorim sa implementam o clasa total protejata si care sa nu mai fie extensibila, care din liniile urmatoare ar trebui modificata? 1. class Test { 2. private int key = 1234; 3. //... 4. protected void setKey(int privateKey) { 5. this.key = privateKey; 6. } 7. protected int getKey() { 8. return this.key; 9. } 10. //... 11. } a. Linia 1 c. Linia 4 23

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

b. Linia 2

d. Linia 8

43. Functia Clone() are ca scop: class Test { private int key = 1234; //... public Test () {} public Test (int k) { this.key = k; } protected int getKey(){return this.key; } public final Object clone() throws java.lang.CloneNotSupportedException { throw new java.lang.CloneNotSupportedException(); } //... } a. definirea unei clase clonabile c. definirea unei clase care nu poate fi extinsa b. definirea unei clase extensibile d. clasa si orice derivare a acesteia va fi neclonabila 44. Pentru a bloca serializarea unei clase trebuie sa: a. Definim clasa ca fiind finala b. Definim clasa ca fiind statica c. Definim o metoda readObject d. Definim o metoda writeObject

45. Codul sursa urmator ne spune ca: public boolean match(Object o) { return this.getName() == ((SomeClass)o).getName(); } a. obiectele sunt identice c. obiectele fac parte din aceiasi clasa b. obiectele sunt egale d. nici una 46. Pentru a defini un camp care sa stocheze informatii sensibile (conturi, nr. de card) se va folosi: a. String c. Char array b. StringBuffer d. Char 47. Ce efect va produce urmatorul program Java? public class Test { public void method(Object o) { System.out.println("Object Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } } 24

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. Programul nu se compileaza c. Afiseaza Object Version b. Se compileaza dar produce o exceptie la rulare d. Afiseaza String Version 48. Ce efect va produce urmatorul program Java? public class Test { public void method(StringBuffer sb) { System.out.println("StringBuffer Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } } a. Programul nu se compileaza b. Se compileaza dar produce o exceptie la rulare Nota: metoda (StringBuffer sb) ambigua

c. Afiseaza StringBuffer Version d. Afiseaza String Version

49. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(Throwable t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } } c. Afiseaza Before Try si At the End a. Nu se complieaza: nici un obiect Throwable nu a fost emis in blocul try b. Nu se compileaza: nu pot fi prinse obiecte Throwable, ci numai obiecte Exception d. Afiseaza Before Try , Inside Catch si At the End 50. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(IOException t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } 25

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} b. Nu se compileaza: nu pot fi prinse obiecte IOException, ci numai Exception a. Nu se complieaza: nici un obiect IOException nu a fost emis in blocul try c. Afiseaza Before try si At the End d. Afiseaza Before try , Inside Catch si At the End 51. Care din urmatoarele afirmatii este adevarata? d. O metoda statica nu poate returna o variabila nestatica a clasei a. O metoda statica nu poate returna un obicet Exception b. O metoda statica nu poate emite un obiect Exception c. O metoda statica nu poate returna o variabila statica a clase 52. Cum se va comporta urmatorul program? public class A { private void method1() throws Exception { throw new RuntimeException(); } public void method2() { try { method1(); } catch(RuntimeException e) { System.out.println("Caught Runtime Exception"); } catch(Exception e) { System.out.println("Caught Exception"); } } public static void main(String args[]) { A a = new A(); a.method2(); } } a. Programul nu se compileaza c. Afiseaza Caught Runtime Exception b. Afiseaza Caught Exception d. Afiseaza ambele mesaje 53. Cum se va comporta urmatorul program? class Base { public void aMethod() throws ClassNotFoundException { } } public class Derived extends Base { 26

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void aMethod() throws RuntimeException { } } d. Se compileaza corect a. Programul nu se compileaza deoarece RuntimeException nu este derivata din RuntimeException b. Se lanseaza o exceptie ClassNotFoundException la compilare c. Se lanseaza o exceptie RuntimeException la rular 54. Cititi cu atentie urmatorul co sursa: import java.awt.*; public class TestFrame extends Frame { Button bNorth = new Button("North"); Button bSouth = new Button("South"); Button bEast = new Button("East"); Button bWest = new Button("West"); Button bCenter = new Button("Center"); public TestFrame() { setLayout(new BorderLayout()); add(bSouth,BorderLayout.SOUTH); add(bWest,BorderLayout.WEST); add(bEast,BorderLayout.EAST); add(bNorth,BorderLayout.NORTH); add(bCenter); setLayout(new FlowLayout()); validate(); pack(); setVisible(true); } public static void main(String args[]) { TestFrame tf = new TestFrame(); } } b. Se compileaza si afiseaza butoanele pe o singura linie a. Programul nu se compileaza c. Se compileaza dar genereaza o exceptie d. Se compileaza si afiseaza butoanele sub forma de grid

55. O clasa care are totii constructorii privati : a. Trebuie declarata clasa finala c. Poate fi mostenita b. Poate fi instantiata d. Nu poate fi mostenita 56. Urmariti cu atentie codul urmator: public class NiceThreads implements Runnable { public void run() { while(true) { } 27

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} public static void main(String args[]) { NiceThreads nt1 = new NiceThreads(); NiceThreads nt2 = new NiceThreads(); NiceThreads nt3 = new NiceThreads(); nt1.run(); nt2.run(); nt3.run(); } } a. Se compileaza si lanseaza patre fire care vor rula la infinit b. Se compileaza si se lanseaza un singur fir c. Programul nu se compileaza d. Se compileaza dar genereaza o exceptie la rulare 57. Pentru a preveni executarea unei metode simultan de ctre mai multe fire de executie folosim: a. public c. native b. final d. Syncronized 58. Pentru a excuta o procedura n mod atomic delarm metoda ca fiind: a. syncronized c. final b. public d. Native 59. Managerul de asezare implicit pentru o fereastr este: a. LayoutManager c. BorderLayout b. null d. FlowLayout 60. Managerul de asezare implicit pentru un panel este: a. BorderLayout c. null b. GridLayout d. FlowLayout 61. Constructorul clasei de baz se apeleaz prin intermediul cuvntului cheie: a. this c. super b. base d. interface 62. n Java o clasa poate extinde a. cel mult o interfat c. oricte clase b. cel mult o clas d. oricte interfete 63. n Java o interfat poate extinde a. cel mult o interfat c. oricte clase b. cel mult o clas d. oricte interfete 64. n Java o clasa poate implementa cel mult a. o clas c. oricte clase b. o interfat d. oricte interfete 65. Pentru a bloca utilizarea directa a unei clase aceasta se va declara folosind specificatorul: a. abstract c. protected b. final d. Private 66. Pentru a bloca derivarea unei clase aceasta se va declara folosind specificatorul: 28

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. abstract b. final

c. protected d. Private

67. Clasa Menu este derivata din: a. MenuComponent c. PopupMenu b. MenuItem d. MenuBar 68. Lansarea unei exceptii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try 69. Prinderea unei exceptii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try 70. Ce cuvnt nu face parte din limbaj: a. volatile c. dispose b. transient d. native 71. Ce cuvnt nu face parte din limbaj: a. const c. final b. bool d. finally 72. Ce cuvnt nu face parte din limbaj: a. const c. break b. continue d. delete 73. Ce cuvnt nu face parte din limbaj: a. short c. awt b. long d. do 74. Ce cuvnt nu face parte din limbaj: a. class c. interface b. struct d. enum 75. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. int c. goto b. true d. enum 76. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. class c. null b. const d. boolean 77. Ce cuvnt cheie al limbajului nu este folosit: a. strictfp c. instanceof b. const d. transient 78. Ce afiseaz urmtorul program: public class Main { int x=0; int f() { return x+1; } public static void main(String[] args) { 29

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

System.out.println("x este " + f()); } } a. x este 0 c. Eroare la compilare b. x este 1 d. Exceptie la rulare 79. Ce afiseaz urmtorul program: public class Main { int x=0; static int f() { return x+1; } public static void main(String[] args) { System.out.println("x este " + f()); } } a. Eroare la compilare c. x este 0 b. Exceptie la rulare d. x este 1 80. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return x--; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+ f() ); } } a. Eroare la compilare c. x este 0 acum este 0 b. Exceptie la rulare d. x este 0 acum este -1 81. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return ++x; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 1 c. x este 0 acum este 1 b. x este 1 acum este 2 d. x este 0 acum este -1 82. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return (++x)*(x--); } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 0 c. x este 1 acum este 2 b. x este 1 acum este 1 d. x este 2 acum este 4 83. Ce afiseaz urmtorul program: class Element{ 30

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public Element(){ System.out.print(" Element "); } } class Carte extends Element{ public Carte(){ System.out.print(" Carte "); } } class Revista extends Carte{ public Revista(){ System.out.print(" Revista "); } } public class Main { public static void main(String[] args) { Element revista = new Revista(); } } a. Element c. Element Carte Revista b. Revista d. Revista Carte Element 84. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element>{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.Print(); } } a. Nu afiseaza nimic c. Se compileaza dar lanseaza exceptie la rulare b. Nu se compileaza, eroare la compilare d. Carte Revista 85. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ 31

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.add(b); b.Print(); } } a. Nu afiseaza nimic b. Nu se compileaza, eroare la compilare

c. Se compileaza dar lanseaza exceptie la rulare d. Carte Revista Carte Revista

86. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } System.out.println(); } } public class Main { public static void main(String[] args) { Biblioteca b1 = new Biblioteca(); Biblioteca b2 = new Biblioteca(); b2.add(b1); b1.add(b2); b1.Print(); } } a. Nu afiseaza nimic c. Carte Revista Carte Revista b. Se compileaza dar lanseaza exceptie la rulare d. Nu se compileaza, eroare la compilare 87. Cititi cu atentie urmatorul cod sursa: class Memory{ } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } } a. Programul se compileaza dar se blocheaza 32

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

b. Se compileaza, consuma toata memoria si se opreste c. Se compileaza si ruleaza la infinit deoarece nu se aloca nimic d. Se compileaza si ruleaza la infinit deoarece nu se poate consuma toata memoria 88. Cititi cu atentie urmatorul cod sursa: class Memory{ int [ ] matrice; public Memory(){ matrice = new int[100]; } } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } } a. Ruleaza la infinit deoarece memoria se elibereaz automat b. Programul se compileaza dar se blocheaza c. Consuma toata memoria si se opreste d. Ruleaza dar emite o exceptie 89. Cititi cu atentie urmatorul cod sursa: class Memory implements Serializable{ int [] matrice; public Memory(){ matrice = new int[100]; } } a. Clasa Memory extinde clasa Serializable b. Clasa Memory mosteneste clasa Object c. Clasa Memory implementeaz interfata Object d. Clasa Memory implementeaz clasa Serializable 90. n corpul unui constructor se poate apela un alt constructor? a. Doar constructorul clasei de baz prin intermediul cuvntului super b. Doar un constructor al clasei derivate prin intermediul cuvntului super c. Un constructor cu alti parametri d. Un constructor cu aceiasi parametri 91. Obiectul curent se poate transmite ca parametru prin intermediul cuvntului: a. super c. class b. this d. object 92. n prezenta firelor de executie multiple incrementarea atomic a unei variabile partajate se obtine prin intermediul specificatorului: a. X++ c. synchronized b. final d. static 93. n prezenta firelor de executie multiple decrementarea atomic a unei variabile partajate se obtine prin intermediul specificatorului: a. const c. x-b. synchronized d. thread 94. Un fir de executie se obtine prin extinderea clasei: a. Runnable c. Object b. Thread d. Frame 33

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

95. Un fir de executie se obtine prin implementarea interfetei: a. Runnable c. Object b. Thread d. Serializable 96. Un fir de executie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init 97. Un fir de executie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init 98. Urmatorul specificator are efect doar n prezenta firelor de executie: a. run c. start b. synchronized d. static 99. O clas care implementeaz interfata Runnable n mod obligatoriu trebuie: a. s fie public c. s fie declarat synchronized b. s implementeze metoda run d. s fie declarat ca fiind abstract 100. O interfat care extinde interfata Runnable n mod obligatoriu trebuie: a. s fie public c. s implementeze metoda run b. s fie declarat synchronized d. nici una 101. Codul urmtor nu se compileaz, lipseste specificatorul: class NewThread implements Runnable{ } a. public c. abstract b. private d. run

1. Fie programul: ..ok #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc& operator--(){raza--;return *this;}// return by reference private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza: 34

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

c. a. b. d.

3200 3300 3201 3211

Atentie..Se face deosebire dupa Cerc & operator pe linia 2 1.1. Fie programul:ok #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza : a. 3201 b. 3200 c. 3301 d. 3211 Atentie..Se face deosebire dupa Cerc operator (fara &) pe linia 2 1.2. Varianta in plus #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc &operator++(){raza++;return *this;}// return by value Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Raspuns 3312 35

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Atentie: Se face deosebire dupa Cerc &operador pe linia 1

2. Fie programul:ok // singleton // constructor private #include <iostream.h> #include <conio.h> class S{ public: static S* create() { if(i==0){ refS=new S(); i++; } return refS; } void setName(char *s){name=s;} char* getName(){return name;} static int getNr(){return nr;} private: static S* refS; static int i; static int nr; S(){nr++;} char *name; }; int S::i=0; int S::nr=0; S* S::refS=0; void main(){ S *o1, *o2; o1=S::create(); o2=S::create(); o1->setName("Matematica"); o2->setName("Informatica"); cout<<o1->getName()<<endl; cout<<o2->getName()<<endl; cout<<S::getNr()<<endl; getch(); } Programul afiseaza: b. Informatica Informatica 1 3. Fie programul:ok // destructor static, #include <iostream.h> class B{ public: ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: 36

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza : a. ~ B() ~B() ~D() c. ~ B()~D()~B() ~D() b. ~ B() ~D() d. ~ B() ~D() ~B() Atentie..Liniile subliniate sunt diferite 3.1. Fie urmtorul program C++:ok // destructor static #include <iostream.h> #include <conio.h> class B{ public: B(){cout<<"B()"<<endl;} ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} ~D(){cout<<"~D()"<<endl;} }; void main(){ B *b=new B(); // apel B() delete b; b=new D(); // apel B();D() delete b; } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaz: B() ~B() B() D() ~B() a. Programul afiseaz: B() ~B() B() D() ~D() c. Programul afiseaz: B() ~B() B() ~B() d. Programul afiseaz: B() ~B() D() ~B() Atentie..Liniile subliniate sunt diferite

3.2. Fie programul :ok // destructor virtual, #include <iostream.h> class B{ 37

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public: virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza: a. ~ B()~D()~B() ~D() c. ~ B() ~D() b. ~ B() ~B() ~D() d. ~ D()~B()~D() ~B() Atentie....este destructor virtual, ex. diferit fata de destructor static..

3.3. Fie urmtorul program C++:ok // destructor virtual #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *b=new B(); // apel B() delete b; b=new D(); // apel B();D(); // destructorii, in ordine inversa delete b; } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: c. Programul afiseaz: B() ~B() B() D() ~D() ~B() B() ~B() B() D() ~B() ~D() b. Programul afiseaz: d. Programul afiseaz: B() ~B() B() D() ~B() ~B() B() ~B() B() D() ~B() Atentie..este destructor virtualseamana cu ex. precedent care nu are liniile subliniate la acest ex.

4. Fie programul:ok #include <iostream.h> class B{ 38

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< "virtual method v() of D"<<endl;} }; int main(){ B *pb; D d; // pointing to a subclass pb=&d; ((D*)pb)->v(); virtual method v() of D ((D*)pb)->st(); static method st() of D return 0; } Programul afiseaza: c. virtual method v() of D a. virtual method v() of D static method st() of B static method st() of D b. virtual method v() of B d. virtual method v() of B static method st() of D static method st() of B Atentiediferentele sunt liniile subliniate

4.1. Fie programul:ok #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B b, *pb; D d, *pd; pb=&d; pb->st(); //static metod s() of B pb->v(); //virtual metod v() of D return 0; } Programul afiseaza: a. static method s() of D virtual method v() of D b. static method s() of B c. static method s() of D virtual method v() of B d. static method s() of B 39

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

virtual method v() of B Atentiediferentele sunt liniile subliniate

virtual method v() of D

4.2 Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B b, *pb; D d, *pd; pb=&b; pb->st(); // static method st() of B pb->v(); // virtual method v() of B pb=&d; pb->st(); // static method st() of B pb->v(); // virtual method v() of D return 0; } Raspuns static method st() of B virtual method v() of B static method st() of B virtual method v() of D

5. Fie programul :ok // constructor de copiere in clasa de baza; dar absent in clasa derivata // compilatorul creeaza un constructor de copiere implicit // care apeleaza constr de copiere al clasei de baza pentru copierea atributelor din clasa de baza // si copiaza membru cu membru atributele din D #include <iostream.h> class B{...//B este clasa de baza) public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} }; void main(){ B b; // apel B() ..//B() 40

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

B b1(b); // apel B(B & ); nu se mai utilizeaza B()!..//B(B &b ) D d; // apel B();D()..//B() D() D d1(d); B bd(d); // conversie implicita la clasa de baza; ..// B(B &b ) getch(); } Programul afiseaza : c. B() B(B&b) a. B() B() B(B&b) b. B() B() B(B&b) d. B() B(B&b)

B() D() B(B &b) B(B &b) B() D() B(B &b) B(B &b) B() D() B(B &b) D() B(B &b) D() B(B &b) D() B(B &b)

!!! Atentie . Seamana cu 12 , diferentele sunt liniile subliniate

5.1. Fie programul :ok // constructor de copiere atat in clasa de baza cat si in clasa derivata // constructorul de copiere din clasa derivata utilizeaza pe B() pentru constructia // // subbiectului B #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} D(D &d){cout<<"D(D &d)"<<endl;} }; void main(){ B b; // apel B()//B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()!...//B(B &b ) D d; // apel B();D()//B() D() D d1(d); // nu se apeleaza B(B &b)B() D(D&d) } Programul afiseaza : b. B() B(B&b) B() D() B() D(D &d) a. B() B(B&b) B() D() B(B &b) D(D &d)- nu c. B() B() B(B&b) B() D() B(B &b) D() B(B &b) d. B() B(B&b) D() B(B &b) D() B(B &b) - nu !!! Atentie .Seamana cu 11, diferentele sunt liniile subliniate

6. Fie programul :ok #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} void operator++(){raza++;} 41

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

private: float raza; }; class Cilindru: public Cerc{ public: Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){}; void operator++(){inaltime++;} float getInaltime(){return inaltime;} private: float inaltime; }; void main(){ Cerc *pc; Cilindru c(1,5); pc=&c; ++ *pc; cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl; getch(); } Programul afiseaza : a. 1 6 b. 2 5

c. 2 6 d. 1 5

Inaltimea se incrementeaza 1++=2 Raza nu se incrementeazaramane 5 Pt. cilindru..rezulta (2 5)

7. Fie programulok //static atribut #include <conio.h> #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){nr--; delete[] name;} private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); } void main(){ for (int i=0; i<5; i++)f(); getch(); } 42

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Programul afiseaza: a. 1 2 3 4 5 c. 0 0 0 0 0 b. 1 1 1 1 1 d. 0 1 2 3 4 i=00++=1 i=11++=2 i=22++=3 i=33++=4 i=44++=5 Atentie..liniile subliniate sunt diferite strcpy(destinatie,sursa)-functia are rolul de a copia sirul de la adresa sursa la adreasa destinatie 7.1. Fie programul #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ nr=0; name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){ delete[] name; } private: char *name; long nr; }; void f(){ Person *p = new Person("Balanescu"); delete p; } void main(){ for (int i=0; i<5; i++)f(); } Programul afiseaza: 11111 Atentie..liniile subliniate sunt diferite Nu are #conio.h 8. Fie urmtorul program C++:..ok #include <iostream.h> class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: 43

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Cerc(double r=0.0, int x=0, int y=0);// constructor protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<<p.x<<", "<<p.y<< ']'; return output; } //implementare Cerc Cerc::Cerc(double r, int a, int b):Punct(a,b), raza(r){} ostream& operator<<(ostream& output, const Cerc& c){ output <<"Centru= "<< (Punct)(c) <<"; Raza= "<<c.raza; return output; }; void main(){ Punct *punctPtr=0, p(30,50); Cerc *cercPtr=0, c(2.7,120,89); cout<<p<<endl; cout<<c<<endl; // Cerc tratat ca Punct (prin pointer la clasa de baza): punctPtr=&c; cout<< *punctPtr << endl; /* Cerc tratat ca Cerc (prin pointer la clasa de baza, dar cu conversie explicita de la Punct la clasa derivata Cerc */ cercPtr= (Cerc *)(punctPtr); cout<< *cercPtr<<endl; /*Punct tratat ca Cerc: programatorul isi asuma responsabilitatea unor erori: anumite atribute sunt nedefinite */ punctPtr= &p; // punctPtr refera un Punct //Urmeaza conversie asumata de programator, //de la clasa de baza la clasa derivata cercPtr=(Cerc *)(punctPtr); // cercPtr refera p ca pe un cerc //dar acest asa-zis cerc are raza nedefinita cout<< *cercPtr <<endl; } Prin xx este desemnat o valoare nedefinit. Care din afirmatiile urmtoare sunt adevrate: d. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx a. Programul afiseaz: Punct[30,50] 44

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Centru=Punct[30,50]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx b. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Centru=Punct[30,50]; Raza=xx c. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx 9. Fie urmtorul program C++:ok #include <iostream.h> class B{ public: B(int i):i(i){} protected: int i; }; class D1: public B{ public: D1(int i):B(i){} void inc(){i++;} }; class D2: public B{ public: D2(int i):B(i){} void afisare(){cout<<i=<<i<<endl;} }; class D: public D1, public D2{ public: D(int i):D1(i),D2(i){} }; void main(){ D d(0); d.inc(); d.afisare(); } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz i=-1 c. Programul afiseaz i=0 b. Programul afiseaz i=2 d. Programul afiseaz i=1

10. Fie urmtorul program C++:ok #include <iostream.h> class B{ 45

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public: B(int i=-1):valB(i){} B& operator=(const B &b){ valB=b.valB; cout<<"B::op= "; return *this; } private: int valB; }; class D:public B{ public: D(int i, int j):B(i),valD(j){} D& operator=(const D &d){ valD=d.valD; cout<<"D::op= "; return *this; } private: int valD; }; void main(){ B b(0), b1(1); B *pB; D d(0,0), d1(1,1); b=b1; d=d1; b=d; pB=&d; *pB=d; pB->operator=(d); } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaz: B::op= D::op= B::op= B::op= B::op= a. Programul afiseaz : B::op= D::op= D::op= B::op= D::op= c. Programul afiseaz: B::op= D::op= B::op= D::op= D::op= d. Programul afiseaz: B::op= D::op= D::op= D::op= B::op= 11. class A{ok int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: 46

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 public: void m(){ x=1; // 2 b.x=1; //3 } }; void main(){ B b(1); // 4 } Care din urmtoarele instructiuni sunt eronate: c. b.x=1; // 3 a. B b; // 1 b. x=1 // 2 d. B b(1); // 4 (din functia main) error C2248: 'x' : cannot access protected member declared in class 'B' : see declaration of 'x' Error executing cl.exe. 12. Fie programul #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} // 4. supraincarcare metoda virtuala, neacceptata: // B::v() conflicts with base class A // virtual int v(){cout<<"int B::v()"<<endl; return 1;} }; void main(){ A a, *pa; B b; pa=&a; pa->s(); pa->s(1); pa->v(); pa->v(1); pa=&b; pa->s(); pa->s(1); pa->v(); pa->v(1); } Care din rezultatele urmatoare sunt afisate prin executarea programului? 47

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void A::v() virtual void B::v(int) b. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) c. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void B::v() virtual void B::v(int) d. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) int B::s() void B::s(int) virtual void B::v() virtual void B::v(int)

12.1. Fie urmatorul program:ok #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } 48

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

// 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; void main(){ A *pa; B b; pa=&b; pa->s(); pa->v(1); //(daca ..s(1) si V(0)..acelasi raspuns) } Prin executarea sa, programul afiseaza: c. void A::s() void B::v(int) virtual void B::v(int) a. void B::v() void A::v(int) b. void A::v() void B::v(int) d. void A::v() void A::v(int) !!! Atentie, diferentele sunt liniile subliniate Varianteposibile de ex. 1. pa=&b; pa->s(1); pa->v(1); void A::s(int) virtual void B::v(int) 2. pa=&b; pa->s(); pa->v(); void A::s virtual void A::v

12.2. Fie urmatorul program:,,,ok #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; 49

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void main(){ A *pa; B b; pa=&b; pa->v(); pa->s(1); } Prin executarea sa, programul afiseaza: d. void B::v()??? void A::s(int) a. void B::v() void A::v(int) b. void A::v() void B::v(int) c. void A::v() void A::v(int) Raspuns..nici o varianta corect este.. void A::v virtual void A::s(int) !!!!Atentie..diferentele sunt liniile subliniate Variante posibile 1.pa=&b; pa->v(); pa->s(); virtual void A::v() void A::s() 2. pa=&b; pa->v(1); pa->s(); virtual void B::v(int) void A::s()

13. Fie urmtorul program C++:..ok #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; a.m(); p=&b; p->v(); } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaza mesajul: 50

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

A:m() B:(v) a. Expresia p->v()este incorect deoarece metoda v este inaccesibil c. Programul afiseaz mesajul: A:v() d. Expresia a.m() este incorect deoarece metoda m este inaccesibil 14. Fie urmtorul program C++, n care operatorul de insertie << este suprancrcat. Operatorul de atribuire = este cel predefinit, cu semantica prin referinta..ok #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaz: a. Programul afiseaz: 10 20 10 20 1000 20 10 20 c. Programul afiseaz: d. Programul afiseaz: 1000 20 1000 20 10 20 1000 20 Nota. Lipsesc liniile subliniate de la 15.1. Este suprainacarcuare cu semntica prin referinta. 14.1. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate chiar si n cazul de autoatribure d=d.ok #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); 51

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } // supraincarcare cu semantica prin valoare C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // fara verificarea cazului de autoatribuire d=d delete[] pi; dim=x.dim; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: 10 20 10 20 xx yy b. a) Programul afiseaz: 10 20 1000 20 xx yy c. Programul afiseaz: 1000 20 10 20 xx yy d. Programul afiseaz: 10 20 10 20 52

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

10 20 Nota. Liniile subliniate sunt in plus fata de ex. 14. Este supraincarcare cu semnatica prin valoare.

14.2. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate numai dac d?s.ok #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // numai daca destinatia difera de sursa if(this!=&x){ dim=x.dim; delete[] pi; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} } return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate: d. Programul afiseaz: 53

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

10 20 10 20 10 20 a. Programul afiseaz: 10 20 10 20 xx yy b. Programul afiseaz: 10 20 1000 20 xx yy c. Programul afiseaz: 1000 20 10 20 xx yy Nota: Diferente fata de ex. 14.1..linia subliniata..

ERORI 15. Fie urmtorul program C++:ok #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int i)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } }; class B:public A{ public: // 1. int s(){ cout<<"int A::s()"<<endl; return 1; } // 2. void s(int i){ i++;cout<<"void A::s(int i)"<<endl; } // 3. virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } // 4. virtual int v(){ cout<<"int A::v()"<<endl; return 1; 54

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} }; Care din afirmatiile urmtoare sunt adevrate: d. //4. este incorect a. //1. este incorect b. //2. este incorect c. //3. este incorect 15.1. Se considera urmatoarele clase: class B{ public: int i; protected: int j; private: int k; public: B(){i=j=k=0;} void set_j(int pj){j=pj;} int get_j(){return j;} void set_k(int pk){k=pk;} int get_k(){return k;} }; class D: public B{ public: D(){ i=1; j=1; k=1; // 1 set_k(1); // 2 } }; class C{ public: C(){ b.i=2; b.j=2; // 3 b.set_j(2); // 4 b.k=2; // 5 b.set_k(2); // 6 } private: B b; }; Care din afirmatiile urmatoare sunt adevarate? a. instructiunile // 1, // 3 si // 5 sunt toate incorecte b. doar instructiunile // 2, si // 4 sunt incorecte c. doar instructiunile // 3 si // 4 sunt incorecte 15.2. Fie urmtorul program C++:ok class A{ int x; public: A(int x):x(x){}; 55

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

}; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){ x=1; // 3 //b.x=1; //x nu este accesibil obiectelor } }; void main(){ B b(1); // 4 } Care din urmtoarele instructiuni sunt eronate: b. B b(1); // 2 (din clasa D) a. B b; // 1 c. x=1; // 3 d. B b(1); // 4 (din functia main) error C2059: syntax error : 'constant' error C2040: 'b' : 'class B (void)' differs in levels of indirection from 'class B' Error executing cl.exe.

15.3. Fie urmatorul program #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} 56

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

}; //4.supraincarcare metoda virtuala, virtual void v(){count<<"int B::()"<<endl:return1} }; Care definitie este incorecta? 1, 2, 3 sau 4?? Raspuns 4

16. Fie urmtorul program C++:ok #include <iostream.h> class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Persoana q="Balanescu"; void fvalue(Persoana p){p.afisare();} void faddress(Persoana *p){p->afisare();} void freference(Persoana &p){p.afisare();} void main(){ fvalue(q); faddress(&q); freference(q); fvalue("Tudor"); freference("Tudor");// Warning: temporary used for p } Care din afirmatiile urmtoare sunt adevrate: d. Programul afiseaz: Balanescu Balanescu Balanescu Tudor Tudor a. Expresia faddress(&q); este eronat; b. Instructiunea de declarare Persoana q="Balanescu"; este eronat; c. Expresia p->afisare() este eronat; error C2664: 'freference' : cannot convert parameter 1 from 'char [6]' to 'class Persoana &' A reference that is not to 'const' cannot be bound to a non-lvalue

17. Analizati mecanismele de conversie din urmatorul program: (2009)..ok #include <conio.h> #include <iostream.h> class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: 57

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

float x,y; friend ostream& operator<<(ostream &stream, const Punct &p ); }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; friend ostream& operator<<(ostream &stream, const Complex &c ); friend Punct::operator Complex(); }; // in varianta aceasta, Punct::operator Complex nu trebuie declarata functie prietena //Punct::operator Complex(){ return Complex(x,y);} Punct::operator Complex(){//functie friend a clasei Complex Complex c; c.x=x;c.y=y; return c; } ostream& operator<<(ostream &stream, const Punct &p ){ stream << "("<<p.x<<","<<p.y<<")"; return stream; } ostream& operator<<(ostream &stream, const Complex &c ){ stream <<c.x<<"+"<<c.y<<"*i"; return stream; } void main(){ Punct p(2,3); Complex c(8,9); cout<<(Complex)p<< endl<<(Punct)c<<endl; p=c; cout<<p<<endl; p=1; cout<<p<<endl; int i=p; cout<<i<<endl; c=p=1; (Punct)((Complex)p); getch(); } Raspuns 2+3*i (8,9) (8,9) (1,0) 1

18. Care va fi continutul fisierului H.TXT in urma executarii programului urmator?...ok #include <stdio.h> FILE *f; char x, y, z; void main(){ f = fopen(H.TXT,w); 58

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

fprintf(f,Ieri %d\n,13); fprintf(f,Azi %d,14); fprintf(f,Maine %d\n,15); fclose(f); } Raspuns.. Ieri 13 Azi 14Maine 15

19. Se considera programulok #include <stdio.h> void aplic(int x, int *y){x+=3; (*y)-=2; printf(%d, %d, x, *y);} void main(void){int x=12, y=20; aplic(x, &x); printf(,%d,,x); printf(%d,,y);aplic(y,&y); } Ce se va afisa in urma executarii acestuia: b. 15,10,10,20,23,18 c. 15,13,13,13,16,11 a. 13,13,13,13,16,14 d. 15,10,15,20,23,20 20. Care este rezultatul tiparit de programul urmator?...ok #include <stdio.h> #include <string.h> void f(char s[], int); void main(){f(examenul,0);} void f(char s[256], int i){ if(i<strlen(s)) { f(s, i+1); if (strchr(aeiou, s[i]) != 0) printf(%c, s[i]); } } a. eaeu c. ueae b. examenul d. e

CALCULATOR 21 Fie programul urmator:ok #include <iostream.h> class Calculator{ private: int value; int keep; char toDo; public: void add(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='+'; // what to do later } void subtract(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='-'; // what to do later 59

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} void multiply(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='*'; // what to do later } void compute(){ if (toDo=='+') value += keep; else if (toDo == '-') value = keep-value; else if (toDo == '*') value *= keep; } void clear(){value=keep=0;} void digit (int x){value=value*10+x;} int display(){ return value;} Calculator(){clear();} }; void main(){ Calculator c; c.digit(1); c.digit(0); c.add(); c.digit(2); c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1); c.digit(0); c.subtract(); c.digit(2); c.digit(0); c.compute(); c.multiply(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Se cere sa indicati care din rezultatele urmatoare sunt afisate prin executarea acestui program: a. 25 -10 b. 35 50 21.1 Fie programul: #include "Calc.h" void main(){ Calculator c; c.digit(1);c.digit(0); c.add(); c.digit(2);c.digit(0); c.compute(); c.add(); 60 c. 35 -50 d. 35 -20

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1);c.digit(0); c.multiply(); c.digit(2);c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Programul afiseaza a. 35 205 b.10 20

c. 205 35 d. 20 10

22. Se considera programul: #include <iostream.h> class C{ public: C(){i=0;}; void set_i(int pi){cout << "C::set_i (int)"<<endl;i=pi;} //void set_i(int pi)const{i=pi;} // error: cannot modify a const object int get_i (){cout << "C::get_i ()"<<endl; return i;} int get_i()const {cout << "C::get_i ()const"<<endl;return i;} int i; }; void main(){ int j; C x; const C y; x.i=1; x.set_i(2); j= x.get_i(); //y.i=1; // error: cannot modify a const object //y.set_i(2); // warning: non-const function called for a const object j= y.get_i(); } Ce rezultate afiseaza acest program? c. C ::set_i(int) C::get_i() C::get_i()const a. C ::set_i(int) C::get_i() const C::get_i() b. C ::set_i(int) C::get_i() C::get_i() d. C ::set_i(int) C::get_i() const 61

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

C::get_i()const

23. Fie urmtorul program C++, unde functia abs calculeaz valoarea absolut a unui numr real #include <iostream.h> void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="<<a<<endl; int i=-1; abs(i); //temporary used for parameter x cout<<"i="<<i<<endl; // i=-1 } La compilare a fost emis urmtorul mesaj de avertizare: Warning: temporary used for parameter x in call to abs(float &) Care din afirmaiile urmtoare sunt adevrate: a. Programul afiseaz: c. Programul afiseaz: a =1 a = -1 i = -1 i = -1 b. Programul afiseaz: d. Programul afiseaz: a =1 a = -1 i=1 i=1

24. Fie urmatorul program C++ // Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); 62

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} Care expresie este incorecta: a. b.m(); c. p->m(); b. p=&a; d. p->v(); Raspunsgresit b:m() si b:v()

24.1. Fie urmatorul program C++ // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]=-100; cout<<(x=y)<<endl; } Raspuns.. 10 20 Atentie deosebirea este ultima linie subliniata

24.2. Fie urmatorul program C++ // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; 63

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]= -100; cout<<x<<endl; } Raspuns -100 2 3 Atentie .. deosebirea este ultima linie subliniata

24.3. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); x=y; y.set(0,-1000); cout<<x<<endl; } Raspuns Programul afiseaza: -1000 20 Atentiedeosebirea este penultima linie 64

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TUDOR, ANDREI, CAR 25. Fie urmatorul program C++ #include "iostream.h" template <class T> class Fifo{ public: Fifo(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>Fifo<T>::Fifo(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void Fifo<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T Fifo<T>::get(){ return support[first]; } template <class T> void Fifo<T>::remove(){ first= ++first % nrmax; --nrelem; } class Person { public: Person(char *name); Person(); //necesar pentru a intializa tablouri virtual void display(); virtual void process(); private: char *name; }; class Car { public: Car(char *name); Car(); virtual void display(); virtual void process(); private: char *name; }; Person::Person(char *name):name(name){}; Person::Person(){}; 65

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; Car::Car(){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } Fifo<Person> queuePerson(3); Fifo<Car> queueCar(3); void main(){ queuePerson.put(Person("Andrei")); queuePerson.put(Person("Tudor")); queueCar.put(Car("B-39-TDR")); queuePerson.get().process(); queuePerson.remove(); queueCar.get().process(); queueCar.remove(); queuePerson.get().process(); queuePerson.remove(); } Raspuns A Person: Andrei A Car:B-39-TDR A Person: Tudor 25.1. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; 66

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

}; #endif //elements.h #include "abselem.h" #include "iostream.h" class Person: public AbstractElem{ public: Person(char *name); virtual void display(); virtual void process(); private: char *name; }; class Car: public AbstractElem{ public: Car(char *name); virtual void display(); virtual void process(); private: char *name; }; //driver.cpp #include "elements.h" #include "LIST.h" LIST x(3); void main(){ x.put(new Person("Tudor")); x.put(new Person("Andrei")); x.put(new Car("B-39-TDR")); x.get()->process(); x.remove(); x.get()->process(); x.remove(); x.get()->process(); x.remove(); } //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } //elements.cpp #include "elements.h" Person::Person(char *name):name(name){}; 67

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } Programul afiseaza datele in ordinea: a. Tudor Andrei B-39-TDR b. B-39-TDR Andrei Tudor c. Andrei B-39-TDR Tudor d. B-39-TDR Tudor Andrei Sau scrise asa: A Person: Tudor A Person: Andrei A Car: B39-TDR 26. Se considera programul C:ok #include <stdio.h> int f(void){ int i = 0; return (i++); } int g(void){static int x = 0; return (x++); } void main(void){ int k; for (k = 0; k < 3; k++) printf("F %d\n", f()); for (k = 0; k < 3; k++) printf("G %d\n", g()); } Analizati modul de functionare si precizati care este iesirea acestui program. b) F0 F0 F0 G0 G1 G2 27. Se considera programul #include <stdio.h> void main(void){ int s=0; int k; for (k = 1; k <= 10; ++k); s += k; printf("Suma primelor 10 de numere naturale nenule este %d\n", s); } Ce afiseaza programul: a) 55 c) uneori si 55 b) intotdeauna 11 d) uneori si 11

68

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

28. Se considera programul: #include <stdio.h> void main(void){ int n1, n2; printf("n1 = "), scanf("%d", &n1); printf("n2 = "), scanf("%d", &n2); if (n2 =! 0) printf("n1/n2 = %d\n", n1/n2); else printf("Impartire prin ZERO\n"); } Ce se afiseaza pentru n1 = 8 si n2 = 16? a) n1/n2 = 0 c) n1/n2 = 16 b) n1/n2 = 8 29. Fie urmatorul program..??-cod gresit // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; 69

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} void LIST::remove(){ first= ++first % nrmax; --nrelem; } int main() { LIST(5); return 0; } A. 3 2 0 0 B. 3 3 0 0 C. 3 3 1 1 D. 3 2 1 2 E. 3 2 1 2

TEORIE 30. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } a. Clasa C este o clasa generica c. Clasa C este derivata din clasa T b. Clasa C este o clasa abstracta d. Clasa T este derivata din clasa C !!! O clasa generica poate opera cu tipuri de date nespecificate 70

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

31. Fie urmatoarea specificare de clase: Class Complex; Class Punct{ public: Punct(float x=0, float y=0) x(x), y(y) () operator Complex(); operator float() (return x;) private: float x, y, }; class Complex( public: Complex(float x=0, float y=0 x(x), y(y)() Operator Punct() (return PUNCT(x,y),) private: float x,y; }; Metoda operator Complex operator float() este utilizata pentru: A. Conversia unui obiect Punct in obiect Complex B. Conversia obiectelor Complex in numere reale C. Conversia unui numar real in obiect Complex D. Conversia unui obiect Complex in obiect punct

31.1. Fie urmatoarea specificare de clase: class Complex class Punct{ public: Punct(float x=0, float y=0)x(x),y(y)() Operator Complex(); Operator float(){return x;) private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0)x(x),y(y)() operator Complex(); operator float(){return x;} private: float x,y; }; Metoda operator Complex operator float() este utilizata pentru: A. Conversia unui obiect Complex in obiect punct B. Conversia obiectelor Complex in numere reale C. Conversia unui obiect Punct in obiect Complex D. Conversia unui numar real in obiect Complex Atentie.. deosebire liniile subliniate

71

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

32. Fie urmatoarea specificare de clasa: //file abslist.h #ifndef ABSLIST_H #define ABSLIST_H #include d:\tudor\c_cpp\abstract\abselem.h* class AbstractList{ public: virtual void erase()=0; virtual void put(abstractElm*ae)(); virtual AbstractElm*get()(); virtual int isEmpty()(); virtual int isFull()(); }; #endif Care afirmatie este corecta? A. AbstractList este o clasa abstracta B. isEmpty este metoda virtuala pura C. AbstractList este o clasa concreta D. Obiectele clasei pot fi construite cu AbstractList() !!! Clasa abstracta trebuie intodeauna sa aiba o functie virtuala pura

33. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } 72

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. b. c.

Clasa C defineste o structura de tip coada (FIFO) Clasa C defineste o structura de tip stiva (LIFO) Clasa C este un vector d. Clasa C este abstracta

33.1. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } Care afirmatie este adevarata: a. LIST este o structura de date de tip coada b. LIST este o structura de date de tip stiva 73

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

c. LIST este o clasa abstracta d. LIST este un vector. Nota.. sunt diferente..lipsesc liniile de la //elements.h..si de la //elements.cpp..

35. Fie urmatorul program: #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; Care afirmatie este corecta: a. Definitia virtual void v()supraincarca definitia virtual void v(int i) b. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v. c. void v() este metoda ce va fi legata static. d. in expresia p->v(); metoda v este legata static

36. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Constructorul Persoana(char *) poate fi utilizat pentru: a. Conversia obiectelor Persoana in siruri de caractere b. Conversia sirurilor de caractere in obiecte Persoana c. Construirea de siruri de caractere d. Conversia obiectelor Complex in obiecte Persoana

37. Fie programul:ok #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); delete p; 74

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} void main(){ while(1)f(); } Care afirmatie este adevarata: a. Programul afiseaza un sir finit de numere 1 2 3 4...etc. pana memoria este epuizata b. Programul afiseaza secventa infinita 1 2 3 4...etc. deoarece memoria nu este epuizata c. Programul nu afiseaza nimic d. Programul afiseaza 1 apoi se opreste 38. Fie urmtorul program C++: #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ name=new char[strlen(p)+1]; strcpy(name,p); } ~Person(){delete[] name;} private: char *name; }; void f(){ // obiect nou, alocare dinamica in memoria heap Person *p =new Person("Balanescu"); delete p; } void main(){ while(1)f(); } Care din afirmatiile urmtoare sunt adevrate: c. Programul nu se termin, deoarece conditia de continuare din instructiunea while este mereu ndeplinit a. Programul se termin, deoarece instructiunea delete p elibereaz memoria alocat pentru obiectul referit de p b. Programul se termin, deoarece la iesirea din functia f se elibereaz memoria alocat pe stiv pentru obiectul referit de p d. Programul se blocheaz la epuizarea memoriei heap

39. Fie programul: //destructor explicit #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;} private: char *name; }; void f(){Person *p = 75

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java } void main(){ while(1)f(); } Care din afirmatiile urmatoare sunt adevarate: Raspuns: La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu este eliberat

40. Fie urmatoarea specificare de clase: class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; }; Punct::operator Complex(){ return Complex(x,y);} Metoda Punct:: operator Complex() nu a fost implementat inline, precum operator Punct() deoarece b. Constructorul Punct (float, float) trebuie declarat inaintea metodei Punct:: operator Complex() .. c. Este metoda friend a clasei Complex d. Este metoda friend a clasei Punct

76

Name: ________________________ Class: ___________________ Date: __________

ID: A

Subiecte proiectare si programare orientata obiect licenta informatica 4 ani


Multiple Choice Identify the letter of the choice that best completes the statement or answers the question. __A__ 1. Fie urmtorul program C++: #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; a.m(); p=&b; p->v(); } Care din afirmatiile urmtoare sunt adevrate: a. Expresia p->v()este incorect deoarece metoda v este inaccesibil b. Programul afiseaza mesajul: A:m() B:(v) c. Programul afiseaz mesajul: A:v() d. Expresia a.m() este incorect deoarece metoda m este inaccesibil

Name: ________________________ __D__ 2. Fie urmtorul program C++:


#include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int i)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } }; class B:public A{ public: // 1. int s(){ cout<<"int A::s()"<<endl; return 1; } // 2. void s(int i){ i++;cout<<"void A::s(int i)"<<endl; } // 3. virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } // 4. virtual int v(){ cout<<"int A::v()"<<endl; return 1; }

ID: A

};
Care din afirmatiile urmtoare sunt adevrate: a. //1. este incorect b. //2. este incorect c. //3. este incorect d. //4. este incorect

Name: ________________________ __B__ 3. Fie urmtorul program C++, n care operatorul de insertie << este suprancrcat. Operatorul de atribuire = este cel predefinit, cu semantica prin referinta. #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&);

ID: A

private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: 10 20 10 20 b. Programul afiseaz: 10 20 1000 20 c. Programul afiseaz: 1000 20 10 20 d. Programul afiseaz: 1000 20 1000 20

Name: ________________________ __A__

ID: A

4. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate chiar si n cazul de autoatribure d=d.
#include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&);

private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } // supraincarcare cu semantica prin valoare C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // fara verificarea cazului de autoatribuire d=d delete[] pi; dim=x.dim; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl;

}
n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate:

Name: ________________________ a. Programul afiseaz: 10 20 10 20 xx yy a) Programul afiseaz: 10 20 1000 20 xx yy Programul afiseaz: 1000 20 10 20 xx yy Programul afiseaz: 10 20 10 20 10 20

ID: A

b.

c.

d.

Name: ________________________ __D__

ID: A

5. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate numai dac d?s.
#include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&);

private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // numai daca destinatia difera de sursa if(this!=&x){ dim=x.dim; delete[] pi; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} } return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl;

}
n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate:

Name: ________________________ a.

ID: A

b.

c.

d.

__A?__

6.

Programul afiseaz: 10 20 10 20 xx yy Programul afiseaz: 10 20 1000 20 xx yy Programul afiseaz: 1000 20 10 20 xx yy Programul afiseaz: 10 20 10 20 10 20 Fie urmtorul program C++, unde functia abs calculeaz valoarea absolut a unui numr real:

#include <iostream.h> void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="<<a<<endl; int i=-1; abs(i); //temporary used for parameter x cout<<"i="<<i<<endl; // i=-1

}
La compilare a fost emis urmtorul mesaj de avertizare: Warning: temporary used for parameter x in call to abs(float &) Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: a =1 i = -1 b. Programul afiseaz: a =1 i=1 c. Programul afiseaz: a = -1 i = -1 d. Programul afiseaz: a = -1 i=1

Name: ________________________

ID: A

__D__

7. Fie urmtorul program C++:


#include <iostream.h> class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: Cerc(double r=0.0, int x=0, int y=0);// constructor protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<<p.x<<", "<<p.y<< ']'; return output; } //implementare Cerc Cerc::Cerc(double r, int a, int b):Punct(a,b), raza(r){} ostream& operator<<(ostream& output, const Cerc& c){ output <<"Centru= "<< (Punct)(c) <<"; Raza= "<<c.raza; return output; }; void main(){ Punct *punctPtr=0, p(30,50); Cerc *cercPtr=0, c(2.7,120,89); cout<<p<<endl; cout<<c<<endl; // Cerc tratat ca Punct (prin pointer la clasa de baza): punctPtr=&c; cout<< *punctPtr << endl; /* Cerc tratat ca Cerc (prin pointer la clasa de baza, dar cu conversie explicita de la Punct la clasa derivata Cerc */ cercPtr= (Cerc *)(punctPtr); cout<< *cercPtr<<endl; /*Punct tratat ca Cerc: programatorul isi asuma responsabilitatea unor erori: anumite atribute sunt nedefinite */ punctPtr= &p; // punctPtr refera un Punct //Urmeaza conversie asumata de programator, //de la clasa de baza la clasa derivata cercPtr=(Cerc *)(punctPtr); // cercPtr refera p ca pe un cerc //dar acest asa-zis cerc are raza nedefinita cout<< *cercPtr <<endl;

}
8

Name: ________________________ Prin xx este desemnat o valoare nedefinit. Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx b. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Centru=Punct[30,50]; Raza=xx c. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx d. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx 8. Fie urmtorul program C++:
// constructor de copiere in clasa de baza; // dar absent in clasa derivata #include <iostream.h> class B{ public: B(){cout<<"B();";} B(B &b){cout<<"B(B &b);";} }; class D: public B{ public: D(){cout<<"D();";} }; void main(){ B b; B b1(b); D d; D d1(d); B bd(d);

ID: A

__A__

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: B() B(B &b) B() D() B(B &b) B(B &b) b. Programul afiseaz: B() B() B() D() B(B &b) B(B &b) c. Programul afiseaz: B() B() B(B &b) D() B(B &b) B(B &b) d. programul afiseaz: B() B(B &b) B() D() B() B() 9

Name: ________________________ __B__ 9. Fie urmtorul program C++:


// destructor static #include <iostream.h> #include <conio.h> class B{ public: B(){cout<<"B()"<<endl;} ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *b=new B(); // apel B() delete b; b=new D(); // apel B();D() delete b;

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: B() ~B() B() D() ~D() b. Programul afiseaz: B() ~B() B() D() ~B() c. Programul afiseaz: B() ~B() B() ~B() d. Programul afiseaz: B() ~B() D() ~B()

10

Name: ________________________ __B__ 10. Fie urmtorul program C++:


// destructor virtual #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *b=new B(); // apel B() delete b; b=new D(); // apel B();D(); // destructorii, in ordine inversa delete b;

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: B() ~B() B() D() ~D() ~B() b. Programul afiseaz: B() ~B() B() D() ~B() ~B() c. Programul afiseaz: B() ~B() B() D() ~B() ~D() d. Programul afiseaz: B() ~B() B() D() ~B()

11

Name: ________________________ __C__ 11. Fie urmtorul program C++:


#include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ name=new char[strlen(p)+1]; strcpy(name,p); } ~Person(){delete[] name;} private: char *name; }; void f(){ // obiect nou, alocare dinamica in memoria heap Person *p =new Person("Balanescu"); delete p; } void main(){ while(1)f();

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul se termin, deoarece instructiunea delete p elibereaz memoria alocat pentru obiectul referit de p b. Programul se termin, deoarece la iesirea din functia f se elibereaz memoria alocat pe stiv pentru obiectul referit de p c. Programul nu se termin, deoarece conditia de continuare din instructiunea while este mereu ndeplinit d. Programul se blocheaz la epuizarea memoriei heap

12

Name: ________________________ __C__ 12. Fie urmtorul program C++:


#include <iostream.h> class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Persoana q="Balanescu"; void fvalue(Persoana p){p.afisare();} void faddress(Persoana *p){p->afisare();} void freference(Persoana &p){p.afisare();} void main(){ fvalue(q); faddress(&q); freference(q); fvalue("Tudor"); freference("Tudor");// Warning: temporary used for p

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Expresia faddress(&q); este eronat; b. Instructiunea de declarare Persoana q="Balanescu"; este eronat; c. Expresia p->afisare() este eronat; d. Programul afiseaz: Balanescu Balanescu Balanescu Tudor Tudor

13

Name: ________________________ __C__ 13. Fie urmtorul program C++:


#include <iostream.h> class B{ public: B(int i):i(i){} protected: int i; }; class D1: public B{ public: D1(int i):B(i){} void inc(){i++;} }; class D2: public B{ public: D2(int i):B(i){} void afisare(){cout<<i=<<i<<endl;} }; class D: public D1, public D2{ public: D(int i):D1(i),D2(i){} }; void main(){ D d(0); d.inc(); d.afisare();

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz i=-1 b. Programul afiseaz i=2 c. Programul afiseaz i=0 d. Programul afiseaz i=1

14

Name: ________________________ __B__ 14. Fie urmtorul program C++:


#include <iostream.h> class B{ public: B(int i=-1):valB(i){} B& operator=(const B &b){ valB=b.valB; cout<<"B::op= "; return *this; } private: int valB; }; class D:public B{ public: D(int i, int j):B(i),valD(j){} D& operator=(const D &d){ valD=d.valD; cout<<"D::op= "; return *this; } private: int valD; }; void main(){ B b(0), b1(1); B *pB; D d(0,0), d1(1,1); b=b1; d=d1; b=d; pB=&d; *pB=d; pB->operator=(d); }

ID: A

Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz : B::op= D::op= D::op= B::op= D::op= b. Programul afiseaz: B::op= D::op= B::op= B::op= B::op= c. Programul afiseaz: B::op= D::op= B::op= D::op= D::op= d. Programul afiseaz: B::op= D::op= D::op= D::op= B::op=

15

Name: ________________________ __B__ 15. Fie urmtorul program C++:


class A{ int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){ x=1; // 3 //b.x=1; //x nu este accesibil obiectelor } }; void main(){ B b(1); // 4

ID: A

}
Care din urmtoarele instructiuni sunt eronate: a. B b; // 1 b. B b(1); // 2 (din clasa D) c. x=1; // 3 d. B b(1); // 4 (din functia main)

16

Name: ________________________

ID: A

__C__ 16. class A{


int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; public: void m(){ x=1; b.x=1; //3 } }; void main(){ B b(1); // 4

// 1 // 2

}
Care din urmtoarele instructiuni sunt eronate: a. B b; // 1 b. x=1 // 2 c. b.x=1; // 3 d. B b(1); // 4 (din functia main)

17

Subiecte pentru PPOO


1. ncapsularea datelor n C++. Nivele de protecie private, protected, public. 2. Caracteristicile obiectelor: atribute i metode. Exemplu: clasa Persoana. 3. Crearea obiectelor. Constructori a. Iniializare sistematic a obiectelor b. Suprancrcare: Persoana(), Persoana(char*), Persoana(char*, int) c. Semantica prin referin. Obiecte cu resurse partajate (comune). d. Semantica prin valoare 4. Constructor prin copiere. Exemplu: Persoana(Persoana &). 5. Fenomenul memory leak (epuizare memorie) n cazul semanticii prin valoare. 6. Obiecte fantom. 7. Eliminarea obiectelor. Destructori. Evitare memory leak. 8. Transferul obiectelor ca argumente sau rezultat. a. Obiecte temporare. b. Transferul prin valoare (by value) i. Cazul pointer c. Transferul prin referin (by reference, &) 9. Caracteristici statice ale unei clase a. Specificatorul de clas de memorare static b. Atribuite statice. Exemplu de utilizare. c. Metode statice. d. Legarea extern i legarea intern a identificatorilor din fiierele C++ i. Declarare cu specificatorul static ii. Declarare cu specificatorul extern 10. Modificatorul de acces const 11. Funcii i clase prietene ale unei clase. 12. Specificarea claselor n fiiere header (*.h). a. Directivele ifndef, define, endif pentru evitarea includerilor repetate 13. Supradefinirea (suprancrcarea) metodelor. 14. Necesitatea supradefinirii funciilor i metodelor: funciile void swap (float, float) void swap (int, float), void swap (float, int), void swap (int, int) 15. Supradefinirea (suprancrcarea) operatorilor. a. Necesitate b. Exemplu: clasa Complex. c. Suprancrcarea operatorilor ca metode d. Suprancrcarea operatorilor ca funcii prietene 16. Suprancrcarea operatorului de atribuire a. Suparincrcarea predefinit (by default) cu semantica prin referin. Obiecte cu resurse partajate b. Suprancrcare cu semantic prin valoare. Evitarea obiectelor cu resurse partajate i. Exemplu: clasa Persoana 17. Suprancrcarea operatorilor de inserie (<<) i de extracie ( >>) a. Clasele ostream, istream. Obiectele cout, cin.

b. Exemplu: clasele Persoana si Complex. 18. Suprancrcarea operatorilor unari ++, --. 19. Clasa FIFO (coada) 20. Clasa LIFO (stiva) 21. Conversii implicite la compilare: a. La evaluarea unei expresii b. La atribuire c. La transferul argumentelor 22. Conversii explicite cu operatorii de tip cast: (int), (float) 23. Conversii de tip definite de programator a. Conversie de la un tip predefinit la un tip clasa i. Exemplu. Clasa Complex i tipul float ii. Constructor cu un singur parametru, de tip predefinit b. Conversie de la un tip clasa la un tip predefinit i. Exemplu. Clasa Complex i tipul float ii. Supradefinirea operatorului cast (int), (float) c. Conversie de la un tip clas la alt tip clas. i. Exemplu. clasa Complex i clasa Punct2D ii. Constructor cu un singur parametru, de tip predefinit iii. Supradefinirea operatorului cast (Complex), (Punct2D). d. Interdependena dintre conversii i supradefinirea operatorilor. 24. Motenire. Clase derivate. a. Ierarhie de subtip: clasa, subclas. b. Motenire simpl, motenire multipl c. Controlul accesului: public, protected, private. d. Exemplu: Persoana, Student, Angajat, StudentAngajat. 25. Constructori i desctructori pentru clasa derivat. 26. Constructor de copiere n clasa derivat 27. Redefinirea (specializarea) metodelor din subclase. 28. Compatibilitatea dintre o clas i o subclas. a. Conversii de tip 29. Legare static (static, early binding) i legare dinamic (dynamic, late binding) a metodelor. a. Legare static implicit b. Metode virtuale: cuvntul cheie virtual. 30. Polimorfismul de subtip a. Expresia polimorf p->m(), m metod virtual. 31. Aplicaie polimorfism: Structuri de date eterogene . a. Exemplu. Lista FIFO cu obiecte Persoana, Student, Angajat sau StudentAngajat b. Exemplu. Lista LIFO cu obiecte Persoana, Student, Angajat sau StudentAngajat 32. Aplicaie polimorfism: Funcii generale, ce pot fi utilizate cu argumente de tipuri care au fost create ulterior. a. Exemplu: funcia display(Persoana *), cu utilizare display(new Student()) etc. sau display(new OriceSubtipPersoana()) 33. Clase abstracte. a. Exemplu clasa abstracta AbstractList, cu operatiile put, erase, item, isFull, isEmpty 34. Clase abstracte i aplicaii abstracte. ablonul Factory

a. Exemplu: aplicaie cu AbstractList; specializare pentru utilizare cu FIFO, LIFO etc. 35. Polimorfism generic: template a. Funcii generice b. Clase generic c. Comparaie polimorfism de subtip si polimorfism generic 36. Analizati mecanismele de conversie din urmatorul program: #include <conio.h> #include <iostream.h> class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: float x,y; friend ostream& operator<<(ostream &stream, const Punct &p ); }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; friend ostream& operator<<(ostream &stream, const Complex &c ); friend Punct::operator Complex(); }; // in varianta aceasta, Punct::operator Complex nu trebuie declarata functie prietena //Punct::operator Complex(){ return Complex(x,y);}

Punct::operator Complex(){//functie friend a clasei Complex Complex c; c.x=x;c.y=y; return c; } ostream& operator<<(ostream &stream, const Punct &p ){ stream << "("<<p.x<<","<<p.y<<")"; return stream; } ostream& operator<<(ostream &stream, const Complex &c ){ stream <<c.x<<"+"<<c.y<<"*i"; return stream; }

void main(){ Punct p(2,3); Complex c(8,9); cout<<(Complex)p<< endl<<(Punct)c<<endl; p=c; cout<<p<<endl; p=1; cout<<p<<endl; int i=p; cout<<i<<endl; c=p=1; (Punct)((Complex)p); getch(); }

37. Analizati conceptul de clasa abstracta in urmatorul exemplu: An abstract queue // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //fifo.h #ifndef FIFO_H #define FIFO_H #include "abselem.h" class Fifo{ public: Fifo(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); Fifo * AbstractElem

Person

Car

private: int nrmax; int nrelem;

int first; int free; AbstractElem* *support; }; #endif //elements.h #include "abselem.h" #include "iostream.h" class Person: public AbstractElem{ public: Person(char *name); virtual void display(); virtual void process(); private: char *name; }; class Car: public AbstractElem{ public: Car(char *name); virtual void display(); virtual void process(); private: char *name; }; //driver.cpp #include "elements.h" #include "fifo.h" Fifo queue(3); void main(){ queue.put(new Person("Tudor")); queue.put(new Person("Andrei")); queue.put(new Car("B-39-TDR")); queue.get()->process(); queue.remove(); queue.get()->process(); queue.remove(); queue.get()->process(); queue.remove(); } //fifo.cpp #include "fifo.h" Fifo::Fifo(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; }

void Fifo::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* Fifo::get(){ return support[first]; } void Fifo::remove(){ first= ++first % nrmax; --nrelem; } //elements.cpp #include "elements.h" Person::Person(char *name):name(name){}; void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } 38. Analizati conceptul de polimorfism generic in urmatorul program: #include "iostream.h" template <class T> class Fifo{ public: Fifo(int nrmax=0); void put(T); T get(); void remove();

private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>Fifo<T>::Fifo(int nrmax):nrmax(nrmax){ first=free=nrelem=0;

support = new T [nrmax-1]; } template <class T> void Fifo<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T Fifo<T>::get(){ return support[first]; } template <class T> void Fifo<T>::remove(){ first= ++first % nrmax; --nrelem; }

class Person { public: Person(char *name); Person(); //necesar pentru a intializa tablouri virtual void display(); virtual void process(); private: char *name; }; class Car { public: Car(char *name); Car(); virtual void display(); virtual void process(); private: char *name; }; Person::Person(char *name):name(name){}; Person::Person(){}; void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; Car::Car(){}; void Car::display(){cout<<name<<endl;} void Car::process(){

cout<<"A Car:"; display(); } Fifo<Person> queuePerson(3); Fifo<Car> queueCar(3); void main(){ queuePerson.put(Person("Tudor")); queuePerson.put(Person("Andrei")); queueCar.put(Car("B-39-TDR")); queuePerson.get().process(); queuePerson.remove(); queueCar.get().process(); queueCar.remove(); queuePerson.get().process(); queuePerson.remove(); } 39. Explicati de ce in programul urmator este creat doar un singur obiect, chiar daca exista doua expresii S::create(). //singleton // constructor private #include <iostream.h> #include <conio.h> class S{ public: static S* create(){ if(i==0){ refS=new S(); i++; } return refS; } void setName(char *s){name=s;} char* getName(){return name;} static int getNr(){return nr;} private: static S* refS; static int i; static int nr; S(){nr++;} char *name; }; int S::i=0; int S::nr=0; S* S::refS=0; void main(){ S *o1, *o2; o1=S::create();

o2=S::create(); o1->setName("Matematica"); o2->setName("Informatica"); cout<<o1->getName()<<endl; cout<<o2->getName()<<endl; cout<<S::getNr()<<endl; getch(); }

40. In programul urmator, precizati care din instructiunile (y+z).print(); (y+1).print(); (1+y).print(); (y-1).print(); (1-y).print(); sunt corecte. Comentati motivul pentru care cea incorecta este semnalata de compilator. #include <math.h> #include <iostream.h> class complex{ public: complex(double r){real=r; imag=0;} void assign (double r, double i){real= r; imag=i;} void print(){cout<<real<<"+"<<imag<<"i"<<endl;} double give_real(){return real;} double give_imag(){return imag;} complex operator +( complex z) { real+=z.real;imag+=z.imag; return *this; } private: double real, imag; }; complex operator-(complex a, complex b){ complex c(0); c.assign(a.give_real()-b.give_real(),a.give_imag()-b.give_imag()); return c; } void main(){ complex z(1), y(1); z.assign(2,3); y.assign(3,4); cout<<"start"<<endl; z.print(); y.print();

(y+z).print(); (y+1).print(); (1+y).print(); (y-1).print(); (1-y).print(); } 41. Fie clasa class deque{ public: void reset(){top=bottom=MAX_LEN/2; top--;} private: char s[MAX_LEN]; int bottom, top; }; care descrie o coada cu doua capete. Declarati si implementati metodele adauga_dreapta, adauga_stanga, elimina_dreapta, elimina_stanga, este_vida, este_plina 42. Urmatoarele instructiuni de declarare sunt incorecte. Comentati. struct brother{ char name[20]; int age; struct sister sib; }a; struct sister{ char name[20]; int age; struct brother sib; }a; 43. Explicati diferenta dintre structura struct A{int i,j,k;}; si clasa class A{int i,j,k;}; De ce nu este utila clasa A? Folosind cuvantul cheie public, adaptati declararea clasei A astfel incat ea sa fie echivalenta cu structura A. 44. Explicati erorile semnalate la compilarea urmatorului program

class Punct{ public: Punct(){x=0; y=0;} Punct(int xx=0){x=xx;y=0;} Punct(int xx, int yy=0){x=xx; y=yy;} private: int x,y; }; void main(){ Punct p; Punct p1(1); Punct p2(1,2); } 45. Explicati erorile la executarea programului urmator Modificati constructorul de copiere pentru a elimina aceste erori #include <iostream.h> class X{ public: X(int i=0){p=new int; if(p) *p=i;} X(const X &r){p=r.p;} ~X(){if(p){delete p; p=0;}} void show(){cout<<*p<<endl;} private: int *p; };

void main(){ X *o1,*o2; o1=new X(1); o2=new X(*o1); o1->show(); delete o1; o2->show(); delete o2; } 46. In programul urmator, supradefiniti operatorul << astfel incat cout<<i sa afiseze valoarea atributului i.x Precizati si explicati rezultatele afisate la executarea programului astfel obtinut #include <iostream.h> class C{ public: C(int i=0){x=i;} C& operator++(){++x; return *this;} C operator--(){--x; return *this;} private: int x; };

void main(){ C i; cout<<i<<endl; cout<<++(++i)<<endl<<i<<endl; cout<<--(--i)<<endl<<i<<endl; } 47. Inlocuiti . . . in clasa Stack, astfel incat metodele push si pop sa asigure tratarea exceptiilor. Numarul maxim de elemente din vectorul supporteste dat de expresia suport.length. Scrieti o aplicatie in care sa tratati exceptiile lansate de push si pop. class Stack{ int varf; Object suport[]; void push(Object x). . .{. . .} Object pop(). . .{. . .} void init(int s){ varf=0; support=new Object[s]; } Stack(int s){. . .} } 48. Se consider urmtorul program C++, n form incomplet: #include <iostream.h> class E{ public: E(int i=0):i(i){} int i; }; class B{ public: B(E *pe):pe(pe){cout<<"B::B(E*)"<<endl;} B& operator=(const B &b){ pe->i=b.pe->i; cout<<"B::op="<<endl; return *this; } // 1? private: E *pe; }; class D:public B{ public: D(E *pe, E *pf):B(pe),pf(pf){cout<<"D::D(E*,E*)"<<endl;} // 2...?

private: E *pf; }; void main(){ E e0(0),e1(1), e10(10), e11(11); B b0(&e0), b1(&e1); cout<<b0; // instr 1 cout<<endl<<b1<<endl; cout<<"----"<<endl; D d0(&e0,&e10), d1(&e1,&e11); cout<<d0 ; // instr 2 cout<<endl<<d1<<endl; cout<<"----"<<endl; d0=d1; cout<<d0<<endl<<d1<<endl; cout<<"----"<<endl; e10.i=100; e11.i=111; cout<<d0<<endl<<d1<<endl; cout<<"----"<<endl; } 1. Se cere s suprancrcai operatorul de inserie << astfel ca prin executarea instruciunilor //instr 1 i //instr 2 s se afieze 0 i respectiv 0;10 2. Suprancrcai in clasa D operatorul de atribuire astfel ca prin executarea programului s se obin urmtoarele rezultate:

B::B(E*) B::B(E*) 0 1 ---B::B(E*) D::D(E*,E*) B::B(E*) D::D(E*,E*) 0;10 1;11 ---B::op= D::op= 1;11 1;11 ---1;111 1;111

49. Se consider urmtoarea interfa Java, n care sunt definite cteva operaii elementare asupra listelor de obiecte: interface ListOperations{ public void add(Object o);// adauga un obiect in lista // returneaza, fara a sterge, // elementul curent din lista public Object currentElement(); public void delete();// sterge elementul curent } Se cere s implementai aceast interfa printr-o clas Queue ale crei obiecte sunt liste eterogene First In First Out (cozi circulare, n care elementul current are cea mai mare vechime n list i este indicat de cursor). Aceste liste sunt observabile n sensul urmtor: cnd cursorul este deplasat, noul element curent este transmis ctre toate obiectele observatoare (aici includem i cazul n care se adug un element ntr-o list vid). Obiectele observatoare sunt din clasa QueueObserver, pe care trebuie de asemenea s-o definii. Completnd corespunztot //1, //2, //3 i //4, programul test de mai jos trebuie s afieze rezultatele urmtoare: 100 100 Tudor Andrei class Queue //. . .1 public Queue(int mD){maxDim=mD; v=new Object[maxDim];} //. . .2 //atributes private int free=0; //pozitia libera private int cursor=0;// pozitia cu elementul util // 0<=numberOfElements<=maxDim, //numarul real de elemente din coada private int numberOfElements=0; private Object v[]; private int maxDim; } class QueueObserver //. . .3 public QueueObserver(Queue q){obsQ=q;} //. . .4 // atributes private Queue obsQ; // coada observabila } public class ObservableList{

public static void main(String[] args){ Queue q=new Queue(4); QueueObserver qO= new QueueObserver(q); q.addObserver(qO); q.add(new Integer(100)); q.add("Tudor"); q.add("Andrei"); q.add(new Integer(400)); System.out.println(q.currentElement()); q.delete(); q.add(new Integer(500)); q.delete(); q.add(new Integer(100)); } } 50. Definiti clasa NumereRationale, ale carei obiecte sunt numere rationale. Definii metode i operatori astfel nct executarea programului urmtor: #include rational.h void main(){ NumereRationale x(10, -20); cout<< x << ; << 3 * x << ; << x * 2 << ; << x * x<< endl; } s afieze linia: -1/2 ; -3/2 ; -1 ; 1/4 51. Completati specificarea clasei C si implementati metodele si operatorii astfel incat prin executarea programului sa se obtina rezultatele indicate prin comentarii. #include <iostream.h> class C{ public: void set_x(int x){ *px=x; } void set_y(int y){ *py=y; } private: int *px; int *py; }; void main(){ C m, n(1,2); cout<<m<<endl;

// x=0; y=0;

cout<<n<<endl; //x=1; y=2; m=n*100; cout<<n*100<<endl; // x=100; y=200; cout<<n<<endl; //x=1; y=2; m=n; n.set_x(100);n.set_y(200); cout<<m<<endl; //x=100; y=2 52. } Se consider clasa urmtoare: class C{ public: C(int n=1, int v[]); void set(int i, int val){ pi[i]=val; } // alte metode si operatori private: int dim; int *pi; }; i programul: void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); // prima afisare cout<<x<<endl; //1; 2; 3; a[0]=10; // a doua afisare cout<<x<<endl; //1; 2; 3; // a treia afisare cout<<(x=y)<<endl; y.set(0,1000); // a patra afisare cout<<x<<endl; cout<<(x=x)<<endl; }

-Implementai operatorul de inserie, astfel ncat // prima afisare s produc rezultatele din comentariu. -Implementai constructorul astfel nct // a doua afisare s produc rezultatele din comentariu. Discutai semantica prin referin i semantica prin valoare.

-Presupunem c operatorul de atribuire din // a treia afisare este cel predefinit. Precizai ce se afieaz la // a treia afisare i la // a patra afisare. Explicai rolul operatorului de atribuire la obinerea acestor rezultate. -Fie urmtoarea schi de suprancrcare a operatorului de atribuire: C& C::operator=(C& x){ delete[] pi; // completari } Completai implementarea operatorului de atribuire astfel nct // a treia afisare i // a patra afisare s produc aceleai rezultate. -Modificai implementarea de la punctual 3 astfel nct expresiile cout<<x i cout<<(x=x) sa aib acelai efect (afiarea valorilor lui x) 53. Fie urmtoarea specificare a clasei Stiva_forma_preliminara: class Stiva_forma_preliminara{ public: Stiva_forma_preliminara (int n); // constructor, construieste o stiva // ce poate contine maximum n caractere void adauga( char c); // modificator, adauga un caracter in stiva char varf(); // interogare, da caracerul din varful stivei protected: int i; private: int n; char *s; }; Se cere s se implementeze aceast clas astfel nct urmtorul program de ncercare: Stiva_forma_preliminara s(5); void main(){ adauga(C); cout<<s.varf(); adauga(+); cout<<s.varf(); adauga(+); cout<<s.varf()<<endl; } s afieze rezultatul urmtor: C++ 54. Se cere s se specifice i s se implementeze o clasa Stiva astfel nct urmtorul program de ncercare: Stiva s(5); void main(){ adauga(C);

cout<<s.varf(); adauga(+); cout<<s.varf(); adauga(+); cout<<s.varf()<<endl; s.elimina(); s.elimina(); cout<<s.varf()<<endl; } s afieze rezultatul urmtor: C++ C 55. S se utilizeze arhitectura Model View Controller pentru a crea o interfa grafic ce conine: un buton prin acionarea cruia este incrementat cu o unitate un numr natural de maximum 3 cifre; o linie n care este afiat valoarea obinut prin incrementare. Dac prin incrementare este atins valoarea 1000, este semnalat o excepie. Dup aceasta acionarea butonului nu mai modific valoarea afiat. Se impun urmtoarele cerine: obiectele Controller pot avea ca atribute obiecte Model i View obiectele View nu pot avea atribute de tip Model sau Controller. Indicaie. Clasa principal este: // file MVC.java public class MVC{ public static void main(String[] args){ View v=new View(); Model m= new Model(); Controller c= new Controller(v,m); } } 56. Completati specificarea clasei C si implementati metodele si operatorii astfel incat prin executarea programului sa se obtina rezultatele indicate prin comentarii. #include <iostream.h> class C{ public: void set_x(int x){ *px=x; } void set_y(int y){ *py=y; } private: int *px; int *py; };

void main(){ C m, n(1,2); cout<<m<<endl; // x=0; y=0; cout<<n<<endl; //x=1; y=2; m=n*100; cout<<n*100<<endl; // x=100; y=200; cout<<n<<endl; //x=1; y=2; m=n; n.set_x(100);n.set_y(200); cout<<m<<endl; //x=100; y=2 } 57. Fie urmatorul program Java: // Model View Controller import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void increment(){x++;} public void decrement(){x--;} public int get_x(){return x;} } public class View extends Frame{ protected Button binc; protected Button bdec; protected Model m; private Controller c; protected TextField tf; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); binc= new Button("A"); add("North",binc); bdec= new Button("B"); add("South",bdec); m=new Model(); c=new Controller(this); // // tf=new TextField(10);

add("Center",tf); setSize(100,250); setVisible(true); } } class Controller implements ActionListener{ private View vw; public Controller(View v){ vw=v; } } Se cere: a) Implementati clasa Controller astfel incat prin actionarea butonului A sa se mareasca cu o unitate atributul vw.m.x iar la actionarea butonului B atributul vw.m.x sa sa devina zero (valorile vor fi afisate in campul tf). b) Adaugati instructiuni de instalare a evenimentelor, utilizand obiectul c. c) Descrieti dispunerea in fereastra a componentelor 58. Fie urmtoarea schi a unui program Java ce implementeaz un cronometru. Se intenioneaz ca pe monitor s fie afiat, din 5 n 5 secunde, timpul scurs de la pornirea sa (msurat tot n secunde), sub forma urmtoare: 0 5 10 15 20 25 ... Se cere s indicai instruciunile pe care le propunei n locurile 1-????, 2-???? i 3???? pentru ca programul s funcioneze conform acestei descrieri. // fisier Cronometru.java import java.util.*; class Oscilator extends Thread { long secunda=0; public void run(){ while(true){ try {sleep (1000);} catch (Exception e){} secunda++; } } public long getSecunda(){return secunda;} } class MecanismCronometru extends Observable{ Oscilator osc=new Oscilator(); long timp= -1; MecanismCronometru(){osc.start();} void porneste(){ long timpNou;

while(true){ // in continuare, daca timpul din osc s-a schimbat // el este inregistrat in variabila timp // si sunt notificati observatorii 1-???? } } } class Cadran implements Observer{ Afisare af; public Cadran(Afisare loc){af=loc;} public void update(Observable o, Object arg){ // tineti cont ca ((MecanismCronometru)o) este obiectul // care a notificat schimbarea atributelor sale 2-???? } } interface Afisare{ public void afiseaza(long i); } class AfisarePeMonitor 3-???? public class Cronometru{ MecanismCronometru m; Cadran c1; public Cronometru(){ m=new MecanismCronometru(); c1= new Cadran(new AfisarePeMonitor()); m.addObserver(c1); m.porneste(); } public static void main(String[] args){ Cronometru pobeda=new Cronometru(); } 59. Se consider urmtoarea interfa Java, n care sunt definite cteva operaii elementare asupra listelor de obiecte: interface ListOperations{ public void add(Object o);// adauga un obiect in lista // returneaza, fara a sterge, // elementul curent din lista public Object currentElement(); public void delete();// sterge elementul curent }

Se cere s implementai aceast interfa printr-o clas Queue ale crei obiecte sunt liste eterogene First In First Out (cozi circulare, n care elementul current are cea mai mare vechime n list i este indicat de cursor). Aceste liste sunt observabile n sensul urmtor: cnd cursorul este deplasat, noul element curent este transmis ctre toate obiectele observatoare (aici includem i cazul n care se adug un element ntr-o list vid). Obiectele observatoare sunt din clasa QueueObserver, pe care trebuie de asemenea s-o definii. Completnd corespunztot //1, //2, //3 i //4, programul test de mai jos trebuie s afieze rezultatele urmtoare: 100 100 Tudor Andrei class Queue //. . .1 public Queue(int mD){maxDim=mD; v=new Object[maxDim];} //. . .2 //atributes private int free=0; //pozitia libera private int cursor=0;// pozitia cu elementul util // 0<=numberOfElements<=maxDim, //numarul real de elemente din coada private int numberOfElements=0; private Object v[]; private int maxDim; } class QueueObserver //. . .3 public QueueObserver(Queue q){obsQ=q;} //. . .4 // atributes private Queue obsQ; // coada observabila } public class ObservableList{ public static void main(String[] args){ Queue q=new Queue(4); QueueObserver qO= new QueueObserver(q); q.addObserver(qO); q.add(new Integer(100)); q.add("Tudor"); q.add("Andrei"); q.add(new Integer(400)); System.out.println(q.currentElement());

q.delete(); q.add(new Integer(500)); q.delete(); q.add(new Integer(100)); } } 60. Se consider clasa urmtoare: class C{ public: C(int n=0, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; unde constructorul este implementat prin C::C(int n, int v[]) { dim=n; pi=v;} i programul de test: void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]= -100; cout<<x<<endl; cout<<(x=y)<<endl; y.set(0,-1000); cout<<x<<endl; cout<<(x=x)<<endl; } Se cere: 1. s implementai operatorul de inserie, astfel ncat prin: int a[]={1,-2,-30}; C x(3,a); cout<<x; s se afieze: (1, 2, -30) 2. s precizai ce se afieaz prin executarea programului i s explicai rolul constructorului implementat prin referin i al operatorului de atribuire la obinerea acestor rezultate; (rspunsul fr explicaii nu este luat n considerare) 3. S presupunem c operatorul = este suprancrcat prin: C& C::operator=(C& x){ //stergerea valorior din vectorul destinatie, //care oricum vor fi modificate delete[] pi; // atribuire dim=x.dim;

pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this; } Explicai rezultatele afiate de program n aceste condiii, subliniind diferenele fa de punctual 2. 4. Modificai implementarea de la punctual 3 astfel nct expresiile cout<<x i cout<<(x=x) sa aib acelai efect (afiarea valorilor lui x)

61. Analizati conceptul de polimorfism generic in programul // Definition of the template must be in //the same file with main function template <class T> void swap(T &x, T &y) { T t=x; x=y; y=t; } int main(){ typedef struct{ int x; int y; }complex; int x,y; complex c,d; swap(x,y); swap(c,d);

return 0; } 62. S se utilizeze arhitectura Model View Controller pentru a crea o interfa grafic ce conine: un buton prin acionarea cruia este incrementat cu o unitate un numr natural de maximum 3 cifre; o linie n care este afiat valoarea obinut prin incrementare. Dac prin incrementare este atins valoarea 1000, este semnalat o excepie. Dup aceasta acionarea butonului nu mai modific valoarea afiat. Se impun urmtoarele cerine: obiectele Controller pot avea ca atribute obiecte Model i View obiectele View nu pot avea atribute de tip Model sau Controller. Indicaie. Clasa principal este: // file MVC.java

public class MVC{ public static void main(String[] args){ View v=new View(); Model m= new Model(); Controller c= new Controller(v,m); } } 63. Fie urmtorul program C++: #include <iostream.h> // legare statica versus legare dinamica class A{ public: void st(){cout<<" A::st()"<<endl;} virtual void vrt(){cout<<" A::vrt()"<<endl;} void stafis(){cout<<" A::stafis()"<<endl; st(); vrt(); } virtual void vrtafis(){cout<<" A::vrtafis()"<<endl; st(); vrt();} }; class B: public A{ public: int st(){cout<<" B::st()"<<endl; return 1;} virtual void vrt(){cout<<" B::vrt()"<<endl;} void stafis(){cout<<" B::stafis()"<<endl; st(); vrt(); } virtual void vrtafis(){cout<<" B::vrtafis()"<<endl; st(); vrt();} }; void main(){ A *p; cout<<"Obiect A"<<endl; p=new A(); p->st(); p->vrt(); p->stafis(); p->vrtafis(); cout<<"Obiect B"<<endl; p=new B(); p->st(); p->vrt(); p->stafis(); p->vrtafis(); } Ce se afieaz prin executarea sa? Explicai mecanismul de legare a metodei la implementare pentru fiecare linie afiat. 64.

S se specifice i s se implementeze, n C++ sau Java, o clas ale carei obiecte sunt persoane cu o anumit identitate. Identitatea nu este nc bine precizat, dar ar putea conine elemente precum nume, prenume, adres, CNP etc. ce urmeaz a fi stabilite ulterior. Clasa dispune de o metod void afisare() prin care este afiat identitatea unei persoane. 65. Fie urmatorul program Java: // Model View Controller import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void increment(){x++;} public void decrement(){x--;} public int get_x(){return x;} } public class View extends Frame{ protected Button binc; protected Button bdec; protected Model m; private Controller c; protected TextField tf; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); binc= new Button("A"); add("North",binc); bdec= new Button("B"); add("South",bdec); m=new Model(); c=new Controller(this); binc.addActionListener(c); bdec.addActionListener(c);

tf=new TextField(10); add("Center",tf); setSize(100,250); setVisible(true);

} } class Controller implements ActionListener{ private View vw; public Controller(View v){ vw=v; } public void actionPerformed(ActionEvent e){ Button source=(Button)e.getSource(); if (source==vw.binc) vw.m.increment(); else if(source==vw.bdec) vw.m.decrement(); vw.tf.setText(String.valueOf(vw.m.get_x())); } } Se cere: a. Descrieti dispunerea in fereastra a componentelor si efectul actionarii butoanelor A si B. b. Descrieti procedeul Model-View-Controller c. Modificati programul,folosind interfata WindowListener si metoda sa public void windowClosing(WindowEvent e), astfel incat actionarea butonului x din coltul din dreapta sus sa inchida fereastra. 66. Completati specificarea clasei C si implementati metodele si operatorii astfel incat prin executarea programului sa se obtina rezultatele indicate prin comentarii. Ce se afiseaz prin ultima instruciune?_ #include <iostream.h> class C{ public: C(C &c){ *c.px=0; *c.py=0; } void set_x(int x){ *px=x; } void set_y(int y){ *py=y; } private: int *px; int *py; }; void f(C c){} void main(){ C m, n(1,2); cout<<m<<endl; // x=0; y=0; cout<<n<<endl; //x=1; y=2;

m=100*n; cout<<100*n<<endl; // x=100; y=200; cout<<n<<endl; //x=1; y=2; m=n; n.set_x(100);n.set_y(200); cout<<m<<endl; //x=100; y=2 f(m); cout<<m<<endl; // ce afiseaza ? } 67. a. Implementai urmtoarea schi a claselor CoadaCirculara, DepasireCapacitate i ListaVida i completai blocurile catch astfel nct prin executarea programului TestCoadaCirculara s se obin efectul specificat prin comentarii. Obiectele clasei CoadaCirculara sunt cozi (fifo) asupra crora se fac operaii de adugare-extragere-interogare. Observaie. Locurile n care se intervine sunt //?? 1 //?? 8 b.Implementai o interfa grafic alctuit din trei butoane (adaug, elimina i element) prin care sa se realizeze interaciunea cu o coada. Elementele cozii sunt siruri de caractere ce vor fi preluate i afiate n alte componente ale interfeei (TextField). La implementarea metodei actionPerformed nu se vor folosi instruciuni if sau switch. public class CoadaCirculara{ // interfata public CoadaCirculara(int n, String s) //?? 1 public void adauga(Object ob) //?? 2 public void elimina() //?? 3 public Object element()//?? 4 public String nume(){return nume;} // atribute private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume; // un nume pentru coada circulara } class DepasireCapacitate //?? 5 class ListaVida //?? 6

// programul TestCoadaCirculara public class TestCoadaCirculara{ public static void main(String [] args){

//

CoadaCirculara a=new CoadaCirculara(3, "LISTA A"); CoadaCirculara b=new CoadaCirculara(4, "LISTA B"); try{ a.adauga("1"); a.adauga(b); a.adauga(new Integer(-10)); // In acest moment, a=("1",b,-10) si "1" este primul element System.out.println(a.element()); // s-a afisat "1" a.elimina(); //a=(b,-10) System.out.println(((CoadaCirculara)a.element()).nume()); // s-a afisat "LISTA B" a.adauga("1"); //a=(b,-10,"1") a.elimina(); a.elimina(); a.elimina(); b.adauga("X"); // a=() si b=("X") System.out.println(a.element() ); // Se afiseaza mesajul: // Exceptie ListaVida in LISTA A // si programul se termina System.out.println(b.element() ); } catch(DepasireCapacitate e){ System.out.println //?? 7 } catch(ListaVida e){ System.out.println //?? 8 } }

} 68. 69. In urmatorul program (incomplet): a. Implementati constructorul Cilindru b. Implementati operator-- astfel ca efectul sa fie decrementarea razei si inaltimii cilindrului c. Se poate inlocui expresia lungime()*inaltime prin 2*PI*raza*inaltime? d. Explicati rezultatele afisate de liniile //1, //2, //3, //4 si //5 #include <iostream.h> #define PI 3.14 class Cerc{ public: Cerc(float r):raza(r){} virtual float arie(){return PI*raza*raza;}

float lungime(){return 2*PI*raza;} Cerc operator++(){raza++;return *this;} Cerc& operator--(){raza--;return *this;}

private: float raza; }; class Cilindru: public Cerc{ public: Cilindru(float raza, float inaltime); virtual float arie(){return lungime()*inaltime;} Cilindru& operator--(); private: float inaltime; }; void main(){ Cerc c(1.0), *pc; pc=new Cilindru(0.0,5.0); cout<<(++(++c)).lungime()<<endl; //1 cout<<c.lungime()<<endl; //2 cout<<(--(--c)).lungime()<<endl; //3 cout<<c.lungime()<<endl; //4 cout<<(++(*pc)).arie()<<endl; //5 }

C++
1. Fie urmatorul program: // Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; a.m(); //A:m b.m(); //incorecta b.v(); //incorecta // obiect de tip A p=&a; p->m(); //A:m() p->v(); //A:v() // obiect de tip B p=&b; p->v();//B:v() p->m();//A:m() } 2. Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B *pb; D d; // pointing to a subclass pb=&d;

((D*)pb)->v(); // virtual method v() of D ((D*)pb)->st(); // static method st() of D return 0; } 3. Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B b, *pb; D d, *pd; pb=&b; pb->st(); // static method st() of B pb->v(); // virtual method v() of B pb=&d; pb->st(); // static method st() of B pb->v(); // virtual method v() of D return 0; } 4. Fie programul: #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc& operator++(){raza++;return *this;}// return by value Cerc& operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; }

Programul afiseaza : a. 3 2 0 1 (fara &) b. 3 2 0 0 (cu &) c. 3 3 1 2 (cu &) 5. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //fifo.h #ifndef FIFO_H #define FIFO_H #include "abselem.h" class Fifo{ public: Fifo(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //elements.h #include "abselem.h" #include "iostream.h" class Person: public AbstractElem{ public: Person(char *name); virtual void display(); virtual void process(); private: char *name; }; class Car: public AbstractElem{ public: Car(char *name);

virtual void display(); virtual void process(); private: char *name; }; //driver.cpp #include "elements.h" #include "fifo.h" Fifo queue(3); void main(){ queue.put(new Person("Tudor")); queue.put(new Person("Andrei")); queue.put(new Car("B-39-TDR")); queue.get()->process(); queue.remove(); queue.get()->process(); queue.remove(); queue.get()->process(); queue.remove(); } //fifo.cpp //sau LIST.cpp #include "fifo.h" Fifo::Fifo(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void Fifo::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* Fifo::get(){ return support[first]; } void Fifo::remove(){ first= ++first % nrmax; --nrelem; } //elements.cpp #include "elements.h" Person::Person(char *name):name(name){}; void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display();

} Programul afiseaza: A Person: Tudor A Person: Andrei A Car:B-39-TDR sau alta varianta de raspuns, Programul afiseaza datele in ordinea: a. Tudor Andrei B-39-TDR 6. Fie urmatorul program, in care se utilizeaza clase abstracte: #include "iostream.h" template <class T> class Fifo{ public: Fifo(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>Fifo<T>::Fifo(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void Fifo<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T Fifo<T>::get(){ return support[first]; } template <class T> void Fifo<T>::remove(){ first= ++first % nrmax; --nrelem; } class Person { public: Person(char *name); Person(); //necesar pentru a intializa tablouri virtual void display(); virtual void process(); private: char *name;

}; class Car { public: Car(char *name); Car(); virtual void display(); virtual void process(); private: char *name; }; Person::Person(char *name):name(name){}; Person::Person(){}; void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; Car::Car(){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } Fifo<Person> queuePerson(3); Fifo<Car> queueCar(3); void main(){ [u]queuePerson.put(Person("Andrei")); queuePerson.put(Person("Tudor")); queueCar.put(Car("B-39-TDR"));[/u] queuePerson.get().process(); queuePerson.remove(); queueCar.get().process(); queueCar.remove(); queuePerson.get().process(); queuePerson.remove(); } Programul afiseaza: A Person: Andrei A Car:B-39-TDR A Person: Tudor sau alta varianta de raspuns, Programul afiseaza datele in ordinea: a. Andrei B-39-TDR Tudor 7. Fie programul: // singleton // constructor private #include <iostream.h> #include <conio.h>

class S{ public: static S* create() { if(i==0){ refS=new S(); i++; } return refS; } void setName(char *s){name=s;} char* getName(){return name;} static int getNr(){return nr;} private: static S* refS; static int i; static int nr; S(){nr++;} char *name; }; int S::i=0; int S::nr=0; S* S::refS=0; void main(){ S *o1, *o2; o1=S::create(); o2=S::create(); o1->setName("Matematica"); o2->setName("Informatica"); cout<<o1->getName()<<endl; cout<<o2->getName()<<endl; cout<<S::getNr()<<endl; getch(); } Programul afiseaza: a. Matematica Informatica 1 b. Informatica Informatica 1 c. Informatica Informatica 2 d. Matematica Informatica 2 8. Fie programul: // destructor static, #include <iostream.h> class B{ public: ~B(){cout<<"~B()"<<endl;}

}; class D: public B{ public: ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr();//<conio.h> B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza : ~ B() ~D() ~B() 9. Fie programul: // destructor static #include <iostream.h> #include <conio.h> class B{ public: B(){cout<<"B()"<<endl;} ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *b=new B(); //apel D() delete b; b=new D(); //apel B(), D() delete b; } Programul afiseaza : B() ~B() B() D() ~B() 10. Fie programul : // destructor virtual, #include <iostream.h> class B{ public: virtual ~B(){cout<<"~B()"<<endl;} };

class D: public B{ public: virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *pb; D *pd; pd= new D(); pb=new D(); //pd = new B(); //error "Cannot convert 'B*' to 'D*' in function main()" delete pb; delete pd; } Programul afiseaza: ~ D()~B()~D() ~B() 11. Fie programul : // constructor de copiere in clasa de baza; dar absent in clasa derivata // compilatorul creeaza un constructor de copiere implicit // care apeleaza constr de copiere al clasei de baza pentru copierea atributelor din clasa de baza // si copiaza membru cu membru atributele din D #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} }; void main(){ B b; // apel B() // B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()! //B(B&b) D d; // apel B();D() // B() D() D d1(d); // B(B &b) B bd(d); // conversie implicita la clasa de baza; // B(B &b) getch(); } 12. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]);

void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); x=y; y.set(0,-1000); cout<<x<<endl; } Programul afiseaza: -1000 20 12bis. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b);

a[0]= -100; cout<<x<<endl; } Programul afiseaza: -100 2 3 13. Fie programul : // Constructor cu semantica prin referinta // Operatorul = cu semantica prin valoare si stergere destinatie #include <iostream.h> class C{ public: C(int n=0, int v[]); C& C::operator=(C& x); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } C& C::operator=(C& x){ // stergerea valorior din vectorul destinatie, care oricum vor fi modificate delete[] pi; // atribuire dim=x.dim; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); x=y ; b[0]=-1000; cout<<x<<endl; } Programul afiseaza 10 25 14. Fie urmatorul program:

// Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]=-100; cout<<(x=y)<<endl; } Programul afiseaza: 10 20 15.Fie urmatorul program C++, n care operatorul de insertie << este suprancarcat. Operatorul de atribuire = este cel predefinit, cu semantica prin referinta. #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b);

cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; } Care din afirmatiile urmatoare sunt adevarate: Programul afiseaza: 10 20 1000 20 16. Fie urmatorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancarcati. Prin suprancarcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referinta). Rersursele obiectului destinatie d din expresia d=s sunt eliberate chiar si n cazul de autoatribure d=d. #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } // supraincarcare cu semantica prin valoare C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // fara verificarea cazului de autoatribuire d=d delete[] pi; dim=x.dim; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20};

C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializata Care din afirmatiile urmatoare sunt adevarate: Programul afiseaza: 10 20 10 20 xx yy 17. Fie urmatorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancarcati. Prin suprancarcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referinta). Rersursele obiectului destinatie d din expresia d=s sunt eliberate numai daca d?s. #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // numai daca destinatia difera de sursa if(this!=&x){ dim=x.dim; delete[] pi; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} } return *this; } ostream& operator<<(ostream &o, const C &m){

for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializata Care din afirmatiile urmatoare sunt adevarate: Programul afiseaza: 10 20 10 20 10 20 18. Fie programul #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ nr=0; name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){ delete[] name; } private: char *name; long nr; }; void f(){ Person *p = new Person("Balanescu"); delete p; } void main(){ for (int i=0; i<5; i++)f(); } Programul afiseaza: 11111 19. Fie programul //static atribut

#include <conio.h> #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){nr--; delete[] name;} private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); } void main(){ for (int i=0; i<5; i++)f(); getch(); } Programul afiseaza: 12345 20. Fie programul: #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); delete p; } void main(){ while(1)f(); } Care afirmatie este adevarata: Programul afiseaza un sir finit de numere 1 2 3 4...etc. pana memoria este epuizata

21.Fie urmatorul program C++: #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ name=new char[strlen(p)+1]; strcpy(name,p); } ~Person(){delete[] name;} private: char *name; }; void f(){ // obiect nou, alocare dinamica in memoria heap Person *p =new Person("Balanescu"); delete p; } void main(){ while(1)f(); } Care din afirmatiile urmatoare sunt adevarate: Programul nu se termina, deoarece conditia de continuare din instructiunea while este mereu ndeplinita 22.Fie programul: //destructor explicit #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;} private: char *name; }; void f(){Person *p = new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java } void main(){ while(1)f(); } Care din afirmatiile urmatoare sunt adevarate: La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu este eliberat

23. Fie urmatorul program: #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; Care afirmatie este corecta: Definitia virtual void v()supraincarca definitia virtual void v(int i) 24. Fie programul : #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} void operator++(){raza++;} private: float raza; }; class Cilindru: public Cerc{ public: Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){}; void operator++(){inaltime++;} float getInaltime(){return inaltime;} private: float inaltime; }; void main(){ Cerc *pc; Cilindru c(1,5); pc=&c; ++ *pc; cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl; getch(); } Programul afiseaza : 2 5 25. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume;

}; Constructorul Persoana(char *) poate fi utilizat pentru: Conversia sirurilor de caractere in obiecte Persoana 26. Fie urmatoarea specificare de clase: class Complex class Punct{ public: Punct(float x=0, float y=0)x(x),y(y)() Operator Complex(); Operator float(){return x;) private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0)x(x),y(y)() operator Complex(); operator float(){return x;} private: float x,y; }; Metoda Complex: operator float() este utilizata pentru: Conversia unui obiect Complex in obiect Punct 27. Fie urmatoarea specificare de clase: class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; }; Metoda Complex:: operator float() este utilizata pentru Conversia unui obiect punct in obiect complex 28. Fie urmatoarea specificare de clasa: // file abslist.h

#ifndef ABSLIST_H #define ABSLIST_H #include d:tudor\c_cpp\abstract\abselem.h class AbstractList{ public: virtual void erase()==0; virtual void put(AbstractElem*ae){}; virtual AbstractElem*get(){}; virtual int isEmpty(){}; virtual int isFull(){}; }; #endif; Care afirmatie este corecta: AbstractList este o clasa abstracta 29. Fie urmatorul program: #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; void main(){ A *pa; B b; pa=&b; pa->s(); pa->v(1); } Prin executarea sa, programul afiseaza: void A::s() void B::v(int) void A::s() virtual void B::v()int 30. Fie urmatorul program C++:

#include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int i)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } }; class B:public A{ public: // 1. int s(){ cout<<"int B::s()"<<endl; return 1; } // 2. void s(int i){ i++;cout<<"void B::s(int i)"<<endl; } // 3. virtual void v(int i){ i++;cout<<"virtual void B::v()"<<endl; } // 4. virtual int v(){ cout<<"int B::v()"<<endl; return 1; } }; Care din afirmatiile urmatoare sunt adevarate: //4. este incorecta 31.Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h"

class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } Care afirmatie este adevarata: List este o structura de date de tip coada 32. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support;

}; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } Clasa C defineste o structura de tip coada (FIFO) 33. Fie urmatorul program C++, unde functia abs calculeaza valoarea absoluta a unui numar real: #include <iostream.h> void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="<<a<<endl; int i=-1; abs(i); //temporary used for parameter x cout<<"i="<<i<<endl; // i=-1 } La compilare a fost emis urmatorul mesaj de avertizare: Warning: temporary used for parameter x in call to abs(float &) Care din afirmatiile urmatoare sunt adevarate: Programul afiseaza: a =1 i = -1 34. Fie urmatorul program C++: #include <iostream.h> class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: Cerc(double r=0.0, int x=0, int y=0);// constructor

protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<<p.x<<", "<<p.y<< ']'; return output; } //implementare Cerc Cerc::Cerc(double r, int a, int b):Punct(a,b), raza(r){} ostream& operator<<(ostream& output, const Cerc& c){ output <<"Centru= "<< (Punct)(c) <<"; Raza= "<<c.raza; return output; }; void main(){ Punct *punctPtr=0, p(30,50); Cerc *cercPtr=0, c(2.7,120,89); cout<<p<<endl; cout<<c<<endl; // Cerc tratat ca Punct (prin pointer la clasa de baza): punctPtr=&c; cout<< *punctPtr << endl; /* Cerc tratat ca Cerc (prin pointer la clasa de baza, dar cu conversie explicita de la Punct la clasa derivata Cerc */ cercPtr= (Cerc *)(punctPtr); cout<< *cercPtr<<endl; /*Punct tratat ca Cerc: programatorul isi asuma responsabilitatea unor erori: anumite atribute sunt nedefinite */ punctPtr= &p; // punctPtr refera un Punct //Urmeaza conversie asumata de programator, //de la clasa de baza la clasa derivata cercPtr=(Cerc *)(punctPtr); // cercPtr refera p ca pe un cerc //dar acest asa-zis cerc are raza nedefinita cout<< *cercPtr <<endl; } Prin xx este desemnata o valoare nedefinita. Care din afirmatiile urmatoare sunt adevarate: Programul afiseaza: Punct[30,50] Centru=Punct[120,89]; Raza=2.7

Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx 35. Fie urmatorul program C++: #include <iostream.h> class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Persoana q="Balanescu"; void fvalue(Persoana p){p.afisare();} void faddress(Persoana *p){p->afisare();} void freference(Persoana &p){p.afisare();} void main(){ fvalue(q); faddress(&q); freference(q); fvalue("Tudor"); freference("Tudor");// Warning: temporary used for p } Care din afirmatiile urmatoare sunt adevarate: Programul afiseaza: Balanescu Balanescu Balanescu Tudor Tudor 36. Fie urmatorul program C++: #include <iostream.h> class B{ public: B(int i):i(i){} protected: int i; }; class D1: public B{ public: D1(int i):B(i){} void inc(){i++;} }; class D2: public B{ public: D2(int i):B(i){} void afisare(){cout<<i=<<i<<endl;}

}; class D: public D1, public D2{ public: D(int i):D1(i),D2(i){} }; void main(){ D d(0); d.inc(); d.afisare(); } Care din afirmatiile urmatoare sunt adevarate: Programul afiseaza i=0 37. Fie urmatorul program C++: #include <iostream.h> class B{ public: B(int i=-1):valB(i){} B& operator=(const B &b){ valB=b.valB; cout<<"B::op= "; return *this; } private: int valB; }; class D:public B{ public: D(int i, int j):B(i),valD(j){} D& operator=(const D &d){ valD=d.valD; cout<<"D::op= "; return *this; } private: int valD; }; void main(){ B b(0), b1(1); B *pB; D d(0,0), d1(1,1); b=b1; d=d1; b=d; pB=&d; *pB=d; pB->operator=(d);

} Care din afirmatiile urmatoare sunt adevarate: Programul afiseaza: B::op= D::op= B::op= B::op= B::op= 38. Fie urmatorul program C++: class A{ int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){ x=1; // 3 //b.x=1; //x nu este accesibil obiectelo } }; void main(){ B b(1); // 4 } Care din urmatoarele instructiuni sunt eronate: B b(1); // 2 (din clasa D) 39. Fie urmatorul program C++: class A{ int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1

public: void m(){ x=1; // 2 b.x=1; //3 } }; void main(){ B b(1); // 4 } Care din urmatoarele instructiuni sunt eronate: b.x=1; // 3 40. Fie programul: // file Calc.h class Calculator{ private: int value; int keep; char toDo; public: void add(); void multiply(); void compute(); void clear(); void digit (int x); int display(); Calculator(); }; //file Calc.cpp #include "Calc.h" void Calculator::clear(){ value=keep=0; } int Calculator::display(){ return value;} void Calculator::digit(int x){value=value*10+x;} void Calculator::add(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='+'; // what to do later } void Calculator::multiply(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='*'; // what to do later } void Calculator::compute(){ if (toDo=='+') value += keep;

else if (toDo == '*') value *= keep; } Calculator::Calculator(){clear();} //file testdriver.cpp #include <iostream.h> #include "Calc.h" void main(){ Calculator c; c.digit(1);c.digit(0); c.add(); c.digit(2);c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1);c.digit(0); c.multiply(); c.digit(2);c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Programul afiseaza 35 205 41. Fie programul urmator: #include <iostream.h> class Calculator{ private: int value; int keep; char toDo; public: void add(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='+'; // what to do later } void subtract(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='-'; // what to do later }

void multiply(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='*'; // what to do later } void compute(){ if (toDo=='+') value += keep; else if (toDo == '-') value = keep-value; else if (toDo == '*') value *= keep; } void clear(){value=keep=0;} void digit (int x){value=value*10+x;} int display(){ return value;} Calculator(){clear();} }; void main(){ Calculator c; c.digit(1); c.digit(0); c.add(); c.digit(2); c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1); c.digit(0); c.subtract(); c.digit(2); c.digit(0); c.compute(); c.multiply(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Se cere sa indicati care din rezultatele urmatoare sunt afisate prin executarea acestui program: 35 -50 1. Fie urmatorul program: #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; }

// supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} // 4. supraincarcare metoda virtuala, neacceptata: // B::v() conflicts with base class A // virtual int v(){cout<<"int B::v()"<<endl; return 1;} }; void main(){ A a, *pa; B b; pa=&a; pa->s(); pa->s(1); pa->v(); pa->v(1); pa=&b; pa->s(); pa->s(1); pa->v(); pa->v(1); } Care din rezultatele urmatoare sunt afisate prin executarea programului? void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void A::v() virtual void B::v(int) 3. Se considera programul: #include <iostream.h> class C{ public: C(){i=0;}; void set_i(int pi){cout << "C::set_i (int)"<<endl;i=pi;} //void set_i(int pi)const{i=pi;} // error: cannot modify a const object int get_i (){cout << "C::get_i ()"<<endl; return i;} int get_i()const {cout << "C::get_i ()const"<<endl;return i;} int i; }; void main(){ int j; C x; const C y;

x.i=1; x.set_i(2); j= x.get_i(); //y.i=1; // error: cannot modify a const object //y.set_i(2); // warning: non-const function called for a const object j= y.get_i(); } Ce rezultate afiseaza acest program? C ::set_i(int) C::get_i() C::get_i()const 4. Se considera urmatoarele clase: class B{ public: int i; protected: int j; private: int k; public: B(){i=j=k=0;} void set_j(int pj){j=pj;} int get_j(){return j;} void set_k(int pk){k=pk;} int get_k(){return k;} }; class D: public B{ public: D(){ i=1; j=1; k=1; // 1 set_k(1); // 2 } }; class C{ public: C(){ b.i=2; b.j=2; // 3 b.set_j(2); // 4 b.k=2; // 5 b.set_k(2); // 6 } private: B b; };

Care din afirmatiile urmatoare sunt adevarate? instructiunile // 1, // 3 si // 5 sunt toate incorecte 5. Care este varianta corecta de completare a urmatoarei specificari (incomplete ) a clasei Data #include <iostream.h> class Data{ public: // metode si operatori private: int zi,luna, an; }; astfel incat programul urmator void main(){ Data d, e(31,12,2002); cout<<d<<" "<<e<<endl; } sa afiseze rezultatele: 1/1/2001 31/12/2002 dupa comentariul metode si operatori, se adauga: Data(int zi=1, int luna=1, int an=2001);
friend ostream& operator<<(ostream&, Date &);

JAVA
1. Fie urmatorul bloc de instructiuni Java: { int x = 12; q=1; { int q = 96; // Both x & q available x=q; } q=x; x=1; } Care afirmatie este adevarata: a. instructiunea x=q; este corecta; b. instructiunea q=x; este corecta; c. instructiunea x=1; este incorecta; d. instructiunea q=1; este corecta; 2. Fie urmatorul bloc de instructiuni Java: { int x = 10; x=1; { int x = 100; } x=2; } Care afirmatie este adevarata: a. instructiunea x=1; este incorecta; b. instructiunea int x = 100; este incorecta; c. instructiunea x=2; este incorecta; d. instructiunea int x = 10; este incorecta; 3. Fie urmatoarea clasa Java: class D { int i; float f; boolean b; } Care afirmatie este adevarata: a. instructiunea D d = new D(1); este corecta; b. instructiunea D d = new D(1,1); este corecta; c. instructiunea D d = new D(); este corecta; d. instructiunea D d = new D(1,1,1); este corecta; 4. Fie urmatoarea metoda Java: int storage(String s) {

return s.length() * 2; } si instructiunea int i=storage(Java); Care afirmatie este adevarata: a. instructiunea este incorecta; b. i va primi valoarea 4; c. i va primi valoarea 16; d. i va primi valoarea 8; 5. Fie urmatoarea clasa Java: class C{ public static int i=1; } si instructiunile: C x=new C(); C y=new C(); x.i =x.i ?+1; Care afirmatie este adevarata: a. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=2; b. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=1; c. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=2; d. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=1; 6. Fie urmatoarea clasa Java: class C{ public static void main(String args[]){ System.out.println(args[0]); System.out.println(args[1]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: a. Curs Java An b. Curs Java c. Java An 3 d. Curs Java An 3 7. Fie urmatoarea clasa Java: class C{ public static void main(String args[]){ for(int i=0;i<args.length; i++) System.out.println( + args[i]); }

} Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: a. Curs Java b. Curs Java An c. Curs Java An 3 d. Java An 3 8. Fie urmatoarea clasa Java: public class Person{ public Person(String p){name=new String(p); System.out.println(++nr); } public static void main(String[] args){ while(true)f(); } private static void f(){Person p = new Person("Ionescu"); // obiectele NU se acumuleaza // in heap si NU blocheaza executarea, spre deosebire de C++ } private String name; private static long nr=0; }; Care afirmatie este adevarata: a. Programul nu se opreste din executare; b. Programul se termina, cu mesaj de eroare, deoarece la un moment dat nu mai exista memorie suficienta pentru crearea obiectelor Person; c. Programul are erori de sintaxa; d. Programul se termina, fara mesaj de eroare. 9. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; }

class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s1.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: a. Programul afiseaza: Overflow la stiva Tudor b. Programul afiseaza: Underflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Andrei d. Programul afiseaza: Underflow la stiva Andrei

10. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s2.insert("aa"); s2.delete(); s2.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName());

} catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: a. Programul afiseaza: Underflow la stiva Andrei b. Programul afiseaza: Underflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Tudor d. Programul afiseaza: Overflow la stiva Andrei 11. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{

public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s2.insert("aa"); s2.insert( new Integer(10)); s2.insert("aa"); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: a. Programul afiseaza: Overflow la stiva Tudor b. Programul afiseaza: Overflow la stiva Andrei c. Programul afiseaza: Underflow la stiva Tudor d. Programul afiseaza: Underflow la stiva Andrei 12. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{

public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: stiva Tudor c. Programul afiseaza: Varful stivei: 10 d. Programul afiseaza: 2 13. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: stiva Tudor

b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: 2 d. Programul afiseaza: Varful stivei: aa 14. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: stiva Tudor d. Programul afiseaza: 2 15. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1;

v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); s1.insert("aa"); s2.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } } Care afirmatie este adevarata: a. Programul afiseaza: stiva Tudor b. Programul afiseaza: Varful stivei: aa c. Programul afiseaza: 2 d. Programul afiseaza: Varful stivei: 10 16. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--;

prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } // specializarea metodei Object.equals // doua cozi sunt egale daca au aceleasi elemente // chiar daca ele au dimensiuni maxime sau nume diferite public boolean equals(Object obiectOarecare) { if (obiectOarecare instanceof CoadaCirculara) { CoadaCirculara cc= (CoadaCirculara)obiectOarecare; boolean b=true; b=b && (cc.numarElemente==numarElemente); int i=prim; int nr=numarElemente; while(b && (nr !=0)){ b=b && cc.v[i].equals(v[i]); nr--; i=(i+1)%maxDim; } return b; } return false; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: a. Programul afiseaza:

X=Y X=Y b. Programul nu afiseaza nimic c. Programul afiseaza: X=Y d. Programul afiseaza: 3 17. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata:

a. Programul afiseaza: 3 b. Programul afiseaza: X=Y X=Y c. Programul afiseaza: X=Y d. Programul nu afiseaza nimic 18. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); x.adauga("a"); x.adauga("b"); x.adauga("c"); x.adauga("d"); x.adauga("e"); x.adauga("f"); System.out.println(x.element()); }

} Care afirmatie este adevarata: a. Programul afiseaza: b b. Programul afiseaza: d c. Programul afiseaza: c d. Programul afiseaza: a 19. Fie urmatoarele clase Java: public interface Actualizare{ public void actualizareNume(String nume); public void actualizareVarsta(int varsta); } interface Afisare{ public void afisare(); public void actualizareVarsta(int varsta); } public class Persoana{ public Persoana(String nume, int varsta){ this.nume=nume; this.varsta=varsta; } public Persoana(){} protected String nume="XXXX"; protected int varsta=0; } class PersoanaSpecializata extends Persoana implements Actualizare, Afisare{ public void actualizareNume(String nume){this.nume=nume;} public void actualizareVarsta(int varsta){this.varsta=varsta;} public void afisare(){ System.out.println("nume= "+nume); System.out.println("varsta= " + varsta); } } public class Client{ public static void main(String args[]){ PersoanaSpecializata p=new PersoanaSpecializata(); Actualizare act=p; Afisare afis=p; act.actualizareNume("Ionescu"); act.actualizareVarsta(58); afis.afisare(); } } Care afirmatie este adevarata: a. Programul este incorect deoarece o clasa nu poate implementa dou a interfete b. Programul este incorect deoarece metoda public void afisare() nu

face parte din clasa Persoana c. Programul afiseaza: nume= Ionescu varsta= 58 d. Programul este incorect deoarece metoda public void actualizareVarsta(int varsta) nu face parte din clasa PersoanaSpecializata 20. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void actiune(){x++;System.out.println(x);}; } public class View extends Frame{ private Button b; private Model m; private Controller c; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add(b); m=new Model(); c=new Controller(m); b.addActionListener(c); setSize(100,50); setVisible(true); } } class Controller implements ActionListener{ private Model md; public Controller(Model p){ md=p; } public void actionPerformed(ActionEvent e){ md.actiune(); } } Care afirmatie este adevarata, daca se face de doua ori click pe butonul stang mouse asupra butonului Actiune: a. Programul nu afiseaza nimic b. Programul afiseaza: 1

2 c. Valoarea atributului f.m.x ramane mereu la valoarea 0 d. Programul afiseaza: 0 1 21. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void increment(){x++;} public int get_x(){return x;} } public class View extends Frame{ private Button b; protected Model m; private Controller c; protected TextField tf; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add("North",b); m=new Model(); c=new Controller(this); b.addActionListener(c); tf=new TextField(10); add("Center",tf); setSize(100,250); setVisible(true); } } class Controller implements ActionListener{ private View vw; public Controller(View v){ vw=v; } public void actionPerformed(ActionEvent e){ vw.m.increment(); vw.tf.setText(String.valueOf(vw.m.get_x())); } } Care afirmatie este adevarata, daca se face de doua ori click pe butonul stang mouse

asupra butonului Actiune: a. n campul de text f.tf este afisata valoarea 1 b. Programul nu afiseaza nimic c. n campul de text f.tf este afisata valoarea 2 d. Valoarea atributului f.m.x ramane mereu la valoarea 0 22. Fie urmatorul program Java: import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit"); exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose();

//System.exit(0); } public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; } } class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } } Care afirmatie este adevarata, daca se face de click pe butonul stang mouse asupra butonului modifica din fereastra fn: a. Doar in campul de text field al ferestrei fo2 este afisata valoarea actualizata a atributului Observator.m.i b. n campul de text field al tuturor ferestrelor este afisata valoarea actualizata a atributului Observator.m.i c. Doar in campul de text field al ferestrei fo1 este afisata valoarea actualizata a atributului Observator.m.i d. Doar in campul de text field al ferestrelor fo1 si fo2 este afisata valoarea actualizata a atributului Observator.m.i 23. Fie urmatorul program Java: import java.util.Observer; import java.util.Observable;

import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit"); exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); } public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view;

public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; } } class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } } Care afirmatie este adevarata, daca se face de click pe butonul stang mouse asupra butonului modifica din fereastra fo1 sau fo2: a. Doar in campul de text field al ferestrelor fo1 si fo2 este afisata valoarea actualizata a atributului Observator.m.i b. n campul de text field al tuturor ferestrelor este afisata valoarea actualizata a atributului Observator.m.i c. Doar in campul de text field al ferestrei fo1 este afisata valoarea actualizata a atributului Observator.m.i d. Doar in campul de text field al ferestrei fo2 este afisata valoarea actualizata a atributului Observator.m.i

Name: ________________________ Class: ___________________ Date: __________

ID: A

Subiecte proiectare si programare orientata obiect licenta informatica 4 ani


Multiple Choice Identify the letter of the choice that best completes the statement or answers the question. __A__ 1. Fie urmtorul program C++: #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; a.m(); p=&b; p->v(); } Care din afirmatiile urmtoare sunt adevrate: a. Expresia p->v()este incorect deoarece metoda v este inaccesibil b. Programul afiseaza mesajul: A:m() B:(v) c. Programul afiseaz mesajul: A:v() d. Expresia a.m() este incorect deoarece metoda m este inaccesibil

Name: ________________________ __D__ 2. Fie urmtorul program C++:


#include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int i)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } }; class B:public A{ public: // 1. int s(){ cout<<"int A::s()"<<endl; return 1; } // 2. void s(int i){ i++;cout<<"void A::s(int i)"<<endl; } // 3. virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } // 4. virtual int v(){ cout<<"int A::v()"<<endl; return 1; }

ID: A

};
Care din afirmatiile urmtoare sunt adevrate: a. //1. este incorect b. //2. este incorect c. //3. este incorect d. //4. este incorect

Name: ________________________ __B__ 3. Fie urmtorul program C++, n care operatorul de insertie << este suprancrcat. Operatorul de atribuire = este cel predefinit, cu semantica prin referinta. #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&);

ID: A

private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: 10 20 10 20 b. Programul afiseaz: 10 20 1000 20 c. Programul afiseaz: 1000 20 10 20 d. Programul afiseaz: 1000 20 1000 20

Name: ________________________ __A__

ID: A

4. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate chiar si n cazul de autoatribure d=d.
#include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&);

private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } // supraincarcare cu semantica prin valoare C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // fara verificarea cazului de autoatribuire d=d delete[] pi; dim=x.dim; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl;

}
n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate:

Name: ________________________ a. Programul afiseaz: 10 20 10 20 xx yy a) Programul afiseaz: 10 20 1000 20 xx yy Programul afiseaz: 1000 20 10 20 xx yy Programul afiseaz: 10 20 10 20 10 20

ID: A

b.

c.

d.

Name: ________________________ __D__

ID: A

5. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate numai dac d?s.
#include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&);

private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // numai daca destinatia difera de sursa if(this!=&x){ dim=x.dim; delete[] pi; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} } return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl;

}
n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate:

Name: ________________________ a.

ID: A

b.

c.

d.

__A?__

6.

Programul afiseaz: 10 20 10 20 xx yy Programul afiseaz: 10 20 1000 20 xx yy Programul afiseaz: 1000 20 10 20 xx yy Programul afiseaz: 10 20 10 20 10 20 Fie urmtorul program C++, unde functia abs calculeaz valoarea absolut a unui numr real:

#include <iostream.h> void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="<<a<<endl; int i=-1; abs(i); //temporary used for parameter x cout<<"i="<<i<<endl; // i=-1

}
La compilare a fost emis urmtorul mesaj de avertizare: Warning: temporary used for parameter x in call to abs(float &) Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: a =1 i = -1 b. Programul afiseaz: a =1 i=1 c. Programul afiseaz: a = -1 i = -1 d. Programul afiseaz: a = -1 i=1

Name: ________________________

ID: A

__D__

7. Fie urmtorul program C++:


#include <iostream.h> class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: Cerc(double r=0.0, int x=0, int y=0);// constructor protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<<p.x<<", "<<p.y<< ']'; return output; } //implementare Cerc Cerc::Cerc(double r, int a, int b):Punct(a,b), raza(r){} ostream& operator<<(ostream& output, const Cerc& c){ output <<"Centru= "<< (Punct)(c) <<"; Raza= "<<c.raza; return output; }; void main(){ Punct *punctPtr=0, p(30,50); Cerc *cercPtr=0, c(2.7,120,89); cout<<p<<endl; cout<<c<<endl; // Cerc tratat ca Punct (prin pointer la clasa de baza): punctPtr=&c; cout<< *punctPtr << endl; /* Cerc tratat ca Cerc (prin pointer la clasa de baza, dar cu conversie explicita de la Punct la clasa derivata Cerc */ cercPtr= (Cerc *)(punctPtr); cout<< *cercPtr<<endl; /*Punct tratat ca Cerc: programatorul isi asuma responsabilitatea unor erori: anumite atribute sunt nedefinite */ punctPtr= &p; // punctPtr refera un Punct //Urmeaza conversie asumata de programator, //de la clasa de baza la clasa derivata cercPtr=(Cerc *)(punctPtr); // cercPtr refera p ca pe un cerc //dar acest asa-zis cerc are raza nedefinita cout<< *cercPtr <<endl;

}
8

Name: ________________________ Prin xx este desemnat o valoare nedefinit. Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx b. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Centru=Punct[30,50]; Raza=xx c. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx d. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx 8. Fie urmtorul program C++:
// constructor de copiere in clasa de baza; // dar absent in clasa derivata #include <iostream.h> class B{ public: B(){cout<<"B();";} B(B &b){cout<<"B(B &b);";} }; class D: public B{ public: D(){cout<<"D();";} }; void main(){ B b; B b1(b); D d; D d1(d); B bd(d);

ID: A

__A__

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: B() B(B &b) B() D() B(B &b) B(B &b) b. Programul afiseaz: B() B() B() D() B(B &b) B(B &b) c. Programul afiseaz: B() B() B(B &b) D() B(B &b) B(B &b) d. programul afiseaz: B() B(B &b) B() D() B() B() 9

Name: ________________________ __B__ 9. Fie urmtorul program C++:


// destructor static #include <iostream.h> #include <conio.h> class B{ public: B(){cout<<"B()"<<endl;} ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *b=new B(); // apel B() delete b; b=new D(); // apel B();D() delete b;

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: B() ~B() B() D() ~D() b. Programul afiseaz: B() ~B() B() D() ~B() c. Programul afiseaz: B() ~B() B() ~B() d. Programul afiseaz: B() ~B() D() ~B()

10

Name: ________________________ __B__ 10. Fie urmtorul program C++:


// destructor virtual #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *b=new B(); // apel B() delete b; b=new D(); // apel B();D(); // destructorii, in ordine inversa delete b;

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: B() ~B() B() D() ~D() ~B() b. Programul afiseaz: B() ~B() B() D() ~B() ~B() c. Programul afiseaz: B() ~B() B() D() ~B() ~D() d. Programul afiseaz: B() ~B() B() D() ~B()

11

Name: ________________________ __C__ 11. Fie urmtorul program C++:


#include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ name=new char[strlen(p)+1]; strcpy(name,p); } ~Person(){delete[] name;} private: char *name; }; void f(){ // obiect nou, alocare dinamica in memoria heap Person *p =new Person("Balanescu"); delete p; } void main(){ while(1)f();

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul se termin, deoarece instructiunea delete p elibereaz memoria alocat pentru obiectul referit de p b. Programul se termin, deoarece la iesirea din functia f se elibereaz memoria alocat pe stiv pentru obiectul referit de p c. Programul nu se termin, deoarece conditia de continuare din instructiunea while este mereu ndeplinit d. Programul se blocheaz la epuizarea memoriei heap

12

Name: ________________________ __C__ 12. Fie urmtorul program C++:


#include <iostream.h> class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Persoana q="Balanescu"; void fvalue(Persoana p){p.afisare();} void faddress(Persoana *p){p->afisare();} void freference(Persoana &p){p.afisare();} void main(){ fvalue(q); faddress(&q); freference(q); fvalue("Tudor"); freference("Tudor");// Warning: temporary used for p

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Expresia faddress(&q); este eronat; b. Instructiunea de declarare Persoana q="Balanescu"; este eronat; c. Expresia p->afisare() este eronat; d. Programul afiseaz: Balanescu Balanescu Balanescu Tudor Tudor

13

Name: ________________________ __C__ 13. Fie urmtorul program C++:


#include <iostream.h> class B{ public: B(int i):i(i){} protected: int i; }; class D1: public B{ public: D1(int i):B(i){} void inc(){i++;} }; class D2: public B{ public: D2(int i):B(i){} void afisare(){cout<<i=<<i<<endl;} }; class D: public D1, public D2{ public: D(int i):D1(i),D2(i){} }; void main(){ D d(0); d.inc(); d.afisare();

ID: A

}
Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz i=-1 b. Programul afiseaz i=2 c. Programul afiseaz i=0 d. Programul afiseaz i=1

14

Name: ________________________ __B__ 14. Fie urmtorul program C++:


#include <iostream.h> class B{ public: B(int i=-1):valB(i){} B& operator=(const B &b){ valB=b.valB; cout<<"B::op= "; return *this; } private: int valB; }; class D:public B{ public: D(int i, int j):B(i),valD(j){} D& operator=(const D &d){ valD=d.valD; cout<<"D::op= "; return *this; } private: int valD; }; void main(){ B b(0), b1(1); B *pB; D d(0,0), d1(1,1); b=b1; d=d1; b=d; pB=&d; *pB=d; pB->operator=(d); }

ID: A

Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz : B::op= D::op= D::op= B::op= D::op= b. Programul afiseaz: B::op= D::op= B::op= B::op= B::op= c. Programul afiseaz: B::op= D::op= B::op= D::op= D::op= d. Programul afiseaz: B::op= D::op= D::op= D::op= B::op=

15

Name: ________________________ __B__ 15. Fie urmtorul program C++:


class A{ int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){ x=1; // 3 //b.x=1; //x nu este accesibil obiectelor } }; void main(){ B b(1); // 4

ID: A

}
Care din urmtoarele instructiuni sunt eronate: a. B b; // 1 b. B b(1); // 2 (din clasa D) c. x=1; // 3 d. B b(1); // 4 (din functia main)

16

Name: ________________________

ID: A

__C__ 16. class A{


int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; public: void m(){ x=1; b.x=1; //3 } }; void main(){ B b(1); // 4

// 1 // 2

}
Care din urmtoarele instructiuni sunt eronate: a. B b; // 1 b. x=1 // 2 c. b.x=1; // 3 d. B b(1); // 4 (din functia main)

17

Programare si proiectare orientata obiect


MULTIPLE CHOICE 1. Un program scris n Java poate rula pe orice platforma deoarece: a. Limbajul Java e derivat din C++ b. Compilatorul este identic cu cel de C++ c. Masina virtuala interpreteaza programul si translateaza apelurile sistem d. Api-ul este portabil 2. Un program scris n Java se va compila cu comanda: a. javac Test c. javac Test.java b. java Test.java d. javac Test.class 3. Un program scris n Java se va lansa cu comanda: a. javac Test.java c. java Test.java b. java Test d. java Test.class 4. Ce este un Applet? a. Un tip de calculator b. Un program care ruleaza direct pe orice calculator c. Un sit web interactiv d. Un program care ruleaza n contextul unui browser 5. Un applet va rula n orice browser deoarece a. Serverul are o masina virtuala incorporata b. Browserul are o masina virtuala incorporata c. Browserul interpreteaza direct codul sursa d. Appleturile nu au nevoie de o masina virtuala 6. Care este scopul metodei statice main ? a. Sa creeze o interfata cu utilizatorul b. Actioneaza ca un punct de intrare n program c. Creaza ferestrele si butoanele aplicatiei d. Actioneaza ca o poarta spe sistemul de operare 7. O clasa Applet furnizeaza: a. Un browser care s ruleze apletul b. Metode care definesc aspectul si comportamentul apletului c. A pagina HTML speciala d. Permisiunile de a comunica cu serverul 2 8. Ce metoda apeleaza browserul pe un applet nou incarcat? a. Main c. Paint b. Start d. Init 9. Care este rolul declaratiilor import? a. Permite referirea claselor fara utilizarea de prefixe b. Elimina necesitatea declararii variabilelor c. Permite importul imaginilor folosite

d. Elimina apelurile directe a functiilor fara clase 10. In cazul implementarii unei interfete trebuie s definim in mod obligatoriu : a. Doua metode ale interfetei c. Orice metoda a interfetei b. Numai anumite metode ale interfetei d. Toate metodele interfetei 11. Aplicatiile Java ruleaza pe urmatorul sistem de operare: a. Windows c. UNIX b. Linux d. Toate cele trei 12. Urmatorul cod sursa Java se afl ntr-un fisier. Cum se numeste fisierul?
class Foo { public static void println() { System.out.println("Foo"); } } public class FooDemo { public static void main(String[] argv) { System.out.println("FooDemo"); Foo.println(); } }

a. Foo.java c. FooDemo.java b. Foo.class d. FooDemo.class 13. Daca bo este boolean, numr este int, sir este string atunci care din urmtoarele linii este incorecta? a. If(bo) c. If(numar<=1) b. If(numar<0) d. If(sir==Java) 3 14. Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = 1, b = -2; a = a + b; b = a b; a = a b; a. a=1, b=2 c. a=2, b=-3 b. a=0, b=1 d. a=-2, b=1 15. Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a += b; b = a- b; a -= b; a. a=-1, b=2 c. a=-2, b= 1 b. a=2, b=-1 d. a=-2, b=-1 16. Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = 1, b = -2; a = a ^ b; b = a ^ b; a = a ^ b; a. a=-2, b=1 c. a=-1, b=1 b. a=2, b=-2 d. a=1, b=-2

17. Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a ^= b; b = a ^ b; a ^= b; a. a= -1, b=2 c. a=2, b=-1 b. a= 1, b=-2 d. a=-2, b=1 18. Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a = (a > b ? a : b); b = (a < b ? a : b); a. a= 2, b=-1 c. a=1, b=2 b. a= -1, b= 2 d. a= 2, b= 2 4 19. Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = 1, b = 2; if (a < b ) a = b; if (a < b) b = a; a. a= 1, b=1 c. a=2, b=2 b. a= 1, b= 2 d. a= 2, b= 1 20. Clasa BorderLayout contine campuri statice pentru: a. Adaugarea unor componente in anumite zone ale containerul b. Introducerea unor metode noi c. Specificarea culorii si a fontului d. Afisarea ferestrei unui applet 21. Constructorul are foloseste la: a. Eliberarea memoriei c. Initializeaza masina virtuala b. Importa pachete d. Initializeaza noile obiecte create 22. System.out.println este a. O variabila c. Un obiect b. O clasa d. O metoda 23. Ce valori poate lua o variabila de tip boolean? a. 1 c. true b. 0 d. false 24. Ce valori nu poate lua o variabila de tip boolean? a. 1 c. true b. a==b (a si b sunt variabile de tip int) d. false 25. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip boolean) c. false b. true d. 0

26. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip int) b. true c. false d. false==x (x este o variabila de tip boolean) 5 27. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip boolean) b. a==b (a si b sunt variabile de tip int) c. true d. false==x (x este o variabila de tip boolean) 28. Care din urmtoarele tipuri de date poate retine valori de la -32.768 la 32.767 ? a. char c. byte b. short d. int 29. Ce valoare va avea variabila x dupa executarea operaiilor?
int x = 0; x = (5*4) % 7; x = x / 5;

a. 6 c. 1 b. 1.2 d. 0 30. Ce valoare va avea variabila numar la finalul buclei?


int numar = 1; for (int x = 0; x < 4; x++) { numar = numar << 1; }

a. 1 c. 16 b. 4 d. 32 31. Ce valoare va avea variabila numar la finalul buclei?


int numar = -1; for (int x = 0; x < 4; x++) { numar = numar << 1; }

a. 0 c. 16 b. -4 d. -16 32. Un vector se instaniaz astfel? a. int vector[100]; c. float [] numere={1.1, 1.2}; b. String [100]sir; d. byte [] buffer; 33. Un vector se instaniaz astfel? a. int vector[100]; c. float [] numere; b. String [100]sir; d. byte [] buffer = new byte[100]; 6

34. Ce efect are urmtoarea secvenade cod?


char a[] = {a, b, c}; char [] b = new char[3]; a=b;

a. b se va copia n a b. a se va copia n b c. a si b se refer la aceiasi zona de memorie d. se va genera o excepie 35. Ce efect are urmtoarea secven de cod?
char a[] = {a, b, c}; String b = new String(data); if(a==b) System.out.println(egale); else System.out.println(inegale);

a. Se afiseaz egale c. Eroare la compilare b. Se afiseaz inegale d. Se va genera excepie la rulare 36. Ce efect va avea intruciunea urmtoare?
System.out.println("The answer is: "+17+3);

a. Programul nu se compileaza c. Se va afisa: The answer is 173 b. Se va afisa: The answer is 20 d. Se va genera o excepie 37. Care este efectul liniilor de cod urmatoare?
if("String".toString() == "String") System.out.println("Equal"); else System.out.println("Not Equal");

a. Programul nu se compileaza c. Afiseaza Not Equal b. Afiseaza Equal d. Genereaza o excepie 38. O clasa care implementeaza interfata urmatoare
public interface AQuestion { public abstract void someMethod() throws Exception; }

a. Va fi in mod necesar o clasa abstracta b. Ar trebui sa defineasca metoda public abstract void someMethod(); c. Ar trebui s defineasca o metoda public void someMethod() care va emite exceptii d. Ar trebui s defineasca o metoda public void someMethod() care nu va emite exceptii 7 39. O clas care implementeaz interfaa urmtoare va implementa n mod obligatoriu
public interface AQuestion { void someMethod(); }

a. o metoda public void someMethod(); b. o metoda void someMethod(); c. o metoda public void someMethod(); care obligatoriu va emite exceptii d. o metoda public abstract void someMethod();

40. Care din liniile din codul de mai jos prezint o problem de ncapsulare ?
1. class BadCode { 2. int num; 3. public int getNum() { 4. return num; 5. } 6. public void setNum(int num) { 7. this.num = num; 8. } 9. ... 10. }

a. Linia 1 c. Linia 4 b. Linia 2 d. Linia 7 41. Care din liniile urmtoare va genera o excepie ?
1. class BadCode { 2. private Foo foo; 3. public BadCode (Foo f) { 4. foo = f; 5. } 6. public BadCode() {} 7. protected void useFoo() { 8. int num = foo.num; 9. String name = foo.name; 10. .... 11. } 12. .... 13. }

a. Linia 2 c. Linia 6 b. Linia 4 d. Linia 8 8 42. Dorim s implementam o clas total protejat si care s nu mai fie extensibil, care din liniile urmatoare ar trebui modificata?
1. class Test { 2. private int key = 1234; 3. //... 4. protected void setKey(int privateKey) { 5. this.key = privateKey; 6. } 7. protected int getKey() { 8. return this.key; 9. } 10. //... 11. }

a. Linia 1 c. Linia 4 b. Linia 2 d. Linia 8 43. Functia Clone() are ca scop:


class Test { private int key = 1234; //... public Test () {} public Test (int k) { this.key = k; }

protected int getKey(){return this.key; } public final Object clone() throws java.lang.CloneNotSupportedException { throw new java.lang.CloneNotSupportedException(); } //... }

a. definirea unei clase clonabile b. definirea unei clase extensibile c. definirea unei clase care nu poate fi extinsa d. clasa si orice derivare a acesteia va fi neclonabila 44. Pentru a bloca serializarea unei clase trebuie sa: a. Definim clasa ca fiind finala c. Definim o metoda readObject b. Definim clasa ca fiind statica d. Definim o metoda writeObject 45. Codul sursa urmator ne spune ca:
public boolean match(Object o) { return this.getName() == ((SomeClass)o).getName(); }

a. obiectele sunt identice c. obiectele fac parte din aceiasi clasa b. obiectele sunt egale d. nici una 9 46. Pentru a defini un camp care sa stocheze informatii sensibile (conturi, nr. de card) se va folosi: a. String c. Char array b. StringBuffer d. Char 47. Ce efect va produce urmatorul program Java?
public class Test { public void method(Object o) { System.out.println("Object Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } }

a. Programul nu se compileaza b. Se compileaza dar produce o exceptie la rulare c. Afiseaza Object Version d. Afiseaza String Version 10 48. Ce efect va produce urmatorul program Java?
public class Test

{ public void method(StringBuffer sb) { System.out.println("StringBuffer Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } }

a. Programul nu se compileaza b. Se compileaza dar produce o exceptie la rulare c. Afiseaza StringBuffer Version d. Afiseaza String Version 49. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(Throwable t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } } a. Nu se complieaza: nici un obiect Throwable nu a fost emis in blocul try b. Nu se compileaza: nu pot fi prinse obiecte Throwable, ci numai obiecte Exception c. Afiseaza Before Try si At the End d. Afiseaza Before Try , Inside Catch si At the End 11 50. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(IOException t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } } a. Nu se complieaza: nici un obiect IOException nu a fost emis in blocul try b. Nu se compileaza: nu pot fi prinse obiecte IOException, ci numai Exception c. Afiseaza Before try si At the End d. Afiseaza Before try , Inside Catch si At the End 51. Care din urmatoarele afirmatii este adevarata?

a. O metoda statica nu poate returna un obicet Exception b. O metoda statica nu poate emite un obiect Exception c. O metoda statica nu poate returna o variabila statica a clasei d. O metoda statica nu poate returna o variabila nestatica a clasei 12 52. Cum se va comporta urmatorul program?
public class A { private void method1() throws Exception { throw new RuntimeException(); } public void method2() { try { method1(); } catch(RuntimeException e) { System.out.println("Caught Runtime Exception"); } catch(Exception e) { System.out.println("Caught Exception"); } } public static void main(String args[]) { A a = new A(); a.method2(); } }

a. Programul nu se compileaza c. Afiseaza Caught Runtime Exception b. Afiseaza Caught Exception d. Afiseaza ambele mesaje 13 53. Cum se va comporta urmatorul program?
class Base { public void aMethod() throws ClassNotFoundException { } } public class Derived extends Base { public void aMethod() throws RuntimeException { } } a. Programul nu se compileaza deoarece RuntimeException nu este derivata din RuntimeException b. Se lanseaza o exceptie ClassNotFoundException la compilare

c. Se lanseaza o exceptie RuntimeException la rulare d. Se compileaza corect 14 54. Cititi cu atentie urmatorul co sursa:
import java.awt.*; public class TestFrame extends Frame { Button bNorth = new Button("North"); Button bSouth = new Button("South"); Button bEast = new Button("East"); Button bWest = new Button("West"); Button bCenter = new Button("Center"); public TestFrame() { setLayout(new BorderLayout()); add(bSouth,BorderLayout.SOUTH); add(bWest,BorderLayout.WEST); add(bEast,BorderLayout.EAST); add(bNorth,BorderLayout.NORTH); add(bCenter); setLayout(new FlowLayout()); validate(); pack(); setVisible(true); } public static void main(String args[]) { TestFrame tf = new TestFrame(); } }

a. Programul nu se compileaza b. Se compileaza si afiseaza butoanele pe o singura linie c. Se compileaza dar genereaza o exceptie d. Se compileaza si afiseaza butoanele sub forma de grid 55. O clasa care are totii constructorii privati : a. Trebuie declarata clasa finala c. Poate fi mostenita b. Poate fi instantiata d. Nu poate fi mostenita 15 56. Urmariti cu atentie codul urmator:
public class NiceThreads implements Runnable { public void run() { while(true) { } } public static void main(String args[]) { NiceThreads nt1 = new NiceThreads(); NiceThreads nt2 = new NiceThreads(); NiceThreads nt3 = new NiceThreads(); nt1.run();

nt2.run(); nt3.run(); } }

a. Programul se compileaza si lanseaza trei fire care vor rula la infinit b. Programul se compileaza si se lanseaza un singur fir c. Programul nu se compileaza d. Se compileaza dar genereaza o exceptie la rulare 57. Pentru a preveni executarea unei metode simultan de ctre mai multe fire de execuie folosim: a. public c. native b. final d. syncronized 58. Pentru a excuta o procedura n mod atomic delarm metoda ca fiind: a. syncronized c. final b. public d. native 59. Managerul de asezare implicit pentru o fereastr este: a. LayoutManager c. BorderLayout b. null d. FlowLayout 60. Managerul de asezare implicit pentru un panel este: a. BorderLayout c. null b. GridLayout d. FlowLayout 61. Constructorul clasei de baz se apeleaz prin intermediul cuvntului cheie: a. this c. super b. base d. interface 16 62. n Java o clasa poate extinde a. cel mult o interfa c. oricte clase b. cel mult o clas d. oricte interfee 63. n Java o interfa poate extinde a. cel mult o interfa c. oricte clase b. cel mult o clas d. oricte interfee 64. n Java o clasa poate implementa cel mult a. o clas c. oricte clase b. o interfa d. oricte interfee 65. Pentru a bloca utilizarea directa a unei clase aceasta se va declara folosind specificatorul: a. abstract c. protected b. final d. private 66. Pentru a bloca derivarea unei clase aceasta se va declara folosind specificatorul: a. abstract c. protected b. final d. private

67. Clasa Menu este derivata din: a. MenuComponent c. PopupMenu b. MenuItem d. MenuBar 68. Lansarea unei excepii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try 69. Prinderea unei excepii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try 70. Ce cuvnt nu face parte din limbaj: a. volatile c. dispose b. transient d. native 71. Ce cuvnt nu face parte din limbaj: a. const c. final b. bool d. finally 17 72. Ce cuvnt nu face parte din limbaj: a. const c. break b. continue d. delete 73. Ce cuvnt nu face parte din limbaj: a. short c. awt b. long d. do 74. Ce cuvnt nu face parte din limbaj: a. class c. interface b. struct d. enum 75. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. int c. goto b. true d. enum 76. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. class c. null b. const d. boolean 77. Ce cuvnt cheie al limbajului nu este folosit: a. strictfp c. instanceof b. const d. transient 78. Ce afiseaz urmtorul program: public class Main { int x=0; int f() { return x+1; } public static void main(String[] args) { System.out.println("x este " + f());

} } a. x este 0 c. Eroare la compilare b. x este 1 d. Exceptie la rulare 18 79. Ce afiseaz urmtorul program: public class Main { int x=0; static int f() { return x+1; } public static void main(String[] args) { System.out.println("x este " + f()); } } a. Eroare la compilare c. x este 0 b. Exceptie la rulare d. x este 1 80. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return x--; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+ f() ); } } a. Eroare la compilare c. x este 0 acum este 0 b. Exceptie la rulare d. x este 0 acum este -1 81. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return ++x; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 1 c. x este 0 acum este 1 b. x este 1 acum este 2 d. x este 0 acum este -1 82. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return (++x)*(x--); } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 0 c. x este 1 acum este 2 b. x este 1 acum este 1 d. x este 2 acum este 4 19

83. Ce afiseaz urmtorul program: class Element{ public Element(){ System.out.print(" Element "); } } class Carte extends Element{ public Carte(){ System.out.print(" Carte "); } } class Revista extends Carte{ public Revista(){ System.out.print(" Revista "); } } public class Main { public static void main(String[] args) { Element revista = new Revista(); } } a. Element c. Element Carte Revista b. Revista d. Revista Carte Element 84. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element>{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.Print(); } } a. Nu afiseaza nimic b. Nu se compileaza, eroare la compilare c. Se compileaza dar lanseaza exceptie la rulare d. Carte Revista 20 85. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{

public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.add(b); b.Print(); } } a. Nu afiseaza nimic b. Nu se compileaza, eroare la compilare c. Se compileaza dar lanseaza exceptie la rulare d. Carte Revista Carte Revista 21 86. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } System.out.println(); } } public class Main { public static void main(String[] args) { Biblioteca b1 = new Biblioteca(); Biblioteca b2 = new Biblioteca(); b2.add(b1); b1.add(b2); b1.Print(); } } a. Nu afiseaza nimic

b. Se compileaza dar lanseaza exceptie la rulare c. Carte Revista Carte Revista d. Nu se compileaza, eroare la compilare 87. Cititi cu atentie urmatorul cod sursa:
class Memory{ } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } }

a. Programul se compileaza dar se blocheaza b. Se compileaza, consuma toata memoria si se opreste c. Se compileaza si ruleaza la infinit deoarece nu se aloca nimic d. Se compileaza si ruleaza la infinit deoarece nu se poate consuma toata memoria 22 88. Cititi cu atentie urmatorul cod sursa:
class Memory{ int [ ] matrice; public Memory(){ matrice = new int[100]; } } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } }

a. Ruleaza la infinit deoarece memoria se elibereaz automat b. Programul se compileaza dar se blocheaza c. Consuma toata memoria si se opreste d. Ruleaza dar emite o exceptie 89. Cititi cu atentie urmatorul cod sursa:
class Memory implements Serializable{ int [] matrice; public Memory(){ matrice = new int[100]; } }

a. Clasa Memory extinde clasa Serializable b. Clasa Memory mosteneste clasa Object c. Clasa Memory implementeaz interfaa Object d. Clasa Memory implementeaz clasa Serializable 90. n corpul unui constructor se poate apela un alt constructor? a. Doar constructorul clasei de baz prin intermediul cuvntului super b. Doar un constructor al clasei derivate prin intermediul cuvntului super c. Un constructor cu ali parametri d. Un constructor cu aceiasi parametri 91. Obiectul curent se poate transmite ca parametru prin intermediul cuvntului: a. super c. class b. this d. object

92. n prezena firelor de execuie multiple incrementarea atomic a unei variabile partajate se obine prin intermediul specificatorului: a. X++ c. synchronized b. final d. static 23 93. n prezena firelor de execuie multiple decrementarea atomic a unei variabile partajate se obine prin intermediul specificatorului: a. const c. x-b. synchronized d. thread 94. Un fir de execuie se obine prin extinderea clasei: a. Runnable c. Object b. Thread d. Frame 95. Un fir de execuie se obine prin implementarea interfeei: a. Runnable c. Object b. Thread d. Serializable 96. Un fir de execuie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init 97. Un fir de execuie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init 98. Urmatorul specificator are efect doar n prezenta firelor de execuie: a. run c. start b. synchronized d. static 99. O clas care implementeaz interfaa Runnable n mod obligatoriu trebuie: a. s fie public c. s fie declarat synchronized b. s implementeze metoda run d. s fie declarat ca fiind abstract 100. O interfa care extinde interfaa Runnable n mod obligatoriu trebuie: a. s fie public c. s implementeze metoda run b. s fie declarat synchronized d. nici una 101. Codul urmtor nu se compileaz, lipseste specificatorul: class NewThread implements Runnable{ } a. public c. abstract b. private d. run 24 102. Diagrama UML urmtoare reprezint a. O diagram de caz c. O diagram de secven b. O diagram de clase d. O diagram de obiecte

103. Care din diagramele UML urmtoare reprezint interaciunea actorilor asupra sistemui modelat: a. O diagram de clase c. O digram de caz b. O diagram de secven d. O diagram de obiecte 104. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de secven b. O diagram de caz d. O diagram de obiecte 25 105. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de caz b. O diagram de secven d. O diagram de obiecte 106. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de caz b. O diagram de secven d. O diagram de obiecte 107. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de colaborare b. O diagram de secven d. O diagram de obiecte 26 108. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de comunicare b. O diagram de stri d. O diagram de obiecte 109. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de comunicare b. O diagram de stri d. O diagram de obiecte 110. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de activiti b. O diagram de stare d. O diagram de obiecte 27 111. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de activiti b. O diagram de stare d. O diagram de obiecte 112. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de activiti b. O diagram de stare d. O diagram de colaborare 28 113. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de activiti b. O diagram de stare d. O diagram de colaborare 114. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de activiti

b. O diagram de stare d. O diagram de colaborare 29 115. Diagrama UML urmtoare reprezint a. O diagram de clase c. O diagram de activiti b. O diagram de stare d. O diagram de colaborare 116. Diagrama UML urmtoare reprezint a. Relaia de asociere c. Relaia de generalizare b. Relaia de dependen d. Relaia de agregare 30 117. Diagrama UML urmtoare reprezint a. Relaia de asociere c. Relaia de generalizare b. Relaia de implementare/realizare d. Relaia de agregare 118. Fiecare student are un profesor coordonator, fiecare profesor poate coordona orici studeni, inclusiv niciunul. Care din diagramele de mai jos reflect n mod corect situaia descris? a. c. b. d. 119. Diagrama UML urmtoare reprezint a. Diagrama de clase si relaia agregare c. Relaia de generalizare b. Relaia de implementare d. Diagrama de obiecte si relaia de asociere 31 120. Diagrama UML urmtoare reprezint a. Diagrama de clase si relaia agregare c. Relaia de generalizare b. Relaia de implementare d. Diagrama de clase si relaia de asociere 121. Diagrama UML urmtoare reprezint a. Diagrama de componente c. Relaia de generalizare b. Relaia de implementare d. Diagrama de clase si relaia de asociere 122. Diagrama UML urmtoare reprezint a. Diagrama de componente si relaia de asociere b. Relaia de implementare c. Relaia de generalizare d. Diagrama de clase si relaia de inglobare 32 123. Diagrama UML urmtoare reprezint a. Diagrama de componente si relaia de asociere b. Diagrama de clase si relaia de implementare c. Diagrama de clase si relaia de asociere d. Diagrama de clase si relaia de nglobare 124. Diagrama UML urmtoare reprezint a. Diagrama de componente si relaia de asociere b. Diagrama de clase si relaia de implementare

c. Diagrama de clase si relaia de asociere d. Diagrama de clase si relaia de nglobare 33 125. Diagrama UML urmtoare reprezint a. Diagrama de componente si relaia de asociere b. Diagrama de clase si relaia de asociere c. Diagrama de clase si relaia de comunicare d. Diagrama de desfsurare si relaia de asociere 126. Diagrama UML urmtoare reprezint a. Diagrama de componente si relaia de asociere b. Diagrama de clase si relaia de asociere c. Diagrama de clase si relaia de comunicare d. Diagrama de desfsurare si relaia de asociere 34 127. Diagrama UML urmtoare reprezint a. Diagrama de caz c. Diagrama de stari b. Diagrama de activiti d. Diagrama de secventa 35 128. Diagrama UML urmtoare reprezint a. Diagrama de caz c. Diagrama de stari b. Diagrama de activiti d. Diagrama de secventa 129. Diagrama UML urmtoare reprezint a. Diagrama de caz c. Diagrama de stari b. Diagrama de activiti d. Diagrama de secventa 36 130. Diagrama UML urmtoare reprezint a. Diagrama de caz c. Diagrama de stri b. Diagrama de activiti d. Diagrama de secvent 131. Obiectul A din diagrama de secven trimite mai multe mesaje obiectului B numite msg: a. c. b. d. 132. Cum arat simbolul unei componente ntr-o diagram de desfsurare? a. Diagrama de desfsurare nu poate conine componente b. Un dreptunghi rotunjit ca n diagrama de stri c. Un box 3D d. Un dreptunghi cu o etichet n partea stng superioar 133. Trei elemente principale apar n diagrama de caz: a. Obiecte, activiti si comunicaii c. Obiecte, cazuri de utilizare si activiti b. Actori, mesaje si activiti d. Actori, cazuri de utilizare si comunicaii 37 134. Care din urmtoarele afirmaii este corect?

a. Clasele din diagrama de clase pot fi grupate n pachete b. Daca pachetul A depinde de pachetul atunci orice schimbare n B oblig la schimbri n A c. Diagrama de clase si diagrama de obiecte sunt complet interschimbabile d. Diagrama de stri si diagrama de activiti sunt complet interschimbabile 135. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Visitor c. State b. Observer d. Strategy 136. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Visitor c. State b. Proxy d. State 38 137. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Visitor c. Bridge b. Decorator d. State 138. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Visitor c. Strategy b. Composite d. Bridge 39 139. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Composite c. Flyweight b. Proxy d. Bridge 140. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Prototype c. Observer b. Interpreter d. Iterator 40 141. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Decorator c. Observer b. Prototype d. Proxy 142. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Prototype c. Bridge b. Adapter d. Chain of responsability 41 143. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Facade c. Adapter b. Prototype d. Decorator 144. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Bridge c. Adapter b. Proxy d. Decorator 42 145. Ce sablon de proiectare reprezinta diagrama urmatoare:

a. Proxy c. Adapter b. Mediator d. Decorator 146. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Builder c. Command b. Mediator d. Facade 43 147. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Composite c. State b. Memento d. Visitor 148. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Iterator c. Observer b. Compozite d. Visitor 44 149. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Adapter c. Facade b. Proxy d. Mediator 150. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Decorator c. Observer b. Proxy d. Template Method 45 151. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Bridge c. Proxy b. Template Method d. Decorator 46 152. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Visitor c. Observer b. Iterator d. Interpreter 47 153. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Bridge c. Factory Method b. Facade d. Decorator 48 154. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Bridge c. Facade b. Prototype d. Decorator 49 155. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Bridge c. Decorator b. Facade d. Abstract Factory 50

156. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Factory Method c. Bridge b. Builder d. Decorator 157. Ce sablon de proiectare reprezinta diagrama urmatoare: a. Bridge c. Singleton b. Facade d. Decorator 158. Ce sablon de proiectare nu este un sablon creational ? a. Builder c. Decorator b. Prototype d. Abstract Factory

POPO 1. Fie urmatorul program: // Public redeclarat private // #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este incorecta: a. b.v(); b. p=&a; c. p->m(); d. p->v();

2. Fie urmatorul program: // Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este corecta: a. b.m(); b. b.v(); c. p->f(); d. p->m(); 3. Fie urmatorul program: // Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p;

B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este corecta: a. b.m(); b. b.v(); c. p->f(); d. p->v(); 4. Fie urmatorul program: // Public redeclarat private // Metoda PRIVATE DEVINE ACCESIBILA PRIN MECANISMUL DE LEGARE DINAMICA #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); } Care expresie este incorecta: a. b.m(); b. p=&a; c. p->m(); d. p->v(); 5. #include <iostream.h>

class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc& operator--(){raza--;return *this;}// return by reference private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza: a. 3300 b. 3201 c. 3200 d. 3211 6. Fie urmatorul program, in care se utilizeaza clase abstracte:// abselem.h#ifndef ABSTRACTELEM_H#define ABSTRACTELEM_Hclass AbstractElem{public: virtual void display()=0; virtual void process()=0;};#endif//LIST.h#ifndef LIST_H#define LIST_H#include "abselem.h"class LIST{public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove();private: int nrmax; int nrelem; int first; int free; AbstractElem* *support;};#endif//LIST.cpp#include "LIST.h"LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1];}void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++;}AbstractElem* LIST::get(){ return support[first];}void LIST::remove(){ first= ++first % nrmax; --nrelem;}Care afirmatie este adevarata: a 3200 b 3 30 1 c 3311 d 3212 7. Fie programul: #include <iostream.h> class Cerc{ public:

Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza : a. 3201 b. 3200 c. 3301 d. 3211 8. Fie programul://destructor explicit#include <string.h>#include <iostream.h>class Person{public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;}private: char *name;};void f(){Person *p = new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java}void main(){ while(1)f();} a obiectelor Punct in obiecte Complex b obiectelor Complex in obiecte Punct c obiectelor Complex in numere reale d Numere reale in obiecte Complex 9. Fie programul: // singleton // constructor private #include <iostream.h> #include <conio.h> class S{ public: static S* create() {

if(i==0){ refS=new S(); i++; } return refS; } void setName(char *s){name=s;} char* getName(){return name;} static int getNr(){return nr;} private: static S* refS; static int i; static int nr; S(){nr++;} char *name; }; int S::i=0; int S::nr=0; S* S::refS=0; void main(){ S *o1, *o2; o1=S::create(); o2=S::create(); o1->setName("Matematica"); o2->setName("Informatica"); cout<<o1->getName()<<endl; cout<<o2->getName()<<endl; cout<<S::getNr()<<endl; getch(); } Programul afiseaza: a. Matematica Informatica 1 b. Informatica Informatica 1 c. Informatica Informatica 2 d. Matematica Informatica 2 10. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get();

void remove();

private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } a. Clasa C defineste o structura de tip coada (FIFO) b. Clasa C defineste o structura de tip stiva (LIFO) c. Clasa C este un vector d. Clasa C este abstracta

11. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h"

class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove();

private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //elements.h #include "abselem.h" #include "iostream.h" class Person: public AbstractElem{ public: Person(char *name); virtual void display(); virtual void process(); private: char *name; }; class Car: public AbstractElem{ public: Car(char *name); virtual void display(); virtual void process(); private: char *name; }; //driver.cpp #include "elements.h" #include "LIST.h" LIST x(3); void main(){ x.put(new Person("Tudor"));

x.put(new Person("Andrei")); x.put(new Car("B-39-TDR")); x.get()->process(); x.remove(); x.get()->process(); x.remove(); x.get()->process(); x.remove(); } //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } //elements.cpp #include "elements.h" Person::Person(char *name):name(name){}; void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); }

Programul afiseaza datele in ordinea: a. Tudor Andrei B-39-TDR b. B-39-TDR Andrei Tudor c. Andrei B-39-TDR Tudor d. B-39-TDR Tudor Andrei

12. Fie urmtoarea clas Java: class C{ public static void main(String args[]){ System.out.println(args[0]); System.out.println(args[1]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: a. C Curs b. Curs Java An 3 c. Curs Java An d. Curs Java 13. Fie urmtorul program Java:

import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit"); exitB.addActionListener(buttonC);

actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); } public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; }

class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } }

Care afirmaie este adevrat, dac se face de click pe butonul stang mouse asupra butonului modifica din fereastra fo1 sau fo2: a. Doar in cmpul de text field al ferestrei fo1 este afiat valoarea actualizata a atributului Observator.m.i b. Doar in cmpul de text field al ferestrelor fo1 si fo2 este afiat valoarea actualizata a atributului Observator.m.i c. n cmpul de text field al tuturor ferestrelor este afiat valoarea actualizata a atributului Observator.m.i d. Doar in cmpul de text field al ferestrei fo2 este afiat valoarea actualizata a atributului Observator.m.i 14. Fie urmtoarele clase Java:

class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;}

private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } Care afirmaie este adevrat: a. Programul afieaz: Varful stivei: 10 b. Programul afieaz: Varful stivei: aa c. Programul afieaz: stiva Tudor d. Programul afieaz: 2 15. Fie urmtoarele clase Java:public interface Actualizare{ public void actualizareNume(String nume); public void actualizareVarsta(int varsta);}interface Afisare{ public void afisare(); public void actualizareVarsta(int varsta);}public class Persoana{ public Persoana(String nume, int varsta){ this.nume=nume; this.varsta=varsta; } public Persoana(){} protected String nume="XXXX"; protected int varsta=0;} class PersoanaSpecializata extends Persoanaimplements Actualizare, Afisare{ public void actualizareNume(String nume){this.nume=nume;} public void actualizareVarsta(int varsta){this.varsta=varsta;} public void afisare(){ System.out.println("nume= "+nume); System.out.println("varsta= " + varsta); }} public class Client{ public static void main(String args[]){ PersoanaSpecializata p=new PersoanaSpecializata(); Actualizare act=p; Afisare afis=p; act.actualizareNume("Ionescu"); act.actualizareVarsta(58); afis.afisare(); } } Care afirmaie este adevrat: Programul afieaz: Varful stivei: aa a Programul afieaz: Varful stivei: 10 b Programul afieaz: stiva Tudor c Programul afieaz: 2 d

nume ionescu varsta 58 (VARIANTE greite) 16. Fie urmtoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;}

private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei");

try{ s1.insert("aa"); s1.delete(); s1.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); }

} } Care afirmaie este adevrat: a. Programul afieaz: Underflow la stiva Andrei b. Programul afieaz: Overflow la stiva Tudor c. Programul afieaz: Underflow la stiva Tudor d. Programul afieaz: Overflow la stiva Andrei

17. Fie programul: // destructor static, #include <iostream.h> class B{ public: ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: ~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza :

a. ~ B() ~B() ~D() b. ~ B() ~D() c. ~ B()~D()~B() ~D() d. ~ B() ~D() ~B() 18. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&);

private: int dim; int *pi; }; C::C(int n, int v[]) dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); x=y; y.set(0,-1000); cout<<x<<endl; } Programul afiseaza: a. -100 20 b. -1000 20 c. 100 2 3 d. 1 20 30 {

19. Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} };

int main(){ B *pb; D d; // pointing to a subclass pb=&d; ((D*)pb)->v(); ((D*)pb)->st(); return 0; } Programul afiseaza: a. virtual method v() of D static method st() of D b. virtual method v() of B static method st() of D c. virtual method v() of D static method st() of B d. virtual method v() of B static method st() of B 20. Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;}

}; int main(){ B b, *pb; D d, *pd; pb=&d; pb->st(); pb->v(); return 0; } Programul afiseaza: a. static method s() of D virtual method v() of D b. static method s() of B virtual method v() of B c. static method s() of D virtual method v() of B d. static method s() of B virtual method v() of D

21. Fie programul#include <string.h>#include <iostream.h>class Person{public: Person(char *p){nr=0; name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){delete[] name;}private: char *name; long nr;};void f(){Person *p = new Person("Balanescu"); delete p;}void main(){ for (int i=0; i<5; i++)f();}Programul afiseaza: a virtual method v() of Dstatic method st() of D bvirtual method v() of B static method st() of D c virtual method v() of Dstatic method st() of B dvirtual method v() of Bstatic method st() of B 22. Fie programul : // constructor de copiere in clasa de baza; dar absent in clasa derivata // compilatorul creeaza un constructor de copiere implicit // care apeleaza constr de copiere al clasei de baza pentru copierea atributelor din clasa de baza // si copiaza membru cu membru atributele din D #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} };

class D: public B{ public: D(){cout<<"D()"<<endl;} }; void main(){ B b; // apel B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()! D d; // apel B();D() D d1(d); B bd(d); // conversie implicita la clasa de baza; getch(); } Programul afiseaza : a. B() B() B(B&b) B() D() B(B &b) B(B &b) b. B() B() B(B&b) B() D() B(B &b) D() B(B &b) c. B() B(B&b) B() D() B(B &b) B(B &b) d. B() B(B&b) D() B(B &b) D() B(B &b) 23. Fie urmtorul bloc de instruciuni Java: { int x = 12; q=1; { int q = 96; // Both x & q available x=q; } q = x; x = 1; } Care afirmaie este adevrat: a. instruciunea q=x; este corect; b. instruciunea x=1; este incorect; c. instruciunea x=q; este corect; d. instruciunea q=1; este corect; 24. Fie urmtoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob;

public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; }

public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } }

Care afirmaie este adevrat: a. Programul nu afiseaza nimic b. Programul afieaz: X=Y X=Y c. Programul afieaz: X=Y d. Programul afieaz: 3

25. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Constructorul Persoana(char *) poate fi utilizat pentru: Conversia obiectelor Persoana in siruri de caractere Conversia sirurilor de caractere in obiecte Persoana Construirea de siruri de caractere Conversia obiectelor Complex in obiecte Persoana Fie programul: //destructor explicit #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;} private: char *name; }; void f(){Person *p = new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java } void main(){ while(1)f(); } a. La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu nu este eliberat si memoria va fi epuizata b. La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu este eliberat c. Programul se termina datorita epuizarii memoriei d. Programul se termina dupa primul apel al functiei f() (la aia cu while) b (aia cu balanescu) 26. Fie urmatorul program:

#include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; Care afirmatie este corecta: a. Definitia virtual void v()supraincarca definitia virtual void v(int i) b. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v. c. void v() este metoda ce va fi legata static. d. in expresia p->v(); metoda v este legata static 27. Fie urmatorul program:// Constructor cu semantica prin referinta// Operatorul = este cel implicit#include <iostream.h>class C{public: C(int n=0, int v[]);friend ostream& operator<<(ostream &o, const C&);private: int dim; int *pi;};C::C(int n, int v[]) { dim=n; pi= v; }ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o;}void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]=100; cout<<(x=y)<<endl; }Programul afiseaza: a instruciunea int x = 100; este incorect; b instruciunea int x = 10; este incorect; c instruciunea x=1; este incorect; dinstruciunea x=2; este incorect; AFIZEAZA 10, 20, NU ESTE NICI UN X

28. Fie programul : #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} void operator++(){raza++;} private: float raza; }; class Cilindru: public Cerc{ public:

Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){}; void operator++(){inaltime++;} float getInaltime(){return inaltime;} private: float inaltime; }; void main(){ Cerc *pc; Cilindru c(1,5); pc=&c; ++ *pc; cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl; getch(); } Programul afiseaza : a. 1 6 b. 2 5 c. 2 6 d. 1 5 29. Fie programul: #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); delete p; } void main(){ while(1)f(); } Care afirmatie este adevarata: a. Programul afiseaza un sir finit de numere 1 2 3 4...etc. pana memoria este epuizata b. Programul afiseaza secventa infinita 1 2 3 4...etc. deoarece memoria nu este epuizata c. Programul nu afiseaza nimic

d. Programul afiseaza 1 apoi se opreste 30. Fie programul //static atribut #include <conio.h> #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){nr--; delete[] name;} private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); } void main(){ for (int i=0; i<5; i++)f(); getch(); } Programul afiseaza: a. 1 2 3 4 5 b. 1 1 1 1 1 c. 0 0 0 0 0 d. 0 1 2 3 4 31. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Constructorul Persoana(char *) poate fi utilizat pentru: a. Conversia obiectelor Persoana in siruri de caractere b. Conversia sirurilor de caractere in obiecte Persoana c. Construirea de siruri de caractere d. Conversia obiectelor Complex in obiecte Persoana 32. Fie urmtorul program Java:

import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void actiune(){x++;System.out.println(x);}; } public class View extends Frame{ private Button b; private Model m; private Controller c; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add(b); m=new Model(); c=new Controller(m); b.addActionListener(c); setSize(100,50); setVisible(true); } } class Controller implements ActionListener{ private Model md; public Controller(Model p){ md=p; } public void actionPerformed(ActionEvent e){ md.actiune(); } }

Care afirmaie este adevrat, dac se face de dou ori click pe butonul stang mouse asupra butonului Actiune: a. Programul afieaz: 0 1

b. Programul afieaz: 1 2 c. Programul nu afieaz nimic d. Valoarea atributului f.m.x rmne mereu la valoarea 0 33. Fie urmtoarea clas Java: public class Person{ public Person(String p){name=new String(p); System.out.println(++nr); } public static void main(String[] args){ while(true)f(); } private static void f(){Person p = new Person("Ionescu"); // obiectele NU se acumuleaza // in heap si NU blocheaza executarea, spre deosebire de C++ } private String name; private static long nr=0; }; Care afirmaie este adevrat: a. Programul nu se oprete din executare; b. Programul se termin, cu mesaj de eroare, deoarece la un moment dat nu mai exist memorie suficient pentru crearea obiectelor Person; c. Programul are erori de sintax; d. Programul se termin, fr mesaj de eroare. 34. de pe forum
Fie programul : // destructor virtual, #include <iostream.h> class B{ public: virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{

public: virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza: a. ~ B()~D()~B() ~D() b. ~ B() ~B() ~D() c. ~ B() ~D() d. ~ D()~B()~D() ~B()

131213476 (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Algoritmul urmator testeaza daca sirul de caractere s este palindrom (citit atat de la stanga la dreapta, cat si de la dreapta la stanga, se obtine acelasi sir de caractere). {i=0; j=strlen(s)-1; while(i<j && s[i]==s[j]) {i=i+1; j=j-1;} if(...) printf(palindrom; else printf(nu este palindrom); } Care este expresia care poate inlocui punctele de suspensie astfel incat algoritmul sa fie corect? a. i == j c. i<j b. i>=j d. i!=j

37

49

34

24

32

(Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Care din urmatoarele secvente de instructiuni va afisa (cu un spatiu intre ele) in ordine descrescatoare toate numerele naturale impare mai mici sau egale cu o valoare naturala data c a? a. for (i = 1; i >= a; i += 2) printf(%d , i); b. for (i = 1; i <= a; i--) if (a % 2 == 0) printf(%d , i); c. for (i = a; i >= 1; i--) if (i % 2 != 0) printf(%d , i); d. for (i = a; i <=1; i++) if (a%2 == 1) printf(%d , i); (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Care dintre secventele de mai jos conduce la memorarea in variabila max a celei mai mari dintre cele n valori intregi retinute in tabloul unidimensional a (in care a[0] este primul element)? b a. for(i=0; i<n-1; i++) if (a[i] > a[i+1]) max = a[i]; b. for(i=0; i<n-1; i++) if (a[i] > a[i+1]) {max = a[i]; a[i] = a[i+1]; a[i+1] = max;} max = a[n-1]; c. max=a[0];for (i=1; i<n; i++) if (a[i] < max) max = a[i]; d. max=0; for (i=0; i<n; i++) if a([i]>max) a[i]=max; (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Care dintre urmatoarele expresii are valoarea 1 daca si numai daca numarul natural c este un multiplu comun c al numerelor naturale nenule (unsigned int) a si b? a. (c%a == 0 ) || (c %b ==0) b. (c%a == 0) | (c%b == 0) c. (c%a == 0) && (c%b ==0) d. (c%a == 0) & (c%b == 0) (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Care dintre urmatoarele secvente calculeaza suma elementelor de pe linia k a unei matrice a, cu m linii (numerotate de la 1 la m; linia de indice 0 este utilizata in alte scopuri) si n coloane (numerotate de la 1 la n; d coloana de indice 0 este utilizata in alte scopuri)? a. s = 0; for (i=m; i>0; i--) s+=a[k][i]; b. s = 0; i = 1; while (i<=m) {s+=a[i][[k]; i++;} c. s = 0; for(i=n; i>0; i--) s+=a[i][k]; d. s = 0; i=1; while(i<=n) {s+=a[k][i]; i++;}

80

71

26

(Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Care va fi continutul fisierului H.TXT in urma executarii programului urmator? #include <stdio.h> FILE *f; char x, y, z; void main(){ f = fopen(H.TXT,w); fprintf(f,Ieri %d\n,13); fprintf(f,Azi %d,14); fprintf(f,Maine %d\n,15); fclose(f); d } a. Ieri c. Ieri 13 13 Azi 14 Maine 15 Azi 14 Maine 15 b. Ieri 13 Azi 14 Maine 15 d. Ieri 13 Azi 14 Maine 15 (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Daca n este un numar natural (intreg pozitiv), ce realizeaza urmatoarea secventa? {p=1; c while(n) {p *= n; n--}; } a. Calculeaza in p valoarea n*p c. Calculeaza in variabila p valoarea lui n! b. Calculeaza in p valoarea np d. Calculeaza in variabila p valoarea lui p^n. (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Fie secventa de instructiuni: {x=x-1; y=2*x+y; x=2*x+1;} Care au fost valorile variabilelor x si y, de tip int, la inceputul executarii secventei de instructiuni date, daca la c finalul executarii x are valoarea 2007 iar y are valoarea 2009. a. x = 1002 si y = 5 b. x = 3 si y = 1004 c. x = 1004 si y = 3 d. x = 2007 si y = 2009

40

39

43

(Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Fie secventa: {char c; for c=A; c <=Z; c++) printf(%d, c);} Prin executarea acesteia se obtin: a. numerele naturale din intervalul [1, 27] b. numerele naturale din intervalul [65, 90] c. literele mari ale alfabetului englez d. literele mari ale alfabetului romanesc (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Fie secventa: a = 99; while (a >=1) {printf(%d\n, a); a=a-2;} Prin executarea acesteia se afiseaza: a. toate numerele naturale de doua cifre b. numerele naturale impare mai mici ca 100 c. toate numerele intregi mai mici ca 99 d. numerele naturale pare, mai mari decat 1 (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Fie secventa: for(j=1; j<=5; j++) for (i=1; i<=3; i++) a[i][j] = i+j; Prin executarea acesteia, tabloul a va avea urmatorul continut a. 234 345 456 567 678 c. 23456 34567 45678 b. 245 345 456 d. 23456 32345 43456

47

30

29

21

(Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Fie tabloul unidimensional v si secventa for (j = k; j>=q; j--) v[...] = v[j]; Cu ce expresie trebuie inlocuite punctele de suspensie astfel incat in c urma executarii secventei elementele v[q], v[q+1], ..., v[k] sa se deplaseze cu p-1 vpozitii spre dreapta? a. p-1-j b. j-p+1 c. p-1+j d. p-j+1 (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Fie v un tablou unidimensional format din n componente intregi, numerotate de la 1 la n (pozitia 0 are alta semnificatie), iar p si k doua variabile de tip intreg. In care dintre urmatoarele secvente variabilei p i se c atribuie prima valoare strict pozitiva din tabloul v, daca exista o astfel de valoare, sau 0 in caz contrar? a. {p = 0; k = 1; while(v[k]>=0) k++; p = v[k];} b. {p = 0; k = n; while(v[k]<=0) k--; p = v[k];} c. {p = 0; for(k=1; k<=n; k++) if (v[k]>0 && !p) p = v[k];} d. {p = 0; for(k=1; k<=n; k++) if (v[k]>0) p = v[k]; (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Fie v un tablou unidimensional format din n numere intregi (n >=2). Stiind ca primul element din tablou se afla pe pozitia 1 (pozitia 0 este utilizata in alte scopuri), indicati care dintre urmatoarele secvente atribuie b variabilei intregi max cea mai mare valoare din tabloul v: a. for(int i=2; i<=n; i++) if (v[i-1]<=v[i]) v[i-1] = v[i]; max = v[1]; b. for(int i=2; i<=n; i++)if(v[i-1]>v[i]) v[i] = v[i-1]; max = v[n]; c. for(int i=1; i<n; i++) if(v[i+1]>v[i])v[i] = v[i+1]; max = v[1]; d. for(int i=n; i>=2; i--) if (v[i]>v[i-1]) v[i]=v[i-1]; max = v[n]; (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). In secventa urmatoare de instructiuni, n si y sunt variabile intregi. {n=156; y = 770; while(n*y > 0) if (n >y) n = n%y; else y = y%n; c y = y+n; } Valoarea variabilei y la finalul executarii secventei este: a. 13 c. 2 b. 0 d. 4

22

23

68

(Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Pentru un tablou x declarat global, cu 10 componente intregi, stabiliti care sunt valorile memorate de componentele tabloului x in urma apelului ex(0, 9), daca functia ex este definita astfel: void ex(int i, int j){ if(i <= j) { c x[i] = i; x[j] = j; ex(i+1, j-1); if (i % 2 != 0) {x[i]=j; x[j]=9-x[i];} } } a. (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) b. (0, 8, 2, 6, 4, 5, 3, 7, 1, 9) c. (1, 9, 3, 7, 5, 6, 4, 8, 2, 10) d. (9, 1, 7, 3, 5, 4, 6, 8, 0) (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Se considera ca declaratia struct patrat { float latura, aria;} p; defineste in C patrate caracterizate prin latura si arie. Care din c urmatoarele expresii atribuie campului aria al variabilei p valoarea ariei patratului respectiv? a. aria = p.laturta * p.latura; b. aria = latura * latura; c. p.aria = p.latura * p.latura; d. p.aria = latura * latura; (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Se considera functia f al acarui prototip/antet este bazat pe: void f(int a[100][100], int n, int m, int i, intj); Functia precizata realizeaza interschimbarea liniilor i si j ale tabloului transmis prin parametrul a, care are n linii si m coloane. Pentru a ordona crescator numerele de pe coloana a 3a a tabloului a, functia f se apeleaza d in timpul executarii secventei: for (i=0; i<n-1;i++) for(j = i+1; j<n; j++) if(a[i][3] >a[j][3]) f(a, n, m, i, j); de un numar de ori egal cu: a. m c. n b. 1 d. cel mult n(n-1)/2

42

27

46

(Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Se considera programul #include <stdio.h> void aplic(int x, int *y){x+=3; (*y)-=2; printf(%d, %d, x, *y);} void main(void){int x=12, y=20; aplic(x, &x); printf(,%d,,x); printf(%d,,y);aplic(y,&y); } Ce se va afisa in urma executarii acestuia: a. 13,13,13,13,16,14 b. 15,10,10,20,23,18 c. 15,13,13,13,16,11 d. 15,10,15,20,23,20 (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Se considera secventa: {int a = 5, b = 0; do { a--; b +=a*a; }while(a!=0); } Ce valori vor avea variabilele a si b la finalul executarii secventei? a. a = 0 si b = 0 b. a = -1 si b = 25 c. a = 0 si b = 55 d. a = 0 si b = 30 (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Se considera tabloul unidimensional int a[5]={1, 2, 3, 4, 5}; si secventa de instructiuni for(i=0; i<5; i++) {s=0; for(j=0; j<=i; j++) s+=a[j]; printf(%d,s);} Care va fi rezultatul afisat in urma executarii secventei de mai sus? a. 1151515 c. 6101315 b. 15 d. 1361015

70

36

82

52

35

(Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Se considera urmatoarele declaratii: int x[5] = {0, 1, 5, 3, 4}; int y, i; si secventa de instructiuni: { b y = x[1]; for (i = 0; i<=4; i++) if (y < x[i]) y = x[i]; printf(%d, y); } Ce se va afisa in urma executarii acestei secvente? a. 0 c. 13 b. 5 d. valoare nedeterminata (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). Variabile a si b sunt declarate astfel: char a[20,b[20]; Ce se afiseaza in urma executarii secventei urmatoare: { a strcpy(a, examen20); strcpy(b, 08); printf(%s%s, strcat(a, *), b); } a. examen20*08 c. examen20examen2008 b. examen2008 d. examen160 Care din operatiile urmatoare atribuie variabilei float x media aritmetica a a a. x = (a + b + c) /3; c. x = a / 3.0 + b/3 + c/3; b. x = (a + b + c) / 2.0; d. a = (a + b + c) / 3.0; Care din urmatoarele afirmatii este falsa? a. n^2 = O(n^2/2) c. 2^n = O(n) c b. sin(n) = o(n) d. n^2+3n ~ n^2 Care din urmatoarele variante reprezinta antetul corect al unei functii care primeste parametri intregi a si b si intoarce prin cel de-al treilea parametru x, cea mai mare dintre cele doua valori a si b? d a. int maxim (int a, int b, int x){ x = (a>b)?a:b; return x;} b. int maxim (int a, int b) {return (a>b)?a:b;} c. void maxim (int a , int b, int x) {x = (a>b)?a:b;} d. void maxim (int a, int b, int * x){ *x = (a>b)?a:b;} Care dintre expresiile de mai jos va avea valoarea 1? a. a == A c. a < b c b. 1 + 2 == 3 d. 1 > 2

B????

13

84

31

74

19

72

Care dintre urmatoarele declaratii sunt corecte sintactic: 1) int ab=30; 2) int a+b; 3) float a1; c 4) char 2ab; 5) int m.n; a. 1, 3, 5 c. 1, 3 b. 1, 2, 3, 4, 5 d. 1, 3, 4, 5 Care dintre urmatoarele formule de corectitudine logica este falsa? a. {x = n!} n:=n+1; x := x*n {x = n!} b. {(x = 640) and (y = 480)} t:=x; x:=y; y:=t {(x = 480) and (y=640)} d c. {(x = 640) and (y = 480)} x:=x+y; y:=x-y; x:=x-y {(x = 480) and (y=640)} d. {true} if x>y then SEQ t:=x; x:=y; y:=t END {x >y} Care dintre urmatoarele reprezinta o declaratie corecta pentru o variabila x care memoreaza simultan numele si media a maximum 30 de studenti? d a. typedef struct {char nume[30]; double media;} x; b. char x.nume[30]; double x.media[30]; c. struct {char nume[30]; double media;} x; d. struct {char nume[30]; double media;} x[30]; Care dintre urmatoarele secvente au ca efect citirea unui caracter din fisierul C.TXT? a. f = fopen(C.TXT, r); fclose(f); c b. f = fopen(C.TXT, r); scanf(%c, &x); fclose(f); c. f = fopen(C.TXT, r); fscanf(f, %c, &x); fclose(f); d. f = fopen(C.TXT, r); fscanf( %c, &x, f); fclose(f); Care dintre urmatoarele secvente de instructiuni determina, in mod corect maximul a trei numere? 1) if (a>b && a >c) max = a; else if (b > a && b > c) max = b; else max = c; 2) if (a>b) if (a>c) max = a; else max = c; else max = b; b 3) if (a>b) if (a>c) max = a; else if (b>c) max = b; else max = c; 4) if (a>b) if (b>c) max = b; else max = c; else max = a; (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 1, 2, 3, 4 c. 2,3, 4 b. 1, 3 d. 1, 3, 4 Care dintre urmatoarele variante realizeaza deschiderea la citire a fisierului text A.TXT a. f = fopen(A.TXT, w); c b. f = fopen(r, A. TXT); c. f = fopen(A.TXT, r); d. f = fopen(A.TXT, r);

73

56

Care dintre urmatoarele variante realizeaza deschiderea la scriere a fisierului text B.TXT? a. f = fopen(B.TXT,r); b. f = fopen(B.TXT,w); c. f = fopen(w, B.TXT); d. f = fopen(B.TXT, w); Care este ordinea de executare a instructiunilor urmatoare pentru ca in final variabilele intregi x, y si z sa aiba valori egale, indiferent de valorile lor initiale: { /* 1 */ x = x / 10; /* 2 */ z = x / y; /* 3 */ x = 100; /* 4 */ y = x / 10; } a. 2, 4, 1, 3 c. 1, 2, 4, 3 b. 3, 4, 2, 1 d. 3, 1, 2, 4. Care este rezultatul tiparit de programul urmator? #include <stdio.h> #include <string.h> void f(char s[], int); void main(){f(examenul,0);} void f(char s[256], int i){ if(i<strlen(s)) { f(s, i+1); if (strchr(aeiou, s[i]) != 0) printf(%c, s[i]); } } a. eaeu c. ueae b. examenul d. e Care este valoarea expresiei 20 / 10 * 2 + 30 / 15 * 2 a. 2 c. 8 b. 0 d. 4 Care este valoarea expresiei: 4000/10/10*2+4*10*10 / 2 a. 400 c. 240 b. 280 d. 220

18

Care sunt valorile finale ale variabilelor intregi x, y si z dupa executarea operatiei de decizie, if (x>1 && y-z>0) x = y-z; else {y = x-1; z = y+x;} daca initial x = 23, y = 14 si z = 25? (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. x = -11, y = 14, z = 25 b. x = 23, y = 22, z = 37 c. x = 23, y = 22, z = 45 d. x = -11, y = 22, z = 37 e. x = 23, y = -11, z = 25 Care sunt valorile variabilelor intregi a si b dupa executarea instructiunilor urmatoare: { a = 1235; b = a % 10; if ((a-b) % 10 == 0) { a = a / 100; b = a % 100;} if (a == b) a = a *100; } (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. a = 1200 si b = 5 b. a = 12 si b = 35 c. a = 1200 si b = 35 d. a = 1200 si b = 12 e. a = 100 si b = 35 Care sunt valorile variabilelor intregi x si y dupa executarea in ordine a urmatoarelor trei instructiuni: { x = 0x3; y = x + 0x3; x = x - 3; } a. x = 0 si y = 3 c. x= 6 si y = 0 b. x = 3 si y = 0 d. x= 0 si y = 6 Care vor fi valorile variabilelor intregi a si b dupa executarea urmatoarelor instructiuni: {if (a = 10, b = a+1, a != b) b++; else a++; a*=b;} (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. a = 121, b = 11 c. a = 120, b = 11 b. a = 120, b = 12 d. a = 121, b = 12.

10

Ce va fi afisat pe ecran in urma instructiunii printf(%6.3f\n, 45.23); ? a. +45.230 c. 045.230 b b. 45.230 d. 45.023

53

69

75

17

12

55

Conditia ca doua numere intregi a si b sa fie ambele nenule este: a. (a ! = 0 || b != 0) b. a*b != 0 c. a+b != 0; d. ! (a == 0 && b == 0) Consideram urmatoarea declaratie: struct produs {char denumire[10]; int pret;} p; Cum se poate accesa prima litera a denumirii unui produs ale carui caracteristici sunt memorate in variabila p? a. p.denumire[1] c. p.denumire[0] b. p->denumire d. p->denumire[1] Considerand ca variabila f este de tip fisier (FILE *), care dintre urmatoarele instructiuni verifica daca s-a ajuns la sfarsitul fisierului indicat de f? a. if (eof(f)) printf(final); else printf(mai este); b. if (feof(f)) printf(final); else printf(mai este); c. if (!eof(f)) printf(final); else printf(mai este); d. if(!feof(f)) printf(final); else printf(mai este); Considerand variabila x de tip float si variabila de tip int a, care va fi secventa de caractere afisate in urma executarii secventei de instructiuni(s inseamna un spatiu): x = -4.3; a = (int)fabs(-4.0); printf(%2d%4.2f%2d, a, fabs(x), (int)ceil(a+x)); (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. s4s4.300 c. s44.30s0 b. 44.30s0 d. 4s4.30s0 Daca a, b sunt variabile de tip int, iar x si y sunt variabile de tip float, stabiliti care dintre urmatoarele secvente de atribuiri sunt incorecte: 1) b = 2; a = b/2; 2) x = 8; y = 10; a == x+y; 3) x = 4; b = 2; y = x/b; 4) x == 20; y == 10; x =(x+y)/2; 5) a = b = 5; x = a+b; a. 2, 4, 5 c. 2, 3, 4, 5 b. 1, 2, 3, 4, 5 d. 2, 4 Daca in cadrul unui program variabila p urmeaza sa memoreze simultan coordonatele reale (abscisa si ordonata) pentru un punct in plan, atunci variabila p trebuie declarata astfel: a. struct punct {float x, y;} p; b. typedef struct punct { float x, y;} p; c. char p[2];

d. float p;

16

15

38

45

14

Determinati valoarea expresiei ((int)fabs(-14.2)) % 7 a. 14 c. 0 b. 2 d. 8 Determinati valoarea expresiei fabs(-11.2) + sqrt(floor(16.23)). a. -9.2 c. 14.2 b. 15 d. 15.2 Dintre tipurile simple de date face parte tipul: a. double c. Tablou b. FILE d. Uniune (union) Fie declaratiile: int a[5] = {1, 2,4, 3, 5}; int b[4] = {4, 2, 1, 3}; atunci a[b[0]] este: a. 3 c. 5 b. 1 d. 4 Fie definitia: int a = 5, b = 3, c = 1, d = 3; Care dintre urmatoarele expresii logice au valoarea 1 (adevarat): 1) a < b || c) 2) (b == d && c || a >= b) 3) (c && d > b) 4) a > b || !(d<a) 5) (a == b) && c (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 1, 2, 3, 4 c. 1, 4 b. 1, 2, 3, 4, 5 d. 1, 2, 4 Fie expresiile A = 18 - 3 +2; B = 18 + 7 / 3 +2; C = 2.3 + 3%; D = 3 + 7.0/3; E = 3 + 4 % 2.3; F = 24 % (7 + 1); Care din aceste expresii sunt corecte? a. A, B, C, D, E, F. c. A, B, C, D, F b. A, B, D, F d. A, B, C, F

???

54

33

67

28

50

Fie functia void f( ... ) {a++; *b--; *c = a + *b;} Se stie ca x, y si z sunt variabile intregi. Intitial x = 11 si y = 6, iar dupa apelul f(x, &y, &z), valorile celor trei variabile sunt x = 11, y = 5 si z = 17. Care dintre urmatoarele constructii c reprezint antetul corect al functiei? a. void f(int *a, int b, int *c) b. void f(int a, int b, int c) c. void f(int a, int *b, int *c) d. void f(int *a, int *b, int *c) Fie instructiunea: if (x>y) if (y>z) if(z>x) s = x+y+z; else p = x*y*z; O secventa de instructiuni echivalenta cu aceasta, dar care foloseste o singura data cavantul cheie if, este: d a. if(x>y && y>z) s = x+y+z; else p = x*y*z; b. if(x>y || y>z) s = x+y+z; c. if(x>y && y>z) s = x+y+z; d. if(x>y && y>z) p = x*y*z; Fie v un tablou unidimensional cu n elemente de tip intreg, iar n un numar natural nenul (n <=100) si secventa urmatoare: {i=0; while (i<n) {v[i] = i*i; i++;} } b De cate ori se repeta instructiunea i++; in timpul executarii secventei date? (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. n+1 ori c. 0 ori b. n ori d. n-1 ori Functia revers(v, p, q) inverseaza ordinea elementelor din tabloul unidimensional v aflate pe pozitiile p, p+1, ..., q-1, q (se presupune ca p <= q). Care dintre urmatoarele secvente de program inverseaza doar prdinea elementelor v[p] si v[q]: b a. revers(v, p, q); revers(v, p-1, q+1); b. revers(v, p, q); revers(v, p+1, q-1); c. revers(v, p, q); revers(v, p+1, q+1); d. revers(v, p-1, q-1); revers(v, p, q); Functia s (scrisa in limbajul C, standard) este utilizata pentru interschimbarea valorilor a doua numere intregi, pozitive. Definitia corecta (in antet) a acesteia trebuie sa fie: a. void s(int x, int y) { ... } c b. void s(int *x, int *y) { ... } c. void s(unsigned int *, unsigned int *) { ... } d. void s(unsigned int, unsigned int) { ... }

91

25

41

51

In functia recursiva de mai jos se considera ca tabloul unidimensional v este declarat global. void star(int i){ if(i<10) { printf(*); if (v[i] == i+1) star(i+2); else star(i+1); } } Pentru care dintre declaratiile urmatoare, apelul star(0) produce 7 asteriscuri (stelute)? (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. int v[] = {1, 4, 3, 2, 1, 6, 5, 4, 3, 10}; b. int v[] = {3, 2, 1, 4, 3, 6, 7, 2, 9, 2}; c. int v[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; d. int v[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; In secventa urmatoare, variabilele n, x si y sunt de tip intreg. {x = 1; y = x-1; do{ y=x*(x-1)+y; x++; }while(x <=n); } Daca valoarea variabilei n este un numar naural nenul, de cate ori este evaluata expresia logica x <= n in timpul executarii secventei? a. de n2 ori b. de n ori c. o singura data d. de n+1 ori Parametrii utilizati la apelul unei functii, se numesc: a. parametri locali c. parametri actuali b. parametri globali d. parametri formali Pentru a atribui variabilei n o valoare egala cu lungimea unui sir de caractere w (ce respecta conventia terminatorului de sir) se utilizeaza instructiunea: a. n = length(w); c. n = (int)w[0]; b. strlen(w) = n; d. n = strlen(w);

20

92

63

Pentru definitia alaturata a functiei ex(), stabiliti ce se afiseaza la apelul ex(120)? void ex(int x){ if (x != 0){ printf(%d, x %10); ex(x/10); c } } (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 012 c. 021 b. 120 d. 21 Pentru o valoare naturala mai mare decat 1 memorata in variabila globala n, subprogramul urmator afiseaza cel mai mare divizor al lui n, mai mic decat n, la apelul divi(n). void divi(long i){ if ( ... == 0) printf(%ld, ...); else divi(i-1); a } Cu ce expresii trebuie completate punctele de suspensie? a. n % i si i c. n%(i-1)=0 si i b. n% (i-1) si i-1 d. n%i si i-1 Pentru un tablou bidimensional a cu 10 randuri si 10 coloane, stabiliti ce calculeaza secventa de program urmatoare, in variabila s: s = 0; for (i = 0; i<10; i++) for (j = i; j <10; j++) s+=a[i][j]; (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de c dezvoltarea software-ului). a. Suma elementelor situate strict deasupra diagonalei principale b. Suma elementelor situate strict deasupra diagonalei secundare c. Suma elementelor situate deasupra diagonalei principale, inclusiv diagonala principala d. Suma elementelor situate strict sub diagonala principala Prototipul corect al unei functii care primeste doua numere intregi ca primi doi parametri (de intrare) si determina media aritmetica si produsul celor doua numere, pe care le transmite apelantului prin urmatorii doi parametri este: a. int calcul(int, int, int *); c. void calcul (int, int, double *, int *); b. void calcul(int, int, double, int); d. void calcul(int, int, int *, int *);

44

81

85

83

Se considera algoritmul: 1. citeste n; a = 0; b = 1; k = 2; 2. Cat timp k<n executa { scrie a, b; a = a+b; b = a+b; k = k+2;} 3. Daca k = n atunci scrie a, b; altfel scrie a. Ce sir va calcula algoritmul pentru n = 7? a. 0, 1, 1, 1, 2, 2, 3 c. 0, 1, 1, 2, 3, 5, 8 b. 0, 1, 1, 2, 3, 3, 6 d. 0, 1, 0, 1, 0, 1, 0 Se considera algoritmul: integer m, n, x, y; SEQ read m, n ; if (x>0) and (y>0) then SEQ x:=m; y:=n; while x <> y do if x>y then x:=x-y else y:=y-x; write x END END Care este proprietatea invarianta a buclei while? a. x <> y b. (x = m) and (y = n) c. (cmmdc(x, y) = cmmdc(m, n)) and (x>0) and (y>0) d. (x > 0) and (y > 0) Se considera algoritmul: procedure insert_sort(n, x); integer n; integer array x(n); integer i, j, temp; SEQ for i = 2, n, 1 do SEQ temp := x[i]; j := i-1; while ( j>=1) and (x[j] > temp) do SEQ x[j+1] := x[j]; j := j-1; END x[j+1] := temp END; return END Complexitatea algoritmului (la nivelul numarului de comparatii efectuate) este: a. O(n) c. O(n^2) b. O(1) d. O(n log2n)

48

89

86

88

Se considera declararea struct fractie {unsigned int x, y;} s, f1, f2; in care campurile x si y reprezinta numaratorul, respectiv numitorul unei fractii. Care dintre urmatoarele variante construieste in variabila s o fractie echivalenta cu suma c fractiilor f1 si f2? a. {s.x = f1.x + f2.x; s.y = f1.y + f2.y;} b. {s = f1 + f2;} c. {s.x = f1.x * f2.y + f1.y * f2.x; s.y = f1.y * f2.y;} d. {s.x = f1.x * f1.y + f2.x * f2.y; s.y = f1.y * f2.y;} Se considera definitia long f(int n, int k){ if (n == k || k == 1) return 1; if (n < k) return 0; long s=0, i; for (i=1; i<=k; i++) s+=f(n-k,i); return s; a } Stabiliti ce valoare returneaza apelul f(6,3). (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 3 c. 2 b. 1 d. 4 Se considera definitia void f(int n){ int j; if (n>0) for (j=1; j<=n; j++) {printf(%d,j); f(n-1);} d } Ce se afiseaza ca urmare a apelului f(2)? a. 1122 c. 121 b. 112 d. 1121 Se considera definitia: long f(int n){ if (n == 0) return 1; else if (n == 1) return 4; else return f(n-1) - f(n-2); } d Stabiliti ce valoasre returneaza apelul f(7). (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 1 c. -4 b. -3 d. 4

90

64

66

Se considera definitia: long f(int x, int y){ if (x == y || x == 0) return 1; else return f(x,y-1)+f(x-1,y-1); } Ce valoare returneaza apelul f(8,10)? (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 50 c. 40 b. 45 d. 55 Se considera programul C: #include <stdio.h> void F(int *a, int b){ b +=*a; (*a)*=b; printf(%d %d , *a, b); } void main(void){ int x = 5, y = 7; F(&x, y); printf(%d %d, x, y); } Ce se va afisa in urma executarii? (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 12 60 5 7 c. 60 12 60 7 b. 60 12 5 7 d. 60 12 60 12 Se considera secventa de instructiuni: {char a[]=aabbddeff; char b[] =aabbdeeff if (strcmp(a, b) == 0) printf (egalitate); else printf(%s ,b); } Care este rezultatul obtinut in urma executarii? (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. aabbdeeff c. aabbddeff b. nici una dintre variantele propuse d. egalitate

65

60

59

Se considera secventa: { int a =82, b = 24; a = a % 2 + b / 2 / 2; b = 2 * a % 2; a = a + b; b = a % 2 + b + 10 % 2; } Care sunt valorile finale ale variabilelor a si b? a. a = 5, b = 5 b. a = 6, b = 6 c. a = 0, b = 6 d. a = 6, b = 0 e. a = 0, b = 0 Se considera secventa: {int i, j; for (i = 1; i<n; i++) for(j = i; j < n; j++) if (j%i == 0) printf(%d%d, i, j); } De cate ori se va executa instructiunea de decizie (marcata ingrosat: j%i == 0) din secventa de program de mai sus daca valoarea initiala a variabilei intregi n este 8? (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 16 c. 38 b. 36 d. 28 Se considera tabloul unidimensional a = (0, 1, 3, 2). Care este tabloul unidimensional b astfel incat pentru oricare 0 <= i <4 sa existe relatia a[b[i]] = b[a[i]]? a. b = (0, 1, 2, 3) c. b = (2, 3, 0, 1) b. b = (3, 1, 0, 2) d. b = (1, 0, 2, 3) Se considera tabloul unidimensional de intregi, notat cu a, in care a[0] = 4, a[1] = 2, a[2] = 5, a[3] = 1, a[4]=3. Care va fi continutul sau dupa executarea secventei urmatoare (in care i si aux sunt de tip int): for (i = 0; i<4; i++) if (a[i] > a[i+1]){ aux = a[i]; a[i] = a[i+1]; a[i+1] = aux; } a. a[0] = 2, a[1] = 4, a[2] = 1, a[3] = 3, a[4]=5 b. a[0] = 4, a[1] = 2, a[2] = 5, a[3] = 1, a[4]=3 c. a[0] = 1, a[1] = 2, a[2] = 3, a[3] = 4, a[4]=5 d. a[0] = 4, a[1] = 2, a[2] = 1, a[3] = 3, a[4]=5

94

62

57

11

Se considera un tablul unidimensional in care elementele sunt in ordinea: 1, 3, 5, 7, 10, 16, 21.Pentru a afla pozitia pe care se afla valoarea x = 10 se aplica metoda cautarii binre. Care este succesiunea de elemennte care astepau valoarea lui x:. a. 21,16, 10 c. 1, 3, 5, 7, 10 b. 7, 16, 10 d. 5, 7, 10 Se considera urmatoarea functie recursiva apelata numai pentru numere naturale nenule: int f(int a, int b){ if (a<b) return a; else return f(a-b, b); } Care dintre urmatoarele functii este echivalenta cu functia data? (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. int f(int a, int b){return a*b;} b. int f(int a, int b){return a-b+1;} c. int f(int a, int b){return a%b;} d. int f(int a, int b){return a/b;} Se defineste tipul struct punct {float x, y;}; (pentru a memora coordonatele carteziene - abscisa si ordonata ale unor puncte din planul xOy) si tabloul unidimensional a cu elemente de tip struct punt. Care dintre expresiile de mai jos are valoarea 1 daca si numai daca punctul ale carui coordonate sunt memorate in elementul din tabloul aflat pe pozitia i are abscisa si ordonata egale? a. a[i]->x == a[i]->y c. x[a[i]] == y[a[i]] b. a[i].x == a[i].y d. a.x[i] == a.y[i] Stabiliti care dintre urmatoarele declaratii de variabile sunt corecte: 1) float 1t, 2t; 2) int a[1..10]; 3) int x, y; 4) string s; 5 ) double e; v; a. 1, 2, 3, 4, 5 c. 2, 3, 4, 5 b. 3 d. 2, 3, 4

76

77

Stiind ca fisierul D.TXT are urmatorul continut: 13 45 23 32 42 234 56 78 32 23 43 32 32 32 32 ce se va afisa in urma executarii programului urmator? #include <stdio.h> FILE *f; int x, y, z; void main(){ f = fopen(D.TXT,r); fscanf(f, %d %d %d\n, &x, &y, &z); fscanf(f, %d, &z); printf(%d %d %d \n, x, y, z); } (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 13 45 23 c. 13 32 23 b. 13 32 56 d. 13 45 32 Stiind ca fisierul E.TXT are urmatorul continut: 1234 67 34 23 567 546 677 1234 3234 4565 6564 12345 12445 12223 ce se va afisa in urma executarii programului urmator? #include <stdio.h> FILE *f, int x, y, z; void main(){ f = fopen(E.TXT, r); fscanf(f, %d %d,&x, &y); fscanf(f, %d\n,&z); printf(%d %d %d \n, x, y, z); } (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 1 2 3 c. 1 67 567 b. 1 2 67 d. 2 3 4

78

79

Stiind ca fisierul F.TXT are urmatorul continut: 12345 12 93 16 32 8.023 322 21 0.823 21 0.21 213.12 ce se va afisa in urma executarii programului urmator? #include <stdio.h> FILE *f, char x, y, z; void main(){ f = fopen(F.TXT, r); fscanf(f, %c, &x); fscanf(f, %c, &y); while(getc(f) != \n); fscanf(f, %c, &z); printf(%c %c %c \n, x,y,z); } (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. 1 2 3 c. 1 9 8 b. 1 2 9 d. 1 9 3 Stiind ca fisierul G.TXT are urmatorul continut: IaEaws S,a.d sdll -dsa Xda dsa asd da sda sad ce se va afisa in urma executarii programului urmator? #include <stdio.h> FILE *f; char x, y, z; void main(){ f = fopen(G.TXT,r); while(getc(f) != \n); fscanf(f,%c, &x); while(getc(f) != \n); fscanf(f,%c, &y); while(getc(f) != \n); fscanf(f,%c, &z); printf(%c %c %c \n, x, y, z); } (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. I S - c. S - X b. a S - d. I E S

93

87

58

61

Stiind ca p este un vector (tablou unidimensional) cu 3 componente intregi (tabloul este declarat global), M este multimea tuturor cifrelor nenule, iar functia tipar afiseaza valorile elementelot p[0], p[1] si p[2], cu ce trebuie inlocuite simbolurile a, b si c in definitia functiei G astfel incat in urma apelului G(0) sa se afiseze toate elementele produsului cartezian MxMxM? d void G(int k){ int i; for (i = a; i<=b; i++) { p[k] = i; if (k == c) tipar(); else G(k+1);} } a. a = 0, b = 10, c = 3 c. a = 1, b = 9, c = 3 b. a = 1, b = 3, c = 9 d. a = 1, b = 9, c = 2 Variabila p este declarata astfel: int *p; Stiind ca p retine adresa unei variabile de tip int, care dintre urmatoarele instructiuni afiseaza valoarea b respectivei variabile intregi? a. printf(%p,p); c. printf(%d, p*); b. printf(%d,*p); d. printf(%d, &p); Variabila s a fos declarata prin: char s[32]; Ce se afiseaza dupa executarea urmatoarei secvente? { strcpy(s,Programare procedurala); c printf(%c, s[strlen(s)-3]); } a. u c. a b. r d. 29 Variabilele a si i sunt declarate astfel: int a[100], i; Care dintre urmatoarele instructiuni este corecta din punct de vedere sintactic? a (Atentie! Pentru rezolvare nu este voie sa se apeleze la medii de dezvoltarea software-ului). a. a = i; c. i[1] = a; b. i = a; d. i[a] = 1;

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

1. Fie urmtorul bloc de instructiuni Java: JAVA { int x = 12; q=1; { int q = 96; // Both x & q available x=q; } q=x; x=1; } Care afirmatie este adevarata: a. instructiunea x=q; este corecta; b. instructiunea q=x; este corecta; c. instructiunea x=1; este incorecta; d. instructiunea q=1; este corecta; Nota: q=x si x=1 (apartin de primul bloc) nu sunt corecte, deoarece x este declarat de doua oriSunt corecte x=q si q=96 2. Fie urmtorul bloc de instructiuni Java: { int x = 10; x=1; { int x = 100; } x=2; } Care afirmatie este adevarata: b. instructiunea int x = 100; este incorecta; a. instructiunea x=1; este incorecta; c. instructiunea x=2; este incorecta; d. instructiunea int x = 10; este incorecta; Nota: X=100 este incorecta - variabila x nu a fost nca definita n momentul primei atribuiri. 3. Fie urmatoarea clasa Java: class D { int i; float f; boolean b; } Care afirmatie este adevarata: c. instructiunea D d = new D(); este corecta; a. instructiunea D d = new D(1); este corecta; b. instructiunea D d = new D(1,1); este corecta; d. instructiunea D d = new D(1,1,1); este corecta; 4. Fie urmatoarea metoda Java: 1

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

int storage(String s) { return s.length() * 2; } si instructiunea int i=storage(Java); Care afirmatie este adevarata: d. i va primi valoarea 8; a. instructiunea este incorecta; b. i va primi valoarea 4; c. i va primi valoarea 16; Nota: Sirul de caractere Java are 4 litere..Valoarea returnata va fi 4*2=8 5. Fie urmtoarea clas Java: class C{ public static int i=1; } Si instructiunile: C x=new C(); C y=new C(); x.i =x.i ?+1; Care afirmatie este adevarata: d. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=1; a. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=2; b. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=1; c. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=2; Nota: +x .afiseaza valoarea lui x si apoi aduna 1 deci +1 afiseaza 1 6. Fie urmtoarea clas Java: class C{ public static void main(String args[]){ System.out.println(args[0]); System.out.println(args[1]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: b. Curs Java a. Curs Java An c. Java An 3 d. Curs Java An 3 Nota: args[0]afiseaza Curs args[1]afiseaza Java 7. Fie urmtoarea clas Java: class C{ 2

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public static void main(String args[]){ for(int i=0;i<args.length; i++) System.out.println( + args[i]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: c. Curs a. Curs b. Curs Java An Java Java d. Java An 3 An 3 Nota: Incrementare: i<4 (patru cuvinte)..Pt. i=0 afiseaza Curs, pt. i=1..afiseaza Curs Java, pt. i=2..afiseaza Curs Java An si pt. i= 3 afiseaza Curs Java An 3 8. Fie urmtoarea clas Java: public class Person{ public Person(String p){name=new String(p); System.out.println(++nr); } public static void main(String[] args){ while(true)f(); } private static void f(){Person p = new Person("Ionescu"); // obiectele NU se acumuleaza // in heap si NU blocheaza executarea, spre deosebire de C++ } private String name; private static long nr=0; }; Care afirmatie este adevarata: a. Programul nu se opreste din executare; b. Programul se termina, cu mesaj de eroare, deoarece la un moment dat nu mai exista memorie suficienta pentru crearea obiectelor Person; c. Programul are erori de sintaxa; d. Programul se termina, fara mesaj de eroare. Nota: Vezi //comentarii (comp afiseaza numere crescatoare..nu se opreste) 9. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; 3

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=0; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s1.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: b. Programul afiseaza: Underflow la stiva Tudor a. Programul afiseaza: Overflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Andrei d. Programul afiseaza: Underflow la stiva Andrei Nota: Pe s1 se incearca o extragere s1.item(); (item de asemenea) din stiva deja goala Underflow (subdepasire) - extragere din stiva goala 10. Fie urmatoarele clase Java: 4

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s2.insert("aa"); s2.delete(); s2.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: 5

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. Programul afiseaza: Underflow la stiva Andrei b. Programul afiseaza: Underflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Tudor d. Programul afiseaza: Overflow la stiva Andrei Nota: Se lucreaza pe s2 si se incearca o extragere (s2.item();) (item de asemenea )din stiva deja goala Underflow (subdepasire) - extragere din stiva goala 11. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s2.insert("aa"); s2.insert( new Integer(10)); 6

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

s2.insert("aa"); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: b. Programul afiseaza: Overflow la stiva Andrei a. Programul afiseaza: Overflow la stiva Tudor c. Programul afiseaza: Underflow la stiva Tudor d. Programul afiseaza: Underflow la stiva Andrei Nota: Stiva s2 este deja plina si se incearca o noua inserare (s2.insert("aa"); Nota: Overflow (supradepasire) - inserare in stiva plina adica in S2 stiva Andrei 12. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: c. Programul afiseaza: Varful stivei: 10 7

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: stiva Tudor d. Programul afiseaza: 2 Nota: stiva se citeste de jos in sus Insert 10 rezulta varf stiva este 10 13. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: d. Programul afiseaza: Varful stivei: aa a. Programul afiseaza: stiva Tudor b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: 2 Nota: stiva se citeste de jos in sus 14. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } 8

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: stiva Tudor d. Programul afiseaza: 2 Nota: stiva se citeste de jos in sus 15. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; 9

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); s1.insert("aa"); s2.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } } Care afirmatie este adevarata: b. Programul afiseaza: Varful stivei: aa a. Programul afiseaza: stiva Tudor c. Programul afiseaza: 2 d. Programul afiseaza: Varful stivei: 10 16. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } // specializarea metodei Object.equals // doua cozi sunt egale daca au aceleasi elemente // chiar daca ele au dimensiuni maxime sau nume diferite public boolean equals(Object obiectOarecare) { if (obiectOarecare instanceof CoadaCirculara) { CoadaCirculara cc= (CoadaCirculara)obiectOarecare; boolean b=true; b=b && (cc.numarElemente==numarElemente); int i=prim; int nr=numarElemente; while(b && (nr !=0)){ b=b && cc.v[i].equals(v[i]); nr--; i=(i+1)%maxDim; } return b; 10

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} return false; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: c. Programul afiseaza: X=Y a. Programul afiseaza: X=Y X=Y b. Programul nu afiseaza nimic d. Programul afiseaza: 3 Nota:.. x.adauga("aa");y.adauga("aa");..rezulta ca X=Y (compilator) 17. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } 11

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: d. Programul nu afiseaza nimic a. Programul afiseaza: 3 b. Programul afiseaza: X=Y X=Y c. Programul afiseaza: X=Y Nota: Asemanator cu ex. 16, dar la acest ex. lipsesc liniile 17 34 (subliniate) de la ex. 16 18. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente 12

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); x.adauga("a"); x.adauga("b"); x.adauga("c"); x.adauga("d"); x.adauga("e"); x.adauga("f"); System.out.println(x.element()); } } Care afirmatie este adevarata: b. Programul afiseaza: d a. Programul afiseaza: b c. Programul afiseaza: c d. Programul afiseaza: a 19. Fie urmatoarele clase Java: public interface Actualizare{ public void actualizareNume(String nume); public void actualizareVarsta(int varsta); } interface Afisare{ public void afisare(); public void actualizareVarsta(int varsta); } public class Persoana{ public Persoana(String nume, int varsta){ this.nume=nume; this.varsta=varsta; } public Persoana(){} protected String nume="XXXX"; protected int varsta=0; } class PersoanaSpecializata extends Persoana implements Actualizare, Afisare{ public void actualizareNume(String nume){this.nume=nume;} public void actualizareVarsta(int varsta){this.varsta=varsta;} public void afisare(){ System.out.println("nume= "+nume); System.out.println("varsta= " + varsta); } } public class Client{ 13

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public static void main(String args[]){ PersoanaSpecializata p=new PersoanaSpecializata(); Actualizare act=p; Afisare afis=p; act.actualizareNume("Ionescu"); act.actualizareVarsta(58); afis.afisare(); } } Care afirmatie este adevarata: c. Programul afiseaza: nume= Ionescu varsta= 58 a. Programul este incorect deoarece o clasa nu poate implementa dou interfete b. Programul este incorect deoarece metoda public void afisare() nu face parte din clasa Persoana d. Programul este incorect deoarece metoda public void actualizareVarsta(int varsta) nu face parte din clasa PersoanaSpecializata 20. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void actiune(){x++;System.out.println(x);}; } public class View extends Frame{ private Button b; private Model m; private Controller c; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add(b); m=new Model(); c=new Controller(m); b.addActionListener(c); setSize(100,50); setVisible(true); } } class Controller implements ActionListener{ private Model md; public Controller(Model p){ md=p; } public void actionPerformed(ActionEvent e){ md.actiune(); } 14

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} Care afirmatie este adevarata, dac se face de dou ori click pe butonul stang mouse asupra butonului Actiune: a. Programul nu afiseaz nimic b. Programul afiseaz: 1 2 c. Valoarea atributului f.m.x rmne mereu la valoarea 0 d. Programul afieaz: 0 1 Nota: x=0 si x++..rezulta ca pt. primul click x=0 se afiseaza 1 si pt. al doilea click x=1..se afiseaza 2 21. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void increment(){x++;} public int get_x(){return x;} } public class View extends Frame{ private Button b; protected Model m; private Controller c; protected TextField tf; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add("North",b); m=new Model(); c=new Controller(this); b.addActionListener(c); tf=new TextField(10); add("Center",tf); setSize(100,250); setVisible(true); } } class Controller implements ActionListener{ private View vw; public Controller(View v){ vw=v; } public void actionPerformed(ActionEvent e){ vw.m.increment(); vw.tf.setText(String.valueOf(vw.m.get_x())); } 15

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} Care afirmatie este adevarata, dac se face de dou ori click pe butonul stang Mouse asupra butonului Actiune: c. n cmpul de text f.tf este afisat valoarea 2 a. n cmpul de text f.tf este afiat valoarea 1 b. Programul nu afiseaz nimic d. Valoarea atributului f.m.x rmne mereu la valoarea 0 Nota: Asemanator cu ex. 20 22. Fie urmatorul program Java: import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit"); exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); } 16

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; } } class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } } Care afirmatie este adevarata, dac se face de click pe butonul stang mouse asupra butonului modifica din fereastra fn: d. Doar in cmpul de text field al ferestrelor fo1 si fo2 este afisat valoarea actualizata a atributului Observator.m.i Nota..Vezi liniile subliniate de la frame a. Doar in cmpul de text field al ferestrei fo2 este afiat valoarea actualizata a atributului Observator.m.i b. n cmpul de text field al tuturor ferestrelor este afiat valoarea actualizata a atributului Observator.m.i c. Doar in cmpul de text field al ferestrei fo1 este afiat valoarea actualizata a atributului Observator.m.i

23 Fie urmtoarea clas Java: public class D { int i; float f; boolean b; private static void main(){ D d = new D(1); D d = new D(); D d = new D(1,1); D d = new D(1,1,1); 17

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} } Care afirmaie este adevrat: nstructiunea D d = new D(1); este corect; instructiunea D d = new D(); este corect; instructiunea D d = new D(1,1); este corect; instructiunea D d = new D(1,1,1); este corect; PROBLEME 1. Un program scris n Java poate rula pe orice platforma deoarece: c. Masina virtuala translateaza interpreteaza programul si translateaza apelurile sistem a. Limbajul Java e derivat din C++ b. Compilatorul este identic cu cel de C++ d. Api-ul este portabil 2. Un program scris n Java se va compila cu comanda: a. javac Test c. javac Test.java b. java Test.java d. javac Test.class 3. Un program scris n Java se va lansa cu comanda: a. javac Test.java c. java Test.java b. java Test d. java Test.class 4. Ce este un Applet? d. Un program care ruleaza n contextul unui browser a. Un tip de calculator b. Un program care ruleaza direct pe orice calculator c. Un sit web interactiv 5. Un applet va rula n orice browser deoarece c. Browserul interpreteaza direct codul sursa a. Serverul are o masina virtuala incorporata b. Browserul are o masina virtuala incorporata d. Appleturile nu au nevoie de o masina virtuala 6. Care este scopul metodei statice main ? b. Actioneaza ca un punct de intrare n program a. Sa creeze o interfata cu utilizatorul c. Creaza ferestrele si butoanele aplicatiei d. Actioneaza ca o poarta spe sistemul de operare 7. O clasa Applet furnizeaza: b. Metode care definesc aspectul si comportamentul apletului a. Un browser care s ruleze apletul c. A pagina HTML speciala d. Permisiunile de a comunica cu serverul 8. Ce metoda apeleaza browserul pe un applet nou incarcat? a. Main c. Paint b. Start d. Init 18

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

9. Care este rolul declaratiilor import? a. Permite referirea claselor fara utilizarea de prefixe b. Elimina necesitatea declararii variabilelor c. Permite importul imaginilor folosite d. Elimina apelurile directe a functiilor fara clase 10. In cazul implementarii unei interfete trebuie s definim in mod obligatoriu : a. Doua metode ale interfetei c. Orice metoda a interfetei b. Numai anumite metode ale interfetei d. Toate metodele interfetei 11. Aplicatiile Java ruleaza pe urmatorul sistem de operare: a. Windows c. UNIX b. Linux d. Toate cele trei 12. Urmatorul cod sursa Java se afla ntr-un fisier. Cum se numeste fisierul? class Foo { public static void println() { System.out.println("Foo"); } } public class FooDemo { public static void main(String[] argv) { System.out.println("FooDemo"); Foo.println(); } } a. Foo.java c. FooDemo.Java b. Foo.class d. Foodemo.class 13. Daca bo este boolean, numar este int sir este string atunci care din urmatoarele linii este incorecta? a. If(bo) c. If(numar<=1) b. If(numar<0) d. If(sir==Java) 14. Care sunt valorile variabilelor a i b dupa executarea instructiunilor: int a = 1, b = -2; a = a + b; b = a b; a = a b; a. a=1, b=2 c. a=2, b=-3 b. a=0, b=1 d. a=-2, b=1 Nota: a=1+(-2)=1-2=-1 b=-1 15.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a += b; b = a- b; a -= b; a. a=-1, b=2 c. a=-2, b= 1 b. a=2, b=-1 d. a=-2, b=-1 16.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = 1, b = -2; a = a ^ b; 19

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

b = a ^ b; a = a ^ b; a. a=-2, b=1 b. a=2, b=-2

c. a=-1, b=1 d. a=1, b=-2

17.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a ^= b; b = a ^ b; a ^= b; a. a= -1, b=2 c. a=2, b=-1 b. a= 1, b=-2 d. a=-2, b=1 18. Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a = (a > b ? a : b); b = (a < b ? a : b); a. a= 2, b=-1 c. a=1, b=2 b. a= -1, b= 2 d. a= 2, b= 2 19.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = 1, b = 2; if (a < b ) a = b; if (a < b) b = a; a. a= 1, b=1 c. a=2, b=2 b. a= 1, b= 2 d. a= 2, b= 1 20. Clasa BorderLayout contine campuri statice pentru: a. Adaugarea unor componente in anumite zone ale containerul b. Introducerea unor metode noi c. Specificarea culorii, si a fontului d. Afisarea ferestrei unui applet 21. Constructorul are foloseste la: a. Eliberarea memoriei b. Importa pachete 22. System.out.println este a. O variabila b. O clasa

c. Initializeaza masina virtuala d. Initializeaza noile obiecte create

c. Un obiect d. O metoda

23. Ce valori poate lua o variabila de tip boolean? a. 1 c. true b. 0 d. false 24. Ce valori nu poate lua o variabila de tip boolean? a. 1 c. true b. a==b (a si b sunt variabile de tip int) d. false 25. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip boolean) c. false b. true d. 0 20

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

26. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip int) c. false b. true d. false==x (x este o variabila de tip boolean) 27. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip boolean) c. true b. a==b (a si b sunt variabile de tip int) d. false==x (x este o variabila de tip boolean)

28. Care din urmatoarele tipuri de date poate retine valori de la -32.768 la 32.767 ? a. char c. byte b. short d. int 29. Ce valoare va avea variabila x dupa executarea operatiilor? int x = 0; x = (5*4) % 7; x = x / 5; a. 6 c. 1 b. 1.2 d. 0 Nota: 5*4=2020/7=2 rest 66/5=1 intreg si 30. Ce valoare va avea variabila numar la finalul buclei? int numar = 1; for (int x = 0; x < 4; x++) { numar = numar << 1; } a. 1 c.16 b. 4 d. 32 Nota: Pt. x=0 , x<4 si 0++=1 x=1, x<4 si 1++=2 x=2, x<4 si 2++=3 x=3, x<4 si 3++=4 Nota 4 in baza 2 este 0010 Numar=<<0010=0100 0100 in baza 2 este 16 31. Ce valoare va avea variabila numar la finalul buclei? int numar = -1; for (int x = 0; x < 4; x++) { numar = numar << 1; } a. 0 c. 16 b. -4 d. -16 32. Un vector se instantiaz astfel? a. int vector[100]; c. float [] numere={1.1, 1.2}; b. String [100]sir; d. byte [] buffer; 21

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

33. Un vector se instantiaz astfel? a. int vector[100]; c. float [] numere; b. String [100]sir; d. byte [] buffer = new byte[100]; 34. Ce efect are urmtoarea secventade cod? char a[] = {a, b, c}; char [] b = new char[3]; a=b; a. b se va copia n a c. a si b se refer la aceiasi zona de memorie b. a se va copia n b d. se va genera o exceptie 35. Ce efect are urmtoarea secvent de cod? char a[] = {a, b, c}; String b = new String(data); if(a==b) System.out.println(egale); else System.out.println(inegale); a. Se afiseaz egale c. Eroare la compilare b. Se afiseaz inegale d. Se va genera excepie la rulare 36. Ce efect va avea intructiunea urmatoare? System.out.println("The answer is: "+17+3); a. Programul nu se compileaza c. Se va afisa: The answer is 173 b. Se va afisa: The answer is 20 d. Se va genera o exceptie Nota: uniune de siruri de caractere 37. Care este efectul liniilor de cod urmatoare? if("String".toString() == "String") System.out.println("Equal"); else System.out.println("Not Equal"); a. Programul nu se compileaza c. Afiseaza Not Equal b. Afiseaza Equal d. Genereaza o exceptie 38. O clasa care implementeaza interfata urmatoare public interface AQuestion { public abstract void someMethod() throws Exception; } c. Ar trebui s defineasca o metoda public void someMethod() care va emite exceptii a. Va fi in mod necesar o clasa abstracta b. Ar trebui sa defineasca metoda public abstract void someMethod(); d. Ar trebui s defineasca o metoda public void someMethod() care nu va emite exceptii

39. O clasa care implementeaza interfata urmatoare va implementa n mod obligatoriu public interface AQuestion { 22

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void someMethod(); } a. o metoda public void someMethod(); b. o metoda friend void someMethod(); c. o metoda public void someMethod(); care obligatoriu va emite exceptii d. o metoda public abstract void someMethod(); 40. Care din liniile din codul de mai jos prezinta o problema de incapsulare ? 1. class BadCode { 2. int num; 3. public int getNum() { 4. return num; 5. } 6. public void setNum(int num) { 7. this.num = num; 8. } 9. ... 10. } a. Linia 1 c. Linia 4 b. Linia 2 d. Linia 7 41. Care din liniile urmatoare va genera o exceptie ? 1. class BadCode { 2. private Foo foo; 3. public BadCode (Foo f) { 4. foo = f; 5. } 6. public BadCode() {} 7. protected void useFoo() { 8. int num = foo.num; 9. String name = foo.name; 10. .... 11. } 12. .... 13. } a. Linia 2 c. Linia 6 b. Linia 4 d. Linia 8 42. Dorim sa implementam o clasa total protejata si care sa nu mai fie extensibila, care din liniile urmatoare ar trebui modificata? 1. class Test { 2. private int key = 1234; 3. //... 4. protected void setKey(int privateKey) { 5. this.key = privateKey; 6. } 7. protected int getKey() { 8. return this.key; 9. } 10. //... 11. } a. Linia 1 c. Linia 4 23

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

b. Linia 2

d. Linia 8

43. Functia Clone() are ca scop: class Test { private int key = 1234; //... public Test () {} public Test (int k) { this.key = k; } protected int getKey(){return this.key; } public final Object clone() throws java.lang.CloneNotSupportedException { throw new java.lang.CloneNotSupportedException(); } //... } a. definirea unei clase clonabile c. definirea unei clase care nu poate fi extinsa b. definirea unei clase extensibile d. clasa si orice derivare a acesteia va fi neclonabila 44. Pentru a bloca serializarea unei clase trebuie sa: a. Definim clasa ca fiind finala b. Definim clasa ca fiind statica c. Definim o metoda readObject d. Definim o metoda writeObject

45. Codul sursa urmator ne spune ca: public boolean match(Object o) { return this.getName() == ((SomeClass)o).getName(); } a. obiectele sunt identice c. obiectele fac parte din aceiasi clasa b. obiectele sunt egale d. nici una 46. Pentru a defini un camp care sa stocheze informatii sensibile (conturi, nr. de card) se va folosi: a. String c. Char array b. StringBuffer d. Char 47. Ce efect va produce urmatorul program Java? public class Test { public void method(Object o) { System.out.println("Object Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } } 24

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. Programul nu se compileaza c. Afiseaza Object Version b. Se compileaza dar produce o exceptie la rulare d. Afiseaza String Version 48. Ce efect va produce urmatorul program Java? public class Test { public void method(StringBuffer sb) { System.out.println("StringBuffer Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } } a. Programul nu se compileaza b. Se compileaza dar produce o exceptie la rulare Nota: metoda (StringBuffer sb) ambigua

c. Afiseaza StringBuffer Version d. Afiseaza String Version

49. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(Throwable t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } } c. Afiseaza Before Try si At the End a. Nu se complieaza: nici un obiect Throwable nu a fost emis in blocul try b. Nu se compileaza: nu pot fi prinse obiecte Throwable, ci numai obiecte Exception d. Afiseaza Before Try , Inside Catch si At the End 50. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(IOException t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } 25

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} b. Nu se compileaza: nu pot fi prinse obiecte IOException, ci numai Exception a. Nu se complieaza: nici un obiect IOException nu a fost emis in blocul try c. Afiseaza Before try si At the End d. Afiseaza Before try , Inside Catch si At the End 51. Care din urmatoarele afirmatii este adevarata? d. O metoda statica nu poate returna o variabila nestatica a clasei a. O metoda statica nu poate returna un obicet Exception b. O metoda statica nu poate emite un obiect Exception c. O metoda statica nu poate returna o variabila statica a clase 52. Cum se va comporta urmatorul program? public class A { private void method1() throws Exception { throw new RuntimeException(); } public void method2() { try { method1(); } catch(RuntimeException e) { System.out.println("Caught Runtime Exception"); } catch(Exception e) { System.out.println("Caught Exception"); } } public static void main(String args[]) { A a = new A(); a.method2(); } } a. Programul nu se compileaza c. Afiseaza Caught Runtime Exception b. Afiseaza Caught Exception d. Afiseaza ambele mesaje 53. Cum se va comporta urmatorul program? class Base { public void aMethod() throws ClassNotFoundException { } } public class Derived extends Base { 26

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void aMethod() throws RuntimeException { } } d. Se compileaza corect a. Programul nu se compileaza deoarece RuntimeException nu este derivata din RuntimeException b. Se lanseaza o exceptie ClassNotFoundException la compilare c. Se lanseaza o exceptie RuntimeException la rular 54. Cititi cu atentie urmatorul co sursa: import java.awt.*; public class TestFrame extends Frame { Button bNorth = new Button("North"); Button bSouth = new Button("South"); Button bEast = new Button("East"); Button bWest = new Button("West"); Button bCenter = new Button("Center"); public TestFrame() { setLayout(new BorderLayout()); add(bSouth,BorderLayout.SOUTH); add(bWest,BorderLayout.WEST); add(bEast,BorderLayout.EAST); add(bNorth,BorderLayout.NORTH); add(bCenter); setLayout(new FlowLayout()); validate(); pack(); setVisible(true); } public static void main(String args[]) { TestFrame tf = new TestFrame(); } } b. Se compileaza si afiseaza butoanele pe o singura linie a. Programul nu se compileaza c. Se compileaza dar genereaza o exceptie d. Se compileaza si afiseaza butoanele sub forma de grid

55. O clasa care are totii constructorii privati : a. Trebuie declarata clasa finala c. Poate fi mostenita b. Poate fi instantiata d. Nu poate fi mostenita 56. Urmariti cu atentie codul urmator: public class NiceThreads implements Runnable { public void run() { while(true) { } 27

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} public static void main(String args[]) { NiceThreads nt1 = new NiceThreads(); NiceThreads nt2 = new NiceThreads(); NiceThreads nt3 = new NiceThreads(); nt1.run(); nt2.run(); nt3.run(); } } a. Se compileaza si lanseaza patre fire care vor rula la infinit b. Se compileaza si se lanseaza un singur fir c. Programul nu se compileaza d. Se compileaza dar genereaza o exceptie la rulare 57. Pentru a preveni executarea unei metode simultan de ctre mai multe fire de executie folosim: a. public c. native b. final d. Syncronized 58. Pentru a excuta o procedura n mod atomic delarm metoda ca fiind: a. syncronized c. final b. public d. Native 59. Managerul de asezare implicit pentru o fereastr este: a. LayoutManager c. BorderLayout b. null d. FlowLayout 60. Managerul de asezare implicit pentru un panel este: a. BorderLayout c. null b. GridLayout d. FlowLayout 61. Constructorul clasei de baz se apeleaz prin intermediul cuvntului cheie: a. this c. super b. base d. interface 62. n Java o clasa poate extinde a. cel mult o interfat c. oricte clase b. cel mult o clas d. oricte interfete 63. n Java o interfat poate extinde a. cel mult o interfat c. oricte clase b. cel mult o clas d. oricte interfete 64. n Java o clasa poate implementa cel mult a. o clas c. oricte clase b. o interfat d. oricte interfete 65. Pentru a bloca utilizarea directa a unei clase aceasta se va declara folosind specificatorul: a. abstract c. protected b. final d. Private 66. Pentru a bloca derivarea unei clase aceasta se va declara folosind specificatorul: 28

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. abstract b. final

c. protected d. Private

67. Clasa Menu este derivata din: a. MenuComponent c. PopupMenu b. MenuItem d. MenuBar 68. Lansarea unei exceptii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try 69. Prinderea unei exceptii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try 70. Ce cuvnt nu face parte din limbaj: a. volatile c. dispose b. transient d. native 71. Ce cuvnt nu face parte din limbaj: a. const c. final b. bool d. finally 72. Ce cuvnt nu face parte din limbaj: a. const c. break b. continue d. delete 73. Ce cuvnt nu face parte din limbaj: a. short c. awt b. long d. do 74. Ce cuvnt nu face parte din limbaj: a. class c. interface b. struct d. enum 75. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. int c. goto b. true d. enum 76. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. class c. null b. const d. boolean 77. Ce cuvnt cheie al limbajului nu este folosit: a. strictfp c. instanceof b. const d. transient 78. Ce afiseaz urmtorul program: public class Main { int x=0; int f() { return x+1; } public static void main(String[] args) { 29

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

System.out.println("x este " + f()); } } a. x este 0 c. Eroare la compilare b. x este 1 d. Exceptie la rulare 79. Ce afiseaz urmtorul program: public class Main { int x=0; static int f() { return x+1; } public static void main(String[] args) { System.out.println("x este " + f()); } } a. Eroare la compilare c. x este 0 b. Exceptie la rulare d. x este 1 80. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return x--; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+ f() ); } } a. Eroare la compilare c. x este 0 acum este 0 b. Exceptie la rulare d. x este 0 acum este -1 81. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return ++x; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 1 c. x este 0 acum este 1 b. x este 1 acum este 2 d. x este 0 acum este -1 82. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return (++x)*(x--); } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 0 c. x este 1 acum este 2 b. x este 1 acum este 1 d. x este 2 acum este 4 83. Ce afiseaz urmtorul program: class Element{ 30

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public Element(){ System.out.print(" Element "); } } class Carte extends Element{ public Carte(){ System.out.print(" Carte "); } } class Revista extends Carte{ public Revista(){ System.out.print(" Revista "); } } public class Main { public static void main(String[] args) { Element revista = new Revista(); } } a. Element c. Element Carte Revista b. Revista d. Revista Carte Element 84. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element>{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.Print(); } } a. Nu afiseaza nimic c. Se compileaza dar lanseaza exceptie la rulare b. Nu se compileaza, eroare la compilare d. Carte Revista 85. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ 31

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.add(b); b.Print(); } } a. Nu afiseaza nimic b. Nu se compileaza, eroare la compilare

c. Se compileaza dar lanseaza exceptie la rulare d. Carte Revista Carte Revista

86. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } System.out.println(); } } public class Main { public static void main(String[] args) { Biblioteca b1 = new Biblioteca(); Biblioteca b2 = new Biblioteca(); b2.add(b1); b1.add(b2); b1.Print(); } } a. Nu afiseaza nimic c. Carte Revista Carte Revista b. Se compileaza dar lanseaza exceptie la rulare d. Nu se compileaza, eroare la compilare 87. Cititi cu atentie urmatorul cod sursa: class Memory{ } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } } a. Programul se compileaza dar se blocheaza 32

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

b. Se compileaza, consuma toata memoria si se opreste c. Se compileaza si ruleaza la infinit deoarece nu se aloca nimic d. Se compileaza si ruleaza la infinit deoarece nu se poate consuma toata memoria 88. Cititi cu atentie urmatorul cod sursa: class Memory{ int [ ] matrice; public Memory(){ matrice = new int[100]; } } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } } a. Ruleaza la infinit deoarece memoria se elibereaz automat b. Programul se compileaza dar se blocheaza c. Consuma toata memoria si se opreste d. Ruleaza dar emite o exceptie 89. Cititi cu atentie urmatorul cod sursa: class Memory implements Serializable{ int [] matrice; public Memory(){ matrice = new int[100]; } } a. Clasa Memory extinde clasa Serializable b. Clasa Memory mosteneste clasa Object c. Clasa Memory implementeaz interfata Object d. Clasa Memory implementeaz clasa Serializable 90. n corpul unui constructor se poate apela un alt constructor? a. Doar constructorul clasei de baz prin intermediul cuvntului super b. Doar un constructor al clasei derivate prin intermediul cuvntului super c. Un constructor cu alti parametri d. Un constructor cu aceiasi parametri 91. Obiectul curent se poate transmite ca parametru prin intermediul cuvntului: a. super c. class b. this d. object 92. n prezenta firelor de executie multiple incrementarea atomic a unei variabile partajate se obtine prin intermediul specificatorului: a. X++ c. synchronized b. final d. static 93. n prezenta firelor de executie multiple decrementarea atomic a unei variabile partajate se obtine prin intermediul specificatorului: a. const c. x-b. synchronized d. thread 94. Un fir de executie se obtine prin extinderea clasei: a. Runnable c. Object b. Thread d. Frame 33

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

95. Un fir de executie se obtine prin implementarea interfetei: a. Runnable c. Object b. Thread d. Serializable 96. Un fir de executie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init 97. Un fir de executie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init 98. Urmatorul specificator are efect doar n prezenta firelor de executie: a. run c. start b. synchronized d. static 99. O clas care implementeaz interfata Runnable n mod obligatoriu trebuie: a. s fie public c. s fie declarat synchronized b. s implementeze metoda run d. s fie declarat ca fiind abstract 100. O interfat care extinde interfata Runnable n mod obligatoriu trebuie: a. s fie public c. s implementeze metoda run b. s fie declarat synchronized d. nici una 101. Codul urmtor nu se compileaz, lipseste specificatorul: class NewThread implements Runnable{ } a. public c. abstract b. private d. run

1. Fie programul: ..ok #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc& operator--(){raza--;return *this;}// return by reference private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza: 34

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

c. a. b. d.

3200 3300 3201 3211

Atentie..Se face deosebire dupa Cerc & operator pe linia 2 1.1. Fie programul:ok #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza : a. 3201 b. 3200 c. 3301 d. 3211 Atentie..Se face deosebire dupa Cerc operator (fara &) pe linia 2 1.2. Varianta in plus #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc &operator++(){raza++;return *this;}// return by value Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Raspuns 3312 35

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Atentie: Se face deosebire dupa Cerc &operador pe linia 1

2. Fie programul:ok // singleton // constructor private #include <iostream.h> #include <conio.h> class S{ public: static S* create() { if(i==0){ refS=new S(); i++; } return refS; } void setName(char *s){name=s;} char* getName(){return name;} static int getNr(){return nr;} private: static S* refS; static int i; static int nr; S(){nr++;} char *name; }; int S::i=0; int S::nr=0; S* S::refS=0; void main(){ S *o1, *o2; o1=S::create(); o2=S::create(); o1->setName("Matematica"); o2->setName("Informatica"); cout<<o1->getName()<<endl; cout<<o2->getName()<<endl; cout<<S::getNr()<<endl; getch(); } Programul afiseaza: b. Informatica Informatica 1 3. Fie programul:ok // destructor static, #include <iostream.h> class B{ public: ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: 36

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza : a. ~ B() ~B() ~D() c. ~ B()~D()~B() ~D() b. ~ B() ~D() d. ~ B() ~D() ~B() Atentie..Liniile subliniate sunt diferite 3.1. Fie urmtorul program C++:ok // destructor static #include <iostream.h> #include <conio.h> class B{ public: B(){cout<<"B()"<<endl;} ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} ~D(){cout<<"~D()"<<endl;} }; void main(){ B *b=new B(); // apel B() delete b; b=new D(); // apel B();D() delete b; } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaz: B() ~B() B() D() ~B() a. Programul afiseaz: B() ~B() B() D() ~D() c. Programul afiseaz: B() ~B() B() ~B() d. Programul afiseaz: B() ~B() D() ~B() Atentie..Liniile subliniate sunt diferite

3.2. Fie programul :ok // destructor virtual, #include <iostream.h> class B{ 37

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public: virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza: a. ~ B()~D()~B() ~D() c. ~ B() ~D() b. ~ B() ~B() ~D() d. ~ D()~B()~D() ~B() Atentie....este destructor virtual, ex. diferit fata de destructor static..

3.3. Fie urmtorul program C++:ok // destructor virtual #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *b=new B(); // apel B() delete b; b=new D(); // apel B();D(); // destructorii, in ordine inversa delete b; } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: c. Programul afiseaz: B() ~B() B() D() ~D() ~B() B() ~B() B() D() ~B() ~D() b. Programul afiseaz: d. Programul afiseaz: B() ~B() B() D() ~B() ~B() B() ~B() B() D() ~B() Atentie..este destructor virtualseamana cu ex. precedent care nu are liniile subliniate la acest ex.

4. Fie programul:ok #include <iostream.h> class B{ 38

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< "virtual method v() of D"<<endl;} }; int main(){ B *pb; D d; // pointing to a subclass pb=&d; ((D*)pb)->v(); virtual method v() of D ((D*)pb)->st(); static method st() of D return 0; } Programul afiseaza: c. virtual method v() of D a. virtual method v() of D static method st() of B static method st() of D b. virtual method v() of B d. virtual method v() of B static method st() of D static method st() of B Atentiediferentele sunt liniile subliniate

4.1. Fie programul:ok #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B b, *pb; D d, *pd; pb=&d; pb->st(); //static metod s() of B pb->v(); //virtual metod v() of D return 0; } Programul afiseaza: a. static method s() of D virtual method v() of D b. static method s() of B c. static method s() of D virtual method v() of B d. static method s() of B 39

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

virtual method v() of B Atentiediferentele sunt liniile subliniate

virtual method v() of D

4.2 Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B b, *pb; D d, *pd; pb=&b; pb->st(); // static method st() of B pb->v(); // virtual method v() of B pb=&d; pb->st(); // static method st() of B pb->v(); // virtual method v() of D return 0; } Raspuns static method st() of B virtual method v() of B static method st() of B virtual method v() of D

5. Fie programul :ok // constructor de copiere in clasa de baza; dar absent in clasa derivata // compilatorul creeaza un constructor de copiere implicit // care apeleaza constr de copiere al clasei de baza pentru copierea atributelor din clasa de baza // si copiaza membru cu membru atributele din D #include <iostream.h> class B{...//B este clasa de baza) public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} }; void main(){ B b; // apel B() ..//B() 40

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

B b1(b); // apel B(B & ); nu se mai utilizeaza B()!..//B(B &b ) D d; // apel B();D()..//B() D() D d1(d); B bd(d); // conversie implicita la clasa de baza; ..// B(B &b ) getch(); } Programul afiseaza : c. B() B(B&b) a. B() B() B(B&b) b. B() B() B(B&b) d. B() B(B&b)

B() D() B(B &b) B(B &b) B() D() B(B &b) B(B &b) B() D() B(B &b) D() B(B &b) D() B(B &b) D() B(B &b)

!!! Atentie . Seamana cu 12 , diferentele sunt liniile subliniate

5.1. Fie programul :ok // constructor de copiere atat in clasa de baza cat si in clasa derivata // constructorul de copiere din clasa derivata utilizeaza pe B() pentru constructia // // subbiectului B #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} D(D &d){cout<<"D(D &d)"<<endl;} }; void main(){ B b; // apel B()//B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()!...//B(B &b ) D d; // apel B();D()//B() D() D d1(d); // nu se apeleaza B(B &b)B() D(D&d) } Programul afiseaza : b. B() B(B&b) B() D() B() D(D &d) a. B() B(B&b) B() D() B(B &b) D(D &d)- nu c. B() B() B(B&b) B() D() B(B &b) D() B(B &b) d. B() B(B&b) D() B(B &b) D() B(B &b) - nu !!! Atentie .Seamana cu 11, diferentele sunt liniile subliniate

6. Fie programul :ok #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} void operator++(){raza++;} 41

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

private: float raza; }; class Cilindru: public Cerc{ public: Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){}; void operator++(){inaltime++;} float getInaltime(){return inaltime;} private: float inaltime; }; void main(){ Cerc *pc; Cilindru c(1,5); pc=&c; ++ *pc; cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl; getch(); } Programul afiseaza : a. 1 6 b. 2 5

c. 2 6 d. 1 5

Inaltimea se incrementeaza 1++=2 Raza nu se incrementeazaramane 5 Pt. cilindru..rezulta (2 5)

7. Fie programulok //static atribut #include <conio.h> #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){nr--; delete[] name;} private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); } void main(){ for (int i=0; i<5; i++)f(); getch(); } 42

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Programul afiseaza: a. 1 2 3 4 5 c. 0 0 0 0 0 b. 1 1 1 1 1 d. 0 1 2 3 4 i=00++=1 i=11++=2 i=22++=3 i=33++=4 i=44++=5 Atentie..liniile subliniate sunt diferite strcpy(destinatie,sursa)-functia are rolul de a copia sirul de la adresa sursa la adreasa destinatie 7.1. Fie programul #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ nr=0; name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){ delete[] name; } private: char *name; long nr; }; void f(){ Person *p = new Person("Balanescu"); delete p; } void main(){ for (int i=0; i<5; i++)f(); } Programul afiseaza: 11111 Atentie..liniile subliniate sunt diferite Nu are #conio.h 8. Fie urmtorul program C++:..ok #include <iostream.h> class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: 43

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Cerc(double r=0.0, int x=0, int y=0);// constructor protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<<p.x<<", "<<p.y<< ']'; return output; } //implementare Cerc Cerc::Cerc(double r, int a, int b):Punct(a,b), raza(r){} ostream& operator<<(ostream& output, const Cerc& c){ output <<"Centru= "<< (Punct)(c) <<"; Raza= "<<c.raza; return output; }; void main(){ Punct *punctPtr=0, p(30,50); Cerc *cercPtr=0, c(2.7,120,89); cout<<p<<endl; cout<<c<<endl; // Cerc tratat ca Punct (prin pointer la clasa de baza): punctPtr=&c; cout<< *punctPtr << endl; /* Cerc tratat ca Cerc (prin pointer la clasa de baza, dar cu conversie explicita de la Punct la clasa derivata Cerc */ cercPtr= (Cerc *)(punctPtr); cout<< *cercPtr<<endl; /*Punct tratat ca Cerc: programatorul isi asuma responsabilitatea unor erori: anumite atribute sunt nedefinite */ punctPtr= &p; // punctPtr refera un Punct //Urmeaza conversie asumata de programator, //de la clasa de baza la clasa derivata cercPtr=(Cerc *)(punctPtr); // cercPtr refera p ca pe un cerc //dar acest asa-zis cerc are raza nedefinita cout<< *cercPtr <<endl; } Prin xx este desemnat o valoare nedefinit. Care din afirmatiile urmtoare sunt adevrate: d. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx a. Programul afiseaz: Punct[30,50] 44

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Centru=Punct[30,50]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx b. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Centru=Punct[30,50]; Raza=xx c. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx 9. Fie urmtorul program C++:ok #include <iostream.h> class B{ public: B(int i):i(i){} protected: int i; }; class D1: public B{ public: D1(int i):B(i){} void inc(){i++;} }; class D2: public B{ public: D2(int i):B(i){} void afisare(){cout<<i=<<i<<endl;} }; class D: public D1, public D2{ public: D(int i):D1(i),D2(i){} }; void main(){ D d(0); d.inc(); d.afisare(); } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz i=-1 c. Programul afiseaz i=0 b. Programul afiseaz i=2 d. Programul afiseaz i=1

10. Fie urmtorul program C++:ok #include <iostream.h> class B{ 45

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public: B(int i=-1):valB(i){} B& operator=(const B &b){ valB=b.valB; cout<<"B::op= "; return *this; } private: int valB; }; class D:public B{ public: D(int i, int j):B(i),valD(j){} D& operator=(const D &d){ valD=d.valD; cout<<"D::op= "; return *this; } private: int valD; }; void main(){ B b(0), b1(1); B *pB; D d(0,0), d1(1,1); b=b1; d=d1; b=d; pB=&d; *pB=d; pB->operator=(d); } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaz: B::op= D::op= B::op= B::op= B::op= a. Programul afiseaz : B::op= D::op= D::op= B::op= D::op= c. Programul afiseaz: B::op= D::op= B::op= D::op= D::op= d. Programul afiseaz: B::op= D::op= D::op= D::op= B::op= 11. class A{ok int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: 46

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 public: void m(){ x=1; // 2 b.x=1; //3 } }; void main(){ B b(1); // 4 } Care din urmtoarele instructiuni sunt eronate: c. b.x=1; // 3 a. B b; // 1 b. x=1 // 2 d. B b(1); // 4 (din functia main) error C2248: 'x' : cannot access protected member declared in class 'B' : see declaration of 'x' Error executing cl.exe. 12. Fie programul #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} // 4. supraincarcare metoda virtuala, neacceptata: // B::v() conflicts with base class A // virtual int v(){cout<<"int B::v()"<<endl; return 1;} }; void main(){ A a, *pa; B b; pa=&a; pa->s(); pa->s(1); pa->v(); pa->v(1); pa=&b; pa->s(); pa->s(1); pa->v(); pa->v(1); } Care din rezultatele urmatoare sunt afisate prin executarea programului? 47

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void A::v() virtual void B::v(int) b. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) c. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void B::v() virtual void B::v(int) d. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) int B::s() void B::s(int) virtual void B::v() virtual void B::v(int)

12.1. Fie urmatorul program:ok #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } 48

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

// 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; void main(){ A *pa; B b; pa=&b; pa->s(); pa->v(1); //(daca ..s(1) si V(0)..acelasi raspuns) } Prin executarea sa, programul afiseaza: c. void A::s() void B::v(int) virtual void B::v(int) a. void B::v() void A::v(int) b. void A::v() void B::v(int) d. void A::v() void A::v(int) !!! Atentie, diferentele sunt liniile subliniate Varianteposibile de ex. 1. pa=&b; pa->s(1); pa->v(1); void A::s(int) virtual void B::v(int) 2. pa=&b; pa->s(); pa->v(); void A::s virtual void A::v

12.2. Fie urmatorul program:,,,ok #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; 49

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void main(){ A *pa; B b; pa=&b; pa->v(); pa->s(1); } Prin executarea sa, programul afiseaza: d. void B::v()??? void A::s(int) a. void B::v() void A::v(int) b. void A::v() void B::v(int) c. void A::v() void A::v(int) Raspuns..nici o varianta corect este.. void A::v virtual void A::s(int) !!!!Atentie..diferentele sunt liniile subliniate Variante posibile 1.pa=&b; pa->v(); pa->s(); virtual void A::v() void A::s() 2. pa=&b; pa->v(1); pa->s(); virtual void B::v(int) void A::s()

13. Fie urmtorul program C++:..ok #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; a.m(); p=&b; p->v(); } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaza mesajul: 50

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

A:m() B:(v) a. Expresia p->v()este incorect deoarece metoda v este inaccesibil c. Programul afiseaz mesajul: A:v() d. Expresia a.m() este incorect deoarece metoda m este inaccesibil 14. Fie urmtorul program C++, n care operatorul de insertie << este suprancrcat. Operatorul de atribuire = este cel predefinit, cu semantica prin referinta..ok #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaz: a. Programul afiseaz: 10 20 10 20 1000 20 10 20 c. Programul afiseaz: d. Programul afiseaz: 1000 20 1000 20 10 20 1000 20 Nota. Lipsesc liniile subliniate de la 15.1. Este suprainacarcuare cu semntica prin referinta. 14.1. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate chiar si n cazul de autoatribure d=d.ok #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); 51

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } // supraincarcare cu semantica prin valoare C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // fara verificarea cazului de autoatribuire d=d delete[] pi; dim=x.dim; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: 10 20 10 20 xx yy b. a) Programul afiseaz: 10 20 1000 20 xx yy c. Programul afiseaz: 1000 20 10 20 xx yy d. Programul afiseaz: 10 20 10 20 52

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

10 20 Nota. Liniile subliniate sunt in plus fata de ex. 14. Este supraincarcare cu semnatica prin valoare.

14.2. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate numai dac d?s.ok #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // numai daca destinatia difera de sursa if(this!=&x){ dim=x.dim; delete[] pi; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} } return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate: d. Programul afiseaz: 53

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

10 20 10 20 10 20 a. Programul afiseaz: 10 20 10 20 xx yy b. Programul afiseaz: 10 20 1000 20 xx yy c. Programul afiseaz: 1000 20 10 20 xx yy Nota: Diferente fata de ex. 14.1..linia subliniata..

ERORI 15. Fie urmtorul program C++:ok #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int i)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } }; class B:public A{ public: // 1. int s(){ cout<<"int A::s()"<<endl; return 1; } // 2. void s(int i){ i++;cout<<"void A::s(int i)"<<endl; } // 3. virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } // 4. virtual int v(){ cout<<"int A::v()"<<endl; return 1; 54

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} }; Care din afirmatiile urmtoare sunt adevrate: d. //4. este incorect a. //1. este incorect b. //2. este incorect c. //3. este incorect 15.1. Se considera urmatoarele clase: class B{ public: int i; protected: int j; private: int k; public: B(){i=j=k=0;} void set_j(int pj){j=pj;} int get_j(){return j;} void set_k(int pk){k=pk;} int get_k(){return k;} }; class D: public B{ public: D(){ i=1; j=1; k=1; // 1 set_k(1); // 2 } }; class C{ public: C(){ b.i=2; b.j=2; // 3 b.set_j(2); // 4 b.k=2; // 5 b.set_k(2); // 6 } private: B b; }; Care din afirmatiile urmatoare sunt adevarate? a. instructiunile // 1, // 3 si // 5 sunt toate incorecte b. doar instructiunile // 2, si // 4 sunt incorecte c. doar instructiunile // 3 si // 4 sunt incorecte 15.2. Fie urmtorul program C++:ok class A{ int x; public: A(int x):x(x){}; 55

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

}; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){ x=1; // 3 //b.x=1; //x nu este accesibil obiectelor } }; void main(){ B b(1); // 4 } Care din urmtoarele instructiuni sunt eronate: b. B b(1); // 2 (din clasa D) a. B b; // 1 c. x=1; // 3 d. B b(1); // 4 (din functia main) error C2059: syntax error : 'constant' error C2040: 'b' : 'class B (void)' differs in levels of indirection from 'class B' Error executing cl.exe.

15.3. Fie urmatorul program #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} 56

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

}; //4.supraincarcare metoda virtuala, virtual void v(){count<<"int B::()"<<endl:return1} }; Care definitie este incorecta? 1, 2, 3 sau 4?? Raspuns 4

16. Fie urmtorul program C++:ok #include <iostream.h> class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Persoana q="Balanescu"; void fvalue(Persoana p){p.afisare();} void faddress(Persoana *p){p->afisare();} void freference(Persoana &p){p.afisare();} void main(){ fvalue(q); faddress(&q); freference(q); fvalue("Tudor"); freference("Tudor");// Warning: temporary used for p } Care din afirmatiile urmtoare sunt adevrate: d. Programul afiseaz: Balanescu Balanescu Balanescu Tudor Tudor a. Expresia faddress(&q); este eronat; b. Instructiunea de declarare Persoana q="Balanescu"; este eronat; c. Expresia p->afisare() este eronat; error C2664: 'freference' : cannot convert parameter 1 from 'char [6]' to 'class Persoana &' A reference that is not to 'const' cannot be bound to a non-lvalue

17. Analizati mecanismele de conversie din urmatorul program: (2009)..ok #include <conio.h> #include <iostream.h> class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: 57

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

float x,y; friend ostream& operator<<(ostream &stream, const Punct &p ); }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; friend ostream& operator<<(ostream &stream, const Complex &c ); friend Punct::operator Complex(); }; // in varianta aceasta, Punct::operator Complex nu trebuie declarata functie prietena //Punct::operator Complex(){ return Complex(x,y);} Punct::operator Complex(){//functie friend a clasei Complex Complex c; c.x=x;c.y=y; return c; } ostream& operator<<(ostream &stream, const Punct &p ){ stream << "("<<p.x<<","<<p.y<<")"; return stream; } ostream& operator<<(ostream &stream, const Complex &c ){ stream <<c.x<<"+"<<c.y<<"*i"; return stream; } void main(){ Punct p(2,3); Complex c(8,9); cout<<(Complex)p<< endl<<(Punct)c<<endl; p=c; cout<<p<<endl; p=1; cout<<p<<endl; int i=p; cout<<i<<endl; c=p=1; (Punct)((Complex)p); getch(); } Raspuns 2+3*i (8,9) (8,9) (1,0) 1

18. Care va fi continutul fisierului H.TXT in urma executarii programului urmator?...ok #include <stdio.h> FILE *f; char x, y, z; void main(){ f = fopen(H.TXT,w); 58

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

fprintf(f,Ieri %d\n,13); fprintf(f,Azi %d,14); fprintf(f,Maine %d\n,15); fclose(f); } Raspuns.. Ieri 13 Azi 14Maine 15

19. Se considera programulok #include <stdio.h> void aplic(int x, int *y){x+=3; (*y)-=2; printf(%d, %d, x, *y);} void main(void){int x=12, y=20; aplic(x, &x); printf(,%d,,x); printf(%d,,y);aplic(y,&y); } Ce se va afisa in urma executarii acestuia: b. 15,10,10,20,23,18 c. 15,13,13,13,16,11 a. 13,13,13,13,16,14 d. 15,10,15,20,23,20 20. Care este rezultatul tiparit de programul urmator?...ok #include <stdio.h> #include <string.h> void f(char s[], int); void main(){f(examenul,0);} void f(char s[256], int i){ if(i<strlen(s)) { f(s, i+1); if (strchr(aeiou, s[i]) != 0) printf(%c, s[i]); } } a. eaeu c. ueae b. examenul d. e

CALCULATOR 21 Fie programul urmator:ok #include <iostream.h> class Calculator{ private: int value; int keep; char toDo; public: void add(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='+'; // what to do later } void subtract(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='-'; // what to do later 59

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} void multiply(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='*'; // what to do later } void compute(){ if (toDo=='+') value += keep; else if (toDo == '-') value = keep-value; else if (toDo == '*') value *= keep; } void clear(){value=keep=0;} void digit (int x){value=value*10+x;} int display(){ return value;} Calculator(){clear();} }; void main(){ Calculator c; c.digit(1); c.digit(0); c.add(); c.digit(2); c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1); c.digit(0); c.subtract(); c.digit(2); c.digit(0); c.compute(); c.multiply(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Se cere sa indicati care din rezultatele urmatoare sunt afisate prin executarea acestui program: a. 25 -10 b. 35 50 21.1 Fie programul: #include "Calc.h" void main(){ Calculator c; c.digit(1);c.digit(0); c.add(); c.digit(2);c.digit(0); c.compute(); c.add(); 60 c. 35 -50 d. 35 -20

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1);c.digit(0); c.multiply(); c.digit(2);c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Programul afiseaza a. 35 205 b.10 20

c. 205 35 d. 20 10

22. Se considera programul: #include <iostream.h> class C{ public: C(){i=0;}; void set_i(int pi){cout << "C::set_i (int)"<<endl;i=pi;} //void set_i(int pi)const{i=pi;} // error: cannot modify a const object int get_i (){cout << "C::get_i ()"<<endl; return i;} int get_i()const {cout << "C::get_i ()const"<<endl;return i;} int i; }; void main(){ int j; C x; const C y; x.i=1; x.set_i(2); j= x.get_i(); //y.i=1; // error: cannot modify a const object //y.set_i(2); // warning: non-const function called for a const object j= y.get_i(); } Ce rezultate afiseaza acest program? c. C ::set_i(int) C::get_i() C::get_i()const a. C ::set_i(int) C::get_i() const C::get_i() b. C ::set_i(int) C::get_i() C::get_i() d. C ::set_i(int) C::get_i() const 61

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

C::get_i()const

23. Fie urmtorul program C++, unde functia abs calculeaz valoarea absolut a unui numr real #include <iostream.h> void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="<<a<<endl; int i=-1; abs(i); //temporary used for parameter x cout<<"i="<<i<<endl; // i=-1 } La compilare a fost emis urmtorul mesaj de avertizare: Warning: temporary used for parameter x in call to abs(float &) Care din afirmaiile urmtoare sunt adevrate: a. Programul afiseaz: c. Programul afiseaz: a =1 a = -1 i = -1 i = -1 b. Programul afiseaz: d. Programul afiseaz: a =1 a = -1 i=1 i=1

24. Fie urmatorul program C++ // Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); 62

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} Care expresie este incorecta: a. b.m(); c. p->m(); b. p=&a; d. p->v(); Raspunsgresit b:m() si b:v()

24.1. Fie urmatorul program C++ // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]=-100; cout<<(x=y)<<endl; } Raspuns.. 10 20 Atentie deosebirea este ultima linie subliniata

24.2. Fie urmatorul program C++ // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; 63

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]= -100; cout<<x<<endl; } Raspuns -100 2 3 Atentie .. deosebirea este ultima linie subliniata

24.3. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); x=y; y.set(0,-1000); cout<<x<<endl; } Raspuns Programul afiseaza: -1000 20 Atentiedeosebirea este penultima linie 64

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TUDOR, ANDREI, CAR 25. Fie urmatorul program C++ #include "iostream.h" template <class T> class Fifo{ public: Fifo(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>Fifo<T>::Fifo(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void Fifo<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T Fifo<T>::get(){ return support[first]; } template <class T> void Fifo<T>::remove(){ first= ++first % nrmax; --nrelem; } class Person { public: Person(char *name); Person(); //necesar pentru a intializa tablouri virtual void display(); virtual void process(); private: char *name; }; class Car { public: Car(char *name); Car(); virtual void display(); virtual void process(); private: char *name; }; Person::Person(char *name):name(name){}; Person::Person(){}; 65

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; Car::Car(){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } Fifo<Person> queuePerson(3); Fifo<Car> queueCar(3); void main(){ queuePerson.put(Person("Andrei")); queuePerson.put(Person("Tudor")); queueCar.put(Car("B-39-TDR")); queuePerson.get().process(); queuePerson.remove(); queueCar.get().process(); queueCar.remove(); queuePerson.get().process(); queuePerson.remove(); } Raspuns A Person: Andrei A Car:B-39-TDR A Person: Tudor 25.1. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; 66

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

}; #endif //elements.h #include "abselem.h" #include "iostream.h" class Person: public AbstractElem{ public: Person(char *name); virtual void display(); virtual void process(); private: char *name; }; class Car: public AbstractElem{ public: Car(char *name); virtual void display(); virtual void process(); private: char *name; }; //driver.cpp #include "elements.h" #include "LIST.h" LIST x(3); void main(){ x.put(new Person("Tudor")); x.put(new Person("Andrei")); x.put(new Car("B-39-TDR")); x.get()->process(); x.remove(); x.get()->process(); x.remove(); x.get()->process(); x.remove(); } //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } //elements.cpp #include "elements.h" Person::Person(char *name):name(name){}; 67

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } Programul afiseaza datele in ordinea: a. Tudor Andrei B-39-TDR b. B-39-TDR Andrei Tudor c. Andrei B-39-TDR Tudor d. B-39-TDR Tudor Andrei Sau scrise asa: A Person: Tudor A Person: Andrei A Car: B39-TDR 26. Se considera programul C:ok #include <stdio.h> int f(void){ int i = 0; return (i++); } int g(void){static int x = 0; return (x++); } void main(void){ int k; for (k = 0; k < 3; k++) printf("F %d\n", f()); for (k = 0; k < 3; k++) printf("G %d\n", g()); } Analizati modul de functionare si precizati care este iesirea acestui program. b) F0 F0 F0 G0 G1 G2 27. Se considera programul #include <stdio.h> void main(void){ int s=0; int k; for (k = 1; k <= 10; ++k); s += k; printf("Suma primelor 10 de numere naturale nenule este %d\n", s); } Ce afiseaza programul: a) 55 c) uneori si 55 b) intotdeauna 11 d) uneori si 11

68

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

28. Se considera programul: #include <stdio.h> void main(void){ int n1, n2; printf("n1 = "), scanf("%d", &n1); printf("n2 = "), scanf("%d", &n2); if (n2 =! 0) printf("n1/n2 = %d\n", n1/n2); else printf("Impartire prin ZERO\n"); } Ce se afiseaza pentru n1 = 8 si n2 = 16? a) n1/n2 = 0 c) n1/n2 = 16 b) n1/n2 = 8 29. Fie urmatorul program..??-cod gresit // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; 69

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} void LIST::remove(){ first= ++first % nrmax; --nrelem; } int main() { LIST(5); return 0; } A. 3 2 0 0 B. 3 3 0 0 C. 3 3 1 1 D. 3 2 1 2 E. 3 2 1 2

TEORIE 30. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } a. Clasa C este o clasa generica c. Clasa C este derivata din clasa T b. Clasa C este o clasa abstracta d. Clasa T este derivata din clasa C !!! O clasa generica poate opera cu tipuri de date nespecificate 70

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

31. Fie urmatoarea specificare de clase: Class Complex; Class Punct{ public: Punct(float x=0, float y=0) x(x), y(y) () operator Complex(); operator float() (return x;) private: float x, y, }; class Complex( public: Complex(float x=0, float y=0 x(x), y(y)() Operator Punct() (return PUNCT(x,y),) private: float x,y; }; Metoda operator Complex operator float() este utilizata pentru: A. Conversia unui obiect Punct in obiect Complex B. Conversia obiectelor Complex in numere reale C. Conversia unui numar real in obiect Complex D. Conversia unui obiect Complex in obiect punct

31.1. Fie urmatoarea specificare de clase: class Complex class Punct{ public: Punct(float x=0, float y=0)x(x),y(y)() Operator Complex(); Operator float(){return x;) private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0)x(x),y(y)() operator Complex(); operator float(){return x;} private: float x,y; }; Metoda operator Complex operator float() este utilizata pentru: A. Conversia unui obiect Complex in obiect punct B. Conversia obiectelor Complex in numere reale C. Conversia unui obiect Punct in obiect Complex D. Conversia unui numar real in obiect Complex Atentie.. deosebire liniile subliniate

71

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

32. Fie urmatoarea specificare de clasa: //file abslist.h #ifndef ABSLIST_H #define ABSLIST_H #include d:\tudor\c_cpp\abstract\abselem.h* class AbstractList{ public: virtual void erase()=0; virtual void put(abstractElm*ae)(); virtual AbstractElm*get()(); virtual int isEmpty()(); virtual int isFull()(); }; #endif Care afirmatie este corecta? A. AbstractList este o clasa abstracta B. isEmpty este metoda virtuala pura C. AbstractList este o clasa concreta D. Obiectele clasei pot fi construite cu AbstractList() !!! Clasa abstracta trebuie intodeauna sa aiba o functie virtuala pura

33. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } 72

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. b. c.

Clasa C defineste o structura de tip coada (FIFO) Clasa C defineste o structura de tip stiva (LIFO) Clasa C este un vector d. Clasa C este abstracta

33.1. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } Care afirmatie este adevarata: a. LIST este o structura de date de tip coada b. LIST este o structura de date de tip stiva 73

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

c. LIST este o clasa abstracta d. LIST este un vector. Nota.. sunt diferente..lipsesc liniile de la //elements.h..si de la //elements.cpp..

35. Fie urmatorul program: #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; Care afirmatie este corecta: a. Definitia virtual void v()supraincarca definitia virtual void v(int i) b. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v. c. void v() este metoda ce va fi legata static. d. in expresia p->v(); metoda v este legata static

36. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Constructorul Persoana(char *) poate fi utilizat pentru: a. Conversia obiectelor Persoana in siruri de caractere b. Conversia sirurilor de caractere in obiecte Persoana c. Construirea de siruri de caractere d. Conversia obiectelor Complex in obiecte Persoana

37. Fie programul:ok #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); delete p; 74

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} void main(){ while(1)f(); } Care afirmatie este adevarata: a. Programul afiseaza un sir finit de numere 1 2 3 4...etc. pana memoria este epuizata b. Programul afiseaza secventa infinita 1 2 3 4...etc. deoarece memoria nu este epuizata c. Programul nu afiseaza nimic d. Programul afiseaza 1 apoi se opreste 38. Fie urmtorul program C++: #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ name=new char[strlen(p)+1]; strcpy(name,p); } ~Person(){delete[] name;} private: char *name; }; void f(){ // obiect nou, alocare dinamica in memoria heap Person *p =new Person("Balanescu"); delete p; } void main(){ while(1)f(); } Care din afirmatiile urmtoare sunt adevrate: c. Programul nu se termin, deoarece conditia de continuare din instructiunea while este mereu ndeplinit a. Programul se termin, deoarece instructiunea delete p elibereaz memoria alocat pentru obiectul referit de p b. Programul se termin, deoarece la iesirea din functia f se elibereaz memoria alocat pe stiv pentru obiectul referit de p d. Programul se blocheaz la epuizarea memoriei heap

39. Fie programul: //destructor explicit #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;} private: char *name; }; void f(){Person *p = 75

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java } void main(){ while(1)f(); } Care din afirmatiile urmatoare sunt adevarate: Raspuns: La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu este eliberat

40. Fie urmatoarea specificare de clase: class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; }; Punct::operator Complex(){ return Complex(x,y);} Metoda Punct:: operator Complex() nu a fost implementat inline, precum operator Punct() deoarece b. Constructorul Punct (float, float) trebuie declarat inaintea metodei Punct:: operator Complex() .. c. Este metoda friend a clasei Complex d. Este metoda friend a clasei Punct

76

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

1. Fie urmtorul bloc de instructiuni Java: JAVA { int x = 12; q=1; { int q = 96; // Both x & q available x=q; } q=x; x=1; } Care afirmatie este adevarata: a. instructiunea x=q; este corecta; b. instructiunea q=x; este corecta; c. instructiunea x=1; este incorecta; d. instructiunea q=1; este corecta; Nota: q=x si x=1 (apartin de primul bloc) nu sunt corecte, deoarece x este declarat de doua oriSunt corecte x=q si q=96 2. Fie urmtorul bloc de instructiuni Java: { int x = 10; x=1; { int x = 100; } x=2; } Care afirmatie este adevarata: b. instructiunea int x = 100; este incorecta; a. instructiunea x=1; este incorecta; c. instructiunea x=2; este incorecta; d. instructiunea int x = 10; este incorecta; Nota: X=100 este incorecta - variabila x nu a fost nca definita n momentul primei atribuiri. 3. Fie urmatoarea clasa Java: class D { int i; float f; boolean b; } Care afirmatie este adevarata: c. instructiunea D d = new D(); este corecta; a. instructiunea D d = new D(1); este corecta; b. instructiunea D d = new D(1,1); este corecta; d. instructiunea D d = new D(1,1,1); este corecta; 4. Fie urmatoarea metoda Java: 1

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

int storage(String s) { return s.length() * 2; } si instructiunea int i=storage(Java); Care afirmatie este adevarata: d. i va primi valoarea 8; a. instructiunea este incorecta; b. i va primi valoarea 4; c. i va primi valoarea 16; Nota: Sirul de caractere Java are 4 litere..Valoarea returnata va fi 4*2=8 5. Fie urmtoarea clas Java: class C{ public static int i=1; } Si instructiunile: C x=new C(); C y=new C(); x.i =x.i ?+1; Care afirmatie este adevarata: d. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=1; a. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=2; b. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 2 si y.i=1; c. Dupa executarea instructiunii x.i =x.i ?+1; avem x.i = 1 si y.i=2; Nota: +x .afiseaza valoarea lui x si apoi aduna 1 deci +1 afiseaza 1 6. Fie urmtoarea clas Java: class C{ public static void main(String args[]){ System.out.println(args[0]); System.out.println(args[1]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: b. Curs Java a. Curs Java An c. Java An 3 d. Curs Java An 3 Nota: args[0]afiseaza Curs args[1]afiseaza Java 7. Fie urmtoarea clas Java: class C{ 2

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public static void main(String args[]){ for(int i=0;i<args.length; i++) System.out.println( + args[i]); } } Daca se executa linia de comanda: >java C Curs Java An 3 atunci se va afisa: c. Curs a. Curs b. Curs Java An Java Java d. Java An 3 An 3 Nota: Incrementare: i<4 (patru cuvinte)..Pt. i=0 afiseaza Curs, pt. i=1..afiseaza Curs Java, pt. i=2..afiseaza Curs Java An si pt. i= 3 afiseaza Curs Java An 3 8. Fie urmtoarea clas Java: public class Person{ public Person(String p){name=new String(p); System.out.println(++nr); } public static void main(String[] args){ while(true)f(); } private static void f(){Person p = new Person("Ionescu"); // obiectele NU se acumuleaza // in heap si NU blocheaza executarea, spre deosebire de C++ } private String name; private static long nr=0; }; Care afirmatie este adevarata: a. Programul nu se opreste din executare; b. Programul se termina, cu mesaj de eroare, deoarece la un moment dat nu mai exista memorie suficienta pentru crearea obiectelor Person; c. Programul are erori de sintaxa; d. Programul se termina, fara mesaj de eroare. Nota: Vezi //comentarii (comp afiseaza numere crescatoare..nu se opreste) 9. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; 3

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=0; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s1.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: b. Programul afiseaza: Underflow la stiva Tudor a. Programul afiseaza: Overflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Andrei d. Programul afiseaza: Underflow la stiva Andrei Nota: Pe s1 se incearca o extragere s1.item(); (item de asemenea) din stiva deja goala Underflow (subdepasire) - extragere din stiva goala 10. Fie urmatoarele clase Java: 4

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s2.insert("aa"); s2.delete(); s2.item(); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: 5

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. Programul afiseaza: Underflow la stiva Andrei b. Programul afiseaza: Underflow la stiva Tudor c. Programul afiseaza: Overflow la stiva Tudor d. Programul afiseaza: Overflow la stiva Andrei Nota: Se lucreaza pe s2 si se incearca o extragere (s2.item();) (item de asemenea )din stiva deja goala Underflow (subdepasire) - extragere din stiva goala 11. Fie urmatoarele clase Java: class Overflow extends Exception{ public Overflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Underflow extends Exception{ public Underflow(Stack o){source=o;} public Stack getSource(){return source;} private Stack source; } class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) throws Overflow{ if(top < dim-1) v[++top]=o; else throw new Overflow(this); } public void delete() throws Underflow{ if(top >=0) top--; else throw new Underflow(this); } public Object item() throws Underflow{ if(top >=0) return v[top]; else throw new Underflow(this); } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); try{ s1.insert("aa"); s1.delete(); s2.insert("aa"); s2.insert( new Integer(10)); 6

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

s2.insert("aa"); } catch (Overflow e){ System.out.println("Overflow la " + e.getSource().getName()); } catch (Underflow e){ System.out.println("Unnderflow la " + e.getSource().getName()); } } } Care afirmatie este adevarata: b. Programul afiseaza: Overflow la stiva Andrei a. Programul afiseaza: Overflow la stiva Tudor c. Programul afiseaza: Underflow la stiva Tudor d. Programul afiseaza: Underflow la stiva Andrei Nota: Stiva s2 este deja plina si se incearca o noua inserare (s2.insert("aa"); Nota: Overflow (supradepasire) - inserare in stiva plina adica in S2 stiva Andrei 12. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: c. Programul afiseaza: Varful stivei: 10 7

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: stiva Tudor d. Programul afiseaza: 2 Nota: stiva se citeste de jos in sus Insert 10 rezulta varf stiva este 10 13. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: d. Programul afiseaza: Varful stivei: aa a. Programul afiseaza: stiva Tudor b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: 2 Nota: stiva se citeste de jos in sus 14. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } 8

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s1.insert("aa"); s1.insert( new Integer(10)); s1.delete(); System.out.println("Varful stivei: " + s1.item()); } Care afirmatie este adevarata: a. Programul afiseaza: Varful stivei: aa b. Programul afiseaza: Varful stivei: 10 c. Programul afiseaza: stiva Tudor d. Programul afiseaza: 2 Nota: stiva se citeste de jos in sus 15. Fie urmatoarele clase Java: class Stack{ public Stack(int n, String s){ dim=n; name=s; top=-1; v= new Object[dim]; } public void insert(Object o) { v[++top]=o; } public void delete(){ top--; } public Object item(){ return v[top]; } public String getName(){return name;} private Object v[]; private int dim; private int top; 9

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

private String name; } public class StackDriver{ public static void main(String args[]){ Stack s1,s2; s1=new Stack(2, "stiva Tudor"); s2=new Stack(2, "stiva Andrei"); s1.insert("aa"); s2.insert( new Integer(10)); System.out.println("Varful stivei: " + s1.item()); } } Care afirmatie este adevarata: b. Programul afiseaza: Varful stivei: aa a. Programul afiseaza: stiva Tudor c. Programul afiseaza: 2 d. Programul afiseaza: Varful stivei: 10 16. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } // specializarea metodei Object.equals // doua cozi sunt egale daca au aceleasi elemente // chiar daca ele au dimensiuni maxime sau nume diferite public boolean equals(Object obiectOarecare) { if (obiectOarecare instanceof CoadaCirculara) { CoadaCirculara cc= (CoadaCirculara)obiectOarecare; boolean b=true; b=b && (cc.numarElemente==numarElemente); int i=prim; int nr=numarElemente; while(b && (nr !=0)){ b=b && cc.v[i].equals(v[i]); nr--; i=(i+1)%maxDim; } return b; 10

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} return false; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: c. Programul afiseaza: X=Y a. Programul afiseaza: X=Y X=Y b. Programul nu afiseaza nimic d. Programul afiseaza: 3 Nota:.. x.adauga("aa");y.adauga("aa");..rezulta ca X=Y (compilator) 17. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } 11

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); CoadaCirculara y=new CoadaCirculara(3,"Y"); x.adauga("aa"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); y.adauga("aa"); if(x.equals(y)) System.out.println("X=Y"); } } Care afirmatie este adevarata: d. Programul nu afiseaza nimic a. Programul afiseaza: 3 b. Programul afiseaza: X=Y X=Y c. Programul afiseaza: X=Y Nota: Asemanator cu ex. 16, dar la acest ex. lipsesc liniile 17 34 (subliniate) de la ex. 16 18. Fie urmatoarele clase Java: class CoadaCirculara{ public CoadaCirculara(int n, String s){maxDim=n; nume=s; v= new Object[maxDim];} public boolean esteGoala(){return numarElemente==0;} public boolean estePlina(){return numarElemente==maxDim;} public void adauga(Object ob){ numarElemente++; ultim= (ultim+1)%maxDim; v[ultim]=ob; } public void elimina(){ numarElemente--; prim=(prim+1)%maxDim; } public Object element(){ return v[prim]; } public String nume(){return nume;} private Object v[]; private int maxDim; // numarul maxim de elemente 12

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

private int prim=0;//pozitia primului element din lista private int ultim=-1; //pozitia elementului adaugat ultima data //lista are elementele in vectorul v, de la prim la ultim, //in sensul acelor de ceasrnic private int numarElemente=0; // numarul de elemente din coada private String nume;// numele cozii } public class TestCoadaCirculara{ public static void main(String[] args){ CoadaCirculara x=new CoadaCirculara(3,"X"); x.adauga("a"); x.adauga("b"); x.adauga("c"); x.adauga("d"); x.adauga("e"); x.adauga("f"); System.out.println(x.element()); } } Care afirmatie este adevarata: b. Programul afiseaza: d a. Programul afiseaza: b c. Programul afiseaza: c d. Programul afiseaza: a 19. Fie urmatoarele clase Java: public interface Actualizare{ public void actualizareNume(String nume); public void actualizareVarsta(int varsta); } interface Afisare{ public void afisare(); public void actualizareVarsta(int varsta); } public class Persoana{ public Persoana(String nume, int varsta){ this.nume=nume; this.varsta=varsta; } public Persoana(){} protected String nume="XXXX"; protected int varsta=0; } class PersoanaSpecializata extends Persoana implements Actualizare, Afisare{ public void actualizareNume(String nume){this.nume=nume;} public void actualizareVarsta(int varsta){this.varsta=varsta;} public void afisare(){ System.out.println("nume= "+nume); System.out.println("varsta= " + varsta); } } public class Client{ 13

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public static void main(String args[]){ PersoanaSpecializata p=new PersoanaSpecializata(); Actualizare act=p; Afisare afis=p; act.actualizareNume("Ionescu"); act.actualizareVarsta(58); afis.afisare(); } } Care afirmatie este adevarata: c. Programul afiseaza: nume= Ionescu varsta= 58 a. Programul este incorect deoarece o clasa nu poate implementa dou interfete b. Programul este incorect deoarece metoda public void afisare() nu face parte din clasa Persoana d. Programul este incorect deoarece metoda public void actualizareVarsta(int varsta) nu face parte din clasa PersoanaSpecializata 20. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void actiune(){x++;System.out.println(x);}; } public class View extends Frame{ private Button b; private Model m; private Controller c; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add(b); m=new Model(); c=new Controller(m); b.addActionListener(c); setSize(100,50); setVisible(true); } } class Controller implements ActionListener{ private Model md; public Controller(Model p){ md=p; } public void actionPerformed(ActionEvent e){ md.actiune(); } 14

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} Care afirmatie este adevarata, dac se face de dou ori click pe butonul stang mouse asupra butonului Actiune: a. Programul nu afiseaz nimic b. Programul afiseaz: 1 2 c. Valoarea atributului f.m.x rmne mereu la valoarea 0 d. Programul afieaz: 0 1 Nota: x=0 si x++..rezulta ca pt. primul click x=0 se afiseaza 1 si pt. al doilea click x=1..se afiseaza 2 21. Fie urmatorul program Java: import java.awt.*; import java.awt.event.*; class Model{ private int x=0; public Model(){}; public void increment(){x++;} public int get_x(){return x;} } public class View extends Frame{ private Button b; protected Model m; private Controller c; protected TextField tf; public static void main(String args[]){ Frame f= new View(); } public View(){ setTitle("Exemplu Model-View-Controller"); b= new Button("Actiune"); add("North",b); m=new Model(); c=new Controller(this); b.addActionListener(c); tf=new TextField(10); add("Center",tf); setSize(100,250); setVisible(true); } } class Controller implements ActionListener{ private View vw; public Controller(View v){ vw=v; } public void actionPerformed(ActionEvent e){ vw.m.increment(); vw.tf.setText(String.valueOf(vw.m.get_x())); } 15

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} Care afirmatie este adevarata, dac se face de dou ori click pe butonul stang Mouse asupra butonului Actiune: c. n cmpul de text f.tf este afisat valoarea 2 a. n cmpul de text f.tf este afiat valoarea 1 b. Programul nu afiseaz nimic d. Valoarea atributului f.m.x rmne mereu la valoarea 0 Nota: Asemanator cu ex. 20 22. Fie urmatorul program Java: import java.util.Observer; import java.util.Observable; import java.awt.*; import java.awt.event.*; public class Observator extends Frame implements WindowListener, Observer{ static protected ModelObservabil m=new ModelObservabil(); protected Button exitB, actB; protected TextField field; private ButtonController buttonC; public static void main(String args[]){ Frame fn=new Observator(0);// nu observa pe m Frame f01=new Observator(1);// observa pe m Frame f02=new Observator(1);// observa pe m } public Observator(int i){ if (i==1)m.addObserver(this); Panel p= new Panel(); buttonC=new ButtonController(this); exitB= new Button("Exit"); exitB.addActionListener(buttonC); actB= new Button("modifica"); actB.addActionListener(buttonC); field= new TextField("MyTextField"); field.setEditable(true); p.add(exitB); p.add(actB); add(field); add("North",p); addWindowListener(this); setSize(160,110); setVisible(true); } public void windowClosed(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosing(WindowEvent e){dispose(); //System.exit(0); } 16

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void update(Observable observ, Object ob){ field.setText(m.afis); } } class ButtonController implements ActionListener{ Observator view; public ButtonController(Observator win){ view=win; } public void actionPerformed (ActionEvent e){ Object source=e.getSource(); if (source == view.exitB) System.exit(0); else { view.m.modifica(); }; } } class ModelObservabil extends Observable{ protected int i=0; protected String afis=" "; public ModelObservabil(){ setChanged(); notifyObservers(); } public void modifica(){ i++; afis= " "+ i; setChanged(); notifyObservers(); } } Care afirmatie este adevarata, dac se face de click pe butonul stang mouse asupra butonului modifica din fereastra fn: d. Doar in cmpul de text field al ferestrelor fo1 si fo2 este afisat valoarea actualizata a atributului Observator.m.i Nota..Vezi liniile subliniate de la frame a. Doar in cmpul de text field al ferestrei fo2 este afiat valoarea actualizata a atributului Observator.m.i b. n cmpul de text field al tuturor ferestrelor este afiat valoarea actualizata a atributului Observator.m.i c. Doar in cmpul de text field al ferestrei fo1 este afiat valoarea actualizata a atributului Observator.m.i

23 Fie urmtoarea clas Java: public class D { int i; float f; boolean b; private static void main(){ D d = new D(1); D d = new D(); D d = new D(1,1); D d = new D(1,1,1); 17

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} } Care afirmaie este adevrat: nstructiunea D d = new D(1); este corect; instructiunea D d = new D(); este corect; instructiunea D d = new D(1,1); este corect; instructiunea D d = new D(1,1,1); este corect; PROBLEME 1. Un program scris n Java poate rula pe orice platforma deoarece: c. Masina virtuala translateaza interpreteaza programul si translateaza apelurile sistem a. Limbajul Java e derivat din C++ b. Compilatorul este identic cu cel de C++ d. Api-ul este portabil 2. Un program scris n Java se va compila cu comanda: a. javac Test c. javac Test.java b. java Test.java d. javac Test.class 3. Un program scris n Java se va lansa cu comanda: a. javac Test.java c. java Test.java b. java Test d. java Test.class 4. Ce este un Applet? d. Un program care ruleaza n contextul unui browser a. Un tip de calculator b. Un program care ruleaza direct pe orice calculator c. Un sit web interactiv 5. Un applet va rula n orice browser deoarece c. Browserul interpreteaza direct codul sursa a. Serverul are o masina virtuala incorporata b. Browserul are o masina virtuala incorporata d. Appleturile nu au nevoie de o masina virtuala 6. Care este scopul metodei statice main ? b. Actioneaza ca un punct de intrare n program a. Sa creeze o interfata cu utilizatorul c. Creaza ferestrele si butoanele aplicatiei d. Actioneaza ca o poarta spe sistemul de operare 7. O clasa Applet furnizeaza: b. Metode care definesc aspectul si comportamentul apletului a. Un browser care s ruleze apletul c. A pagina HTML speciala d. Permisiunile de a comunica cu serverul 8. Ce metoda apeleaza browserul pe un applet nou incarcat? a. Main c. Paint b. Start d. Init 18

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

9. Care este rolul declaratiilor import? a. Permite referirea claselor fara utilizarea de prefixe b. Elimina necesitatea declararii variabilelor c. Permite importul imaginilor folosite d. Elimina apelurile directe a functiilor fara clase 10. In cazul implementarii unei interfete trebuie s definim in mod obligatoriu : a. Doua metode ale interfetei c. Orice metoda a interfetei b. Numai anumite metode ale interfetei d. Toate metodele interfetei 11. Aplicatiile Java ruleaza pe urmatorul sistem de operare: a. Windows c. UNIX b. Linux d. Toate cele trei 12. Urmatorul cod sursa Java se afla ntr-un fisier. Cum se numeste fisierul? class Foo { public static void println() { System.out.println("Foo"); } } public class FooDemo { public static void main(String[] argv) { System.out.println("FooDemo"); Foo.println(); } } a. Foo.java c. FooDemo.Java b. Foo.class d. Foodemo.class 13. Daca bo este boolean, numar este int sir este string atunci care din urmatoarele linii este incorecta? a. If(bo) c. If(numar<=1) b. If(numar<0) d. If(sir==Java) 14. Care sunt valorile variabilelor a i b dupa executarea instructiunilor: int a = 1, b = -2; a = a + b; b = a b; a = a b; a. a=1, b=2 c. a=2, b=-3 b. a=0, b=1 d. a=-2, b=1 Nota: a=1+(-2)=1-2=-1 b=-1 15.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a += b; b = a- b; a -= b; a. a=-1, b=2 c. a=-2, b= 1 b. a=2, b=-1 d. a=-2, b=-1 16.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = 1, b = -2; a = a ^ b; 19

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

b = a ^ b; a = a ^ b; a. a=-2, b=1 b. a=2, b=-2

c. a=-1, b=1 d. a=1, b=-2

17.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a ^= b; b = a ^ b; a ^= b; a. a= -1, b=2 c. a=2, b=-1 b. a= 1, b=-2 d. a=-2, b=1 18. Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = -1, b = 2; a = (a > b ? a : b); b = (a < b ? a : b); a. a= 2, b=-1 c. a=1, b=2 b. a= -1, b= 2 d. a= 2, b= 2 19.Care sunt valorile variabilelor a si b dupa executarea instructiunilor: int a = 1, b = 2; if (a < b ) a = b; if (a < b) b = a; a. a= 1, b=1 c. a=2, b=2 b. a= 1, b= 2 d. a= 2, b= 1 20. Clasa BorderLayout contine campuri statice pentru: a. Adaugarea unor componente in anumite zone ale containerul b. Introducerea unor metode noi c. Specificarea culorii, si a fontului d. Afisarea ferestrei unui applet 21. Constructorul are foloseste la: a. Eliberarea memoriei b. Importa pachete 22. System.out.println este a. O variabila b. O clasa

c. Initializeaza masina virtuala d. Initializeaza noile obiecte create

c. Un obiect d. O metoda

23. Ce valori poate lua o variabila de tip boolean? a. 1 c. true b. 0 d. false 24. Ce valori nu poate lua o variabila de tip boolean? a. 1 c. true b. a==b (a si b sunt variabile de tip int) d. false 25. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip boolean) c. false b. true d. 0 20

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

26. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip int) c. false b. true d. false==x (x este o variabila de tip boolean) 27. Ce valori nu poate lua o variabila de tip boolean? a. a=b (a si b sunt variabile de tip boolean) c. true b. a==b (a si b sunt variabile de tip int) d. false==x (x este o variabila de tip boolean)

28. Care din urmatoarele tipuri de date poate retine valori de la -32.768 la 32.767 ? a. char c. byte b. short d. int 29. Ce valoare va avea variabila x dupa executarea operatiilor? int x = 0; x = (5*4) % 7; x = x / 5; a. 6 c. 1 b. 1.2 d. 0 Nota: 5*4=2020/7=2 rest 66/5=1 intreg si 30. Ce valoare va avea variabila numar la finalul buclei? int numar = 1; for (int x = 0; x < 4; x++) { numar = numar << 1; } a. 1 c.16 b. 4 d. 32 Nota: Pt. x=0 , x<4 si 0++=1 x=1, x<4 si 1++=2 x=2, x<4 si 2++=3 x=3, x<4 si 3++=4 Nota 4 in baza 2 este 0010 Numar=<<0010=0100 0100 in baza 2 este 16 31. Ce valoare va avea variabila numar la finalul buclei? int numar = -1; for (int x = 0; x < 4; x++) { numar = numar << 1; } a. 0 c. 16 b. -4 d. -16 32. Un vector se instantiaz astfel? a. int vector[100]; c. float [] numere={1.1, 1.2}; b. String [100]sir; d. byte [] buffer; 21

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

33. Un vector se instantiaz astfel? a. int vector[100]; c. float [] numere; b. String [100]sir; d. byte [] buffer = new byte[100]; 34. Ce efect are urmtoarea secventade cod? char a[] = {a, b, c}; char [] b = new char[3]; a=b; a. b se va copia n a c. a si b se refer la aceiasi zona de memorie b. a se va copia n b d. se va genera o exceptie 35. Ce efect are urmtoarea secvent de cod? char a[] = {a, b, c}; String b = new String(data); if(a==b) System.out.println(egale); else System.out.println(inegale); a. Se afiseaz egale c. Eroare la compilare b. Se afiseaz inegale d. Se va genera excepie la rulare 36. Ce efect va avea intructiunea urmatoare? System.out.println("The answer is: "+17+3); a. Programul nu se compileaza c. Se va afisa: The answer is 173 b. Se va afisa: The answer is 20 d. Se va genera o exceptie Nota: uniune de siruri de caractere 37. Care este efectul liniilor de cod urmatoare? if("String".toString() == "String") System.out.println("Equal"); else System.out.println("Not Equal"); a. Programul nu se compileaza c. Afiseaza Not Equal b. Afiseaza Equal d. Genereaza o exceptie 38. O clasa care implementeaza interfata urmatoare public interface AQuestion { public abstract void someMethod() throws Exception; } c. Ar trebui s defineasca o metoda public void someMethod() care va emite exceptii a. Va fi in mod necesar o clasa abstracta b. Ar trebui sa defineasca metoda public abstract void someMethod(); d. Ar trebui s defineasca o metoda public void someMethod() care nu va emite exceptii

39. O clasa care implementeaza interfata urmatoare va implementa n mod obligatoriu public interface AQuestion { 22

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void someMethod(); } a. o metoda public void someMethod(); b. o metoda friend void someMethod(); c. o metoda public void someMethod(); care obligatoriu va emite exceptii d. o metoda public abstract void someMethod(); 40. Care din liniile din codul de mai jos prezinta o problema de incapsulare ? 1. class BadCode { 2. int num; 3. public int getNum() { 4. return num; 5. } 6. public void setNum(int num) { 7. this.num = num; 8. } 9. ... 10. } a. Linia 1 c. Linia 4 b. Linia 2 d. Linia 7 41. Care din liniile urmatoare va genera o exceptie ? 1. class BadCode { 2. private Foo foo; 3. public BadCode (Foo f) { 4. foo = f; 5. } 6. public BadCode() {} 7. protected void useFoo() { 8. int num = foo.num; 9. String name = foo.name; 10. .... 11. } 12. .... 13. } a. Linia 2 c. Linia 6 b. Linia 4 d. Linia 8 42. Dorim sa implementam o clasa total protejata si care sa nu mai fie extensibila, care din liniile urmatoare ar trebui modificata? 1. class Test { 2. private int key = 1234; 3. //... 4. protected void setKey(int privateKey) { 5. this.key = privateKey; 6. } 7. protected int getKey() { 8. return this.key; 9. } 10. //... 11. } a. Linia 1 c. Linia 4 23

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

b. Linia 2

d. Linia 8

43. Functia Clone() are ca scop: class Test { private int key = 1234; //... public Test () {} public Test (int k) { this.key = k; } protected int getKey(){return this.key; } public final Object clone() throws java.lang.CloneNotSupportedException { throw new java.lang.CloneNotSupportedException(); } //... } a. definirea unei clase clonabile c. definirea unei clase care nu poate fi extinsa b. definirea unei clase extensibile d. clasa si orice derivare a acesteia va fi neclonabila 44. Pentru a bloca serializarea unei clase trebuie sa: a. Definim clasa ca fiind finala b. Definim clasa ca fiind statica c. Definim o metoda readObject d. Definim o metoda writeObject

45. Codul sursa urmator ne spune ca: public boolean match(Object o) { return this.getName() == ((SomeClass)o).getName(); } a. obiectele sunt identice c. obiectele fac parte din aceiasi clasa b. obiectele sunt egale d. nici una 46. Pentru a defini un camp care sa stocheze informatii sensibile (conturi, nr. de card) se va folosi: a. String c. Char array b. StringBuffer d. Char 47. Ce efect va produce urmatorul program Java? public class Test { public void method(Object o) { System.out.println("Object Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } } 24

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. Programul nu se compileaza c. Afiseaza Object Version b. Se compileaza dar produce o exceptie la rulare d. Afiseaza String Version 48. Ce efect va produce urmatorul program Java? public class Test { public void method(StringBuffer sb) { System.out.println("StringBuffer Version"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { Test t = new Test(); t.method(null); } } a. Programul nu se compileaza b. Se compileaza dar produce o exceptie la rulare Nota: metoda (StringBuffer sb) ambigua

c. Afiseaza StringBuffer Version d. Afiseaza String Version

49. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(Throwable t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } } c. Afiseaza Before Try si At the End a. Nu se complieaza: nici un obiect Throwable nu a fost emis in blocul try b. Nu se compileaza: nu pot fi prinse obiecte Throwable, ci numai obiecte Exception d. Afiseaza Before Try , Inside Catch si At the End 50. Ce efect are urmatorul program Java? public class Test{ public static void main(String args[]){ System.out.println("Before Try"); try{ } catch(IOException t){ System.out.println("Inside Catch"); } System.out.println("At the End"); } 25

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} b. Nu se compileaza: nu pot fi prinse obiecte IOException, ci numai Exception a. Nu se complieaza: nici un obiect IOException nu a fost emis in blocul try c. Afiseaza Before try si At the End d. Afiseaza Before try , Inside Catch si At the End 51. Care din urmatoarele afirmatii este adevarata? d. O metoda statica nu poate returna o variabila nestatica a clasei a. O metoda statica nu poate returna un obicet Exception b. O metoda statica nu poate emite un obiect Exception c. O metoda statica nu poate returna o variabila statica a clase 52. Cum se va comporta urmatorul program? public class A { private void method1() throws Exception { throw new RuntimeException(); } public void method2() { try { method1(); } catch(RuntimeException e) { System.out.println("Caught Runtime Exception"); } catch(Exception e) { System.out.println("Caught Exception"); } } public static void main(String args[]) { A a = new A(); a.method2(); } } a. Programul nu se compileaza c. Afiseaza Caught Runtime Exception b. Afiseaza Caught Exception d. Afiseaza ambele mesaje 53. Cum se va comporta urmatorul program? class Base { public void aMethod() throws ClassNotFoundException { } } public class Derived extends Base { 26

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void aMethod() throws RuntimeException { } } d. Se compileaza corect a. Programul nu se compileaza deoarece RuntimeException nu este derivata din RuntimeException b. Se lanseaza o exceptie ClassNotFoundException la compilare c. Se lanseaza o exceptie RuntimeException la rular 54. Cititi cu atentie urmatorul co sursa: import java.awt.*; public class TestFrame extends Frame { Button bNorth = new Button("North"); Button bSouth = new Button("South"); Button bEast = new Button("East"); Button bWest = new Button("West"); Button bCenter = new Button("Center"); public TestFrame() { setLayout(new BorderLayout()); add(bSouth,BorderLayout.SOUTH); add(bWest,BorderLayout.WEST); add(bEast,BorderLayout.EAST); add(bNorth,BorderLayout.NORTH); add(bCenter); setLayout(new FlowLayout()); validate(); pack(); setVisible(true); } public static void main(String args[]) { TestFrame tf = new TestFrame(); } } b. Se compileaza si afiseaza butoanele pe o singura linie a. Programul nu se compileaza c. Se compileaza dar genereaza o exceptie d. Se compileaza si afiseaza butoanele sub forma de grid

55. O clasa care are totii constructorii privati : a. Trebuie declarata clasa finala c. Poate fi mostenita b. Poate fi instantiata d. Nu poate fi mostenita 56. Urmariti cu atentie codul urmator: public class NiceThreads implements Runnable { public void run() { while(true) { } 27

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} public static void main(String args[]) { NiceThreads nt1 = new NiceThreads(); NiceThreads nt2 = new NiceThreads(); NiceThreads nt3 = new NiceThreads(); nt1.run(); nt2.run(); nt3.run(); } } a. Se compileaza si lanseaza patre fire care vor rula la infinit b. Se compileaza si se lanseaza un singur fir c. Programul nu se compileaza d. Se compileaza dar genereaza o exceptie la rulare 57. Pentru a preveni executarea unei metode simultan de ctre mai multe fire de executie folosim: a. public c. native b. final d. Syncronized 58. Pentru a excuta o procedura n mod atomic delarm metoda ca fiind: a. syncronized c. final b. public d. Native 59. Managerul de asezare implicit pentru o fereastr este: a. LayoutManager c. BorderLayout b. null d. FlowLayout 60. Managerul de asezare implicit pentru un panel este: a. BorderLayout c. null b. GridLayout d. FlowLayout 61. Constructorul clasei de baz se apeleaz prin intermediul cuvntului cheie: a. this c. super b. base d. interface 62. n Java o clasa poate extinde a. cel mult o interfat c. oricte clase b. cel mult o clas d. oricte interfete 63. n Java o interfat poate extinde a. cel mult o interfat c. oricte clase b. cel mult o clas d. oricte interfete 64. n Java o clasa poate implementa cel mult a. o clas c. oricte clase b. o interfat d. oricte interfete 65. Pentru a bloca utilizarea directa a unei clase aceasta se va declara folosind specificatorul: a. abstract c. protected b. final d. Private 66. Pentru a bloca derivarea unei clase aceasta se va declara folosind specificatorul: 28

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. abstract b. final

c. protected d. Private

67. Clasa Menu este derivata din: a. MenuComponent c. PopupMenu b. MenuItem d. MenuBar 68. Lansarea unei exceptii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try 69. Prinderea unei exceptii se face cu ajutorul cuvntului cheie: a. throws c. catch b. throw d. try 70. Ce cuvnt nu face parte din limbaj: a. volatile c. dispose b. transient d. native 71. Ce cuvnt nu face parte din limbaj: a. const c. final b. bool d. finally 72. Ce cuvnt nu face parte din limbaj: a. const c. break b. continue d. delete 73. Ce cuvnt nu face parte din limbaj: a. short c. awt b. long d. do 74. Ce cuvnt nu face parte din limbaj: a. class c. interface b. struct d. enum 75. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. int c. goto b. true d. enum 76. Ce cuvnt nu face parte din cuvintele cheie ale limbajului: a. class c. null b. const d. boolean 77. Ce cuvnt cheie al limbajului nu este folosit: a. strictfp c. instanceof b. const d. transient 78. Ce afiseaz urmtorul program: public class Main { int x=0; int f() { return x+1; } public static void main(String[] args) { 29

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

System.out.println("x este " + f()); } } a. x este 0 c. Eroare la compilare b. x este 1 d. Exceptie la rulare 79. Ce afiseaz urmtorul program: public class Main { int x=0; static int f() { return x+1; } public static void main(String[] args) { System.out.println("x este " + f()); } } a. Eroare la compilare c. x este 0 b. Exceptie la rulare d. x este 1 80. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return x--; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+ f() ); } } a. Eroare la compilare c. x este 0 acum este 0 b. Exceptie la rulare d. x este 0 acum este -1 81. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return ++x; } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 1 c. x este 0 acum este 1 b. x este 1 acum este 2 d. x este 0 acum este -1 82. Ce afiseaz urmtorul program: public class Main { static int x=0; static int f() { return (++x)*(x--); } public static void main(String[] args) { System.out.println("x este " + f() + " acum este "+f()); } } a. x este 0 acum este 0 c. x este 1 acum este 2 b. x este 1 acum este 1 d. x este 2 acum este 4 83. Ce afiseaz urmtorul program: class Element{ 30

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public Element(){ System.out.print(" Element "); } } class Carte extends Element{ public Carte(){ System.out.print(" Carte "); } } class Revista extends Carte{ public Revista(){ System.out.print(" Revista "); } } public class Main { public static void main(String[] args) { Element revista = new Revista(); } } a. Element c. Element Carte Revista b. Revista d. Revista Carte Element 84. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element>{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.Print(); } } a. Nu afiseaza nimic c. Se compileaza dar lanseaza exceptie la rulare b. Nu se compileaza, eroare la compilare d. Carte Revista 85. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ 31

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } } } public class Main { public static void main(String[] args) { Biblioteca b = new Biblioteca(); b.add(new Carte()); b.add(new Revista()); b.add(b); b.Print(); } } a. Nu afiseaza nimic b. Nu se compileaza, eroare la compilare

c. Se compileaza dar lanseaza exceptie la rulare d. Carte Revista Carte Revista

86. Ce afiseaz urmtorul program: interface Element{ public void Print(); } class Carte implements Element{ public void Print(){ System.out.print(" Carte "); } } class Revista implements Element{ public void Print(){ System.out.print(" Revista "); } } class Biblioteca extends ArrayList<Element> implements Element{ public void Print (){ Iterator<Element> it = iterator() ; while(it.hasNext()){ it.next().Print(); } System.out.println(); } } public class Main { public static void main(String[] args) { Biblioteca b1 = new Biblioteca(); Biblioteca b2 = new Biblioteca(); b2.add(b1); b1.add(b2); b1.Print(); } } a. Nu afiseaza nimic c. Carte Revista Carte Revista b. Se compileaza dar lanseaza exceptie la rulare d. Nu se compileaza, eroare la compilare 87. Cititi cu atentie urmatorul cod sursa: class Memory{ } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } } a. Programul se compileaza dar se blocheaza 32

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

b. Se compileaza, consuma toata memoria si se opreste c. Se compileaza si ruleaza la infinit deoarece nu se aloca nimic d. Se compileaza si ruleaza la infinit deoarece nu se poate consuma toata memoria 88. Cititi cu atentie urmatorul cod sursa: class Memory{ int [ ] matrice; public Memory(){ matrice = new int[100]; } } public class Main { public static void main(String[] args) { while(true){ Memory m = new Memory(); } } } a. Ruleaza la infinit deoarece memoria se elibereaz automat b. Programul se compileaza dar se blocheaza c. Consuma toata memoria si se opreste d. Ruleaza dar emite o exceptie 89. Cititi cu atentie urmatorul cod sursa: class Memory implements Serializable{ int [] matrice; public Memory(){ matrice = new int[100]; } } a. Clasa Memory extinde clasa Serializable b. Clasa Memory mosteneste clasa Object c. Clasa Memory implementeaz interfata Object d. Clasa Memory implementeaz clasa Serializable 90. n corpul unui constructor se poate apela un alt constructor? a. Doar constructorul clasei de baz prin intermediul cuvntului super b. Doar un constructor al clasei derivate prin intermediul cuvntului super c. Un constructor cu alti parametri d. Un constructor cu aceiasi parametri 91. Obiectul curent se poate transmite ca parametru prin intermediul cuvntului: a. super c. class b. this d. object 92. n prezenta firelor de executie multiple incrementarea atomic a unei variabile partajate se obtine prin intermediul specificatorului: a. X++ c. synchronized b. final d. static 93. n prezenta firelor de executie multiple decrementarea atomic a unei variabile partajate se obtine prin intermediul specificatorului: a. const c. x-b. synchronized d. thread 94. Un fir de executie se obtine prin extinderea clasei: a. Runnable c. Object b. Thread d. Frame 33

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

95. Un fir de executie se obtine prin implementarea interfetei: a. Runnable c. Object b. Thread d. Serializable 96. Un fir de executie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init 97. Un fir de executie se porneste prin apelarea directa a metodei: a. run c. start b. new d. init 98. Urmatorul specificator are efect doar n prezenta firelor de executie: a. run c. start b. synchronized d. static 99. O clas care implementeaz interfata Runnable n mod obligatoriu trebuie: a. s fie public c. s fie declarat synchronized b. s implementeze metoda run d. s fie declarat ca fiind abstract 100. O interfat care extinde interfata Runnable n mod obligatoriu trebuie: a. s fie public c. s implementeze metoda run b. s fie declarat synchronized d. nici una 101. Codul urmtor nu se compileaz, lipseste specificatorul: class NewThread implements Runnable{ } a. public c. abstract b. private d. run

1. Fie programul: ..ok #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc& operator--(){raza--;return *this;}// return by reference private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza: 34

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

c. a. b. d.

3200 3300 3201 3211

Atentie..Se face deosebire dupa Cerc & operator pe linia 2 1.1. Fie programul:ok #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc operator++(){raza++;return *this;}// return by value Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Programul afiseaza : a. 3201 b. 3200 c. 3301 d. 3211 Atentie..Se face deosebire dupa Cerc operator (fara &) pe linia 2 1.2. Varianta in plus #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} Cerc &operator++(){raza++;return *this;}// return by value Cerc operator--(){raza--;return *this;}// return by value private: float raza; }; void main(){ Cerc c(1.0); cout<<(++(++c)).getRaza()<< ; cout<<c.getRaza()<< ; cout<<(--(--c)).getRaza()<< ; cout<<c.getRaza()<< ; } Raspuns 3312 35

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Atentie: Se face deosebire dupa Cerc &operador pe linia 1

2. Fie programul:ok // singleton // constructor private #include <iostream.h> #include <conio.h> class S{ public: static S* create() { if(i==0){ refS=new S(); i++; } return refS; } void setName(char *s){name=s;} char* getName(){return name;} static int getNr(){return nr;} private: static S* refS; static int i; static int nr; S(){nr++;} char *name; }; int S::i=0; int S::nr=0; S* S::refS=0; void main(){ S *o1, *o2; o1=S::create(); o2=S::create(); o1->setName("Matematica"); o2->setName("Informatica"); cout<<o1->getName()<<endl; cout<<o2->getName()<<endl; cout<<S::getNr()<<endl; getch(); } Programul afiseaza: b. Informatica Informatica 1 3. Fie programul:ok // destructor static, #include <iostream.h> class B{ public: ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: 36

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

~D(){cout<<"~D()"<<endl;} }; void main(){ clrscr(); B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza : a. ~ B() ~B() ~D() c. ~ B()~D()~B() ~D() b. ~ B() ~D() d. ~ B() ~D() ~B() Atentie..Liniile subliniate sunt diferite 3.1. Fie urmtorul program C++:ok // destructor static #include <iostream.h> #include <conio.h> class B{ public: B(){cout<<"B()"<<endl;} ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} ~D(){cout<<"~D()"<<endl;} }; void main(){ B *b=new B(); // apel B() delete b; b=new D(); // apel B();D() delete b; } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaz: B() ~B() B() D() ~B() a. Programul afiseaz: B() ~B() B() D() ~D() c. Programul afiseaz: B() ~B() B() ~B() d. Programul afiseaz: B() ~B() D() ~B() Atentie..Liniile subliniate sunt diferite

3.2. Fie programul :ok // destructor virtual, #include <iostream.h> class B{ 37

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public: virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *pb; D *pd; pd= new D(); pb=new D(); delete pb; delete pd; } Programul afiseaza: a. ~ B()~D()~B() ~D() c. ~ B() ~D() b. ~ B() ~B() ~D() d. ~ D()~B()~D() ~B() Atentie....este destructor virtual, ex. diferit fata de destructor static..

3.3. Fie urmtorul program C++:ok // destructor virtual #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} virtual ~B(){cout<<"~B()"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} virtual ~D(){cout<<"~D()"<<endl;} }; void main(){ B *b=new B(); // apel B() delete b; b=new D(); // apel B();D(); // destructorii, in ordine inversa delete b; } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: c. Programul afiseaz: B() ~B() B() D() ~D() ~B() B() ~B() B() D() ~B() ~D() b. Programul afiseaz: d. Programul afiseaz: B() ~B() B() D() ~B() ~B() B() ~B() B() D() ~B() Atentie..este destructor virtualseamana cu ex. precedent care nu are liniile subliniate la acest ex.

4. Fie programul:ok #include <iostream.h> class B{ 38

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< "virtual method v() of D"<<endl;} }; int main(){ B *pb; D d; // pointing to a subclass pb=&d; ((D*)pb)->v(); virtual method v() of D ((D*)pb)->st(); static method st() of D return 0; } Programul afiseaza: c. virtual method v() of D a. virtual method v() of D static method st() of B static method st() of D b. virtual method v() of B d. virtual method v() of B static method st() of D static method st() of B Atentiediferentele sunt liniile subliniate

4.1. Fie programul:ok #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B b, *pb; D d, *pd; pb=&d; pb->st(); //static metod s() of B pb->v(); //virtual metod v() of D return 0; } Programul afiseaza: a. static method s() of D virtual method v() of D b. static method s() of B c. static method s() of D virtual method v() of B d. static method s() of B 39

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

virtual method v() of B Atentiediferentele sunt liniile subliniate

virtual method v() of D

4.2 Fie programul: #include <iostream.h> class B{ public: void st(){cout<< "static method st() of B"<<endl;} virtual void v(){cout<< "virtual method v() of B"<<endl;} }; class D: public B{ public: void st(){cout<< "static method st() of D"<<endl;} virtual void v(){cout<< " virtual method v() of D"<<endl;} }; int main(){ B b, *pb; D d, *pd; pb=&b; pb->st(); // static method st() of B pb->v(); // virtual method v() of B pb=&d; pb->st(); // static method st() of B pb->v(); // virtual method v() of D return 0; } Raspuns static method st() of B virtual method v() of B static method st() of B virtual method v() of D

5. Fie programul :ok // constructor de copiere in clasa de baza; dar absent in clasa derivata // compilatorul creeaza un constructor de copiere implicit // care apeleaza constr de copiere al clasei de baza pentru copierea atributelor din clasa de baza // si copiaza membru cu membru atributele din D #include <iostream.h> class B{...//B este clasa de baza) public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} }; void main(){ B b; // apel B() ..//B() 40

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

B b1(b); // apel B(B & ); nu se mai utilizeaza B()!..//B(B &b ) D d; // apel B();D()..//B() D() D d1(d); B bd(d); // conversie implicita la clasa de baza; ..// B(B &b ) getch(); } Programul afiseaza : c. B() B(B&b) a. B() B() B(B&b) b. B() B() B(B&b) d. B() B(B&b)

B() D() B(B &b) B(B &b) B() D() B(B &b) B(B &b) B() D() B(B &b) D() B(B &b) D() B(B &b) D() B(B &b)

!!! Atentie . Seamana cu 12 , diferentele sunt liniile subliniate

5.1. Fie programul :ok // constructor de copiere atat in clasa de baza cat si in clasa derivata // constructorul de copiere din clasa derivata utilizeaza pe B() pentru constructia // // subbiectului B #include <iostream.h> class B{ public: B(){cout<<"B()"<<endl;} B(B &b){cout<<"B(B &b)"<<endl;} }; class D: public B{ public: D(){cout<<"D()"<<endl;} D(D &d){cout<<"D(D &d)"<<endl;} }; void main(){ B b; // apel B()//B() B b1(b); // apel B(B & ); nu se mai utilizeaza B()!...//B(B &b ) D d; // apel B();D()//B() D() D d1(d); // nu se apeleaza B(B &b)B() D(D&d) } Programul afiseaza : b. B() B(B&b) B() D() B() D(D &d) a. B() B(B&b) B() D() B(B &b) D(D &d)- nu c. B() B() B(B&b) B() D() B(B &b) D() B(B &b) d. B() B(B&b) D() B(B &b) D() B(B &b) - nu !!! Atentie .Seamana cu 11, diferentele sunt liniile subliniate

6. Fie programul :ok #include <iostream.h> class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} void operator++(){raza++;} 41

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

private: float raza; }; class Cilindru: public Cerc{ public: Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){}; void operator++(){inaltime++;} float getInaltime(){return inaltime;} private: float inaltime; }; void main(){ Cerc *pc; Cilindru c(1,5); pc=&c; ++ *pc; cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl; getch(); } Programul afiseaza : a. 1 6 b. 2 5

c. 2 6 d. 1 5

Inaltimea se incrementeaza 1++=2 Raza nu se incrementeazaramane 5 Pt. cilindru..rezulta (2 5)

7. Fie programulok //static atribut #include <conio.h> #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){nr--; delete[] name;} private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); } void main(){ for (int i=0; i<5; i++)f(); getch(); } 42

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Programul afiseaza: a. 1 2 3 4 5 c. 0 0 0 0 0 b. 1 1 1 1 1 d. 0 1 2 3 4 i=00++=1 i=11++=2 i=22++=3 i=33++=4 i=44++=5 Atentie..liniile subliniate sunt diferite strcpy(destinatie,sursa)-functia are rolul de a copia sirul de la adresa sursa la adreasa destinatie 7.1. Fie programul #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ nr=0; name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } ~Person(){ delete[] name; } private: char *name; long nr; }; void f(){ Person *p = new Person("Balanescu"); delete p; } void main(){ for (int i=0; i<5; i++)f(); } Programul afiseaza: 11111 Atentie..liniile subliniate sunt diferite Nu are #conio.h 8. Fie urmtorul program C++:..ok #include <iostream.h> class Punct{ public: Punct(int=0, int=0); //constructor protected: int x,y; friend ostream& operator<<(ostream&, const Punct&); }; class Cerc: public Punct{ public: 43

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Cerc(double r=0.0, int x=0, int y=0);// constructor protected: float raza; friend ostream& operator<<(ostream&, const Cerc&); }; //implementare Punct Punct::Punct(int a, int b):x(a),y(b){} // constructor ostream& operator<<(ostream& output, const Punct& p){ output<<"Punct"<<'['<<p.x<<", "<<p.y<< ']'; return output; } //implementare Cerc Cerc::Cerc(double r, int a, int b):Punct(a,b), raza(r){} ostream& operator<<(ostream& output, const Cerc& c){ output <<"Centru= "<< (Punct)(c) <<"; Raza= "<<c.raza; return output; }; void main(){ Punct *punctPtr=0, p(30,50); Cerc *cercPtr=0, c(2.7,120,89); cout<<p<<endl; cout<<c<<endl; // Cerc tratat ca Punct (prin pointer la clasa de baza): punctPtr=&c; cout<< *punctPtr << endl; /* Cerc tratat ca Cerc (prin pointer la clasa de baza, dar cu conversie explicita de la Punct la clasa derivata Cerc */ cercPtr= (Cerc *)(punctPtr); cout<< *cercPtr<<endl; /*Punct tratat ca Cerc: programatorul isi asuma responsabilitatea unor erori: anumite atribute sunt nedefinite */ punctPtr= &p; // punctPtr refera un Punct //Urmeaza conversie asumata de programator, //de la clasa de baza la clasa derivata cercPtr=(Cerc *)(punctPtr); // cercPtr refera p ca pe un cerc //dar acest asa-zis cerc are raza nedefinita cout<< *cercPtr <<endl; } Prin xx este desemnat o valoare nedefinit. Care din afirmatiile urmtoare sunt adevrate: d. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx a. Programul afiseaz: Punct[30,50] 44

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

Centru=Punct[30,50]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx b. Programul afiseaz: Punct[30,50] Centru=Punct[120,89]; Raza=2.7 Punct[120,89] Centru=Punct[120,89]; Centru=Punct[30,50]; Raza=xx c. Programul afiseaz: Punct[30,50] Centru=Punct[30,50]; Punct[120,89] Centru=Punct[120,89]; Raza=2.7 Centru=Punct[30,50]; Raza=xx 9. Fie urmtorul program C++:ok #include <iostream.h> class B{ public: B(int i):i(i){} protected: int i; }; class D1: public B{ public: D1(int i):B(i){} void inc(){i++;} }; class D2: public B{ public: D2(int i):B(i){} void afisare(){cout<<i=<<i<<endl;} }; class D: public D1, public D2{ public: D(int i):D1(i),D2(i){} }; void main(){ D d(0); d.inc(); d.afisare(); } Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz i=-1 c. Programul afiseaz i=0 b. Programul afiseaz i=2 d. Programul afiseaz i=1

10. Fie urmtorul program C++:ok #include <iostream.h> class B{ 45

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

public: B(int i=-1):valB(i){} B& operator=(const B &b){ valB=b.valB; cout<<"B::op= "; return *this; } private: int valB; }; class D:public B{ public: D(int i, int j):B(i),valD(j){} D& operator=(const D &d){ valD=d.valD; cout<<"D::op= "; return *this; } private: int valD; }; void main(){ B b(0), b1(1); B *pB; D d(0,0), d1(1,1); b=b1; d=d1; b=d; pB=&d; *pB=d; pB->operator=(d); } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaz: B::op= D::op= B::op= B::op= B::op= a. Programul afiseaz : B::op= D::op= D::op= B::op= D::op= c. Programul afiseaz: B::op= D::op= B::op= D::op= D::op= d. Programul afiseaz: B::op= D::op= D::op= D::op= B::op= 11. class A{ok int x; public: A(int x):x(x){}; }; class B{ protected: int x; public: 46

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 public: void m(){ x=1; // 2 b.x=1; //3 } }; void main(){ B b(1); // 4 } Care din urmtoarele instructiuni sunt eronate: c. b.x=1; // 3 a. B b; // 1 b. x=1 // 2 d. B b(1); // 4 (din functia main) error C2248: 'x' : cannot access protected member declared in class 'B' : see declaration of 'x' Error executing cl.exe. 12. Fie programul #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} // 4. supraincarcare metoda virtuala, neacceptata: // B::v() conflicts with base class A // virtual int v(){cout<<"int B::v()"<<endl; return 1;} }; void main(){ A a, *pa; B b; pa=&a; pa->s(); pa->s(1); pa->v(); pa->v(1); pa=&b; pa->s(); pa->s(1); pa->v(); pa->v(1); } Care din rezultatele urmatoare sunt afisate prin executarea programului? 47

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void A::v() virtual void B::v(int) b. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) c. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) void A::s() void A::s(int) virtual void B::v() virtual void B::v(int) d. void A::s() void A::s(int) virtual void A::v() virtual void A::v(int) int B::s() void B::s(int) virtual void B::v() virtual void B::v(int)

12.1. Fie urmatorul program:ok #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } 48

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

// 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; void main(){ A *pa; B b; pa=&b; pa->s(); pa->v(1); //(daca ..s(1) si V(0)..acelasi raspuns) } Prin executarea sa, programul afiseaza: c. void A::s() void B::v(int) virtual void B::v(int) a. void B::v() void A::v(int) b. void A::v() void B::v(int) d. void A::v() void A::v(int) !!! Atentie, diferentele sunt liniile subliniate Varianteposibile de ex. 1. pa=&b; pa->s(1); pa->v(1); void A::s(int) virtual void B::v(int) 2. pa=&b; pa->s(); pa->v(); void A::s virtual void A::v

12.2. Fie urmatorul program:,,,ok #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} }; 49

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void main(){ A *pa; B b; pa=&b; pa->v(); pa->s(1); } Prin executarea sa, programul afiseaza: d. void B::v()??? void A::s(int) a. void B::v() void A::v(int) b. void A::v() void B::v(int) c. void A::v() void A::v(int) Raspuns..nici o varianta corect este.. void A::v virtual void A::s(int) !!!!Atentie..diferentele sunt liniile subliniate Variante posibile 1.pa=&b; pa->v(); pa->s(); virtual void A::v() void A::s() 2. pa=&b; pa->v(1); pa->s(); virtual void B::v(int) void A::s()

13. Fie urmtorul program C++:..ok #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; a.m(); p=&b; p->v(); } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaza mesajul: 50

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

A:m() B:(v) a. Expresia p->v()este incorect deoarece metoda v este inaccesibil c. Programul afiseaz mesajul: A:v() d. Expresia a.m() este incorect deoarece metoda m este inaccesibil 14. Fie urmtorul program C++, n care operatorul de insertie << este suprancrcat. Operatorul de atribuire = este cel predefinit, cu semantica prin referinta..ok #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; } Care din afirmatiile urmtoare sunt adevrate: b. Programul afiseaz: a. Programul afiseaz: 10 20 10 20 1000 20 10 20 c. Programul afiseaz: d. Programul afiseaz: 1000 20 1000 20 10 20 1000 20 Nota. Lipsesc liniile subliniate de la 15.1. Este suprainacarcuare cu semntica prin referinta. 14.1. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate chiar si n cazul de autoatribure d=d.ok #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); 51

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } // supraincarcare cu semantica prin valoare C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // fara verificarea cazului de autoatribuire d=d delete[] pi; dim=x.dim; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate: a. Programul afiseaz: 10 20 10 20 xx yy b. a) Programul afiseaz: 10 20 1000 20 xx yy c. Programul afiseaz: 1000 20 10 20 xx yy d. Programul afiseaz: 10 20 10 20 52

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

10 20 Nota. Liniile subliniate sunt in plus fata de ex. 14. Este supraincarcare cu semnatica prin valoare.

14.2. Fie urmtorul program C++, n care operatorul de insertie << si operatorul de atribuire = sunt suprancrcati. Prin suprancrcare, operatorul de atribuire are semantica prin valoare (el nlocuieste pe cel predefinit, care are semantica prin referint). Rersursele obiectului destinatie d din expresia d=s sunt eliberate numai dac d?s.ok #include <iostream.h> class C{ public: C(int n, int v[]); void set(int i, int val){pi[i]=val;} C& operator=(C&); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= new int[dim]; for(int j=0; j<dim; j++){pi[j]=v[j];} } C& C::operator=(C& x){ // incepe prin dezalocare resursa *pi // numai daca destinatia difera de sursa if(this!=&x){ dim=x.dim; delete[] pi; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} } return *this; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); cout<<(x=y)<<endl; y.set(0,1000); cout<<x<<endl; cout<<(x=x)<<endl; } n afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o zona de memorie *pi neinitializat Care din afirmatiile urmtoare sunt adevrate: d. Programul afiseaz: 53

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

10 20 10 20 10 20 a. Programul afiseaz: 10 20 10 20 xx yy b. Programul afiseaz: 10 20 1000 20 xx yy c. Programul afiseaz: 1000 20 10 20 xx yy Nota: Diferente fata de ex. 14.1..linia subliniata..

ERORI 15. Fie urmtorul program C++:ok #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int i)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } }; class B:public A{ public: // 1. int s(){ cout<<"int A::s()"<<endl; return 1; } // 2. void s(int i){ i++;cout<<"void A::s(int i)"<<endl; } // 3. virtual void v(int i){ i++;cout<<"virtual void A::v()"<<endl; } // 4. virtual int v(){ cout<<"int A::v()"<<endl; return 1; 54

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} }; Care din afirmatiile urmtoare sunt adevrate: d. //4. este incorect a. //1. este incorect b. //2. este incorect c. //3. este incorect 15.1. Se considera urmatoarele clase: class B{ public: int i; protected: int j; private: int k; public: B(){i=j=k=0;} void set_j(int pj){j=pj;} int get_j(){return j;} void set_k(int pk){k=pk;} int get_k(){return k;} }; class D: public B{ public: D(){ i=1; j=1; k=1; // 1 set_k(1); // 2 } }; class C{ public: C(){ b.i=2; b.j=2; // 3 b.set_j(2); // 4 b.k=2; // 5 b.set_k(2); // 6 } private: B b; }; Care din afirmatiile urmatoare sunt adevarate? a. instructiunile // 1, // 3 si // 5 sunt toate incorecte b. doar instructiunile // 2, si // 4 sunt incorecte c. doar instructiunile // 3 si // 4 sunt incorecte 15.2. Fie urmtorul program C++:ok class A{ int x; public: A(int x):x(x){}; 55

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

}; class B{ protected: int x; public: B(int x):x(x){}; }; class D:public B{ A a; B b; // 1 B b(1); // 2 public: void m(){ x=1; // 3 //b.x=1; //x nu este accesibil obiectelor } }; void main(){ B b(1); // 4 } Care din urmtoarele instructiuni sunt eronate: b. B b(1); // 2 (din clasa D) a. B b; // 1 c. x=1; // 3 d. B b(1); // 4 (din functia main) error C2059: syntax error : 'constant' error C2040: 'b' : 'class B (void)' differs in levels of indirection from 'class B' Error executing cl.exe.

15.3. Fie urmatorul program #include <iostream.h> class A{ public: // supraincaracre void s() void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } // supraincarcare void v() virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; class B:public A{ public: // 1. supraincarcare metoda statica int s(){cout<<"int B::s()"<<endl; return 1;} // 2. specializare metoda statica void s(int i){i++;cout<<"void B::s(int)"<<endl; } // 3. specializare metoda virtuala virtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;} 56

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

}; //4.supraincarcare metoda virtuala, virtual void v(){count<<"int B::()"<<endl:return1} }; Care definitie este incorecta? 1, 2, 3 sau 4?? Raspuns 4

16. Fie urmtorul program C++:ok #include <iostream.h> class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Persoana q="Balanescu"; void fvalue(Persoana p){p.afisare();} void faddress(Persoana *p){p->afisare();} void freference(Persoana &p){p.afisare();} void main(){ fvalue(q); faddress(&q); freference(q); fvalue("Tudor"); freference("Tudor");// Warning: temporary used for p } Care din afirmatiile urmtoare sunt adevrate: d. Programul afiseaz: Balanescu Balanescu Balanescu Tudor Tudor a. Expresia faddress(&q); este eronat; b. Instructiunea de declarare Persoana q="Balanescu"; este eronat; c. Expresia p->afisare() este eronat; error C2664: 'freference' : cannot convert parameter 1 from 'char [6]' to 'class Persoana &' A reference that is not to 'const' cannot be bound to a non-lvalue

17. Analizati mecanismele de conversie din urmatorul program: (2009)..ok #include <conio.h> #include <iostream.h> class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: 57

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

float x,y; friend ostream& operator<<(ostream &stream, const Punct &p ); }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; friend ostream& operator<<(ostream &stream, const Complex &c ); friend Punct::operator Complex(); }; // in varianta aceasta, Punct::operator Complex nu trebuie declarata functie prietena //Punct::operator Complex(){ return Complex(x,y);} Punct::operator Complex(){//functie friend a clasei Complex Complex c; c.x=x;c.y=y; return c; } ostream& operator<<(ostream &stream, const Punct &p ){ stream << "("<<p.x<<","<<p.y<<")"; return stream; } ostream& operator<<(ostream &stream, const Complex &c ){ stream <<c.x<<"+"<<c.y<<"*i"; return stream; } void main(){ Punct p(2,3); Complex c(8,9); cout<<(Complex)p<< endl<<(Punct)c<<endl; p=c; cout<<p<<endl; p=1; cout<<p<<endl; int i=p; cout<<i<<endl; c=p=1; (Punct)((Complex)p); getch(); } Raspuns 2+3*i (8,9) (8,9) (1,0) 1

18. Care va fi continutul fisierului H.TXT in urma executarii programului urmator?...ok #include <stdio.h> FILE *f; char x, y, z; void main(){ f = fopen(H.TXT,w); 58

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

fprintf(f,Ieri %d\n,13); fprintf(f,Azi %d,14); fprintf(f,Maine %d\n,15); fclose(f); } Raspuns.. Ieri 13 Azi 14Maine 15

19. Se considera programulok #include <stdio.h> void aplic(int x, int *y){x+=3; (*y)-=2; printf(%d, %d, x, *y);} void main(void){int x=12, y=20; aplic(x, &x); printf(,%d,,x); printf(%d,,y);aplic(y,&y); } Ce se va afisa in urma executarii acestuia: b. 15,10,10,20,23,18 c. 15,13,13,13,16,11 a. 13,13,13,13,16,14 d. 15,10,15,20,23,20 20. Care este rezultatul tiparit de programul urmator?...ok #include <stdio.h> #include <string.h> void f(char s[], int); void main(){f(examenul,0);} void f(char s[256], int i){ if(i<strlen(s)) { f(s, i+1); if (strchr(aeiou, s[i]) != 0) printf(%c, s[i]); } } a. eaeu c. ueae b. examenul d. e

CALCULATOR 21 Fie programul urmator:ok #include <iostream.h> class Calculator{ private: int value; int keep; char toDo; public: void add(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='+'; // what to do later } void subtract(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='-'; // what to do later 59

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} void multiply(){ keep=value; //keep first operand value=0; //get ready for the second operand toDo='*'; // what to do later } void compute(){ if (toDo=='+') value += keep; else if (toDo == '-') value = keep-value; else if (toDo == '*') value *= keep; } void clear(){value=keep=0;} void digit (int x){value=value*10+x;} int display(){ return value;} Calculator(){clear();} }; void main(){ Calculator c; c.digit(1); c.digit(0); c.add(); c.digit(2); c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1); c.digit(0); c.subtract(); c.digit(2); c.digit(0); c.compute(); c.multiply(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Se cere sa indicati care din rezultatele urmatoare sunt afisate prin executarea acestui program: a. 25 -10 b. 35 50 21.1 Fie programul: #include "Calc.h" void main(){ Calculator c; c.digit(1);c.digit(0); c.add(); c.digit(2);c.digit(0); c.compute(); c.add(); 60 c. 35 -50 d. 35 -20

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

c.digit(5); c.compute(); cout<<c.display()<<endl; c.clear(); c.digit(1);c.digit(0); c.multiply(); c.digit(2);c.digit(0); c.compute(); c.add(); c.digit(5); c.compute(); cout<<c.display()<<endl; }; Programul afiseaza a. 35 205 b.10 20

c. 205 35 d. 20 10

22. Se considera programul: #include <iostream.h> class C{ public: C(){i=0;}; void set_i(int pi){cout << "C::set_i (int)"<<endl;i=pi;} //void set_i(int pi)const{i=pi;} // error: cannot modify a const object int get_i (){cout << "C::get_i ()"<<endl; return i;} int get_i()const {cout << "C::get_i ()const"<<endl;return i;} int i; }; void main(){ int j; C x; const C y; x.i=1; x.set_i(2); j= x.get_i(); //y.i=1; // error: cannot modify a const object //y.set_i(2); // warning: non-const function called for a const object j= y.get_i(); } Ce rezultate afiseaza acest program? c. C ::set_i(int) C::get_i() C::get_i()const a. C ::set_i(int) C::get_i() const C::get_i() b. C ::set_i(int) C::get_i() C::get_i() d. C ::set_i(int) C::get_i() const 61

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

C::get_i()const

23. Fie urmtorul program C++, unde functia abs calculeaz valoarea absolut a unui numr real #include <iostream.h> void abs(float &x){if (x<0)x=-x;} void main(){ float a=-1; abs(a); cout<<"a="<<a<<endl; int i=-1; abs(i); //temporary used for parameter x cout<<"i="<<i<<endl; // i=-1 } La compilare a fost emis urmtorul mesaj de avertizare: Warning: temporary used for parameter x in call to abs(float &) Care din afirmaiile urmtoare sunt adevrate: a. Programul afiseaz: c. Programul afiseaz: a =1 a = -1 i = -1 i = -1 b. Programul afiseaz: d. Programul afiseaz: a =1 a = -1 i=1 i=1

24. Fie urmatorul program C++ // Public redeclarat private #include <iostream.h> class A{ public: void m(){cout<<"A:m()"<<endl;}; virtual void v(){cout<<"A:v()"<<endl;}; }; class B: public A{ private: void m(){cout<<"B:m()"<<endl;}; virtual void v(){cout<<"B:v()"<<endl;}; }; void main(){ A a,*p; B b; b.m(); b.v(); // obiect de tip A p=&a; p->m(); p->v(); // obiect de tip B p=&b; p->m(); p->v(); 62

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} Care expresie este incorecta: a. b.m(); c. p->m(); b. p=&a; d. p->v(); Raspunsgresit b:m() si b:v()

24.1. Fie urmatorul program C++ // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]=-100; cout<<(x=y)<<endl; } Raspuns.. 10 20 Atentie deosebirea este ultima linie subliniata

24.2. Fie urmatorul program C++ // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n, int v[]); friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; 63

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); a[0]= -100; cout<<x<<endl; } Raspuns -100 2 3 Atentie .. deosebirea este ultima linie subliniata

24.3. Fie urmatorul program: // Constructor cu semantica prin referinta // Operatorul = este cel implicit #include <iostream.h> class C{ public: C(int n=0, int v[]); void set(int i, int val){pi[i]=val;} friend ostream& operator<<(ostream &o, const C&); private: int dim; int *pi; }; C::C(int n, int v[]) { dim=n; pi= v; } ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o; } void main(){ int a[]={1,2,3}, b[]={10,20}; C x(3,a),y(2, b); x=y; y.set(0,-1000); cout<<x<<endl; } Raspuns Programul afiseaza: -1000 20 Atentiedeosebirea este penultima linie 64

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TUDOR, ANDREI, CAR 25. Fie urmatorul program C++ #include "iostream.h" template <class T> class Fifo{ public: Fifo(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>Fifo<T>::Fifo(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void Fifo<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T Fifo<T>::get(){ return support[first]; } template <class T> void Fifo<T>::remove(){ first= ++first % nrmax; --nrelem; } class Person { public: Person(char *name); Person(); //necesar pentru a intializa tablouri virtual void display(); virtual void process(); private: char *name; }; class Car { public: Car(char *name); Car(); virtual void display(); virtual void process(); private: char *name; }; Person::Person(char *name):name(name){}; Person::Person(){}; 65

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; Car::Car(){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } Fifo<Person> queuePerson(3); Fifo<Car> queueCar(3); void main(){ queuePerson.put(Person("Andrei")); queuePerson.put(Person("Tudor")); queueCar.put(Car("B-39-TDR")); queuePerson.get().process(); queuePerson.remove(); queueCar.get().process(); queueCar.remove(); queuePerson.get().process(); queuePerson.remove(); } Raspuns A Person: Andrei A Car:B-39-TDR A Person: Tudor 25.1. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; 66

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

}; #endif //elements.h #include "abselem.h" #include "iostream.h" class Person: public AbstractElem{ public: Person(char *name); virtual void display(); virtual void process(); private: char *name; }; class Car: public AbstractElem{ public: Car(char *name); virtual void display(); virtual void process(); private: char *name; }; //driver.cpp #include "elements.h" #include "LIST.h" LIST x(3); void main(){ x.put(new Person("Tudor")); x.put(new Person("Andrei")); x.put(new Car("B-39-TDR")); x.get()->process(); x.remove(); x.get()->process(); x.remove(); x.get()->process(); x.remove(); } //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } //elements.cpp #include "elements.h" Person::Person(char *name):name(name){}; 67

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

void Person::display(){cout<<name<<endl;} void Person::process(){ cout<<"A Person: "; display(); } Car::Car(char *name):name(name){}; void Car::display(){cout<<name<<endl;} void Car::process(){ cout<<"A Car:"; display(); } Programul afiseaza datele in ordinea: a. Tudor Andrei B-39-TDR b. B-39-TDR Andrei Tudor c. Andrei B-39-TDR Tudor d. B-39-TDR Tudor Andrei Sau scrise asa: A Person: Tudor A Person: Andrei A Car: B39-TDR 26. Se considera programul C:ok #include <stdio.h> int f(void){ int i = 0; return (i++); } int g(void){static int x = 0; return (x++); } void main(void){ int k; for (k = 0; k < 3; k++) printf("F %d\n", f()); for (k = 0; k < 3; k++) printf("G %d\n", g()); } Analizati modul de functionare si precizati care este iesirea acestui program. b) F0 F0 F0 G0 G1 G2 27. Se considera programul #include <stdio.h> void main(void){ int s=0; int k; for (k = 1; k <= 10; ++k); s += k; printf("Suma primelor 10 de numere naturale nenule este %d\n", s); } Ce afiseaza programul: a) 55 c) uneori si 55 b) intotdeauna 11 d) uneori si 11

68

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

28. Se considera programul: #include <stdio.h> void main(void){ int n1, n2; printf("n1 = "), scanf("%d", &n1); printf("n2 = "), scanf("%d", &n2); if (n2 =! 0) printf("n1/n2 = %d\n", n1/n2); else printf("Impartire prin ZERO\n"); } Ce se afiseaza pentru n1 = 8 si n2 = 16? a) n1/n2 = 0 c) n1/n2 = 16 b) n1/n2 = 8 29. Fie urmatorul program..??-cod gresit // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; 69

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} void LIST::remove(){ first= ++first % nrmax; --nrelem; } int main() { LIST(5); return 0; } A. 3 2 0 0 B. 3 3 0 0 C. 3 3 1 1 D. 3 2 1 2 E. 3 2 1 2

TEORIE 30. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } a. Clasa C este o clasa generica c. Clasa C este derivata din clasa T b. Clasa C este o clasa abstracta d. Clasa T este derivata din clasa C !!! O clasa generica poate opera cu tipuri de date nespecificate 70

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

31. Fie urmatoarea specificare de clase: Class Complex; Class Punct{ public: Punct(float x=0, float y=0) x(x), y(y) () operator Complex(); operator float() (return x;) private: float x, y, }; class Complex( public: Complex(float x=0, float y=0 x(x), y(y)() Operator Punct() (return PUNCT(x,y),) private: float x,y; }; Metoda operator Complex operator float() este utilizata pentru: A. Conversia unui obiect Punct in obiect Complex B. Conversia obiectelor Complex in numere reale C. Conversia unui numar real in obiect Complex D. Conversia unui obiect Complex in obiect punct

31.1. Fie urmatoarea specificare de clase: class Complex class Punct{ public: Punct(float x=0, float y=0)x(x),y(y)() Operator Complex(); Operator float(){return x;) private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0)x(x),y(y)() operator Complex(); operator float(){return x;} private: float x,y; }; Metoda operator Complex operator float() este utilizata pentru: A. Conversia unui obiect Complex in obiect punct B. Conversia obiectelor Complex in numere reale C. Conversia unui obiect Punct in obiect Complex D. Conversia unui numar real in obiect Complex Atentie.. deosebire liniile subliniate

71

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

32. Fie urmatoarea specificare de clasa: //file abslist.h #ifndef ABSLIST_H #define ABSLIST_H #include d:\tudor\c_cpp\abstract\abselem.h* class AbstractList{ public: virtual void erase()=0; virtual void put(abstractElm*ae)(); virtual AbstractElm*get()(); virtual int isEmpty()(); virtual int isFull()(); }; #endif Care afirmatie este corecta? A. AbstractList este o clasa abstracta B. isEmpty este metoda virtuala pura C. AbstractList este o clasa concreta D. Obiectele clasei pot fi construite cu AbstractList() !!! Clasa abstracta trebuie intodeauna sa aiba o functie virtuala pura

33. Se considera clasa: #include "iostream.h" template <class T> class C{ public: C(int nrmax=0); void put(T); T get(); void remove(); private: int nrmax; int nrelem; int first; int free; T* support; }; template <class T>C<T>::C(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new T [nrmax-1]; } template <class T> void C<T>::put(T e){ support[free]=e; free= ++free % nrmax; nrelem++; } template <class T> T C<T>::get(){ return support[first]; } template <class T> void C<T>::remove(){ first= ++first % nrmax; --nrelem; } 72

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

a. b. c.

Clasa C defineste o structura de tip coada (FIFO) Clasa C defineste o structura de tip stiva (LIFO) Clasa C este un vector d. Clasa C este abstracta

33.1. Fie urmatorul program, in care se utilizeaza clase abstracte: // abselem.h #ifndef ABSTRACTELEM_H #define ABSTRACTELEM_H class AbstractElem{ public: virtual void display()=0; virtual void process()=0; }; #endif //LIST.h #ifndef LIST_H #define LIST_H #include "abselem.h" class LIST{ public: LIST(int nrmax=0); void put(AbstractElem *); AbstractElem* get(); void remove(); private: int nrmax; int nrelem; int first; int free; AbstractElem* *support; }; #endif //LIST.cpp #include "LIST.h" LIST::LIST(int nrmax):nrmax(nrmax){ first=free=nrelem=0; support = new AbstractElem* [nrmax-1]; } void LIST::put(AbstractElem * pe){ support[free]=pe; free= ++free % nrmax; nrelem++; } AbstractElem* LIST::get(){ return support[first]; } void LIST::remove(){ first= ++first % nrmax; --nrelem; } Care afirmatie este adevarata: a. LIST este o structura de date de tip coada b. LIST este o structura de date de tip stiva 73

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

c. LIST este o clasa abstracta d. LIST este un vector. Nota.. sunt diferente..lipsesc liniile de la //elements.h..si de la //elements.cpp..

35. Fie urmatorul program: #include <iostream.h> class A{ public: void s(){cout<<"void A::s()"<<endl;} void s(int i){i++;cout<<"void A::s(int)"<<endl; } virtual void v(){cout<<"virtual void A::v()"<<endl;} virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;} }; Care afirmatie este corecta: a. Definitia virtual void v()supraincarca definitia virtual void v(int i) b. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v. c. void v() este metoda ce va fi legata static. d. in expresia p->v(); metoda v este legata static

36. Fie programul: class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Constructorul Persoana(char *) poate fi utilizat pentru: a. Conversia obiectelor Persoana in siruri de caractere b. Conversia sirurilor de caractere in obiecte Persoana c. Construirea de siruri de caractere d. Conversia obiectelor Complex in obiecte Persoana

37. Fie programul:ok #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p); nr++; cout<<nr<<endl; } private: char *name; static long nr; }; long Person::nr=0; void f(){Person *p = new Person("Balanescu"); delete p; 74

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

} void main(){ while(1)f(); } Care afirmatie este adevarata: a. Programul afiseaza un sir finit de numere 1 2 3 4...etc. pana memoria este epuizata b. Programul afiseaza secventa infinita 1 2 3 4...etc. deoarece memoria nu este epuizata c. Programul nu afiseaza nimic d. Programul afiseaza 1 apoi se opreste 38. Fie urmtorul program C++: #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){ name=new char[strlen(p)+1]; strcpy(name,p); } ~Person(){delete[] name;} private: char *name; }; void f(){ // obiect nou, alocare dinamica in memoria heap Person *p =new Person("Balanescu"); delete p; } void main(){ while(1)f(); } Care din afirmatiile urmtoare sunt adevrate: c. Programul nu se termin, deoarece conditia de continuare din instructiunea while este mereu ndeplinit a. Programul se termin, deoarece instructiunea delete p elibereaz memoria alocat pentru obiectul referit de p b. Programul se termin, deoarece la iesirea din functia f se elibereaz memoria alocat pe stiv pentru obiectul referit de p d. Programul se blocheaz la epuizarea memoriei heap

39. Fie programul: //destructor explicit #include <string.h> #include <iostream.h> class Person{ public: Person(char *p){name=new char[strlen(p)+1]; strcpy(name,p);} ~Person(){delete[] name;} private: char *name; }; void f(){Person *p = 75

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

new Person("Balanescu"); delete p; // fara aceasta instructiune, obiectele se acumuleaza // in heap si blocheaza executarea, spre deosebire de Java } void main(){ while(1)f(); } Care din afirmatiile urmatoare sunt adevarate: Raspuns: La iesirea din functia f(), spatiul alocat pentru sirul de caractere Balanescu este eliberat

40. Fie urmatoarea specificare de clase: class Complex; class Punct{ public: Punct(float x=0, float y=0):x(x),y(y){} operator Complex(); operator float(){return x;} private: float x,y; }; class Complex{ public: Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; }; Punct::operator Complex(){ return Complex(x,y);} Metoda Punct:: operator Complex() nu a fost implementat inline, precum operator Punct() deoarece b. Constructorul Punct (float, float) trebuie declarat inaintea metodei Punct:: operator Complex() .. c. Este metoda friend a clasei Complex d. Este metoda friend a clasei Punct

76

You might also like