Suma de dígitos con Groovy
Este es un pequeño programa que toma un número entero ingresado por el usuario, extrae sus dígitos uno por uno y los suma. A continuación se expone el código del programa que tan solo tiene 13 líneas.
Long sumDigit = 0, numEntero, extNum def input = new Scanner(System.in) print("Ingrese un numero entero: ") numEntero = input.nextLong() while(numEntero != 0) { extNum = numEntero % 10 numEntero /= 10 sumDigit += extNum } println("La suma de los digitos es: $sumDigit")
Groovy en un lenguaje de tipado Mixto, es decir, de tipado dinamico y estatico, con su sintaxis limpia que se inspira en Python. Al ser un lenguaje Mixto nos permite combinar declaraciones de variables estáticas como ocurre en la primera línea o dinámicas como ocurre en la segunda línea. Otro detalle a resaltar es la ausencia de import java.util.Scanner y es porque Groovy importa por defecto varios paquetes y clases, como lo es el paquete java.util.*, el cual contiene a la clase Scanner.
Declaración de variables
Long sumDigit = 0, numEntero, extNum
Declaramos 3 variables con tipado estático, pero solo la variable sumDigit se inicializa con un valor 0. Se crean de tipado estático para indicarle a Groovy que no convierta el resultados de la división entre dos números enteros en números decimales, ahorrando la necesidad de truncar el número.
Creando objeto Scanner()
def input = new Scanner(System.in)
Creamos un objeto Scanner, este objeto nos permitirá leer datos ingresados por el usuario. Groovy hereda la sintaxis de Java y la simplifica, así que no es raro que se le haga familiar a los que ya han programado en Java, como lo es en este caso en el que el objeto se crea usando la palabra clave new seguida de la clase Scanner().
Solicitando y leyendo información ingresada por el usuario
print("Ingrese un numero entero: ") numEntero = input.nextLong()
Con la primera línea mostramos un mensaje en pantalla indicando al usuario que ingrese un número entero. En la segunda línea leemos el numero ingresado por el usuario usando el objeto input creado anteriormente y llamando al método .nextLong(), el cual lee o escanea el dato ingresado como un número de tipo Long.
Bucle while(), operando sobre los dígitos
while(numEntero != 0) { extNum = numEntero % 10 numEntero /= 10 sumDigit += extNum }
El bucle while va a iterar mientras que el valor de numEntero sea diferente a cero, en su interior se realizan 3 operaciones matemáticas diferentes que se explican a continuación:
* extNum = numEntero % 10
: con esta operación obtenemos el último dígito de numEntero; por ejemplo, 2018 % 10 da como resultado 8 y lo almacena en la variable extNum. Esta operación se lee, módulo 10 de N.
* numEntero /= 10
: esta operación es equivalente a decir numEntero = numEntero / 10
y básicamente divide el valor de numEntero entre 10, el número resultante pierde su último dígito; por ejemplo, 2018 / 10 da como resultado 201. El resultado se almacena en la variable numEntero.
* sumDigit += extNum
: esta operación es equivalente a decir sumDigit = sumDigit + extNum
, suma el valor en la variable sumDigit con el valor en extNum y luego lo asigna de nuevo a la variable sumDigit.
Imprimiendo resultado
println("La suma de los digitos es: $sumDigit")
Por último imprimimos el resultado con la función println(), esta función genera un salto de línea al final.
Ejecutando el programa:
[fixedtorres@linuxero]$ groovy SumaDeDigitos.groovy Ingrese un numero entero: 31893107 La suma de los digitos es: 32 [fixedtorres@linuxero]$
Al ejecutar el programa veremos algo como esto, un mensaje solicitando un número entero y el resultado de la suma de los dígitos. Para este ejemplo he ingresado el número 31893107, que al sumar sus dígitos da 32.