Ir al contenido principal

Oberon en un vistazo (3)

Siguiendo esta serie sobre el lenguaje Oberon traemos más ejemplos y comparativas con otros lenguajes como Fortran y Pascal, sus lenguajes contemporáneos.

Ejemplo. Calcular el IMC (Índice de Masa Corporal). Siguiendo esta fórmula:

imc = peso / (talla* talla)

calculo_imc.obn

MODULE calculo_imc;

IMPORT In, Out;

VAR
  peso, talla, imc: REAL;
  cad: ARRAY 100 OF CHAR;

BEGIN
  (* Solicitar el peso *)
  Out.String("Tu peso: "); 
  In.Real(peso); 
  
  (* Solicitar la talla *)
  Out.String("Tu talla: "); 
  In.Real(talla);
  
  (* Calcular el IMC *)
  imc := peso / (talla * talla);
  
  (* Evaluar las categorías del IMC *)
  IF imc < 16.00 THEN
    cad := "Infrapeso: Delgadez Severa"
  ELSIF (imc >= 16.00) & (imc <= 16.99) THEN
    cad := "Infrapeso: Delgadez Moderada"
  ELSIF (imc >= 17.00) & (imc <= 18.49) THEN
    cad := "Infrapeso: Delgadez Aceptable"
  ELSIF (imc >= 18.50) & (imc <= 24.99) THEN
    cad := "Peso Normal"
  ELSIF (imc >= 25.00) & (imc <= 29.99) THEN
    cad := "Sobrepeso"
  ELSIF (imc >= 30.00) & (imc <= 34.99) THEN
    cad := "Obeso: Tipo I"
  ELSIF (imc >= 35.00) & (imc <= 40.00) THEN
    cad := "Obeso: Tipo II"
  ELSE
    cad := "No existe clasificación"
  END;

  (* Imprimir los resultados *)
  Out.String("Tu IMC es: "); 
  Out.Real(imc, 2); (* Imprimir el IMC con 2 decimales *)
  Out.Ln;
  
  Out.String("Tu diagnóstico es: "); 
  Out.String(cad);
  Out.Ln;
  
END calculo_imc.

En Fortran quedaría de la siguiente forma:

imc_calculator.f90

program imc_calculator
  implicit none
  real :: peso, talla, imc
  character(len=50) :: cad

  ! Solicitar el peso
  print *, 'Tu peso: '
  read *, peso

  ! Solicitar la talla
  print *, 'Tu talla: '
  read *, talla

  ! Calcular el IMC
  imc = peso / (talla * talla)

  ! Evaluar las categorías del IMC
  if (imc < 16.0) then
    cad = 'Infrapeso: Delgadez Severa'
  else if (imc >= 16.0 .and. imc <= 16.99) then
    cad = 'Infrapeso: Delgadez Moderada'
  else if (imc >= 17.0 .and. imc <= 18.49) then
    cad = 'Infrapeso: Delgadez Aceptable'
  else if (imc >= 18.5 .and. imc <= 24.99) then
    cad = 'Peso Normal'
  else if (imc >= 25.0 .and. imc <= 29.99) then
    cad = 'Sobrepeso'
  else if (imc >= 30.0 .and. imc <= 34.99) then
    cad = 'Obeso: Tipo I'
  else if (imc >= 35.0 .and. imc <= 40.0) then
    cad = 'Obeso: Tipo II'
  else
    cad = 'No existe clasificación'
  end if

  ! Imprimir los resultados
  print *, 'Tu IMC es: ', imc
  print *, 'Tu diagnóstico es: ', trim(cad)

end program imc_calculator

En Pascal sería así:

imc_calculator.pas

program IMC_Calculator;

var
  peso, talla, imc: real;
  cad: string;

begin
  (* Solicitar el peso *)
  writeln('Tu peso: ');
  readln(peso);

  (* Solicitar la talla *)
  writeln('Tu talla: ');
  readln(talla);

  (* Calcular el IMC *)
  imc := peso / (talla * talla);

  (* Evaluar las categorías del IMC *)
  if imc < 16.00 then
    cad := 'Infrapeso: Delgadez Severa'
  else if (imc >= 16.00) and (imc <= 16.99) then
    cad := 'Infrapeso: Delgadez Moderada'
  else if (imc >= 17.00) and (imc <= 18.49) then
    cad := 'Infrapeso: Delgadez Aceptable'
  else if (imc >= 18.50) and (imc <= 24.99) then
    cad := 'Peso Normal'
  else if (imc >= 25.00) and (imc <= 29.99) then
    cad := 'Sobrepeso'
  else if (imc >= 30.00) and (imc <= 34.99) then
    cad := 'Obeso: Tipo I'
  else if (imc >= 35.00) and (imc <= 40.00) then
    cad := 'Obeso: Tipo II'
  else
    cad := 'No existe clasificación';

  (* Imprimir los resultados *)
  writeln('Tu IMC es: ', imc:0:2);  (* Imprimir con 2 decimales *)
  writeln('Tu diagnóstico es: ', cad);
end.

Viendo con detalle, los tres lenguajes lucen similares. Sobre todo Pascal y Fortran.

Para compilar y ejecutar el programa de Oberon:

obnc -o calculo_imc.exe -v -x calculo_imc..obn
calculo_imc.exe

Para compilar y ejecutar el programa de Fortran:

gfortran imc_calculator.f90 -o imc_calculator.exe
imc_calculator.exe

Para compilar y ejecutar el programa en Pascal:

fpc imc_calculator.pas
imc_calculator.exe

Rendimiento por programa


Oberon    | Fortran  | Pascal  
05.70ms   |  04.49ms | 04.71ms

Para medir el tiempo se uso este BAT:

ejecucion.bat

@echo off
echo %time% < nul
AQUI DEBE IR EL PROGRAMA .EXE
echo %time% < nul

Es todo por el momento. ¡Feliz código!

Enlaces:

https://fortran-lang.org/es/index
https://www.freepascal.org/
https://oberon.org/en
https://oberon-lang.github.io/
https://oberon07.com/compilers.xhtml

Comentarios

Entradas populares de este blog

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

z/OS, ¿Qué es? y ¿Cuáles son sus herramientas?

  En este post veremos las herramientas de z/OS de IBM. z/OS es un sistema operativo de mainframe desarrollado por IBM.  Es parte de la serie IBM z Systems (anteriormente conocida como System z), que se utiliza en los sistemas mainframe de IBM. z/OS es uno de los sistemas operativos más utilizados en el mundo empresarial para ejecutar aplicaciones críticas y procesar grandes volúmenes de datos. Características clave de z/OS: Escalabilidad : z/OS es conocido por su capacidad para manejar grandes cargas de trabajo y escalabilidad vertical, lo que permite agregar recursos de hardware para satisfacer las demandas de procesamiento. Confiabilidad y disponibilidad : z/OS está diseñado para ofrecer alta disponibilidad y confiabilidad. Incorpora características como redundancia y recuperación ante fallas para garantizar la continuidad de las operaciones. Seguridad : Proporciona una amplia gama de funciones de seguridad, como autenticación, autorización y auditoría, para proteger los...