Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Area de un Triangulo en C++

Estas en el tema de Area de un Triangulo en C++ en el foro de C/C++ en Foros del Web. Hola a todos soy nuevo en el foro y estoy empezando a programar. He empezado a hacer este sencillo programa para calcular el area de ...
  #1 (permalink)  
Antiguo 04/04/2016, 04:06
 
Fecha de Ingreso: abril-2016
Mensajes: 19
Antigüedad: 8 años, 7 meses
Puntos: 1
Area de un Triangulo en C++

Hola a todos soy nuevo en el foro y estoy empezando a programar.

He empezado a hacer este sencillo programa para calcular el area de un triangulo, pero me da error. Tengo que hacer el programa con los ficheros main, h y cpp.

*fichero main:

#include <cstdlib>
#include <iostream>

#include "Triangle.h"

using namespace std;

/*
*
*/
int main(void) {
Triangle triangulo;
cin>> base;
cin>> altura;
triangulo.getArea();
return 0;
}

* fichero h:

#ifndef TRIANGLE_H
#define TRIANGLE_H
class Triangle
{

public:
void getArea (void);
private:
float base;
float altura;
float area;
};

*Fichero cpp:

#include "Triangle.h"

void Triangle::getArea(void)
{
area=(base*altura)/2;
return <<"el area del Triangulo es: " area;
}

Gracias de antemano!!!
  #2 (permalink)  
Antiguo 04/04/2016, 04:39
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Area de un Triangulo en C++

Buenas Berman, vienvenido al foro.

Para futuras preguntas has de saber que el código hay que decorarlo para que sea legible. Las opciones las encontrarás en el desplegable "Highlight". Elige el lenguaje que corresponda en cada caso.

Fíjate en fichero.h:

Código C++:
Ver original
  1. #ifndef TRIANGLE_H
  2. #define TRIANGLE_H
  3.  
  4. class Triangle
  5. {
  6. public:
  7.   void getArea (void);
  8. private:
  9.   float base;
  10.   float altura;
  11.   float area;
  12. };

Tiene varios problemas:
  • No has incluído la línea #endif que cierra al correspondiente #ifdef. Esto provoca un fallo de compilación
  • Si no incluyes el constructor por defecto los valores de base, altura y area serán totalmente aleatorios hasta que asignes valores concretos.
  • Los miembros base, altura y area son privados, luego no es posible acceder a ellos desde fuera. Si además no añades funciones para poder modificar y leer su valor entonces te encuentras con que esa clase no te sirve para nada.
    Prueba a implementar los getters (devuelven el valor del miembro) y setters (modifican la variable) correspondientes:

    Código C++:
    Ver original
    1. class Triangle
    2. {
    3. public:
    4.   void getArea (void);
    5.  
    6.   void SetAltura(float);
    7.   float GetAltura() const;
    8.  
    9.   void SetBase(float);
    10.   float GetBase() const;
  • Dado que el área de un triángulo es un valor dependiente de la base y la altura del mismo no tiene mucho sentido que mantengas la variable area dentro de la clase.
    Código C++:
    Ver original
    1. void Triangle::getArea(void)
    2. {
    3.   // area es ahora una variable local de la función no de la clase.
    4.   // Esto permite eliminar area de la parte private
    5.   float area=(base*altura)/2;
    6.   return <<"el area del Triangulo es: " area;
    7. }
  • No es recomendable que la clase Triangle se comunique directamente con la consola. En su lugar lo ideal sería que getArea devolviese un float. El mensaje lo escribes fuera de getArea(). ¿Por qué? El problema se llama acoplamiento y no lo describo porque pueden ser demasiados conceptos a asimilar. El programa funcionará si lo dejas como ahora mismo... es solo un consejo.

Si ahora revisas el main:

Código C++:
Ver original
  1. int main(void) {
  2.   Triangle triangulo;
  3.   cin>> base;
  4.   cin>> altura;
  5.   triangulo.getArea();
  6.   return 0;
  7. }

Intentas guardar los datos en base y altura. ¿Dónde están declaradas esas variables? No son variables globales ni tampoco son locales de main. Tu estás intentando acceder a los miembros de Triangle... pero no es la forma de hacerlo.

Para empezar Triangle es una clase y puedes crear infinitas instancias diferentes cada una con sus propios valores. Triangle vendría a ser un molde y las instancias las piezas que fabricas con ese molde. Queda claro entonces que base y altura no son variables únicas sino que dependen de la instancia que quieras manejar así como que cada pieza creada con el molde es única y tiene sus própios parámetros, su propio ciclo de vida, etc.

Entonces bien, tienes una instancia que es triangulo y quieres modificar sus variables base y altura. Como hemos explicado antes no vas a poder acceder directamente a dichas variables porque están en la parte privada. Sin embargo asumo que has implementado los correspondientes setter (obligatorios) y setter (opcionales en este caso), en cuyo caso tendrás que hacer uso de dichas funciones para manipular las variables:

Código C++:
Ver original
  1. float base, altura;
  2. cin >> base;
  3. cin >> altura;
  4. triangulo.SetBase(base);
  5. trianguo.SetAltura(altura);

Te recomendaría repasar la teoría correspondiente a las clases en C++ porque andas demasiado verde con el tema y eso, créeme, te va a pasar factura más adelante.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: area, int, programa, triangulo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:31.