You are on page 1of 53

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 supraîncarcat.
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 supraîncarcati. Prin supraîncarcare, 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 supraîncarcati. Prin supraîncarcare, 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

You might also like