Ir para conteúdo
Fórum Script Brasil
  • 0

Otimizar Classe Retângulo C++


thiberi0

Pergunta

Problema do livro do Deitel,C++ Como programar:

Criar uma classe que só armazena as coordenadas cartesianas dos quatro cantos do retângulo.As coordenadas tem que ser maior que zero e menor que vinte.

Verificar se as coordenadas realmente definem um retângulo e as funções membros devem calcular comprimento,largura, perímetro e área.

Consegui resvolver o problema,mas não gostei porque não conseguir usar vetores para armazenar as coordenadas,pois não estava conseguindo passar como parâmetro para as funções.

Como eu faria para passar um vetor C[4][4] para as funções.Por exemplo,como ficaria a definição do construtor se eu usar C[4][4] em vez de criar 8 variáveis.

#ifndef RETANGULO_H
#define RETANGULO_H

class Retangulo{
    private:
    //Coordenadas
    double x1,x2,x3,x4;
    double y1,y2,y3,y4;

    public:
    Retangulo(double=0, double=0, double=0, double=0,
              double=0, double=0, double=0, double=0);//Construtor

    void instCoord(double,double,double,double,
                   double,double,double,double); //Função para inicializar as coordenada


    bool vRetangulo();//Verifica se o objeto é realmente um retangulo

    double Area();//Calcula a area
    double Comprimento();//Calcula o comprimento
    double Largura();//Calcula a largura
    double Perimetro();//Calcula o perimetro

    bool Quadrado();//Verifica se o retangulo é um quadrado

    void Imprime(char);//Imprime o retangulo no formato especificado
};

#endif




//Construtor do retangulo
Retangulo::Retangulo(double cx1,double cy1,double cx2,double cy2,
                     double cx3,double cy3,double cx4,double cy4){

    instCoord(cx1,cy1,cx2,cy2,cx3,cy3,cx4,cy4);
}

//Função que verifica se as coordenadas são corretas(x,y>0 e x,y<20)
//Senão inicializa com zero
void Retangulo::instCoord(double cx1,double cy1,double cx2,double cy2,
                          double cx3,double cy3,double cx4,double cy4){

    //Coordenada 1
    if(cx1>=0 && cy1>=0){
        if(cx1<=20 && cy1<=20){
            x1=cx1;
            y1=cy1;
        }
    }
    else{
        cout<<"Coordenada:("<<cx1<<","<<cy1<<")"<<" invalida,iniciaizando com zero\n";
        x1=0;
        y1=0;
    }

    //Coordenada 2
    if(cx2>=0 && cy2>=0){
        if(cx2<=20 && cy2<=20){
            x2=cx2;
            y2=cy2;
        }
    }
    else{
        cout<<"Coordenada:("<<cx2<<","<<cy2<<")"<<" invalida,iniciaizando com zero\n";
        x2=0;
        y2=0;
    }

    //Coordenada 3
    if(cx3>=0 && cy3>=0){
        if(cx3<=20 && cy3<=20){
            x3=cx3;
            y3=cy3;
        }
    }
    else{
        cout<<"Coordenada:("<<cx3<<","<<cy3<<")"<<" invalida,iniciaizando com zero\n";
        x3=0;
        y3=0;
    }

    //Coordenada 4
    if(cx4>=0 && cy4>=0){
        if(cx4<=20 && cy4<=20){
            x4=cx4;
            y4=cy4;
        }
    }
    else{
        cout<<"Coordenada:("<<cx4<<","<<cy4<<")"<<" invalida,iniciaizando com zero\n";
        x4=0;
        y4=0;
    }

}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

No caso você quer passar uma matriz, então faz assim:

void funcao(int v[][4])
{
     ...
}

int main()
{
    int v[4][4];
    
    funcao(v);
        ...
}

Você tem que definir na função pelo menos o número de colunas da matriz que ela vai receber.

Abraço.

Editado por RonaldoRG
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...