Aperfeiçoamento da classe Retangulo. Modifique a classe Retangulo do Exercício 17.12 para incluir uma função desenhar que mostre o retângulo dentro de uma caixa de 25 por 25 delimitando a parte do primeiro quadrante em que o retângulo reside. Inclua uma função setFillCharacter que especifique o caractere do qual o corpo do retângulo será desenhado. Inclua uma função setPerimeterCharacter que especifique o caractere que será usado para desenhar a borda do retângulo. Se você for ambicioso, poderá incluir funções para redimensionar o tamanho do retângulo, girá-lo e movimentá-lo dentro da parte designada do primeiro quadrante.

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. Nosso programa também terá uma função para desenhar e mostrar o retângulo, para isso vamos usar uma função capaz de operar com os caracteres que irá exibir o desenho de um quadrado com um retângulo dentro.

Passo 2

Vamos iniciar definindo a classe com as funções-membros

//arquivos de cabeçalho

#include

#include

#include

using std::cout;

using std::ios;

using namespace std;

using std::setprecision;

using std::setiosflags;

using std::resetiosflags;

//definindo a classe

class Rectangle {

public:

//definindo o construtor

//definindo as funções

Rectangle( double *, double *, double *, double *, char, char );

void setCoord( double *, double *, double *, double * );

void perimeter( void );

void area( void );

void draw( void );

void square( void );

void setFillCharacter( char c ) { fillChar = c; }

void setPerimeterCharacter( char c ) { periChar = c;}

bool isValid( void ) { return valid; }

void setValid( bool v ) { valid = v; }

private:

//definindo os pontos

// e as variaveis para o desenho

double point1[ 2 ];

double point2[ 2 ];

double point3[ 2 ];

double point4[ 2 ];

char fillChar;

char periChar;

bool valid;

};

Passo 3

Após definida a classe, precisamos definir as funções e inicializar o construtor da classe com os parâmetros.

//construtor

Rectangle::Rectangle( double *a, double *b, double *c, double *d,

char x, char y )

{

setCoord( a, b, c, d );

setFillCharacter( x );

setPerimeterCharacter( y );

}

//função coordernadas

void Rectangle::setCoord( double *p1, double *p2,

double *p3, double *p4 )

{

// Disposição de pontos

// p4.........p3

// . .

// . .

// p1.........p2

const int x = 0, y = 1; // added for clarity

// validadndo 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 ]

point3[ x ] = ( p3[ x ] > 20.0 || p3[ x ]

point3[ y ] = ( p3[ y ] > 20.0 || p3[ y ]

point4[ x ] = ( p4[ x ] > 20.0 || p4[ x ]

point4[ y ] = ( p4[ y ] > 20.0 || p4[ y ]

// verifique se os pontos formam um retângulo

if (point1[ y ] == point2[ y ] && point1[ x ] == point4[ x ] &&

point2[ x ] == point3[ x ] && point3[ y ] == point4[ y ]) {

perimeter();

area();

square();

setValid( true ); // conjunto de pontos válido

}

else {

cout

setValid( false ); //conjunto de pontos inválidos

}

}

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

}

void Rectangle::draw( void )

{

for ( double y = 25.0; y >= 0.0; --y ) {

for ( double x = 0.0; x

if ( ( point1[ 0 ] == x && point1[ 1 ] == y ) ||

( point4[ 0 ] == x && point4[ 1 ] == y ) ) {

// imprime o perímetro horizontal do retângulo

while ( x

cout

++x;

}

// imprime o restante do quadrante

cout

}

// imprime o perímetro vertical do retângulo

else if ( ( ( x = point1[ 0 ] ) ) &&

point4[ 1 ] >= y && point1[ 1 ]

cout

//preenche dentro do retângulo

for ( x++; x

cout

++x;

}

cout

}

else

cout

// imprime o fundo do quadrante

}

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()

{

//inicializando objeto

//com os parametros

//chamada da função

double xy1[ 2 ] = { 12.0, 12.0 }, xy2[ 2 ] = { 18.0, 12.0 },

xy3[ 2 ] = { 18.0, 20.0 }, xy4[ 2 ] = { 12.0, 20.0 };

Rectangle a( xy1, xy2, xy3, xy4, '?', '*' );

if ( a.isValid() )

a.draw();

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

#include

#include

#include

using std::cout;

using std::ios;

using namespace std;

using std::setprecision;

using std::setiosflags;

using std::resetiosflags;

//definindo a classe

class Rectangle {

public:

//definindo o construtor

//definindo as funções

Rectangle( double *, double *, double *, double *, char, char );

void setCoord( double *, double *, double *, double * );

void perimeter( void );

void area( void );

void draw( void );

void square( void );

void setFillCharacter( char c ) { fillChar = c; }

void setPerimeterCharacter( char c ) { periChar = c;}

bool isValid( void ) { return valid; }

void setValid( bool v ) { valid = v; }

private:

//definindo os pontos

// e as variaveis para o desenho

double point1[ 2 ];

double point2[ 2 ];

double point3[ 2 ];

double point4[ 2 ];

char fillChar;

char periChar;

bool valid;

};

//construtor

Rectangle::Rectangle( double *a, double *b, double *c, double *d,

char x, char y )

{

setCoord( a, b, c, d );

setFillCharacter( x );

setPerimeterCharacter( y );

}

//função coordernadas

void Rectangle::setCoord( double *p1, double *p2,

double *p3, double *p4 )

{

// Disposição de pontos

// p4.........p3

// . .

// . .

// p1.........p2

const int x = 0, y = 1; // added for clarity

// validadndo 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 ]

point3[ x ] = ( p3[ x ] > 20.0 || p3[ x ]

point3[ y ] = ( p3[ y ] > 20.0 || p3[ y ]

point4[ x ] = ( p4[ x ] > 20.0 || p4[ x ]

point4[ y ] = ( p4[ y ] > 20.0 || p4[ y ]

// verifique se os pontos formam um retângulo

if (point1[ y ] == point2[ y ] && point1[ x ] == point4[ x ] &&

point2[ x ] == point3[ x ] && point3[ y ] == point4[ y ]) {

perimeter();

area();

square();

setValid( true ); // conjunto de pontos válido

}

else {

cout

setValid( false ); //conjunto de pontos inválidos

}

}

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

}

void Rectangle::draw( void )

{

for ( double y = 25.0; y >= 0.0; --y ) {

for ( double x = 0.0; x

if ( ( point1[ 0 ] == x && point1[ 1 ] == y ) ||

( point4[ 0 ] == x && point4[ 1 ] == y ) ) {

// imprime o perímetro horizontal do retângulo

while ( x

cout

++x;

}

// imprime o restante do quadrante

cout

}

// imprime o perímetro vertical do retângulo

else if ( ( ( x = point1[ 0 ] ) ) &&

point4[ 1 ] >= y && point1[ 1 ]

cout

//preenche dentro do retângulo

for ( x++; x

cout

++x;

}

cout

}

else

cout

// imprime o fundo do quadrante

}

cout

}

}

int main()

{

//inicializando objeto

//com os parametros

//chamada da função

double xy1[ 2 ] = { 12.0, 12.0 }, xy2[ 2 ] = { 18.0, 12.0 },

xy3[ 2 ] = { 18.0, 20.0 }, xy4[ 2 ] = { 12.0, 20.0 };

Rectangle a( xy1, xy2, xy3, xy4, '?', '*' );

if ( a.isValid() )

a.draw();

return 0;

}