Lucrarea 4
Spatiul numelor


Scopul lucrarii: Familiarizarea cu notiunea de spatiu al numelor.

Desfasurarea lucrarii: Se vor scrie programe in cadrul carora se vor defini si utiliza spatii de nume. Se vor utiliza spatii de nume diferite pentru fiecare modul, precum si unul pentru programul de test, daca este cazul.

Se va utiliza paradigma abstractizarii datelor, aplicatiile avand fisiere header de interfata si fisiere sursa de implementare pentru modulele dezvoltate, precum si un fisier sursa de utilizare.

Probleme:

1. Sa se proiecteze si sa se implementeze o clasa Calendar. Interfata clasei trebuie sa permita utilizatorului urmatoarele operatii:

Singurele sarbatori care se vor lua in considerare sunt: Determinarea datei Pastelui se poate efectua cu ajutorul functiei Aloysius. La afisarea calendarului, se vor marca zilele de sarbatoare. Functia de test va crea un obiect de tip calendar si va afisa pentru acel calendar aceeasi luna pentru doi ani consecutivi.

        int Aloysius (int an, int *luna, int *zi) {
          struct data temp;
          int g, c, x, e, d, n;
          if (an < 1582)
            return 0;
          g = an % 19 + 1;
          c = an / 100 + 1;
          x = (3 * c) / 4 – 12;
          *zi = (8 * c + 5) / 25 – 5;
          d = (5 * an / 4) – x – 10;
          e = (11 * g + 20 + *zi – x) % 30;
          if ((e == 25 && g > 11) || (e == 24))
            e++;
          n = 44 – e;
          if (n < 21)
            n = n + 30;
          n = n + 7 – ((d + 7) % 10);
          if (n > 31) {
            n = n – 31;
          *luna = 4;
          }
          else
            *luna = 3;
          return 1;
        }

2. Definiti o clasa Year care gestioneaza zilele unui an ca zile lucratoare si nelucratoare. Clasa memoreaza zilele din an ca un vector de biti (un caracter fara semn reprezinta 8 biti).

enum Month {
  Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
};

class Year {
  short year; // anul curent
  unsigned char vec[YearBytes]; // vector de 8*YearBytes biti
public:
  // numarul de octeti din vector este 46
  enum Bytes { YearBytes = 46 };
  Year(const short year);
  // seteaza o zi lucratoare
  void WorkDay (const short day);
  // seteaza o zi nelucratoare
  void OffDay (const short day);
  // determina tipul zilei
  bool Working (const short day);
  // converteste o data la numarul zilei din anul curent
  short Day (const short day, const Month month,
  const short year);
};

Zilele se considera numerotate secvential, incepand cu 1 pentru 1 ianuarie. Implementati clasa Year.
Functia de test va initializa un obiect de tipul Year si va contine un ciclu ce permite selectarea si procesarea urmatoarelor optiuni :

3. Sa se proiecteze si sa se implementeze o clasa Ceas, care permite afisarea timpului curent pentru unul dintre orasele : Londra, Paris, Bucuresti, Moscova. Clasa va contine date membre ce permit memorarea timpului initial (ora, minutul si secunda), precum si pozitia de pe ecran unde se va afisa timpul. De asemenea, ea va contine si urmatoarele functii membru : Se vor utiliza urmatoarele functii: Sleep este o functie sistem declarata in windows.h, iar gotoxy se va defini astfel :

#include <windows.h>
void gotoxy(int x, int y) {
  flush(cout);
  HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition(hStdout, c);
}

4. Problema 1 (laboratorul 3).

5. (PDF) Problema 4 (laboratorul 3).

6. Problema 5 (laboratorul 3).