domingo, 16 de noviembre de 2025

Moonbit: un lenguaje orientado a la I.A.

Moonbit es un nuevo lenguaje de programación orientado a la I.A. y aplicaciones en tiempo real. Podemos probarlo en este sitio: https://try.moonbitlang.com/

El sitio luce como un Visual Studio Code:

Características destacadas de MoonBit:

  • Optimizado para WebAssembly (Wasm): Permite ejecutar código con rendimiento cercano al nativo en navegadores, la nube y dispositivos periféricos (edge). 
  • Multi-paradigma expresivo: Combina lo mejor de lenguajes dinámicos y estáticos, funcionales y prácticos. Esto lo hace flexible para distintos tipos de proyectos. 
  • Orientado a datos con sistema de tipos robusto: Su diseño facilita trabajar con estructuras complejas y asegura mayor confiabilidad en aplicaciones críticas. 
  • Soporte para múltiples backends: Puede compilarse a WebAssembly, JavaScript y otros entornos, lo que lo hace versátil para aplicaciones web y distribuidas. 
  • Plataforma integrada con IA: Incluye mecanismos para minimizar errores de modelos de lenguaje (como alucinaciones de LLMs), pruebas fáciles y salvaguardas de seguridad. 
  • Rápido y preparado para asincronía: Diseñado para ser fast, stable, async-ready, lo que lo hace ideal para aplicaciones modernas que requieren concurrencia. 
  •  Sintaxis simple y moderna.

Deberás descargarlo en este sitio: https://www.moonbitlang.com/download/

Después agregarlo al path de tu sistema.

Comencemos con un clásico "Hola, mundo" en este lenguaje.

holamundo.mb

fn main {
  let greeting =
    #|
    #|     (\(\
    #|     ( -.-)
    #|     o_(")(")
    #|     __  __     ____         __  ___                  ____  _ __
    #|    / / / /__  / / /___     /  |/  /___  ____  ____  / __ )(_) /_
    #|   / /_/ / _ \/ / / __ \   / /|_/ / __ \/ __ \/ __ \/ __  / / __/
    #|  / __  /  __/ / / /_/ /  / /  / / /_/ / /_/ / / / / /_/ / / /_
    #| /_/ /_/\___/_/_/\____/  /_/  /_/\____/\____/_/ /_/_____/_/\__/
    #|
  println(greeting)
}

Para ejecutarlo abrimos una terminal y tecleamos lo siguiente:

$ moon run holamundo.mb

A los programadores de Go/Kotlin/Rust les parecerá muy familiar su sintaxis. Los tipos de datos son: Int, Float, Double, String, Char, Bool, etc.

variables.mb

fn main {
  let a : Int = 10 
  let b = 20 
  let mut c = 0
  c = a + b
  println(c)
  let b: Bool = false
  println(b)
  let cad:String = "This is a simple String"
  println(cad)
  let x: Float = 23.9
  println(x)
  let y: Double = 239.76
  println(y)
}

Ejecución:

$ moon run variables.mb

Conclusiones: MoonBit es un lenguaje emergente diseñado para integrarse de forma nativa con WebAssembly y pensado para flujos de trabajo asistidos por IA. Puedes usar Visual Studio Code para integrar los plugins de este lenguaje.

Busca posicionarse como un lenguaje de nueva generación para aplicaciones web, cloud y edge, con un fuerte enfoque en IA y escalabilidad. Su integración con WebAssembly lo convierte en una opción prometedora para desarrolladores que quieran adelantarse a tendencias futuras

Continuaremos sobre este tema en próximas entregas.

Enlaces:

https://www.moonbitlang.com/


viernes, 7 de noviembre de 2025

ASP .NET Core vs Spring Boot: ¿Cuál elegir?

En este post hablaremos de dos de las herramientas más populares y utilizadas para el desarrollo web. Por un lado, ASP (Active Server Pages) .Net Core y por el otro, Spring Boot. Ambas con sus seguidores, ambas con sus detractores. Ambas con sus pros y contras.

Empecemos con ASP .Net Core. Un framework desarrollado por la malévola empresa Microsoft (¿broma?) enfocada en la construcción de aplicaciones web. Unifica a ASP.NET MVC y ASP.NET Web API. Además de ser Open Source y multiplataforma. Además incluye Blazor, útil para desarrolladores que no quieren aprender Javascript (broma).

La documentación oficial nos dice:

".NET es una plataforma para desarrolladores formada por herramientas, lenguajes de programación y bibliotecas para crear una gran variedad de aplicaciones. ASP.NET Core amplía la plataforma para desarrolladores de .NET con herramientas y bibliotecas específicas para compilar aplicaciones web".

Si quieres instalar paquetes adicionales es necesario usar Nuget.

Actualmente existe infinidad de documentación oficial y no oficial, vídeos en Youtube, TikTok, etc. sobre esta herramienta. Además de no olvidar de libros, blogs y tutoriales en la red de redes.

Continuando con Spring Boot (no confundir con Spring Framework), la cual es una herramienta que ha facilitado el desarrollo web para los programadores Java (sic). Nos permite crear microservicios y aplicaciones web de una manera más sencilla a como se hacía antes con miles de configuraciones XML que ahogaban al pobre programador.

Spring Boot es una extensión de la plataforma Spring Framework que prioriza la configuración sobre la convención, con el objetivo de minimizar las preocupaciones de configuración al crear aplicaciones basadas en Spring. Dejando al programador ocupado con cosas más importantes (y menos tediosas).

Es importante notar que Spring Boot es un módulo basado en Spring Framework.


Principales características

ASP .Net Core:

  • Experiencia de desarrollo sin compilación (es decir, la compilación es continua, de modo que el desarrollador no tiene que invocar el comando de compilación). 
  • Framework modular distribuido como paquetes NuGet Entorno de ejecución optimizado para la nube (optimizado para Internet).
  • Compatibilidad con diversos sistemas operativos mediante la interfaz web abierta para .NET (OWIN). 
  • Un sistema de configuración basado en entornos y preparado para la nube.
  • Una canalización de solicitudes HTTP ligera y modular.
  • Crea y ejecuta aplicaciones ASP .Net Core multiplataforma en Windows, Mac y Linux. De código abierto y centrado en la comunidad. 
  • Control de versiones de aplicaciones en paralelo al usar .NET como destino. 
  • Soporte integrado para inyección de dependencias. 
  • Seguridad mejorada en comparación con Asp.Net.

Spring Boot

  • Desarrollo simplificado. 
  • Convención sobre configuración. 
  • Evitar escribir código reutilizable o configurar XML. 
  • Preparación para la producción. 
  • Arquitectura de microservicios. 
  • Flexibilidad. 
  • Programación reactiva. 

Pros y contras

ASP.NET Core

Pros:

  • Alto rendimiento gracias a Kestrel y compilación nativa. 
  •  Integración fluida con Azure y servicios Microsoft. Seguridad robusta con Identity y autenticación integrada. 
  •  Multiplataforma (Windows, Linux, macOS).

Contras:

  • Comunidad más pequeña fuera del ecosistema Microsoft. 
  • Curva de aprendizaje si vienes de otros stacks (como Java). 
  • Menos flexibilidad en comparación con Spring Boot en algunos patrones arquitectónicos.

Spring Boot

Pros:

  • Rápido desarrollo con configuración automática y amplia comunidad. 
  • Gran ecosistema: Spring Cloud, Spring Security, etc. 
  • Flexibilidad para arquitecturas complejas (microservicios, reactive, etc.). 
  • Amplio soporte en el mundo empresarial y open source.

Contras:

  • Puede volverse pesado si no se gestiona bien la configuración. 
  • Arranque más lento en comparación con ASP .Net Core
  • Requiere atención a versiones y dependencias para evitar conflictos.

¿Qué herramienta elegir?

Debes considerar que ASP .Net Core usa C#, ideal si vienes del ecosistema Microsoft o te interesa trabajar con Windows, Azure, o videojuegos (Unity).

Spring Boot usa Java como lenguaje base (aunque puedes optar por Kotlin o Groovy), excelente si te atrae el desarrollo empresarial, Android, o sistemas robustos multiplataforma.

Spring Boot tiene una comunidad más grande globalmente, con muchos tutoriales, cursos y proyectos open source.

ASP .Net Core tiene fuerte soporte en empresas que usan Microsoft stack, especialmente en América Latina y EE.UU.

Java/Spring Boot suele tener más demanda en bancos, aseguradoras y grandes corporativos.

ASP .Net Core es común en consultoras, software a medida, y empresas que usan Azure.

ASP .Net Core tiene una curva más suave si usas Visual Studio y te gusta trabajar con herramientas integradas.

HolaController.cs

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class HolaController : ControllerBase
{
    [HttpGet]
    [Route("hola")]
    public string HolaMundo()
    {
        return "Hola, mundo";
    }
}

Spring Boot puede ser más complejo al principio, pero te da más control y flexibilidad a largo plazo.

HolaController.java

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HolaController {

    @GetMapping("/hola")
    public String holaMundo() {
        return "Hola, mundo";
    }
}

Veredicto final

.Net es una tecnología que cuenta con el respaldo de Microsoft y posee una compatibilidad con Azure de manera natural. Sin embargo, Java es el lenguaje más usado en entornos empresariales y eso otorga a Spring Boot cierta ventaja en el mercado laboral.

Si fueses un programador que necesita consolidarse y "agarrar un puesto" en el mundo de la tecnología web. Spring Boot sería el ideal.

Aunque ASP .Net Core ha ido robando terreno y le pisa los talones a otras herramientas como Spring Boot y podría dar la sorpresa de ganarle algunas áreas como el ámbito gubernamental. En el mundo del IT nada está escrito.

Enlaces:

https://dotnet.microsoft.com/es-es/apps/aspnet
https://www.arquitecturajava.com/spring-boot-que-es/
https://azure.microsoft.com/es-mx/resources/cloud-computing-dictionary/what-is-java-spring-boot
https://codemonkeyjunior.blogspot.com/2025/08/programando-en-c-no-9-usando-nuget.html
https://codemonkeyjunior.blogspot.com/2019/06/instalar-paquetes-nuget-con-dotnet.html
https://codemonkeyjunior.blogspot.com/2019/05/crear-una-aplicacion-web-con-asp-net.html






sábado, 1 de noviembre de 2025

El roadmap para ser desarrollador C#

Nota: Este post esta basado en https://www.youtube.com/watch?v=sZVqGIW6Jno

Aquí un roadmap para ser desarrollador C#.

1. Aprender C# desde la consola.

  • Aprende a usar la consola para crear proyectos, compilarlos y ejecutarlos. 
  • Conoce el lenguaje, los paradigmas que usa. Los tipos de datos, estructuras de control (if, if-else, for, while, etc.) y estructuras de datos. 
  • Entiende lo que es el paradigma orientado a objetos.
  • Crea aplicaciones de consola para aprender y poner en práctica los fundamentos. 
  • Crea aplicaciones para el manejo de archivos (abrir archivos, crearlos y borrarlos). 
  • Crea aplicaciones para acceder a BD (el clásico CRUD). 
  • Crea aplicaciones para acceder a API's públicas.

Nota: Olvídate de aprender Visual Basic .NET a menos que tengas que trabajar con código legado. También olvídate de las aplicaciones tipo ventana (Windows Forms) a menos que sea necesario. Y centrate solo en .NET y no en .NET Framework.

Domina lo básico antes de entrar al desarrollo web.

2. Aprender ASP .NET MVC

  • Comprende el concepto de Modelo-Vista-Controlador. Aprende WepApi, Api Controllers, Routing, ViewModels y MVVM.
  • No aprendas Razor Pages y/o Blazor (solo si no quieres aprender Javascript).
  • Tampoco Net MAUI.

Si entiendes las bases del Modelo-Vista-Controlador estás listo para el siguiente paso.

3. Aprende HTML, CSS y Javascript (y Typescript)

  • Como maquetar una página web, aprender las etiquetas HTML.
  • Cómo darle estilo a una página web con CSS.
  • Cómo crear eventos con Javascript, cómo usar funciones como fetch, etc.
  • Aprende Typescript, un Javascript de tipado.
  • Entender lo básico de Node JS.
  • Aprende React JS (no empieces con Angular, ya que es más complejo).
  • Crea una aplicación SPA.

Javascript es un mundo, así que siempre vas a encontrar algo nuevo por aprender. Typescript es su "sucesor".

4. Concéntrate en éstos conceptos

  • Comprende lo que es la Inyección de dependencias (Dependency Injection).
  • Entiende sobre código limpio. 
  • Aprende sobre patrones de diseño y principio SOLID.
  • Cómo crear pruebas unitarias (xUnit).
  • Cómo usar logging (Serilog) en tus aplicaciones.

Si ya comprendes estos conceptos, estás listo para lo que sigue.

5. Aprender Sql Server

  • No uses MySQL, Mongo, PostreSQL, etc. Antes aprende a usar Microsoft Sql Server. Como crear bases de datos, tablas, consultas, crear nuevos registros, actualizarlos y eliminarlos.
  • Aprende a usar Entity Framework, el cual es un ORM similar a tecnologías como Hibernate.
  • Aprende a usar LINQ (Language INtegrated Query), una librería que permite integrar capacidades de consulta de datos directamente en el lenguaje.

6. No te centres en cosas sin ningún valor

  • No aprendas Web Forms y/o Windows Communication Foundation (WCF).

7. Crear aplicaciones MVC

  • Crea una aplicación web.
  • Aprende a usar Microsoft Azure (Azure app Service).

Ya estarás listo para crear servicios de mensajería con RabbitMQ o Apache Kafka y cosas más avanzadas. Podrías usar Github Copilot, ChatGPT u otra herramienta similar, pero no abuses de ella pues perderías el objetivo: aprender por ti mismo.

8. Docker y Kubernetes

  • Aprende sobre contenedores con Docker
  • Aprende a usar Kubernetes para administrar tus contenedores.

Enlaces:

https://roadmap.sh/aspnet-core
https://www.youtube.com/watch?v=sZVqGIW6Jno

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

Moonbit: un lenguaje orientado a la I.A.

Moonbit es un nuevo lenguaje de programación orientado a la I.A. y aplicaciones en tiempo real. Podemos probarlo en este sitio: https:...

Etiquetas

Archivo del blog