VA ROG AJUTOR!!! urgent
Programare orientata pe obiecte:
clasa figuri geometrice (triunghi, dreptunghi) obinuta prin derivare din clasa linie; calcul aria, perimetrul figurilor obtinute.
Multumesc mult!
Răspunsuri la întrebare
#include <iostream>
#include <cmath>
using namespace std;
struct Punct {
double x, y;
};
class Linie {
Punct a, b;
public:
double getLungime() {
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y-b.y));
}
Linie(Punct _a = { 0,0 }, Punct _b = {0,0}) :
a(_a), b(_b) {}
};
class FiguraGeometrica {
public:
FiguraGeometrica() {};
virtual double getPerimetru() = 0;
virtual double getAria() = 0;
};
class Triunghi : public FiguraGeometrica {
Punct a, b, c;
public:
double getPerimetru() {
return Linie(a, b).getLungime() + Linie(a, c).getLungime() + Linie(b, c).getLungime();
}
double getAria() {
double p = getPerimetru() / 2;
return sqrt(p * (p - Linie(a, b).getLungime()) * (p - Linie(a, c).getLungime()) * (p - Linie(b, c).getLungime()));
}
Triunghi(Punct _a = { 0,0 }, Punct _b = { 0,0 }, Punct _c = {0,0}) :
a(_a), b(_b), c(_c) {};
};
class Dreptunghi : public FiguraGeometrica {
Punct a, b;
public:
double lungime() {
if (a.x > b.x) return a.x - b.x;
return b.x - a.x;
}
double latime() {
if (a.y > b.y) return a.y - b.y;
return b.y - a.y;
}
double getPerimetru() {
return 2 * (lungime() + latime());
}
double getAria() {
return lungime() * latime();
}
Dreptunghi(Punct _a = { 0,0 }, Punct _b = {0,0}) :
a(_a), b(_b) {}
};
int main() {
Dreptunghi drept({ 0,0 }, { 5,5 });
cout << "Perimetru dreptunghi : " << drept.getPerimetru() << ", aria " << drept.getAria();
Triunghi tri({ 0,0 }, { 0,1 }, {1,1});
cout << "\nPerimetru triunghi : " << tri.getPerimetru() << ", aria " << tri.getAria();
}
Nota :
Nu are absolut niciun sens sa avem clasele triunghi si dreptunghi derivate din linie (nu se mosteneste absolut nimic), in schimb putem folosi clasa de baza abstracta FiguraGeometrica ca si clasa de baza pentru cele doua figuri, avand astfel posibilitatea de a trata in mod unitar cele doua figuri geometrice.