Aperfeiçoamento da classe Retangulo. Crie uma classe Retangulo mais sofisticada do que aquela criada no Exercício 17.11. Essa classe armazena apenas as coordenadas cartesianas dos quatro cantos do retângulo. O construtor chama uma função set, que aceita quatro conjuntos de coordenadas e verifica se cada uma delas está no primeiro quadrante sem coordenadas x ou y isoladas maiores que 20.0. A função set também verifica se as coordenadas fornecidas realmente especificam um retângulo. Forneça funções-membro que calculem comprimento, largura, perimetro e area. O comprimento é a maior das duas dimensões. Inclua uma função predicado quadrado que determine se o retângulo é um quadrado.
Passo 1
Fala Galera!!! Tudo certo? Espero que sim!! Bora para mais um exercício.
Vamos criar um programa que utiliza uma classe Rectangle que ordena as coordenadas cartesianas dos quatro cantos do retângulo. O programa irá calcular o comprimento, largura, perímetro e área do retângulo.
Passo 2
Vamos iniciar definindo a classe com as funções-membros
//arquivos de cabeçalho
#ifndef P16_8_H
#define P16_8_H
#include
#include
#include
using std::cout;
using std::ios;
using std::setprecision;
using std::setiosflags;
using std::resetiosflags;
//classe Rectangle
class Rectangle {
public:
//constrturo com argumentos
Rectangle( double *, double *, double *, double * );
//definindo coordernadas
void setCoord( double *, double *, double *, double * );
//definindo perimetro
void perimeter( void );
//definindo area
void area( void );
void square( void );
private:
//variaveis de pontos
double point1[ 2 ];
double point2[ 2 ];
double point3[ 2 ];
double point4[ 2 ];
};
#endif
Passo 3
Após definida a classe, precisamos definir as funções e inicializar o construtor da classe com os parâmetros. A funções definidas serão responsáveis pelas coordenadas do retângulo e retornar o cálculo da área, perímetro e verificar se o retângulo é ou não um quadrado.
Rectangle::Rectangle( double *a, double *b, double *c, double *d )
{ setCoord( a, b, c, d ); }
//função cordenadas
void Rectangle::setCoord( double *p1, double *p2, double *p3, double * p4 )
{
// Disposição dos pontos
// p4.........p3
// . .
// . .
// p1.........p2
const int x = 0, y = 1; // added for clarity
// valida todos os pontos
point1[ x ] = ( p1[ x ] > 20.0 || p1[ x ]
point1[ y ] = ( p1[ y ] > 20.0 || p1[ y ]
point2[ x ] = ( p2[ x ] > 20.0 || p2[ x ]
point2[ y ] = ( p2[ y ] > 20.0 || p2[ y ]
point4[ x ] = ( p4[ x ] > 20.0 || p4[ x ]
point3[ x ] = ( p3[ x ] > 20.0 || p3[ x ]
point3[ y ] = ( p3[ y ] > 20.0 || p3[ y ]
point4[ y ] = ( p4[ y ] > 20.0 || p4[ y ]
// verifica se o ponto formam o retangulo
if ( p1[ y ] == p2[ y ] && p1[ x ] ==
p4[ x ] && p2[ x ] == p3[ x ] && p3[ y ] == p4[ y ] )
{
perimeter();
area();
square();
}
else
cout
}
//função perimetro
void Rectangle::perimeter( void )
{
double l = fabs( point4[ 1 ] - point1[ 1 ] ),
w = fabs( point2[ 0 ] - point1[ 0 ] );
cout
w ? l : w )
w ? w : l )
}
//função area
void Rectangle::area( void )
{
double l = fabs( point4[ 1 ] - point1[ 1 ] ),
w = fabs( point2[ 0 ] - point1[ 0 ] );
cout
}
//função quadrado
void Rectangle::square( void )
{
const int x = 0, y = 1; // added for clarity
if ( fabs( point4[ y ] - point1[ y ] ) ==
fabs( point2[ x ] - point1[ x ] ) )
cout
}
Passo 4
Em seguida vamos iniciar a função principal main() para inicializar o objeto da classe com as coordenadas definidas e passar os parâmetros para a funções que irá exibir os resultados.
int main()
{
//define as cordenadas
double w[ 2 ] = { 1.0, 1.0 }, x[ 2 ] = { 5.0, 1.0 },
y[ 2 ] = { 5.0, 3.0 }, z[ 2 ] = { 1.0, 3.0 },
j[ 2 ] = { 0.0, 0.0 }, k[ 2 ] = { 1.0, 0.0 },
m[ 2 ] = { 1.0, 1.0 }, n[ 2 ] = { 0.0, 1.0 },
v[ 2 ] = { 99.0, -2.3 };
//passagem dos parametros
Rectangle a( z, y, x, w ), b( j, k, m, n ),
c( w, x, m, n ), d( v, x, y, z );
return 0;
}
Passo 5
A saída do nosso programa será:

Portanto, nosso programa está funcionando corretamente.
E por hoje é só galera!!! Até o próximo exercício.
Resposta
Código:
//arquivos de cabeçalho
#ifndef P16_8_H
#define P16_8_H
#include
#include
#include
using std::cout;
using std::ios;
using std::setprecision;
using std::setiosflags;
using std::resetiosflags;
//classe Rectangle
class Rectangle {
public:
//constrturo com argumentos
Rectangle( double *, double *, double *, double * );
//definindo coordernadas
void setCoord( double *, double *, double *, double * );
//definindo perimetro
void perimeter( void );
//definindo area
void area( void );
void square( void );
private:
//variaveis de pontos
double point1[ 2 ];
double point2[ 2 ];
double point3[ 2 ];
double point4[ 2 ];
};
#endif
Rectangle::Rectangle( double *a, double *b, double *c, double *d )
{ setCoord( a, b, c, d ); }
//função cordenadas
void Rectangle::setCoord( double *p1, double *p2, double *p3, double * p4 )
{
// Disposição dos pontos
// p4.........p3
// . .
// . .
// p1.........p2
const int x = 0, y = 1; // added for clarity
// valida todos os ponto
point1[ x ] = ( p1[ x ] > 20.0 || p1[ x ]
point1[ y ] = ( p1[ y ] > 20.0 || p1[ y ]
point2[ x ] = ( p2[ x ] > 20.0 || p2[ x ]
point2[ y ] = ( p2[ y ] > 20.0 || p2[ y ]
point4[ x ] = ( p4[ x ] > 20.0 || p4[ x ]
point3[ x ] = ( p3[ x ] > 20.0 || p3[ x ]
point3[ y ] = ( p3[ y ] > 20.0 || p3[ y ]
point4[ y ] = ( p4[ y ] > 20.0 || p4[ y ]
// verifica se o ponto formam o retangulo
if ( p1[ y ] == p2[ y ] && p1[ x ] ==
p4[ x ] && p2[ x ] == p3[ x ] && p3[ y ] == p4[ y ] )
{
perimeter();
area();
square();
}
else
cout
}
//função perimetro
void Rectangle::perimeter( void )
{
double l = fabs( point4[ 1 ] - point1[ 1 ] ),
w = fabs( point2[ 0 ] - point1[ 0 ] );
cout
w ? l : w )
w ? w : l )
}
//função area
void Rectangle::area( void )
{
double l = fabs( point4[ 1 ] - point1[ 1 ] ),
w = fabs( point2[ 0 ] - point1[ 0 ] );
cout
}
//função quadrado
void Rectangle::square( void )
{
const int x = 0, y = 1; // added for clarity
if ( fabs( point4[ y ] - point1[ y ] ) ==
fabs( point2[ x ] - point1[ x ] ) )
cout
}
int main()
{
//define as cordenadas
double w[ 2 ] = { 1.0, 1.0 }, x[ 2 ] = { 5.0, 1.0 },
y[ 2 ] = { 5.0, 3.0 }, z[ 2 ] = { 1.0, 3.0 },
j[ 2 ] = { 0.0, 0.0 }, k[ 2 ] = { 1.0, 0.0 },
m[ 2 ] = { 1.0, 1.0 }, n[ 2 ] = { 0.0, 1.0 },
v[ 2 ] = { 99.0, -2.3 };
//passagem dos parametros
Rectangle a( z, y, x, w ), b( j, k, m, n ),
c( w, x, m, n ), d( v, x, y, z );
return 0;
}