sábado, 25 de octubre de 2025

Programando en C++ no.6: creando una simple calculadora

En esta ocasión crearemos una calculadora para obtener el IMC y pulsaciones de una persona.

  1. El programa tendrá un menú con tres opciones (cálculo del IMC, cálculo de pulsaciones y salida). 
  2. Tendrá un encabezado: calculo.hpp 
  3. Un programa de implementación de ese encabezado: calculo.cpp 
  4. Un programa main: main.cpp

El programa solicitará estos datos:

  • nombre.
  • peso.
  • talla.
  • edad. 
  • género.

Definamos el encabezado. Recordemos que al ser C++ la extensión puede ser tanto *.h como *.hpp.

calculos.hpp

#ifndef CALCULOS_H
#define CALCULOS_H

#endif

En este archivo importaremos las librerías necesarias:

#ifndef CALCULOS_H
#define CALCULOS_H

#include <ctime>
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;


#endif

También podemos definir "constantes" de esta forma:

#ifndef CALCULOS_H
#define CALCULOS_H

#define HOMBRE_PULS 220
#define MUJER_PULS 226
#define OPC_1 1
#define OPC_2 2

#include <ctime>
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;


#endif

Dentro del encabezado crearemos una clase para contener lo datos solicitados:

#ifndef CALCULOS_H
#define CALCULOS_H

#define HOMBRE_PULS 220
#define MUJER_PULS 226
#define OPC_1 1
#define OPC_2 2

#include <ctime>
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;


class Register
{
private:
    time_t hora_dia;
    string nombre;
    int edad;
    double talla;
    double peso;

public:
    Register() : hora_dia(time(nullptr)), nombre(""), edad(0), talla(0.0), peso(0.0) {}

    Register(const string &nombre_, int edad_, double talla_, double peso_)
        : hora_dia(time(nullptr)), nombre(nombre_), edad(edad_), talla(talla_), peso(peso_) {}

    time_t getHoraDia() const { return hora_dia; }
    string getNombre() const { return nombre; }
    int getEdad() const { return edad; }
    double getTalla() const { return talla; }
    double getPeso() const { return peso; }

    void setNombre(const string &nombre_) { nombre = nombre_; }
    void setEdad(int edad_) { edad = edad_; }
    void setTalla(double talla_) { talla = talla_; }
    void setPeso(double peso_) { peso = peso_; }
    void setHoraDia(time_t hora_) { hora_dia = hora_; }

    void mostrar() const
    {
        tm *tiempo_local = localtime(&hora_dia);
        cout << "Registro:" << endl;
        cout << "Nombre: " << nombre << endl;
        cout << "Edad: " << edad << " años" << endl;
        cout << "Talla: " << talla << " m" << endl;
        cout << "Peso: " << peso << " kg" << endl;
        cout << "Hora del día: " << put_time(tiempo_local, "%Y-%m-%d %H:%M:%S") << endl;
    }
};

#endif

Esta clase tiene los atributos de nombre, edad, talla, peso y definimos un campo de hora. Además de contar con sus setters y getters, y un método para mostrar todos los datos.

Definamos ahora los encabezados de las funciones para calcular el IMC, las pulsaciones, el menú, y la introducción de datos.

calculos.hpp

#ifndef CALCULOS_H
#define CALCULOS_H

#define HOMBRE_PULS 220
#define MUJER_PULS 226
#define OPC_1 1
#define OPC_2 2

#include <ctime>
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

class Register
{
private:
    time_t hora_dia;
    string nombre;
    int edad;
    double talla;
    double peso;

public:
    Register() : hora_dia(time(nullptr)), nombre(""), edad(0), talla(0.0), peso(0.0) {}

    Register(const string &nombre_, int edad_, double talla_, double peso_)
        : hora_dia(time(nullptr)), nombre(nombre_), edad(edad_), talla(talla_), peso(peso_) {}

    time_t getHoraDia() const { return hora_dia; }
    string getNombre() const { return nombre; }
    int getEdad() const { return edad; }
    double getTalla() const { return talla; }
    double getPeso() const { return peso; }

    void setNombre(const string &nombre_) { nombre = nombre_; }
    void setEdad(int edad_) { edad = edad_; }
    void setTalla(double talla_) { talla = talla_; }
    void setPeso(double peso_) { peso = peso_; }
    void setHoraDia(time_t hora_) { hora_dia = hora_; }

    void mostrar() const
    {
        tm *tiempo_local = localtime(&hora_dia);
        cout << "Registro:" << endl;
        cout << "Nombre: " << nombre << endl;
        cout << "Edad: " << edad << " años" << endl;
        cout << "Talla: " << talla << " m" << endl;
        cout << "Peso: " << peso << " kg" << endl;
        cout << "Hora del día: " << put_time(tiempo_local, "%Y-%m-%d %H:%M:%S") << endl;
    }
};

void limpiarPantalla(void);
void introduceDatos(void);
double getIMC(double peso, double talla);
double getPulsaciones(int edad);
void inicia(void);
int menu(void);
void obtenerCalcImc(Register r1);
void obtenerCalcPuls(Register r1);
std::string clasificarIMC(double imc);

#endif

Con esto terminamos el archivo de encabezados. Ahora continuaremos con el programa implementador.

calculos.cpp

#include "calculos.hpp"

En este importaremos el encabezado. Además de implementar cada una de las funciones declararas en el encabezado.

calculos.cpp

#include "calculos.hpp"

double getIMC(double peso, double talla)
{
    return peso / (talla * talla);
}

double getPulsaciones(int edad)
{
    if (OPC_1 == 1)
    {
        return HOMBRE_PULS - (0.7 * edad);
    }
    else if (OPC_2 == 2)
    {
        return MUJER_PULS - (0.8 * edad);
    }
    else
    {
        return 0.0;
    }
}

std::string clasificarIMC(double imc)
{
    std::string cad = "";

    if (imc < 16.00)
    {
        cad = "Infrapeso: Delgadez Severa";
    }
    else if (imc <= 16.99)
    {
        cad = "Infrapeso: Delgadez moderada";
    }
    else if (imc <= 18.49)
    {
        cad = "Infrapeso: Delgadez aceptable";
    }
    else if (imc <= 24.99)
    {
        cad = "Peso Normal";
    }
    else if (imc <= 29.99)
    {
        cad = "Sobrepeso";
    }
    else if (imc <= 34.99)
    {
        cad = "Obeso: Tipo I";
    }
    else if (imc <= 35.00 || imc == 40.00)
    {
        cad = "Obeso: Tipo III";
    }
    else
    {
        cad = "no existe clasificacion";
    }

    return cad;
}

void obtenerCalcImc(Register r1)
{
    double imc = getIMC(r1.getPeso(), r1.getTalla());
    r1.mostrar();
    cout << "El IMC es de " << imc << " kg/(m*m)" << endl;
    cout << "Diagnostico: " << clasificarIMC(imc) << endl;
}

void limpiarPantalla() {
#ifdef _WIN32
    system("cls");
#else
    system("clear");
#endif
}


void obtenerCalcPuls(Register r1)
{   r1.mostrar();
    cout << "El no. de pulsaciones es de " << getPulsaciones(r1.getEdad()) << " por minuto." << endl;
}

int menu()
{
    int opc;
    cout << "\t *******  MENU ******" << endl;
    cout << "\t 1. Obtener IMC." << endl;
    cout << "\t 2. Obtener pulsaciones." << endl;
    cout << "\t 3. Salir." << endl;
    do
    {
        cout << "Introduce opcion:" << endl;
        cin >> opc;
    } while (opc < 0 || opc > 3);
    return opc;
}


string nombre;
double peso, talla;
int edad, genero;
Register r1;
void introduceDatos()
{
    cout << "\t *********************************" << endl;
    cout << "Introduce nombre de la persona: " << endl;
    cin >> nombre;
    cout << "Introduce talla: " << endl;
    cin >> talla;
    cout << "Introduce peso: " << endl;
    cin >> peso;
    cout << "Introduce edad: " << endl;
    cin >> edad;
    cout << "Introduce tu genero [Masculino: 1,  Femenino: 2]:" << endl;
    cin >> genero;
    cout << "\t *********************************" << endl;
    r1.setNombre(nombre);
    r1.setEdad(edad);
    r1.setTalla(talla);
    r1.setPeso(peso);
}

void inicia(void)
{
    limpiarPantalla();
    int opcion = 0; 
    for (;;)
    {
        opcion = menu();
        cout << "Tu opcion fue: " << opcion << endl;
        switch (opcion)
        {
        case 1:
            introduceDatos();
            obtenerCalcImc(r1);
            break;
        case 2:
            introduceDatos();
            obtenerCalcPuls(r1);
            break;
        case 3:
            exit(0);
            break;
        }
    }
}

¿Qué podemos ver en este archivo?

  • Hemos implementado cada una de las funciones declaradas en el encabezado.
  • Estas funciones comprenden el menú del programa.
  • La introducción de opciones a elegir y datos del usuario.
  • El cálculo de cada operación y el resultado.

Miremos ahora el programa main:

main.cpp

#include "calculos.cpp"

int main(int argc, char const *argv[])
{
    inicia();
    return 0;
}

Este solo hace una importación del archivo implementador (calculos.cpp) e invoca la función que dispara la ejecución del programa (función inicia).

¿Qué sigue?

Compilamos:

$ g++ main.cpp -o calculadora.exe

Ejecutamos:

$ calculadora.exe

Salida:

         *******  MENU ******
         1. Obtener IMC.
         2. Obtener pulsaciones.
         3. Salir.
Introduce opcion:
1
Tu opcion fue: 1
         *********************************
Introduce nombre de la persona:
THOMAS
Introduce talla:
1.78
Introduce peso:
73
Introduce edad:
44
Introduce tu genero [Masculino: 1,  Femenino: 2]:
1
         *********************************
Registro:
Nombre: THOMAS
Edad: 44 a├▒os
Talla: 1.78 m
Peso: 73 kg
Hora del día: 2025-10-25 13:05:05
El IMC es de 23.04 kg/(m*m)
Diagnostico: Peso Normal
         *******  MENU ******
         1. Obtener IMC.
         2. Obtener pulsaciones.
         3. Salir.

Si elegimos la opción 2:

         *******  MENU ******
         1. Obtener IMC.
         2. Obtener pulsaciones.
         3. Salir.
Introduce opcion:
2
Tu opcion fue: 2
         *********************************
Introduce nombre de la persona:
MARIA
Introduce talla:
1.66
Introduce peso:
65
Introduce edad:
32
Introduce tu genero [Masculino: 1,  Femenino: 2]:
2
         *********************************
Registro:
Nombre: MARIA
Edad: 32 a├▒os
Talla: 1.66 m
Peso: 65 kg
Hora del día: 2025-10-25 13:06:30
El no. de pulsaciones es de 197.6 por minuto.
         *******  MENU ******
         1. Obtener IMC.
         2. Obtener pulsaciones.
         3. Salir.

¿Qué hemos visto?

  • Como crear un programa en C++ mediante "módulos". 
  • Como crear clases e instanciar objetos de esa clase. 
  • Como crear archivos encabezados (calculos.hpp). 
  • Como implementar las funciones definidas en ese archivo de encabezados (calculos.cpp). 
  • Como invocar funciones que disparen una acción desde un programa main (main.cpp).

Enlaces:

https://codemonkeyjunior.blogspot.com/2025/10/creando-una-aplicacion-web-sencilla-con.html
https://codemonkeyjunior.blogspot.com/2024/06/hace-tiempo-vimos-como-crear-un.html

No hay comentarios:

Publicar un comentario

Programando en C++ no.6: creando una simple calculadora

En esta ocasión crearemos una calculadora para obtener el IMC y pulsaciones de una persona. El programa tendrá un menú con tres opcione...

Etiquetas

Archivo del blog