Imię i nazwisko: 30
września 2002
1.
W jaki sposób można w programie wyłączyć działanie asercji?
2.
Podaj choćby jeden rozsądny powód dzielenia programów na
osobne pliki.
3.
Jakiego typu informacje znajdują się w pliku nagłówkowym <math.h>?
4.
Zdefiniuj z jako stałą typu
const double, która przyjmuje wartość 3.14, jeśli pewna
wcześniej zdefiniowana zmienna x jest dodatnia, w przeciwnym zaś
wypadku z ma przyjmować wartość 0.
5.
Zdefiniuj tn jako tablicę 200
standardowych napisów w stylu języka C, czyli typu char*.
6.
Jakie są standardowe argumenty funkcji main? Podaj
deklarację takiej „pełnej” funkcji main.
7.
Co się dzieje w sytuacji, gdy operator new nie może
przydzielić pamięci?
8. Wyjaśnij, co oznacza słowo dynamiczny w wyrażeniach typu zmienna dynamiczna, tablica dynamiczna.
9.
Jaki jest wynik działania instrukcji
std::cout
<< (12 | 12) << (-1 ^ -1) << (12 & 12) << 0x12
<< "\n";
10.
Jacek zdefiniował zmienną logiczną b w następujący
sposób:
bool
b = 3/4 > 0;
Czy b
ma wartość true, czy false? Uzasadnij odpowiedź!
11. Dokończ instrukcję tak, by jej efektem było wydrukowanie napisu (wraz z cudzysłowami).
nie
znaleziono pliku "dane.txt"!
cout
<<
12. Zapisz instrukcję while (x) { x = f(x); } przy pomocy instrukcji for.
13.
Czym różni się instrukcja cout << endl; od
cout << '\n';?:
14.
Jaka jest podstawowa różnica pomiędzy strukturami (struct)
i klasami (class)?
struct:
class:
15.
Napisz instrukcję, która spowoduje otwarcie (w trybie do
odczytu) pliku o nazwie "dane.dat".
16.
Czym wyróżnia się w językach C i C++ sposób przekazywania do
funkcji tablic dostępnych w języku C?
17.
Czym różni się metoda std::vector<T>::operator[](int)
od std::vector<T>::at(int);
operator[]:
at:
18.
Oto deklaracja jednego ze standardowych algorytmów:
template<class
Bi, class Bi2> Bi2 copy_backward (Bi first, Bi last, Bi2 res);
Co w niej oznacza identyfikator Bi2?
19.
Napisz instrukcję, która posortuje wektor std::vector<int> v(100)
w kolejności od najmniejszego do największego elementu.
20. Rozpatrzmy prosty program, dołączony do tego formularza egzaminacyjnego na osobnej stronie.
a) Po co w tym
programie posłużono się instrukcją using std::cin;?
b) Na rzecz jakiego
konkretnego obiektu w tym programie zawsze działa pierwsza metoda GetValue w kodzie metody AddInput?
c) Co oznaczają puste
nawiasy kwadratowe w deklaracji konstruktora klasy InputNum?
d) Co oznacza słowo const
w definicji metody GetValue?
e) Co oznacza słowo const
w definicji tablicy SumString?
f) Jacek postanowił
uczynić bardziej czytelnym kod instrukcji
_num = GetValue() + aNum.GetValue();
i napisał
this->_num
= this->GetValue () + this->aNum.GetValue ();
Oczywiście przeholował – zaznacz w powyższej instrukcji to, i tylko
to, co jest w niej błędne.
#include <iostream>using std::cout;using std::cin; class InputNum{public: InputNum (char msg []) { cout << msg; cin >> _num; } int GetValue () const { return _num; } void AddInput (char msg []) { InputNum aNum (msg); _num = GetValue () + aNum.GetValue (); } private: int _num;}; const char SumString [] = "The sum is ";
int main(){ InputNum num ("Enter number "); num.AddInput ("Another one "); num.AddInput ("One more "); cout << SumString << num.GetValue () << "\n"; return 0;
}
Rozwiązania proszę najpierw napisać na brudno i po sprawdzeniu przenieść na podpisaną kartkę z wersją finalną. Proszę zwrócić uwagę na sposób definiowania argumentów i wartości funkcji.
1. Zdefiniuj funkcję iloraz, która
a. przyjmuje 3 argumenty całkowite a, b i c;
b. zwraca jako swoją wartość iloraz argumentów a i b;
c. w argumencie c przekazuje resztę z dzielenia a przez b.
2.
Rozpatrzmy prostą definicję klasy liczb zespolonych:
class
zespolona
{
public:
double
re;
double
im;
zespolona&
operator+= (const zespolona& z);
...
};
Proszę dostarczyć definicję powyższego operatora +=
tak, jak powinna ona wyglądać w sytuacji, gdy pojawia się poza definicją klasy.
3.
Rozpatrzmy szablon funkcji nwp:
int
nwp(int x, int y)
{
while
((x %= y) && (y %= x))
continue;
if
(x)
return x;
return
y;
}
Jaki jest wynik wyrażenia f(6, 22)? Odpowiedź uzasadnij!
4.
Kontrolowana
tablica statyczna.
Proszę zdefiniować szablon klasy wektor
sparametryzowany typem elementów wektora i ilością jego elementów (podawaną
statycznie w kodzie programu). Dostęp do elementów tablicy powinien być
zapewniany przez oba operatory indeksowania ([]), które powinny
kontrolować asercjami poprawność przekazywanych im argumentów.
5.
Tablica
trójwymiarowa.
Zaimplementuj klasę Uklad3D, która reprezentuje
trójwymiarową siatkę punktów o współrzędnych z zakresu 0…L-1, gdzie L
jest liczbą całkowitą przekazywaną w konstruktorze klasy. Każdemu punktowi
siatki ma odpowiadać zmienna logiczna („prawda” lub „fałsz”). Początkowo
wszystkim punktom układu przypisujemy wartość false. Dostęp do
elementu znajdującego się w węźle (x,y,z) powinien być zapewniany przez operator (); oto hipotetyczny
przykład użycia tej klasy:
Uklad3D uklad(20);
uklad(0, 1, 3) = true; // element o wspołrzednych x=0, y=1 i z = 3
ma wartość true
6.
Oto błędna definicja algorytmu std::copy.
Algorytm ten ma kopiować wszystkie elementy z przedziału [first,...,last) do
miejsca wskazywanego przez res. Proszę wskazać i poprawić
błąd!
template<class
In, class Out> Out copy (In first, In last, Out res)
{
while
(first != last) *++res = *++first;
return
res;
}