<<Sumando 1000 números>> |
Lecciones anteriores: Simulando una Calculadora Paso por paso como comenzar a programar en QuickBasic |
|
Operaciones con muchos números En estas lecciones vamos a ver como empezar a programar. En la primera lección vimos los pasos para utilizar el QB, paso a paso, pantalla por pantalla. En las siguientes vimos más instrucciones, algunas de las cuales podían hacer que la computadora salteara o repitiera parte del programa. En la lección anterior vimos como hacer para que el programa repita muchas veces algunas instrucciones. Ahora vamos a usar esto para calcular la suma de 1000 números o el producto de 1000 números o hacer cualquier otra operación aburrida con muchos números. Sumando muchos números Queremos calcular la suma de los números del 1 al 1000. Aunque parezca tonto lo que vamos a hacer es sumarlos de a uno. Podríamos usar el siguiente casi programa: Dim Ans Print"----------" 'Inicializo Ans en cero Ans = 0 'Ahora le voy sumando los numeros Ans = Ans + 1 Ans = Ans + 2 Ans = Ans + 3 '(Faltan algunas lineas justo aca) Ans = Ans + 998 Ans = Ans + 999 Ans = Ans + 1000 'Y finalmente escribimos el total Print "El total es", Ans Print"----------" Como se ve el programa está un poco incompleto, y es muy largo, y es aburrido para escribirlo. Entonces vamos a reescribir la parte del medio, en la que se suman todos los números, de manera que use un ciclo For...Next de la siguiente manera: Dim Ans Dim Contador Print"----------" 'Inicializo Ans en cero Ans = 0 'Ahora le voy sumando los numeros For Contador = 1 To 1000 Ans = Ans + Contador Next Contador 'Y finalmente escribimos el total Print "El total es", Ans Print"----------" En este caso se repite 1000 veces la instrucción Ans = Ans + Contador , pero en cada pasada Contador tienen un valor distinto. Como siempre para hacer los cálculos utiliza el valor viejo de Ans, y al resultado lo anota en la variable Ans (que es la que está a la izquierda). Justo antes de empezar a sumar los números hay que acordarse de poner el total en 0. Es importante que sea justo justo antes para no olvidadarse de volver a ponerlo en 0 cuando los programas son más complicados y aparecen más ciclos y condiciones. Para ver mejor lo que está pasando podemos agregar un par de carteles más en la pantalla que muestren como se va calculando la suma: Dim Ans Dim Contador Print"-----Comienzo del programa -----" 'Inicializo Ans en cero Ans = 0 Print "Inicialmente Ans vale", Ans 'Ahora le voy sumando los numeros For Contador = 1 To 1000 Print "-------------" Print "En este paso Contador vale", Contador Print "y Ans Vale", Ans Ans = Ans + Contador Print "Al calcular la suma ..." Print "el nuevo valor de Ans es", Ans 'Sleep 'Espera a que se presione una tecla Next Contador 'Y finalmente escribimos el total Print "-------------" Print "El total es", Ans Print"-----Fin del programa-----" Al ejecutar el programa empiezan a aparecer demasiadas líneas en la pantalla y no se puede leer nada. Si tarda mucho y se aburren pueden tocar las teclas Ctrl+Break para que el programa se detenga. (Hay que apretar la tecla Ctrl o Control y mantenerla apretada mientras se toca la tecla Pause/Break que está arriba a la derecha, al lado del led NumLock.). También pueden hacer que el programa espere a que uno presione una tecla usando la instrucción Sleep. (Ya está escrita en el programa anterior como un comentario.) De esta manera uno puede ejecutarlo y verlo avanzar ciclo por ciclo, e ir comprobando como hace las cuentas y como en cada ciclo le va sumando el número al total. |
Formulita de la serie aritmética Para calcular la suma de los números de 1 a N no hace falta sumarlos de a uno. Se puede usar la siguiente formulita:
Hay varias demostraciones, alguna atribuida a Gauss en persona, pero no vamos a dar ninguna :). Con esta formulita se puede hacer un programa más corto que hace lo mismo que los anteriores, que además anda mucho más rápido (ver ejercicios) y no usa ningún ciclo: Dim Ans Ans = 1000 Print "----------" Ans = Ans * ( Ans + 1 ) / 2 Print "El total es", Ans Print"----------" Lo que deberían recordar es que a veces pensando y haciendo cuentas auxiliares en papel se consiguen algoritmos más cortos y rápidos. Sin embargo en algunos casos no hay más remedio que apelar a la fuerza bruta, por ejemplo porque las fórmulas cerradas son muy complicadas o difíciles de deducir o directamente no existen. En otros casos uno quiere tantear a lo bruto para ver que pinta debería tener la formula cerrada, o probarla con algunos ejemplos para ver si realmente está bien las cuentas que uno hizo. Factorial En los ejemplos anteriores usamos la suma, pero se puede hacer lo mismo con la multiplicación. Al número que se obtiene multiplicando todos los números desde 1 hasta n se lo llama factorial de n o n!. Por ejemplo 5!=1*2*3*4*5=120, 9!=1*2*3*4*5*6*7*8*9=362880. (Además 1!=1 y 0!=1.) Vamos a hacer un programita muy parecido al anterior que calcule 1000!. Dim Ans Dim Contador Print"----------" 'Inicializo Ans en uno Ans = 1 'Ahora le voy multiplicando los numeros For Contador = 1 To 1000 Ans = Ans * Contador Print "(",Contador,"! =",Ans,")" Next Contador 'Y finalmente escribimos el total Print "El total es", Ans Print"----------" Sólo cambiamos el + por un * y además tiene que empezar de 1 en vez de 0. También tiene un cartelito que va mostrando los factoriales de los números intermedios. Al ejecutarlo aparece un mensaje de error. Al hacer las cuentas la computadora obtiene un número demasiado grande que no puede almacenar ("Overflow") y entonces avisa para que uno trate de arreglar el problema. En este caso no lo vamos a arreglar sino que vamos a conformarnos con calcular factorial de 20 (y el de los números anteriores). Entonces cambiamos el 1000 por un 20 y volvemos a ejecutar el programa. En la pantalla aparecen varios factoriales. Los primeros aparecen como uno espera, pero a partir de 11! son demasiado grandes y los muestra en notación científica por ejemplo 11!= 3.99168E+07= 3,99168*1007~39916800. En este caso el resultado es exacto, pero hay que tener cuidado porque a veces cuando los números son muy grandes redondea las últimas cifras. Para mirar en la ayuda En esta lección hay pocas cositas sueltas pero siempre se puede investigar un poco. Como siempre pueden obtener la ayuda con la tecla F1. El curso no es infinito y la mayor parte del lenguaje va a quedar afuera así que váyanse acostumbrando a tocar F1.
Ejercicios:
Lecciones siguientes: Próximamente: Contadores y contados. |
La idea es que hagan los ejercicios y piensen que otras cosas interesantes se pueden hacer relacionadas con estos temas. Cuéntennos lo que consiguieron y pregunten lo que no les salió. Envíen sus preguntas, dudas, sugerencias, experiencias y propuestas. Nuestra dirección es cym98@oma.org.ar .
También nos gustaría saber tu opinión sobre esta clase. Les pedimos que se tomen unos instantes y contesten estas preguntas. Con tu ayuda podremos hacer un curso cada vez mejor.
OmaNet Curso CyM98 | OmaNet - Educación Interactiva www.oma.org.ar/omanet | omanet@oma.org.ar |
mensajes: webmaster@oma.org.ar |