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.
Plik z chomika:
albatroz_
Inne pliki z tego folderu:
Progr exam3 cz1 Figel sem ll.jpg
(2746 KB)
Progr exam2 cz1 Figel sem ll.jpg
(2544 KB)
Progr exam2 cz2 Figel sem ll.jpg
(2049 KB)
Progr exam3 cz2 Figel sem ll.jpg
(2113 KB)
Progr exam cz2 Figel sem ll.jpg
(1866 KB)
Inne foldery tego chomika:
Pliki dostępne do 21.01.2024
1
12 Rounds 2 Reloaded
123
2
Zgłoś jeśli
naruszono regulamin