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.

 

Program do pytania 16

 

 

#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;

}



 

Zadania

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;
}