_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _
Imię i nazwisko Numer indeksu Login (SPOJ)
drukowanymi literami czas pisania: 45 minut
25 stycznia 2010
Zad. 1. Uzupełnij każde z wyróżnionych pól (używając od 1 do 10 znaków; nie używając średników, przecinków i spacji), tak aby poniższy kod stanowił poprawną definicję klasy, realizującej operacje push
i pop dla stosu liczb całkowitych. (9 pkt.)
class ‗‗‗‗‗‗‗‗‗‗
int *mem_block, top;
static const int MAX_SIZE = 1000;
public:
NewStack() {
mem_block = new int[MAX_SIZE];
top = -1;
}
‗‗‗‗‗‗‗‗‗‗ () { // destructor
‗‗‗‗‗‗‗‗‗‗ mem_block;
}
void push (const int &value) {
if (top == MAX_SIZE-1) throw 1; // stack overflow
mem_block[++top] = ‗‗‗‗‗‗‗‗‗‗;
}
int pop();
};
‗‗‗‗‗‗‗‗‗‗ ‗‗‗‗‗‗‗‗‗‗ pop ‗‗‗‗‗‗‗‗‗‗
if (top == ‗‗‗‗‗‗‗‗‗‗) throw 2; // stack underflow
return mem_block[‗‗‗‗‗‗‗‗‗‗];
}
Zad. 2. Dana jest funkcja recurse, zdefiniowana, jak poniżej. (5 pkt.)
int recurse (int p) { return (p>1) ? (2*recurse(p/2) + recurse(p-2)) : p; }
Jaka będzie wartość zwracana dla wywołania: recurse(2)? ‗‗‗‗‗‗ recurse(6)? ‗‗‗‗‗‗
Przy wywołaniu recurse(6), ile razy nastąpi uruchomienie funkcji recurse z wartością argumentu p równą: 0? ‗‗‗‗‗‗ 1? ‗‗‗‗‗‗ 2? ‗‗‗‗‗‗ 3? ‗‗‗‗‗‗ 4? ‗‗‗‗‗‗ 5? ‗‗‗‗‗‗
Zad. 3. W wyróżnionych polach podaj tekst, który zostanie wypisany przy wykonaniu odpowiednich linii programu. (7 pkt.)
#include <cstdio>
void f1 (int x) { printf ("F1: %d\n", x++); }
void f2 (int y) { printf ("F2: %d\n", y--); }
void f3 (int&z) { printf ("F3: %d\n", z++); }
void (*f[])(int) = {f1,f2};
int main() {
int a = 7, b = a, *c = &b, *&d = c;
f1(*c++); ‗‗‗‗‗‗‗‗‗‗
f3(a); ‗‗‗‗‗‗‗‗‗‗
f2(b); ‗‗‗‗‗‗‗‗‗‗
f3(*d); ‗‗‗‗‗‗‗‗‗‗
f[1](2); ‗‗‗‗‗‗‗‗‗‗
f+(1); ‗‗‗‗‗‗‗‗‗‗
(*f)(1); ‗‗‗‗‗‗‗‗‗‗
}
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _
Imię i nazwisko Numer indeksu Login (SPOJ)
drukowanymi literami czas pisania: 45 minut
25 stycznia 2010
Zad. 1. Uzupełnij każde z wyróżnionych pól (używając od 1 do 10 znaków; nie używając średników, przecinków i spacji), tak aby poniższy kod stanowił poprawną definicję klasy, realizującej operacje push
i pop dla stosu liczb całkowitych nieujemnych. (9 pkt.)
class ‗‗‗‗‗‗‗‗‗‗
unsigned *mem_block, top;
static const unsigned MAX_SIZE = 100;
public:
nw_stack () {
mem_block = new unsigned[MAX_SIZE];
top = 0;
}
‗‗‗‗‗‗‗‗‗‗ () { // destructor
‗‗‗‗‗‗‗‗‗‗ mem_block;
}
void push (const unsigned &number) {
if (top == MAX_SIZE) throw 1; // stack overflow
mem_block[top++] = ‗‗‗‗‗‗‗‗‗‗;
}
unsigned pop();
};
‗‗‗‗‗‗‗‗‗‗ ‗‗‗‗‗‗‗‗‗‗ pop ‗‗‗‗‗‗‗‗‗‗
if (top == ‗‗‗‗‗‗‗‗‗‗) throw 2; // stack underflow
return mem_block[‗‗‗‗‗‗‗‗‗‗];
}
Zad. 2. Dana jest funkcja recurse, zdefiniowana, jak poniżej. (5 pkt.)
int recurse (int p) { return (p>1) ? (2*recurse(p/3) + recurse(p-1)) : p; }
Jaka będzie wartość zwracana dla wywołania: recurse(2)? ‗‗‗‗‗‗ recurse(6)? ‗‗‗‗‗‗
Przy wywołaniu recurse(6), ile razy nastąpi uruchomienie funkcji recurse z wartością argumentu p równą: 0? ‗‗‗‗‗‗ 1? ‗‗‗‗‗‗ 2? ‗‗‗‗‗‗ 3? ‗‗‗‗‗‗ 4? ‗‗‗‗‗‗ 5? ‗‗‗‗‗‗
Zad. 3. W wyróżnionych polach podaj tekst, który zostanie wypisany przy wykonaniu odpowiednich linii programu. (7 pkt.)
#include <cstdio>
void f1 (int x) { printf ("A: %d\n", x--); }
void f2 (int y) { printf ("B: %d\n", y--); }
void f3 (int&z) { printf ("C: %d\n", z++); }
void (*f[])(int) = {f1,f2};
int main() {
int a = 5, b = a, *c = &b, *&d = c;
f1(*c++); ‗‗‗‗‗‗‗‗‗‗
f3(a); ‗‗‗‗‗‗‗‗‗‗
f2(b); ‗‗‗‗‗‗‗‗‗‗
f3(*d); ‗‗‗‗‗‗‗‗‗‗
(*f)(4); ‗‗‗‗‗‗‗‗‗‗
f+(3); ‗‗‗‗‗‗‗‗‗‗
f[1](2); ‗‗‗‗‗‗‗‗‗‗
}