przygotowanie figelska sem ll.pdf

(40 KB) Pobierz
Egzamin z metod programowania – 5 przykładowych zadań
Poni sze zadania zawierają fragmenty programów napisane w jezyku C++. Jako rozwiązania
tych zadań nale y podać wartości zmiennych otrzymane w wyniku wykonania podanego kodu.
Zadanie 1
void fun_f(double* e,double& c,double h){
h+=5;
*e=5*h;
c=*e-5;
}
int main(){
double u=3.0, t=6.0, r=5.0;
double* p=&t;
fun_f(p,r,u);
}
Rozw.: u = 3
t = 40
r = 35
*p=40
Uwagi: wartości zmiennych w funkcji fun_f(): h=3+5=8, *e=5*8=40, c=40-5=35
Zadanie 2
int* fun_e(int g){
return new int[g];
}
void fun_f(int* a,int g,int c){
a[0]=c;
for(int i=1;i<g;i++)
a[i]=a[i-1]*i;
}
int main(){
int *o, s=36, v=2;
o=fun_e(s);
fun_f(o,s,v);
}
Rozw.: o[0] = 2, o[1] = 2, o[2] = 4, o[3] = 12, *o = 2, *(o+1) = 2, *(o+2) = 4, *(o+3) = 12,
o+1 = 5488380, o+3 = 5488388, o+12 = 5488424,
przy zalozeniu, ze o=5488376 i zmienna typu int zajmuje 4 bajty.
Uwagi: wartości kolejnych elementów tablicy w funkcji fun_f():
a[0]=2, a[1]=2*1=2, a[2]=2*2=4, a[3]=4*3=12
adres 12-tego elementu tablicy wskazywanej w funkcji main() wskaźnikiem o (w funkcji fun_f()
wskaźnikiem a): 5488376+12*4=5488424
Zadanie 3
class D{
double s, x;
public:
D(){
s=8;
x=6;
}
D(double x){
s=8;
this->x=x;
}
D(double s,double x){
this->s=s;
this->x=x;
}
double g(){
return s+x;
}
};
int main(){
D c, d(5), a(7,4);
double e=c.g();
double f=d.g();
double g=a.g();
}
Rozw.: e = 14, f =13, g = 11
Uwagi: składowe (pola) obiektów c, d i a mają następujące wartości: c.s=8, c.x=6, d.s=8, d.x=5,
a.s=7, a.x=4
Zadanie 4
class K{
protected:
int w;
public:
K(){w=9;}
K(int w){w=this->w;}
int h(){return w;}
int f(){return -w;}
};
class N:public K{
int z;
public:
N(){z=8;}
N(int w,int z):K(w){z=this->z;}
int h(){return z-w;}
int f(){return z;}
};
class L:public K{
int y;
public:
L(){y=2;}
L(int w,int y):K(w){y=this->y;}
int h(){return w-y;}
int f(){return y;}
};
int main(){
K e;
N g;
L d(3,1);
int zm1=e.h();
int zm2=e.f();
int zm3=g.h();
int zm4=g.f();
int zm5=d.h();
int zm6=d.f();
}
Rozw. 3: zm1 = 9,
zm2 = -9,
zm3 = -1,
zm4 = 8,
zm5 = 2,
zm6 = 1
Uwagi: Pola obiektów e, g i d mają następujące wartości: e.w=9, g.w=9, g.z=8,
q.w=3, d.y=1
Zadanie 5
Dana jest hierarchia klas, taka jak w zadaniu 4 oraz funkcje fun() i main() zdefiniowane poni ej.
Podać wartości wyświetlane w wyniku kolejnych wywołań funkcji fun() przy zało eniu, e:
a) metoda h() jest zadeklarowana jako wirtualna w klasie bazowej K (metoda f() nie jest
wirtualna,
b) obie metody: h() i f() są wirtualne,
c) obie metody: h() i f() nie są wirtualne.
void fun(K * a){
cout<<a->h()<<” “;
cout<<a->f()<<” “;
}
int main(){
K *g=new N;
fun(g);
delete g;
g=new L(5,3);
fun(g);
}
Rozw.:
a) -1 -9
2 -5
b) -1 8
2 3
c) 9 -9
5 -5
Uwagi:
Wartości pól obiektu klasy N: g->w=9, g->z=8
Wartości pól obiektu klasy L: g->w=5, g->y=3
void fun(K & a){
cout<<a.h()<<” “;
cout<<a.f()<<” “;
}
int main(){
N g(5,1);
L d;
fun(g);
fun(d);
}
Rozw.:
a) -4 -5
b) -4 1
c)
5 -5
7 -9
7 2
9 -9
Uwagi:
Wartości pól obiektu klasy N: g.w=5, g.z=1
Wartości pól obiektu klasy L: d.w=9, d.y=2
Je eli funckcja nie jest wirtualna w klasie bazowej i jest wykonywana dla obiektu klasy pochodnej,
do którego odnosimy się wskaźnikiem bądź referencją typu klasy bazowej, to wykona się funkcja z
klasy bazowej.
eby wykonała się funkcja z odpowiedniej klasy pochodnej, musi być ona zadeklarowana jako wirtualna
w klasie bazowej.
Zgłoś jeśli naruszono regulamin