|
Programare orientata pe obiecte
Tema de casa
(*) Sa se realizeze o aplicatie care sa gestioneze o multine de vectori liberi din plan. Fiecare vector este specificat prin coordonatele punctului de origine si al varfului. Aplicatia trebuie sa permita urmatoarele operatii:
Adaugarea unui vector in multimea de vectori
Stergerea unui vector din multimea de vectori
Translatia unui vector in plan
Operatiile de adunare si scadere a doi vectori
Testarea daca multimea de vectori poate reprezenta laturile unui poligon; in caz negativ, se va adauga un vector suplimentar astfel incat sa se formeze poligonul
Generarea poligonului format de vectorii liberi si testarea daca acesta este convex.
Afisarea poligonului format de vectorii liberi
Determinarea ariei (in cazul unui poligon convex) si a perimetrului poligonului format de vectorii liberi
Daca multimea de vectori nu reprezenta laturile unui poligon convex; se va determina infasuratoarea convexa a multimii de puncte formata de varfurile vectorilor, iar aceasta va genera o noua multime de vectori liberi, care formeaza poligonul convex
Se vor utiliza cel putin clasele VectorLiber, Poligon si ListaPoligoane.
Am folosit urmatoarele clase:
Fisierul header:
#include <iostream>
#include<cmath>
using namespace std;
typedef int stiva[20];
class punct
void setX(int zx)
void setY(int zy)
int getX()
int getY()
void afisPunct()
class Coord
int getOx()
void setOy(int p=0)
int getOy()
void setVx(int p=0)
int getVx()
void setVy(int p=0)
int getVy()
void citireCoord();
void afisareCoord();
class VectorLiber : public Coord
void setCoord(int x1=0, int y1=0, int x2=0, int y2=0)
VectorLiber getCoord()
void setTranslatie(int i, int j);
VectorLiber& operator+(VectorLiber&);
VectorLiber& operator-(VectorLiber&);
///CLASA MultVector
///Pentru implementarea multimii de vectori
class MultVector
int getOk()
void tipar();
void init();
int succesor();
int valid();
int solutie();
void back();
~MultVector()
///clasa pentru implementarea unui tip de date abstract care sa retina inf despre poligon
class Poligon
else cout<<'Multimea de vectori nu poate crea un poligon!';
}
int tellIfPolygon()
void afisPoligon();
float detArie();
float detPerimetru();
~Poligon()
//lista de poligoanes
class ListaPoligoane
};
void setNrPoligoane(int n);
int getNrPoligoane();
void afisListaPoligoane();
void AddPoligon(Poligon p)
~ListaPoligoane();
Fisier sursa pentru implementarea modulului
#include'header. h'
Coord::Coord()
void Coord::citireCoord()
void Coord::afisareCoord()
VectorLiber& VectorLiber::operator +(VectorLiber& operand)
VectorLiber& VectorLiber::operator -(VectorLiber& operand)
void VectorLiber::setTranslatie(int i, int j)
MultVector::MultVector(int n, int kk, int k1)
void MultVector::citireVectori()
void MultVector::AddVect(VectorLiber p)
void MultVector::DelVect(VectorLiber p)
} if(!ok) cout<<'Vectorul pe care doriti sa-l stergeti nu exista!';
delete[] vector ; //eliberarea memoriei pt. vector
nrVectori=k;
vector=v;
void MultVector::tipar()
void MultVector::init()
int MultVector::succesor()
else return 0;
}
int MultVector::valid()
int MultVector::solutie()
void MultVector::back() while( (as=succesor()) && !valid());
if (as)
if (solutie()) setOk(1);
else
else k--;
}
void MultVector::afisareVectori()
cout<<endl;
void Poligon::afisPoligon()
cout<<endl;
}
float Poligon::detArie()
i++;
v[i]. setX(varfPol[0]. getX());v[i]. setY(varfPol[0]. getY());
int s=0;
for (i=1;i<=nrVarfuri;i++) s+=v[i]. getX()*v[i+1]. getY()-v[i]. getY()*v[i+1]. getX();
return s/2;
}
float Poligon::detPerimetru()
cout<<endl;
for (i=1;i<nrVarfuri;i++)
p+=sqrt( pow(varfPol[i]. getX()-varfPol[i-1]. getX() , 2)+pow( varfPol[i]. getY()-varfPol[i-1]. getY() , 2));
p+=sqrt( pow(varfPol[nrVarfuri-1]. getX()-varfPol[0]. getX() , 2) + pow( varfPol[nrVarfuri-1]. getY()-varfPol[0]. getY() , 2) );
return p;
}