Documente Academic
Documente Profesional
Documente Cultură
Nota: X=100 este incorecta - variabila x nu a fost înca definita în momentul primei atribuiri.
int storage(String s) {
return s.length() * 2;
}
si instructiunea
int i=storage(”Java”);
}
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
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
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");
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
}
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)
}
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 rãmâne mereu la valoarea 0
d. Programul afiºeazã:
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
Care afirmatie este adevarata, dacã se face de douã ori click pe butonul stang Mouse asupra butonului Actiune:
c. În câmpul de text f.tf este afisatã valoarea 2
a. În câmpul de text f.tf este afiºatã valoarea 1
b. Programul nu afiseazã nimic
d. Valoarea atributului f.m.x rãmâne mereu la valoarea 0
Nota: Asemanator cu ex. 20
Care afirmatie este adevarata, dacã se face de click pe butonul stang mouse asupra butonului „modifica” din
fereastra fn:
d. Doar in câmpul 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 câmpul de text field al ferestrei fo2 este afiºatã valoarea actualizata a atributului Observator.m.i
b. În câmpul de text field al tuturor ferestrelor este afiºatã valoarea actualizata a atributului Observator.m.i
c. Doar in câmpul de text field al ferestrei fo1 este afiºatã valoarea actualizata a atributului Observator.m.i
}
}
Care afirmaþie este adevãratã:
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
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
18
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
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”)
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
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
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
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
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
24
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”
}
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 către mai multe fire de executie folosim:
a. public c. native
b. final d. Syncronized
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 c. protected
b. final d. Private
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
Programul afiseaza:
34
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
c. 3200
a. 3300
b. 3201
d. 3211
35
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
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
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..
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:
a. virtual method v() of D c. virtual method v() of D
static method st() of D static method st() of B
b. virtual method v() of B d. virtual method v() of B
static method st() of D static method st() of B
Atentie…diferentele sunt liniile subliniate
Programul afiseaza:
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
Programul afiseaza :
c. B() B(B&b) B() D() B(B &b) B(B &b)
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)
d. B() B(B&b) D() B(B &b) D() B(B &b)
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 c. 2 6
b. 2 5 d. 1 5
7. Fie programul…ok
//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=0…0++=1
i=1…1++=2
i=2…2++=3
i=3…3++=4
i=4…4++=5
Atentie..liniile subliniate sunt diferite
strcpy(destinatie,sursa)-functia are rolul de a copia sirul de la adresa sursa la adreasa destinatie
Programul afiseaza:
11111
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
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 următoare sunt adevărate:
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=
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 următoarele 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.
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)
a. void B::v()
void A::v(int)
b. void A::v()
void B::v(int)
d. void A::v()
void A::v(int)
Variante…posibile de ex.
1. pa=&b; pa->s(1); pa->v(1);
void A::s(int)
virtual void B::v(int)
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
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 următorul program C++, în care operatorul de insertie << este supraîncărcat. 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 următoare sunt adevărate:
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 semántica prin referinta.
14.1. Fie următorul program C++, în care operatorul de insertie << si operatorul de atribuire = sunt
supraîncărcati. Prin supraîncărcare, 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.
În afirmatiile de mai jos, xx si yy sunt valori arbitrare, rezultate prin referirea prin pointerul pi la o
zona de memorie *pi neinitializată
10 20
Nota. Liniile subliniate sunt in plus fata de ex. 14. Este supraincarcare cu semnatica prin valoare.
14.2. Fie următorul program C++, în care operatorul de insertie << si operatorul de atribuire = sunt
supraîncărcati. Prin supraîncărcare, 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ă
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
ERORI
}
};
Care din afirmatiile următoare sunt adevărate:
d. //4. este incorectă
a. //1. este incorectă
b. //2. este incorectă
c. //3. este incorectă
};
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 următoarele 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)
};
//4.supraincarcare metoda virtuala,
virtual void v(){count<<"int B::()"<<endl:return1}
};
Care definitie este incorecta? 1, 2, 3 sau 4??
Raspuns 4
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
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
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
CALCULATOR
}
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 c. 35
-10 -50
b. 35 d. 35
50 -20
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 c. 205 35
b.10 20 d. 20 10
C::get_i()const
23. Fie următorul program C++, unde functia abs calculează valoarea absolută a unui număr 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 următorul mesaj de avertizare:
Warning: temporary used for parameter ‘x’ in call to ‘abs(float &)
Care din afirmaŃiile următoare sunt adevărate:
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
}
Care expresie este incorecta:
a. b.m(); c. p->m();
b. p=&a; d. p->v();
Raspuns…gresit …b:m() si b:v()
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
64
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
68
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
71
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
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();
}
};
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