10/04/2016

Ejercicio 21

Dados los tres lados de un triángulo, haga un algoritmo que encuentre: perímetro, semiperímetro y el área del triángulo.


#include <iostream>
// se incluye la clase Triangulo para despues llamar a sus metodos 
#include "Triangulo.h"

using namespace std;

int main(void)
{
    // se crea un objeto de la clase Triangulo (Instanciaciación) 
    Triangulo *obj = new Triangulo();

    float l1, l2, l3;// se definen 3 variable de tipo float "l1", "l2" y "l3" 

    cout << "Digite lado 1" << endl;//Se pide el primer lado 
    cin >> l1; // se guarda el primer lado en "l1" 
    obj->setLado1(l1);// se llama al metodo modificador de lado 1 y se encapsula "l1" 

    cout << "Digite lado 2" << endl;// se pide el segundo lado 
    cin >> l2;// se guarda el segundo lado en "l2" 
    obj->setLado2(l2);// se llama al metodo modificador de lado 2 y se encapsula "l2" 

    cout << "Digite lado 3" << endl;// se pide el tercer lado 
    cin >> l3; // se guarda el tercer lado en "l3" 
    obj->setLado3(l3);// se llama al metodo modificador de lado 3 y se encapsula "l3" 

    // se muestra en pantalla el perimetro 
    cout << "El perimetro es: " << obj->perimetro() << endl;

    // se muestra en pantalla el semiperimetro 
    cout << "El semiperimetro es: " << obj->semiperimetro() << endl;

    // se muestra en pantalla el area 
    cout << "El area es: " << obj->area() << endl;
}
     

#ifndef TRIANGULO_H
#define TRIANGULO_H


class Triangulo
{
    public:
        Triangulo();
        virtual ~Triangulo();
        
        // se definen los metodos publicos: 
        float perimetro();// perimetro de tipo flotante 
        float semiperimetro();// semiperimetro de tipo flotante 
        float area();// area de tipo flotante 

        // se definen los metodos Setters y Getters de los atributos de la clase 
        void setLado1(float n);
        float getLado1();
        void setLado2(float n);
        float getLado2();
        void setLado3(float n);
        float getLado3();
    protected:

    private:
        // se definen los atributos privados: 
        float lado1;// lado 1 de tipo flotante 
        float lado2;// lado 2 de tipo flotante 
        float lado3;// lado 3 de tipo flotante 
};

#endif // TRIANGULO_H
     

#include "Triangulo.h"
// se incluira la libreria "math.h" para utilizar el metodo sqrt()
// y el metodo pow(), para poder realizar la raiz cuadrada y elevar un numero
// a un exponente, ya que es importante para calcular el area, perimetro y
// altura del triangulo. 
#include "math.h"

Triangulo::Triangulo()
{
    // se le asigna el valor de 0 a lado1, lado2 y lado3 en el constructor 
    lado1 = 0;
    lado2 = 0;
    lado3 = 0;
}

Triangulo::~Triangulo()
{
    //dtor 
}

float Triangulo::perimetro()
{
    // el perimetro de un triangulo es la suma de todos sus lados 
    return lado1 + lado2 + lado3;
}

float Triangulo::semiperimetro()
{
    // el semiperimetro de un triangulo es: la suma de todos sus lados dividido entre 2. 
    return (lado1 + lado2 + lado3) / 2;;
}

float Triangulo::area()
{
    float a;
    // si el triangulo tiene los tres lados iguales, entonces es un triangulo equilatero: 
    if(lado1 == lado2 && lado1 == lado3)
    {
        // la formula para calcular el area de un triangulo equilatero es: 
        a = sqrt(3) / 4 * lado1;// como todos los lados seran iguales no importa cual lado se tome... 
        return a;// retornamos el valor de la operación. 
    }
    // si el lado 1 es igual al lado 3 entonces es un triangulo escaleno 
    else if(lado1 != lado2 && lado1 != lado3)
    {
        // la formula para calcular el area de un triangulo escaleno es: A=b*c/2 
        a = (lado2 * lado3) / 2;// retornamos el valor de la operación. 
        return a;
    }
    else// sino significa que el tringulo tiene solo dos lado iguales, y seria un trianguilo isósceles 
    {
        // la formula para calcular el area de un triangulo isoceles es:
        //A = ( b * √(a^2 - (2^2 / 4)) ) / 2 
        a = (lado2 * sqrt(pow(3, 2) - (pow(2, 2) / 4))) / 2;
        return a;// retornamos el valor de la operación. 
    }
}

// implementacion de los metodos Setters y Getters de los atributos de la clase 
void Triangulo::setLado1(float n)
{
    lado1 = n;
}

float Triangulo::getLado1()
{
    return lado1;
}

void Triangulo::setLado2(float n)
{
    lado2 = n;
}

float Triangulo::getLado2()
{
    return lado2;
}

void Triangulo::setLado3(float n)
{
    lado3 = n;
}

float Triangulo::getLado3()
{
    return lado3;
}
     

//Se importa paquete "JOptionPane" para dibujar un cuadro de dialogo en pantalla
//que muestre información o para llenar información. 
import javax.swing.JOptionPane;

public class Main
{
    public static void main(String[] args)
    {
        //Se crea un objeto de la clase Triangulo (Instanciaciación) 
        Triangulo obj = new Triangulo();
        double l1, l2, l3;//se definen 3 variable de tipo double "l1", "l2" y "l3" 
        
        //Se pide el primer lado y se guarda en l1; 
        l1 = Double.parseDouble(JOptionPane.showInputDialog(null, "Digite lado 1"));
        obj.setLado1(l1);//se llama al metodo modificador de lado 1 y se encapsula "l1" 
        
        //Se pide el primer lado y se guarda en l1; 
        l2 = Double.parseDouble(JOptionPane.showInputDialog(null, "Digite lado 2"));
        obj.setLado2(l2);//se llama al metodo modificador de lado 2 y se encapsula "l2" 
        
        //Se pide el primer lado y se guarda en l1; 
        l3 = Double.parseDouble(JOptionPane.showInputDialog(null, "Digite lado 3"));
        obj.setLado3(l3);//se llama al metodo modificador de lado 3 y se encapsula "l3" 
        
        //Se muestra en pantalla el perimetro 
        JOptionPane.showMessageDialog(null, "El perimetro es: " + obj.perimetro());

        //Se muestra en pantalla el semiperimetro 
        JOptionPane.showMessageDialog(null, "El semiperimetro es: " + obj.semiperimetro());
        
        //Se muestra en pantalla el area 
        JOptionPane.showMessageDialog(null, "El area es: " + obj.area());
    }
}
     

//se incluira el paquete "math" para utilizar el metodo sqrt()
//y el paquete pow para el metodo pow(), los utilizaremos para poder realizar
//la raiz cuadrada y elevar un numero a un exponente, ya que es importante
//para calcular el area, perimetro y altura del triangulo. 
import static java.lang.Math.sqrt;
import static java.lang.Math.pow;


public class Triangulo
{
    //se definen los atributos privados: 
    private double lado1;//lado 1 de tipo double 
    private double lado2;//lado 2 de tipo double 
    private double lado3;//lado 3 de tipo double 
    
    Triangulo()
    {
        //Se le asigna el valor de 0 a lado1, lado2 y lado3 en el constructor 
        lado1 = 0;
        lado2 = 0;
        lado3 = 0;
    }

    public double perimetro()
    {
        //El perimetro de un triangulo es la suma de todos sus lados 
        return lado1 + lado2 + lado3;
    }

    public double semiperimetro()
    {
        //El semiperimetro de un triangulo es: la suma de todos sus lados dividido entre 2. 
        return (lado1 + lado2 + lado3) / 2;
    }

    public double area()
    {
        double a;
        //Si el triangulo tiene los tres lados iguales, entonces es un triangulo equilatero: 
        if(lado1 == lado2 && lado1 == lado3)
        {
            //la formula para calcular el area de un triangulo equilatero es: 
            a = sqrt(3) / 4 * lado1;//como todos los lados seran iguales no importa cual lado se tome... 
            return a;//retornamos el valor de la operación. 
        }
        //si el lado 1 es igual al lado 3 entonces es un triangulo escaleno 
        else if(lado1 != lado2 && lado1 != lado3)
        {
            //la formula para calcular el area de un triangulo escaleno es: A=b*c/2 
            a = (lado2 * lado3) / 2;//retornamos el valor de la operación. 
            return a;
        }
        else//Sino significa que el tringulo tiene solo dos lado iguales, y seria un trianguilo isósceles 
        {
            //La formula para calcular el area de un triangulo isoceles es:
            //A = ( b * √(a^2 - (2^2 / 4)) ) / 2 
            a = (lado2 * sqrt(pow(3, 2) - (pow(2, 2) / 4))) / 2;
            return a;//retornamos el valor de la operación. 
        }
    }

    //Implementacion de los metodos Setters y Getters de los atributos de la clase 
    public void setLado1(double n)
    {
        lado1 = n;
    }

    public double getLado1()
    {
        return lado1;
    }

    public void setLado2(double n)
    {
        lado2 = n;
    }

    public double getLado2()
    {
        return lado2;
    }

    public void setLado3(double n)
    {
        lado3 = n;
    }

    public double getLado3()
    {
        return lado3;
    }
}