Objetivo:
Conocer y aplicar adecuadamente el concepto de acumulador dentro de los ciclo en los algoritmos.

Al finalizar la clase los estudiosos estarán en capacidad de:
Entender cual es la función de un acumulador como elemento propio de los ciclos.
Realizar las pruebas a sistemas de algoritmos que usan los acumulador dentro y fuera de los ciclos.
Identificar y crear soluciones a plantemientos en los cuales es necesario usar los acumulador.

Los acumuladores
 
Este es un concepto asociado en su similitud a los contadores y a los sumadores, en este caso, se usa el operador de multiplicación en lugar de la suma. En los algoritmos acumular significa multiplicar una variable por si misma y por una (variable,constante o expresión)
 
Para acumular se define una variable que permita realizar la operación de acumulación, la cual debe ser siempre inicializada en un valor diferente de cero por que cualquier numero multiplicado por cero da cero. Luego al interior del ciclo se multiplica dicha variable por si misma y por otro dato, sea este constante, variable o expresión.

El término acumular puede ser confuso, dado que en la terminología popular ir acumulando es ir sumando valores, pero en los algoritmos está la diferencia gracias a la operación descrita como multiplicación (acumular). 

Ejemplo: r
ealizar un algoritmo que acumule los números del 1 al 100.
acum=1
contador=1
while contador<101:
    acum=acum*contador
    contador+=1
print "los numeros del 1 al 100 acumulados son: ", acum

Si al ejemplo anterior lo modificamos para que acumule los números desde 1 hasta n, estaremos haciendo un algoritmo que calcula el factorial. El factorial de un número es la multiplicación de los números positivos desde 1 hasta el número solicitado, el símbolo del factorial es (!) y por regla el factorial se asocia los enteros desde cero=1 uno=1 dos =1x2 tres=1x2x3 .... Existe el factorial de los números decimales mediante la distribución gama.


Ejemplos desarrollados

Construir un programa que genere el factorial de un número entero ingresado por el usuario. Controlar que el número sea positivo y advertir al usuario sí el número es mayor que 100, que el proceso se puede demorar mucho que si ¿desea hacerlo o cancelarlo?
#Algoritmo construido en Python 3.2 Forma 1 de solucionar el planteamiento dado.
n=int(input("digite el numero:"))
if n<0:
    n*=-1
seguir=1
if n>1000:
    seguir=int(input("1 continuar 2 terminar"))
numero=1
fact=1
while numero<=n and seguir==1:
    fact*=numero
    numero+=1
print(fact)

#Algoritmo construido en Python 3.2 Forma 2 de solucionar el planteamiento dado.
n=int(input("digite numero:"))
if n<0:
    n*=-1
continuar="1"
if n>1000:
    continuar=input("1 continuar 2 parar")
fact=1
while n>0 and continuar=="1":
    fact*=n
    n-=1
print("el factorial es",fact)

Acumular los números pares desde 2 hasta n. Sí n es negativo volverlo positivo y si es impar volverlo par.

#Algoritmo construido en Python 3.2 Forma 1 de solucionar el planteamiento dado
num=int(input("digite numero"))
if num <0:
    num*=-1
if num%2==1:
    num+=1
numero=2
acum=1
while numero<=num:
    acum*=numero
    numero+=2
print(acum)    

#Algoritmo construido en Python 3.2 Forma 2 de solucionar el planteamiento dado
n=int(input("digite numero:"))
if n<0:
    n*=-1
if n%2==1:
    n+=1
acumulador=1
while n>=2:
    acumulador*=n
    n-=2
print(acumulador)    
        
Acumular n dígitos ingresados por el teclado, la idea es que solo se acumulen dígitos positivos mayores a cero, de forma que al final se muestre que porcentaje de los datos no se incluyeron en el acumulado mostrado.
#Algoritmo construido en Python 3.2
cuantos=int(input("numero a ingresar"))
acm=1
cont=0
repeticiones=0
while repeticiones<cuantos:
    digito=int(input("ingrese el dígito"))
    if digito>0 and digito<10:
        acm*=digito
    else:
         cont+=1
    repeticiones+=1
    print("acumulado",acm)
    cont=cont/cuantos*100
    print(cont,"%")

Ejercicios para realizar

1. Construir un programa que permita calcular el valor de e mediante una sumatoria que involucra el concepto de factorial.

2. Construir un algoritmo que resuelva la siguiente multiplicatoria, se debe evitar que quede nula y en tal caso notificar de ello al usuario.

3. Construir un algoritmo que de solución a la siguiente multiplicatoria.

4. Dado un intervalo comprendido [a,b] de números enteros, determinar si acumularlos es mayor que sumarlos o viceversa.

5. Leer n números por el teclado, contando cuantos son pares, sumando solo los impares y acumulando los que sean divisibles exactamente por 11.

6. La formula para determinar el numero de combinaciones es n!/r!(n-r)! donde n es el numero total de objetos y r es el numero de objetos utilizados al mismo tiempo.

7. En matematicas el subfactorial de un numero natural n, a veces escrito como !n, es el número de posibles desarreglos (permutación donde ninguno de sus elementos aparece en la posición original) de un conjunto con n elementos. Ejemplo cuenta el número de formas diferentes en que n personas podrían cambiar por ejemplo: regalos, donde cada persona da un regalo a otra persona, y cada uno recibe exactamente otro regalo.
Construir un algoritmo que permita calcular el sub-factorial de un numero dado.

8. Dado un numero entero ingresado por el usuario, acumular los dígitos que lo conforman y determinar si el acumulado es menor, mayor o igual al numero originalmente ingresado.

9. Modificar el ejercicio anterior de forma que solo se acumulen los números mayores o iguales al ultimo acumulado. Nota el primer dígito siempre se acumula para efectos del problema.

10. Construir un programa que permita tomar un numero e invertirlo. (aplicar las técnicas de separación y las de creación de números).