martes, 14 de febrero de 2012

Suma de los dígitos de un número

Dado un número entero (por ejemplo, el 35012690784), ¿a cuánto asciende la suma de sus dígitos? (3+5+0+1+2+6+9+0+7+8+4=45).


El procedimiento que vamos a emplear para resolver el problema consta de 5 pasos:
  1. Contar los dígitos que tiene el número (11).
  2. Generar una lista de números desde 1 hasta el total de dígitos (del 1 al 11).
  3. Extraer (función EXTRAE) uno a uno todos los dígitos creando una matriz.
  4. Transformar los caracteres de la matriz (EXTRAE funciona en modo texto) en valores numéricos.
  5. Sumar los números.

Usaremos el rango de celdas E2:I22 para hacer el ejercicio paso a paso.

En E4:
=LARGO($C$2)    [Resultado: 11]

Seleccionamos F4:F22 y escribimos la fórmula:
=FILA(INDIRECTO("1:"&LARGO($C$2)))    [Terminamos con Ctrl + Mayús + Intro]

Hemos creado una lista de números consecutivos que comienza en 1 y acaba en 11 (número de cifras que tiene el valor de la celda C2). Este método nos permite generar una matriz de números consecutivos que comienzan y acaban donde nosotros queramos, Por ejemplo, si en M4:M50 ponemos: =FILA(INDIRECTO("1:"&LARGO("Amazonas"))) obtendremos la lista del 1 al 8 (longitud de la palabra "Amazonas"). Para crear la lista del 20 al 35, la fórmula sería: =FILA(INDIRECTO("20:35")). No debemos olvidar que se trata de una fórmula matricial y que se debe acabar con Ctrl + Mayús + Intro.

También se puede utilizar la función DESREF en vez de INDIRECTO. Así, la fórmula de la columna F, utilizando DESREF, sería: =FILA(DESREF($A$1;0;0;LARGO($C$2)))

Este tipo de fórmulas tiene su verdadera razón de ser cuando se crea un "nombre" que ha de ser utilizado, posteriormente, en otra fórmula, o cuando sirve de entrada a otra función.

Seleccionamos G4:G22 y escribimos:
=EXTRAE($C$2;FILA(INDIRECTO("1:"&LARGO($C$2)));1)    [Terminamos con Ctrl + Mayús + Intro]

Ya hemos conseguido la lista de todos los dígitos del número que hay en C2. Como los dígitos son tratados como textos debemos transformarlos en números para poderlos sumar. Esto se consigue multiplicándolos por 1. Como es lógico, también se puede multiplicar dos veces por -1, o bien, poniendo dos signos menos delante de la fórmula. Así pues, tenemos tres opciones:

Seleccionamos H4:H22 y escribimos cualquiera de estas fórmulas:
  1. =1*EXTRAE($C$2;FILA(INDIRECTO("1:"&LARGO($C$2)));1)    [Terminamos con Ctrl + Mayús + Intro]
  2. =(-1)*(-1)*EXTRAE($C$2;FILA(INDIRECTO("1:"&LARGO($C$2)));1)    [Terminamos con Ctrl + Mayús + Intro]
  3. =--EXTRAE($C$2;FILA(INDIRECTO("1:"&LARGO($C$2)));1)    [Terminamos con Ctrl + Mayús + Intro]
En I4:
=SUMA(--EXTRAE($C$2;FILA(INDIRECTO("1:"&LARGO($C$2)));1))    [Terminamos con Ctrl + Mayús + Intro. Resultado: 45]

El resultado es correcto. Sólo nos falta copiar esta última fórmula en la celda C5 y eliminar las fórmulas auxiliares que hemos puesto en E2:I22.

Sustituyendo la función SUMA por la función SUMAPRODUCTO transformamos la fórmula matricial en una fórmula normal.

En C6:
=SUMAPRODUCTO(--EXTRAE($C$2;FILA(INDIRECTO("1:"&LARGO($C$2)));1))    [Resultado: 45]

La tercera solución la obtendremos combinando DESREF y SUMAPRODUCTO.

En C7:
=SUMAPRODUCTO(--EXTRAE($C$2;FILA(DESREF($A$1;0;0;LARGO($C$2)));1))    [Resultado: 45]


 


No hay comentarios:

Publicar un comentario