• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

saramgsilva

[C++] Classes Poligono, Quadrilatero, Triangulo

1 mensagem neste tópico

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora