CI-1101 // Progra 1 // UCR 2014
Andres Chaves Robles - B21903
Tarea Programada #1 Números De Armstrong.
Andrés Chaves Robles - B21903
C1-1101
Prof. Adolfo Di Mare
Números De Armstrong.
Un número de Armstrong o número narcisista, es todo aquel número que es la suma de cada uno de sus mismos dígitos elevado al número total de dígitos.
Por ejemplo el número 153 es de Armstrong ya que este posee 3 dígitos y la suma de cada uno de sus dígitos elevado a 3 es igual a 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153.
Bajo la definición anterior y navegando en internet, se nota que el algoritmo suministrado por el profesor no es del todo correcto, ya que el algoritmo toma como supuesto que todos los números son de 3 dígitos y en la parte del algoritmo que eleva los números, lo hace multiplicando el digito por sí mismo en 3 ocasiones, sea el numero inicial de 1, 2, 3, 4 o X cantidad de dígitos.
Algoritmo en seudocódigo.
Una variable es el mecanismo que da un lenguaje de programación para permitir el acceso a la memoria. Sus valores pueden variar y para usar estas variables se necesitan declarar, para esto se le da un nombre a la variable, un tipo y un valor inicial.
Un vector o matriz (array en inglés), es una zona de almacenamiento donde se pueden guardar varios elementos del mismo tipo.
El objetivo del programa es imprimir en pantalla los números dados en el algoritmo que son de Armstrong, comprobando esto mediante distintas líneas de código.
El algoritmo descrito y explicado en palabras es el siguiente:
-
Primero el programa inicializa “VEC[ ]” (un vector de tipo int, o sea de números enteros) con diferentes números que serán puestos a prueba por el programa para valorar su condición de numero de Armstrong.
-
Seguidamente se inicia “DIM = VEC.length” (variable de tipo int), el cual tiene un valor igual a la cantidad de dígitos que posee el vector VEC almacenados.
-
Luego crea “B[ ] = new boolean[DIM]” (vector de tipo boolean, o sea que solo tiene los 2 posibles valores de cierto o falso). Este vector es paralelo al “VEC[ ]” y proporcionara un espacio para poner las respuestas de cada número que es comprobado por el algoritmo.
-
Después se crea el método “esArmstrong( VEC, B )”, el cual llevara a cabo la comprobación de cada número, y finalmente se pone una instrucción que imprima en pantalla los números que son de Armstrong.
-
El método “esArmstrong” crea “VAL[ ]” (vector de tipo int, donde estará cada número de VEC[ ] para ser comprobado) y crea además “res[ ]” (vector de tipo boolean, donde se guardara la respuesta de cada número probado para identificarse luego si cierto número era o no de Armstrong.
-
En este método:
- Se crean 5 variables de tipo int: “N”, “numero”, “suma”, “digito” y “temp”.
- “N” tiene el valor de la cantidad de números en “VAL[ ]” y ayuda para saber cuándo finalizar el ciclo IF.
- “numero” se encarga de guardar el número que se está comprobando en ese momento y que luego será comparado con “suma”.
- “suma” se inicializa en valor 0 y su función es guardar la suma de cada digito elevado para comparar al final con “numero” y si son iguales si es de Armstrong y si no lo contrario.
- “digito” para lo que sirve es guardar el ultimo digito de cada número mediante una función llamada MOD que determina el restante de una división de enteros, lo que en el algoritmo permite separar cada digito de su número.
- “temp” guarda cada número inicial con el que se hacen algunas instrucciones y luego se divide a si mismo entre 10 para eliminar el último número de sí mismo hasta que el resultado sea 0 y se termine el ciclo WHILE.
-
Entonces ya sabiendo que hace cada variable y su función se explica el algoritmo principal:
- Se crea un ciclo FOR que va agarrando un número por vez del vector “VAL” hasta que se llegue al último número.
- Ese número se guarda en las variables “numero” y “temp”.
-Luego se crea un ciclo WHILE anidado al ciclo IF, el cual se ejecuta mientras el valor de “temp” no sea = 0.
- Se utiliza la función MOD para guardar en la variable “digito” el valor que queda del restante de la división de “temp” entre 10, lo que causa que en “digito” se guarde el último digito del número utilizado.
- Luego “suma” que esta inicializado en 0 se convierte en “suma” + “digito” elevado a la 3.
- “temp” se divide entre 10 y su resultado se sobrescribe en el valor de “temp”, esta fórmula lo que hace es eliminar un digito y volver a iniciar el ciclo WHILE ahora con un número nuevo hasta haber despejado todos cada digito del número inicial.
- Cuando “temp” es igual a 0 se termina el WHILE y se entra a un IF el cual compara “suma” con “numero” y si son iguales entonces el número inicial si era de Armstrong y se le da el valor de “true” o “false” si no son iguales.
- Luego se vuelve a comenzar desde el ciclo FOR pero con el numero siguiente y así sucesivamente.
Interacción y uso de Jeliot.
El uso de Jeliot resulto ser de fácil entendimiento y bastante provechosa. El uso de esta herramienta la primera vez que lleve este curso con otro profesor hubiera resultado de sumo provecho y excelente para una mejor comprensión de los temas y algoritmos y prácticas desarrolladas en clase. Una herramienta que será bastante útil para el resto del curso y para facilitar el estudio y entendimiento de los ejercicios.