Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: matver en 9 Febrero 2018, 15:32 pm



Título: Perimetro de cuadrado
Publicado por: matver en 9 Febrero 2018, 15:32 pm
Hola estoy tratando de resolver ejercicios con la POO y ahora trato de resolver el perimetro de un cuadrado pero el compilador gcc me da error:
Código
  1. #include <iostream>
  2. using namespace std;
  3. class Cuadrado {
  4.    public:
  5.      int Base;
  6.      int Altura;
  7.  
  8. };
  9.  
  10. int main (){
  11. Cuadrado cuadrado1;
  12. int perimetro=0;
  13. cuadrado1.Base=2;
  14. cuadrado1.Altura=2;
  15. perimetro= Base* Altura;
  16. cout<<"El perimetro del cuadrado es:"<<perimetro<<endl;
  17.  
  18. return 0;
  19.  
  20.  


Error: error: ‘Base’ was not declared in this scope
 perimetro= Base* Altura;
            ^
perimetro.cpp:15:18: error: ‘Altura’ was not declared in this scope
 perimetro= Base* Altura;
                  ^


Título: Re: Perimetro de cuadrado
Publicado por: matver en 9 Febrero 2018, 15:51 pm
El error estaba en la linea 15 que debería ser así:
perimetro=cuadrado1.Base*cuadrado1.Altura;


Título: Re: Perimetro de cuadrado
Publicado por: Machacador en 9 Febrero 2018, 15:58 pm
No hagas doble post... utiliza el botón modificar que tienes arriba a la derecha en tu post...

 :rolleyes: :o :rolleyes:

Saludos.


Título: Re: Perimetro de cuadrado
Publicado por: A.I. en 9 Febrero 2018, 17:34 pm
Tienes algunos conceptos sobre los cuadrados equivocados. En un cuadrado la base y la altura son iguales. Además el perímetro se calcularía multiplicando un lado por 4. Si haces lado^2 estás calculando el área.

Por otro lado la rutina para calcular el perímetro probablemente debería ser un método de la clase cuadrado.

Saludos!


Título: Re: Perimetro de cuadrado
Publicado por: stderr en 20 Febrero 2018, 02:21 am
Compi, no se trata de que en 'main'' hagas todo el trabajo, debes repasar conceptos como 'encapsulación', los objetos son los que saben sobre sí mismos y como comportarse, echa un ojo, en main simplemente los creas y los muestras, incluso podríamos haberles dado la capacidad de imprimirse ellos solos (incluso sobrecargando el operador <<) pero es demasiado, repasa...

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Cuadrado {
  6. private:
  7.    float lado;
  8.  
  9. public:
  10.  
  11.    Cuadrado(float lado) {
  12.        this->lado = lado;
  13.    }
  14.  
  15.    float obtenerLado() {
  16.        return this->lado;
  17.    }
  18.  
  19.    float obtenerArea() {
  20.        return this->lado * this->lado;
  21.    }
  22.  
  23.    float obtenerPerimetro() {
  24.        return this->lado * 4;
  25.    }
  26.  
  27. };
  28.  
  29. int main(void) {
  30.    Cuadrado c1(2), c2(7);
  31.  
  32.    cout
  33.        << "Cuadrado 'c1'" << endl
  34.        << "Lado: " << c1.obtenerLado() << endl
  35.        << "Área: " << c1.obtenerArea() << endl
  36.        << "Perímetro: " << c1.obtenerPerimetro() << endl << endl;
  37.  
  38.    cout
  39.        << "Cuadrado 'c2'" << endl
  40.        << "Lado: " << c2.obtenerLado() << endl
  41.        << "Área: " << c2.obtenerArea() << endl
  42.        << "Perímetro: " << c2.obtenerPerimetro() << endl << endl;
  43. }
  44.