Introducción a la Lógica de Programación 207
.:Ejemplo 4.4. Dentro del contexto de las matemáticas recreativas3 se
encuentra el concepto de número de Armstrong, también conocido como
número narcisista; definido como aquel en que la suma de cada una de sus
cifras elevadas a la potencia n es igual a él mismo, donde n está dada por
la cantidad de cifras o dı́gitos del número.
Por ejemplo, el número 407, que posee 3 cifras, es un Armstrong dado
que:
43 + 03 + 73 = 64 + 0 + 343 = 407
Son también números de Armstrong los siguientes: 1, 2, 3, 4, 5, 6, 7,
8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834,
1741725, entre otros
De acuerdo al anterior contexto, construya un algoritmo que reciba un
número entero positivo en base 10 y determine si es o no un número de
Armstrong.
Análisis del problema:
Resultados esperados: mensaje que informe si el número ingresado
es o no un Armstrong.
Datos disponibles: un número entero positivo en base 10.
Proceso: la solución de este problema se puede realizar con los
siguientes pasos:
• Leer un número entero positivo.
• Determinar el número de cifras o dı́gitos de ese número. Para
ello se usa el procedimiento explicado en el Ejemplo 4.34 .
• Calcular la sumatoria de sus dı́gitos elevados a la potencia n,
donde n estará determinada por el número de cifras resultantes
del proceso anterior.
• Tomar una decisión que determine si el número leı́do es igual a
la sumatoria mencionada en el paso anterior (Ver Figura 4.9).
3
Estudio y solución por puro pasatiempo de problemas y acertijos relacionados con
las matemáticas [Bishop et al., 2004].
4
Se recomienda leer el análisis de dicho ejemplo.
208 Estructuras de repetición
¿numero = sumatoria?
sı́ no
Es un número de Armstrong No es un número de Armstrong
Figura 4.9: Árbol de decisión del Ejemplo 4.4
Variables requeridas:
• numero: almacenará el valor proporcionado por el usuario del
algoritmo.
• copiaNumero: en esta variable se hará copia del valor original
del número y con ella se efectuarán los cálculos necesarios para
la separación de las cifras; ası́ se podrá conservar el contenido
original en la variable numero.
• contadorCifras: contará el número de dı́gitos que tiene el
número, a la vez será utilizada como el valor de la potencia (n)
a la que se eleva cada uno de los dı́gitos.
• cifra: se utilizará para ir almacenando las cifras o dı́gitos que
se separen del número.
• sumaCifras: en ella se calculará la sumatoria de las cifras
elevadas a la potencia n (contadorCifras).
En las Figuras 4.10 y 4.11 se muestra la solución del Ejemplo 4.4
mediante un diagrama de flujo.
Debido a que la solución es un poco extensa, fue necesario dividir el
diagrama en dos páginas, observe que para poder seguir el flujo se utilizó
un conector a otra página.
Buena práctica:
Cuando los diagramas son muy extensos, se deben
dividir en varias partes, las cuales se enlazan con
conectores a la misma página o con conectores a otra
página.
Introducción a la Lógica de Programación 209
Inicio
numero
copiaNumero = numero
contadorCifras = 0
No
copiaNumero > 0
Sı́
cifra = copiaNumero % 10
copiaNumero = copiaNumero / 10
contadorCifras = contadorCifras + 1
Figura 4.10: Diagrama del flujo del Algoritmo Armstrong - Parte 1
210 Estructuras de repetición
sumaCifras = 0
copiaNumero = numero
No
copiaNumero > 0
Sı́
cifra = copiaNumero % 10
copiaNumero = copiaNumero / 10
sumaCifras = sumaCifras
+ cifraˆ contadorCifras
Sı́ numero == No
sumaCifras
numero,“es un número numero, “no es un
de Armstrong” número de Armstrong”
Final
Figura 4.11: Diagrama del flujo del Algoritmo Armstrong - Parte 2
Introducción a la Lógica de Programación 211
A continuación se muestra la solución a través de pseudocódigo
(Algoritmo 4.7).
Algoritmo 4.7: Armstrong
1 Algoritmo Armstrong
2 /* Recibe un número entero positivo y determina si es
3 o no un número de Armstrong.
4 * /
5 // Declaración de variables
6 Entero numero, copiaNumero, contadorCifras, cifra,
7 sumaCifras
8
9 // Lectura del dato disponible
10 imprimir( "Escriba el número a analizar: " )
11 leer( numero )
12
13 // Inicialización de variables
14 // Se cuenta el número de cifras del número
15 contadorCifras = 0
16 copiaNumero = numero
17 Mientras( copiaNumero > 0 )
18 cifra = copiaNumero % 10
19 copiaNumero = copiaNumero / 10
20 contadorCifras = contadorCifras + 1
21 FinMientras
22
23 // Se calcula la sumatoria de sus dı́gitos
24 // elevados a la potencia n (contadorCifras)
25 sumaCifras = 0
26 copiaNumero = numero
27 Mientras( copiaNumero > 0 )
28 cifra = copiaNumero % 10
29 copiaNumero = copiaNumero / 10
30 sumaCifras = sumaCifras + cifra ˆ contadorCifras
31 FinMientras
32
33 // Resultado esperado
34 Si( numero == sumaCifras ) Entonces
35 imprimir( numero, "es un número de Armstrong." )
36 SiNo
37 imprimir( numero, " no es un número de Armstrong." )
38 FinSi
39 FinAlgoritmo
212 Estructuras de repetición
Al ejecutar el algoritmo:
Primera ejecución:
Escriba el número a analizar: 1634
1634 es un número de Armstrong.
Segunda ejecución:
Escriba el número a analizar: 14321
14321 no es un número de Armstrong.
Explicación del algoritmo:
En esta solución se utilizan dos estructuras repetitivas Mientras-
FinMientras independientes. Cuando se habla de estructuras
independientes, se quiere decir que primero se ejecuta una completamente
y luego se procede de igual manera con la siguiente.
La primera estructura repetitiva en esta solución, tiene la función
de contar el número de cifras o dı́gitos que conforman al número que
proporcione el usuario, de esta manera se determina el valor de la potencia
(contadorCifras) a la cual se deben elevar cada uno de los dı́gitos.
Para ello se usó el mismo procedimiento explicado en el Ejemplo 4.3.
La segunda instrucción Mientras-FinMientras del algoritmo,
calcula la sumatoria de los dı́gitos elevados a la potencia n
(contadorCifras).
Luego de que se ejecuten los dos ciclos, se encuentra una estructura de
decisión Si-FinSi independiente a ellos, cuya función es determinar si el
número suministrado es o no un Armstrong.
Una caracterı́stica a destacar en esta solución, es que las dos estructuras
repetitivas Mientras-FinMientras tienen instrucciones similares, en
ambas se hace la separación de las cifras.