Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- class Numar
- {
- private:
- int* cifre;
- int nrCifre;
- public:
- int* alocare(int nrCifre)
- {
- int* cifre = new int[nrCifre]();
- return cifre;
- }
- Numar() : nrCifre(0), cifre(nullptr) {}
- Numar(int nrCifre) : nrCifre(nrCifre)
- {
- cifre = alocare(nrCifre);
- }
- Numar(const Numar& N)
- {
- nrCifre = N.nrCifre;
- cifre = alocare(nrCifre);
- for (int i = 0; i < nrCifre; ++i)
- cifre[i] = N.cifre[i];
- }
- ~Numar()
- {
- delete[] cifre;
- }
- Numar operator=(const Numar& N)
- {
- if (this != &N)
- {
- this->~Numar();
- nrCifre = N.nrCifre;
- cifre = alocare(nrCifre);
- for (int i = 0; i < nrCifre; ++i)
- cifre[i] = N.cifre[i];
- }
- return *this;
- }
- friend istream& operator>>(istream& in, Numar& N)
- {
- in >> N.nrCifre;
- N.cifre = N.alocare(N.nrCifre);
- for (int i = 0; i < N.nrCifre; ++i)
- in >> N[i];
- return in;
- }
- friend ostream& operator<<(ostream& out, Numar N)
- {
- for (int i = 0; i < N.nrCifre; ++i)
- out << N[i];
- return out;
- }
- friend bool operator==(Numar N1, Numar N2)
- {
- if (N1.nrCifre == N2.nrCifre)
- {
- for (int i = 0; i < N1.nrCifre; ++i)
- if (N1[i] != N2[i])
- return false;
- return true;
- }
- return false;
- }
- friend bool operator!=(Numar N1, Numar N2)
- {
- return !(N1 == N2);
- }
- friend bool operator<(Numar N1, Numar N2) // N1 < N2
- {
- if (N1.nrCifre < N2.nrCifre)
- return true;
- if (N1.nrCifre == N2.nrCifre)
- {
- for (int i = 0; i < N1.nrCifre; ++i)
- if (N1[i] > N2[i])
- return false;
- return true;
- }
- return false;
- }
- friend bool operator>(Numar N1, Numar N2) // N1 > N2
- {
- return !(N1 < N2);
- }
- int& operator[](int k) throw (out_of_range)
- {
- if (k < 0 or k >= nrCifre)
- throw out_of_range("Indice in afara limitelor");
- return cifre[k];
- }
- int getCifra(int k) throw (out_of_range)
- {
- if (k < 0 or k >= nrCifre)
- throw out_of_range("Indice in afara limitelor");
- return cifre[k];
- }
- friend Numar operator+(Numar N1, Numar N2)
- {
- if (N1 < N2)
- swap(N1, N2);
- if (N1.nrCifre != N2.nrCifre)
- {
- Numar auxN2(N1.nrCifre);
- for (int i = N1.nrCifre - N2.nrCifre; i < N1.nrCifre; ++i)
- auxN2[i] = N2[i - (N1.nrCifre - N2.nrCifre)];
- N2 = auxN2;
- }
- Numar Suma(N1.nrCifre);
- int transport = 0;
- for (int i = N1.nrCifre - 1; i >= 0; --i)
- {
- transport = N1[i] + N2[i] + transport;
- Suma[i] = transport % 10;
- transport /= 10;
- }
- if (transport != 0)
- {
- Numar auxSuma(N1.nrCifre + 1);
- auxSuma[0] = transport % 10;
- transport /= 10;
- for (int i = 0; i < N1.nrCifre; ++i)
- auxSuma[i + 1] = Suma[i];
- Suma = auxSuma;
- }
- return Suma;
- }
- };
- void citire(Numar*& vect, int& dim)
- {
- ifstream fin("numereMari.txt");
- fin >> dim;
- vect = new Numar[dim];
- for (int i = 0; i < dim; ++i)
- {
- Numar N;
- fin >> N;
- vect[i] = N;
- }
- }
- void afisare(Numar* vect, int dim)
- {
- for (int i = 0; i < dim; ++i)
- cout << vect[i] << " ";
- cout << endl;
- }
- Numar nrMin(Numar* vect, int dim)
- {
- Numar Min = vect[0];
- for (int i = 1; i < dim; ++i)
- if (vect[i] < Min)
- Min = vect[i];
- return Min;
- }
- Numar nrMax(Numar* vect, int dim)
- {
- Numar Max = vect[0];
- for (int i = 1; i < dim; ++i)
- if (vect[i] > Max)
- Max = vect[i];
- return Max;
- }
- int main()
- {
- Numar* vect;
- int dim;
- citire(vect, dim);
- cout << "Elementele sirului: ";
- afisare(vect, dim);
- Numar Min = nrMin(vect, dim), Max = nrMax(vect, dim);
- cout << "Cel mai mic numar din sir: " << Min << endl;
- cout << "Cel mai mare numar din sir: " << Max << endl << endl;
- cout << "Suma dintre cel mai mic si cel mai mare numar din sir este: " << Min + Max << endl;
- try
- {
- cout << Min[0] << endl;
- cout << Min.getCifra(12) << endl;
- }
- catch (out_of_range& e)
- {
- cout << "Eroare de tipul: " << e.what();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement