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;
}