Jump to content

[C++] Classes Poligono, Quadrilatero, Triangulo


saramgsilva

Recommended Posts

mais um conjunto de classes que criei, a classe Poligono, Poligono não herda a classe Ponto mas vais usar os seus métodos públicos.

Nota: para os que tentarem usar estes ficheiros, nao se esqueçam que precisam da classe Par e Ponto, que também disponibilizo...

(tópico sobre a classe Par e Ponto aqui ...)

Comecei por criar a classe Poligono

Poligono.cpp:

#include <iostream>
#include <cmath>
#include "Ponto.cpp"
using namespace std;

class Poligono {
  private:
    int npontos;
  protected:
    Ponto p[100];
  public:
     Poligono(){};
     Poligono(int n){
         int i;

         npontos=n;
         for(i=0;i<n;i++)
          {
            p[i].set_abc(0.0);
            p[i].set_ord(0.0);
          }

     }

     virtual double perimetro()
     { int i;
       double pm;

        for(i=0, pm=0.0; i<npontos-1; i++)
         { pm=pm+p[i].distance1(p[i+1]); }
        pm=pm+p[npontos-1].distance1(p[0]);
        return pm;       
     }     

     virtual char * tipo(){return "poligono";}

     virtual void printpm()
     {
       cout<<"o perimentro"<<tipo()<<"e' "<<perimetro();
     }

     virtual Ponto ponto(int n){ return p[n-1]; }


};// fim da classe poligono

Criei 2 subclasses da classe Poligono: Triangulo e Quadrilatero

Triangulo.cpp:

#include <iostream>
#include <cmath>
#include "Poligono.cpp"
using namespace std;

class Triangulo : public Poligono{
     private:

     public:

       Triangulo():Poligono(3){};
       Triangulo(Ponto a, Ponto b, Ponto c):Poligono(3)
       {
         p[0]=a;
         p[1]=b;
         p[2]=c;
       }

       virtual char * tipo()const{ return "triangulo"; }



};// fim da classe triangulo

Quadrilatero.cpp:

#include <iostream>
#include <cmath>
#include "Poligono.cpp"
using namespace std;

class Quadrilatero : public Poligono{
     private :

     public:

     Quadrilatero():Poligono(4){}
     Quadrilatero(Ponto a, Ponto b, Ponto c, Ponto d):Poligono(4)
     { double d1,d2,d3; 
       p[0]=a;
       p[1]=b;
       p[2]=c;
       p[3]=d;
           // kero que seja convexo....
        //verifica qual a menor valor de d1, d2 ou d3, isto e',  a menor distancia

        d1=p[0].distance1(p[1])+p[1].distance1(p[2])+p[2].distance1(p[3])+p[3].distance1(p[0]);
        d2=p[0].distance1(p[2])+p[2].distance1(p[1])+p[1].distance1(p[3])+p[1].distance1(p[0]);   
        d3=p[0].distance1(p[1])+p[1].distance1(p[3])+p[3].distance1(p[2])+p[2].distance1(p[0]);

        //e alterar ou nao a ordem dos pontos, para termos o um caminho sem cruzamentos 

        if ((d2<d1)&&(d2<d3))
        {
          p[1]=c;
          p[2]=b;
        }
        else
             if ((d3<d2)&&(d3<d1))
             {   p[2]=d;
              p[3]=c;
             }


     }

     virtual char* tipo()const {return "quadrilatero";}

};// fim da classe quadrilatero

e ainda criei as classe Quadrado que é subclasse da classe Quadrilatero

Quadrado.cpp:

#include <iostream>
#include <cmath>
#include "Quadrilatero.cpp"
using namespace std;

class  Quadrado : public Quadrilatero {
      private:
       double lado;
      public:
      Quadrado():Quadrilatero(){}
      Quadrado(Ponto a, double c):Quadrilatero()
      {  lado=c;
         p[0]=a;

         p[1].set_left(a.get_left()+lado);
         p[1].set_right(a.get_left());

         p[2].set_left(a.get_left()+lado);
         p[2].set_right(a.get_left()-lado); 

         p[3].set_left(a.get_left());
         p[3].set_right(a.get_left()-lado); 

     }


      virtual void set_lado(double x){lado=x;}
      virtual double get_lado()const{return lado;}

      virtual char* tipo()const{return "quadrado"; }

      virtual double area1()
      {
        return p[0].distance1(p[1])*p[1].distance1(p[2])*p[2].distance1(p[3])*p[3].distance1(p[0]);
      }

      virtual double area2()const
      { return pow(lado,4);
      }



};// fim da classe quadrado

os próximos código servem para usar as classe criadas:

UsarTriangulo.cpp:

#include <iostream>
#include <cmath>
#include "Triangulo.cpp"
using namespace std;

int main()
{
 Ponto a,b,c;
 cout << "Ponto 1: ";
 a.read();
 cout << "Ponto 2: ";
 b.read() ;
 cout << "Ponto 3: ";
 c.read();
 Triangulo t(a,b,c);
 cout << " O perimetro deste "<<t.tipo()<<"  e' " << t.perimetro() << "." << endl;
 cout << " Os pontos deste "<<t.tipo()<<" sao: " << endl;
 Ponto x;
 x = t.ponto(1);
 x.print();
 x = t.ponto(2);
 x.print();
 x = t.ponto(3);
 x.print();


 cout<<"\n\n\tPrima um numero inteiro para sair->";
 int sair; cin>>sair;

 return 0;
}

UsarQuadrilatero.cpp:

#include <iostream>
#include <cmath>
#include "Quadrilatero.cpp"
using namespace std;

int main()
{
 Ponto a,b,c,d;
 cout << "Ponto 1: ";
 a.read();
 cout << "Ponto 2: ";
 b.read() ;
 cout << "Ponto 3: ";
 c.read();
 cout << "Ponto 4: ";
 d.read();
 Quadrilatero q(a,b,c,d);
 cout << " O perimetro deste quadrilatero  e' " << q.perimetro() << "." << endl;
 cout << " Os pontos deste quadrilatero sao: " << endl;
 Ponto x;
 x = q.ponto(1);
 x.print();
 x = q.ponto(2);
 x.print();
 x = q.ponto(3);
 x.print();
 x = q.ponto(4);
 x.print();

 cout<<"\n\n\tPrima um numero inteiro para sair->";
 int sair; cin>>sair;

 return 0;
}

UsarQuadrado.cpp:


#include <iostream>
#include <cmath>
#include "Quadrado.cpp"
using namespace std;

int main()
{
 Ponto a;
 double c;

 cout << "Ponto 1: ";
 a.read();
 cout <<"\n medida do lado:";
 cin>>c;

 Quadrado q(a,c);
 cout << " O perimetro deste "<< q.tipo() <<" e' " << q.perimetro() << "." << endl;
 cout << " A area1 deste "<< q.tipo() <<" e' " << q.area1() << "." << endl;
 cout << " A area2 deste "<< q.tipo() <<" e' " << q.area2() << "." << endl;
 cout << " Os pontos deste "<<q.tipo()<<" sao: " << endl;
 Ponto x;
 x = q.ponto(1);
 x.print();
 x = q.ponto(2);
 x.print();
 x = q.ponto(3);
 x.print();
 x = q.ponto(4);
 x.print();

   cout<<"\n\n\tPrima um numero inteiro para sair->";
 int sair; cin>>sair;


 return 0;
}

em resumo temos:

Poligono

Triangulo Quadrilatero

Quadrado

e os ficheiros para usar estas classes

UsarTriangulo

UsarQuadrilatero

UsarQuadrado

se tiverem alguma dúvida ou caso encontrem alguma gafe falem comigo...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.