You are on page 1of 10

Studentul grupei : AI-191 Tronciu Alexandru

Varianta Nr.2

Sarcina:
Creaţi clasa abstractă de bază Figure cu funcţia virtuală - aria. Square, Circle, Triangle, Trapeze
în care funcţia dată este predefinită. În funcţia main determinaţi masivul de pointeri la clasa
abstractă, cărei i se atribuie adresele obiectelor claselor derivate. Aria trapezului: S=(a+b)h/2.

Codul programului:

#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

class Figure
{
int type;
public:
Figure(int type=0);
~Figure();
int fig();
virtual void Change(int type);
virtual void Aria();
};

int Figure::fig()
{
return type;
}

Figure::Figure(int type)
{
this->type=type;
}

Figure::~Figure()
{
}

void Figure::Change(int type)


{
this->type=type;
}

void Figure::Aria()
{
}

class Square : virtual public Figure


{
float l;
public:
Square(int type=1, float l=0):Figure(type)
{
this->l=l;
}
~Square();
void Change(float l);
void Aria();
};

Square::~Square()
{
}

void Square::Change(float l)
{
this->l=l;
}

void Square::Aria()
{
float Aria, Perimetrul;
cout << "Figura este : patrat" << endl;
cout << "Lungimea laturii este : " << l << "cm" << endl;
Aria=pow(l,2);
Perimetrul=4*l;
cout << "Aria este : " << Aria << "cm^3"<<endl;
cout << "Perimetrul este : " << Perimetrul<< " cm^3" <<endl;
}

class Circle : virtual public Figure


{
float raza;
public:
Circle(int type=2, float raza=0):Figure(type)
{
this->raza=raza;
}
~Circle();
void Change(float raza);
void Aria();
};

void Circle::Change(float raza)


{
this->raza=raza;
}
Circle::~Circle()
{
}

void Circle::Aria()
{
float Aria, Lungime;
cout << "Figura este : cerc" << endl;
cout << "Raza este : " << raza << "cm" << endl;
Aria=3.14*pow(raza, 2);
Lungime=2*3.14*raza;
cout << "Aria este : " << Aria << "cm^3" << endl;
cout << "Lungimea este : " << Lungime << "cm" << endl;
}

class Triangle : virtual public Figure


{
float a, b, c, h;
public:
Triangle(int type=3, float a=0, float b=0, float c=0, float h=0):Figure(type)
{
this->a=a;
this->b=b;
this->c=c;
this->h=h;
}
void Change(float a, float b, float c, float h);
virtual void Aria();
};

void Triangle::Change(float a, float b, float c, float h)


{
this->a=a;
this->b=b;
this->c=c;
this->h=h;
}

void Triangle::Aria()
{
float Aria, Perimetrul;
cout << "Figura este : triunghi" << endl;
cout << "Lungimea AB : " << a << "cm" << endl;
cout << "Lungimea AC: " << b << "cm" << endl;
cout << "Lungimea BC : " << c << "cm" << endl;
cout << "Inaltimea este : " << h << "cm" << endl;
Aria=(c*h)/2;
Perimetrul=a+b+c;
cout << "Aria este : " << Aria << "cm^3" << endl;
cout << "Perimetrul este : " << Perimetrul << "cm^2" << endl;
}

class Trapeze : virtual public Figure


{
float B, b, h, l;
public:
Trapeze(int type=4, float B=0, float b=0, float l=0, float h=0):Figure(type)
{
this->B=B;
this->b=b;
this->h=h;
this->l=l;
}
void Change(float B, float b, float h, float l);
void Aria();
};

void Trapeze::Change(float B, float b, float h, float l)


{
this->B=B;
this->b=b;
this->h=h;
this->l=l;
}

void Trapeze::Aria()
{
float Aria, Perimetrul;
cout << "Figura este : trapez" << endl;
cout << "Lungimea bazei mici este: " << b << "cm" <<endl;
cout << "Lungimea bazei mari este: " << B << "cm" << endl;
cout << "Lungimea laturii laterale este: " << l << "cm" << endl;
cout << "Inaltimea este: " << h << "cm" << endl;
Aria = (B+b)*h/2;
Perimetrul=b+B+2*l;
cout << "Aria este : " << Aria << "cm^3" << endl;
cout << "Perimetrul este : " << Perimetrul << "cm^2" << endl;
}

int main()
{
int n;
int figura;
int exec;
int alegere;
float a, b, c, l, h;
cout << "Introduceti numarul de figuri pe care doriti sa le introduceti :" << endl;
cin >> n;
Figure ** A = new Figure*[n];
for(int i=0; i<n; i++)
{
system("cls");
cout << "Figura nr " << i+1 << endl;
cout << "Alegeti o figura din lista propusa : " << endl;
cout << "1) Patrat" << endl;
cout << "2) Cerc" << endl;
cout << "3) Triunghi" << endl;
cout << "4) Trapez" << endl;
do
{
cin >> figura;
if(figura<1 || figura>4)
{
cout << "Depasirea limitei propuse" << endl;
}
else
{
switch(figura)
{
case 1 :
{
cout << "Introduceti latura patratului" << endl;
cin >> l;
A[i] = new Square(1, l);
}
break;
case 2 :
{
cout << "Introduceti raza cercului" << endl;
cin >> l;
A[i] = new Circle(2, l);
}
break;
case 3 :
{
cout << "Introduceti laturile a triunghiului BAC" << endl;
cout << "latura BA" << endl;
cin >> a;
cout << "latura AC" << endl;
cin >> b;
cout << "latura BC" << endl;
cin >> c;
cout << "Introduceti inaltimea triunghiului" << endl;
cin >> h;
A[i] = new Triangle(3, a, b, c, h);
}
break;
case 4 :
{
cout << "Introduceti baza mare" << endl;
cin >> a;
cout << "Introduceti baza mica " << endl;
cin >> b;
cout << "Introduceti lungimea laturii laterale" << endl;
cin >> l;
cout << "Introduceti inaltimea trapezului" << endl;
cin >> h;
A[i] = new Trapeze(4, a, b, l, h);
}
break;
}
}
}while(figura<1 || figura>4);
}
do
{
system("cls");
cout << "\t\t>>>Menu<<<\t\t" << endl;
cout << "1) Afisarea figurilor geommetrice" << endl;
cout << "2) Schimbarea datelor unei figuri geometrice" << endl;
cout << "3) Schimbarea unei figuri geometrice din una in alta" << endl;
cout << "0) Exit" << endl;
cin >> exec;
if(exec<0 || exec >3)
{
cout << "Dipasirea limitei propuse" << endl;
} else
{
switch (exec)
{
case 1:
{
system("cls");
for(int i=0; i<n; i++)
{
cout << "Figura nr " << i+1 << endl;
A[i]->Aria();
cout << endl;
}
}
break;
case 2:
{
system("cls");
cout << "Alegi o figura din cele propse "<< endl;
system("pause");
system("cls");
for(int i=0; i<n; i++)
{
cout << "Figura nr " << i+1 << endl;
A[i]->Aria();
cout << endl;
}
do
{
cin >> alegere;
alegere=alegere-1;
if(alegere<0||alegere>n-1)
{
cout << "Depasirea limitei propuse" << endl;
}
else
{
switch(A[alegere]->fig())
{
case 1 :
{
cout << "Introduceti latura patratului" << endl;
cin >> l;
A[alegere] = new Square(1, l);
}
break;
case 2 :
{
cout << "Introduceti raza cercului" << endl;
cin >> l;
A[alegere] = new Circle(2, l);
}
break;
case 3 :
{
cout << "Introduceti laturile a triunghiului BAC" << endl;
cout << "latura BA" << endl;
cin >> a;
cout << "latura AC" << endl;
cin >> b;
cout << "latura BC" << endl;
cin >> c;
cout << "Introduceti inaltimea triunghiului" << endl;
cin >> h;
A[alegere] = new Triangle(3, a, b, c, h);
}
break;
case 4 :
{
cout << "Introduceti baza mare" << endl;
cin >> a;
cout << "Introduceti baza mica " << endl;
cin >> b;
cout << "Introduceti lungimea laturii laterale" << endl;
cin >> l;
cout << "Introduceti inaltimea trapezului" << endl;
cin >> h;
A[alegere] = new Trapeze(4, a, b, l, h);
}
break;
}
}
}while (alegere<0||alegere>n-1);
}
break;
case 3:
{
system("cls");
cout << "Alegi o figura din cele propse "<< endl;
system("pause");
system("cls");
for(int i=0; i<n; i++)
{
cout << "Figura nr " << i+1 << endl;
A[i]->Aria();
cout << endl;
}
do
{
cin >> alegere;
alegere=alegere-1;
if(alegere<0||alegere>n-1)
{
cout << "Depasirea limitei propuse" << endl;
}
else
{
system("cls");
cout << "Alegeti o figura din lista propusa : " << endl;
cout << "1) Patrat" << endl;
cout << "2) Cerc" << endl;
cout << "3) Triunghi" << endl;
cout << "4) Trapez" << endl;
do
{
cin >> figura;
if(figura<1 || figura>4)
{
cout << "Depasirea limitei propuse" << endl;
}
else
{
switch(figura)
{
case 1 :
{
cout << "Introduceti latura patratului" << endl;
cin >> l;
A[alegere] = new Square(1, l);
}
break;
case 2 :
{
cout << "Introduceti raza cercului" << endl;
cin >> l;
A[alegere] = new Circle(2, l);
}
break;
case 3 :
{
cout << "Introduceti laturile a triunghiului BAC" << endl;
cout << "latura BA" << endl;
cin >> a;
cout << "latura AC" << endl;
cin >> b;
cout << "latura BC" << endl;
cin >> c;
cout << "Introduceti inaltimea triunghiului" << endl;
cin >> h;
A[alegere] = new Triangle(3, a, b, c, h);
}
break;
case 4 :
{
cout << "Introduceti baza mare" << endl;
cin >> a;
cout << "Introduceti baza mica " << endl;
cin >> b;
cout << "Introduceti lungimea laturii laterale" << endl;
cin >> l;
cout << "Introduceti inaltimea trapezului" << endl;
cin >> h;
A[alegere] = new Trapeze(4, a, b, l, h);
}
break;
}
}
}while(figura<1 || figura>4);
}
}while (alegere<0||alegere>n-1);
}
break;
case 0 :
{
for(int i=0; i<n; i++)
{
delete A[i];
}
delete []A;
}
break;
}
}
system("pause");
}while (exec!=0);
return 0;
}

You might also like