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;

}