<<Algunas Funciones y Tomando Decisiones>> |
Dificultad: Se necesitan algunos conocimientos elementales de computación. Lecciones anteriores: Simulando una Calculadora Paso por paso como comenzar a programar en QuickBasic Programas que hacen preguntas y otros comentarios Repaso de variables y preguntas |
|
Resumen: Primero vamos a ver algunas funciones, que permiten realizar operacion como calcular una raíz cuadrada, o eliminar los decimales de un número. Después vamos a ver como hacer que el programa ejecute o saltee instrucciones siguiendo alguna regla. De esta manera el programa puede elijir cuales son las operaciones que debe realizar según los valores iniciales. Así es posible resolver problemas que tienen que analizarse en varios casos. Repaso: 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 pero en todos estos programas la computadora seguía las instrucciones en el mismo orden en que estaban escritas. Algunas Funciones Antes vamos a ver algunas funciones útiles que permiten hacer algunas cuentas con un número de manera rápida y automática. Muchas de las más usuales que vienen incorporadas al lenguaje. Raíz Cuadrada: Sqr La primera es Sqr que calcula la raíz cuadrada de un número, o sea qué número hay que multiplicar por si mismo para obtener el valor dado. Por ejemplo la raíz cuadrada de 49 es 7, porque 7*7 =49. Esta función es necesaria por ejemplo para calcular el lado de un cuadrado en función de su superficie. Para esto podemos usar el siguiente programa. Dim Ans Print"----------" Input "Superficie= ", Ans Print Ans Ans = Sqr(Ans) Print Ans Print "Lado=", Ans Es muy similar a los de la lección pasada. En la tercera línea pregunta el valor de la superficie y al final pone un cartelito simpático. La parte interesante es la quinta línea donde dice Ans=Sqr(Ans). Como siempre calcula lo que está a la derecha del igual o sea Sqr(Ans). Hay que encerrar entre paréntesis el valor al que se le quiere sacar la raíz cuadrada. Una vez hechos estos cálculos los guarda en la variable que esta a la izquierda o sea en Ans. Parte Entera: Int Otra función muy útil es Int que nos da la parte entera de un número, o sea le quita todos los decimales. En general uno puede hacer esta operación a ojo en una calculadora, así que no existe la tecla Int. Por ejemplo la parte entera de 208,5436 es 208 (tiro el ,5436) y la parte entera de 7 es 7 (tiro el ,00000..... que en general ni siquiera se escribe). Si en la isla con los tres piratas hubiera muchos cocos y quisieran repartirlos de manera que todos recibieran la misma cantidad se podría resolver con el siguiente programa, que sirve para cualquier número de cocos. Dim Ans Print "----------" Input "Cantidad de Cocos=",Ans Print Ans Mem=Ans Print "(Mem=",Mem, ")" Ans = Ans/3 Print Ans Ans = Int(Ans) Print Ans Print "Cada pirata recibe", Ans, "cocos." Ans = Ans*3 Print Ans Ans=Mem-Ans Print Ans Print "Y el mono recibe", Ans, "cocos." El programa tiene dos partes, primero calcula cuantos cocos le tocan a cada pirata, para ello divide por 3 y usa Int para eliminar los decimales. Después calcula cuantos cocos se repartieron entre los piratas y cuántos sobraron y se los regalan al mono. Para poder calcular cuantos sobraron guarda la cantidad total de cocos en la variable Mem. Como siempre se puede combinar estas funciones con las otras operaciones, o mandar el resultado directamente a pantalla sin guardar una copia, obteniendo programas más cortos como el siguiente que hace lo mismo que el anterior. Dim Total Print "-------------" Input "Cantidad de Cocos=",Total Print "Cada pirata recibe", Int(Total/3), "cocos." Print "Y el mono recibe", Total-3*Int(Total/3), "cocos." Hay que recordar que siempre redondea para abajo, o sea que la parte entera de 1,9238 es 1 y no 2, por más que el número se parezca más a 2 que a 1. Es un poco más raro lo que pasa con los negativos, porque al redondear para abajo -7,1 se obtiene -8 que no es lo que uno espera a inicialmente. Tomando decisiones Si en el programa anterior probamos con 300 cocos entonces el mono no recibe ningún coco. Esto puede parecer injusto, pero lo peor es que en la pantalla aparece un cartel que dice Y el mono recibe 0 cocos. Sería interesante que el programa se fije si el mono recibe algún coco o no, y ponga el cartel sólo si el mono recibe algún coco. Para esto se puede utilizar la instrucción If. La instrucción If es distinta de las anteriores porque encierra un bloque de instrucciones y según el valor de la expresión que la acompaña este bloque de instrucciones es ejecutado o ignorado. En el caso anterior podemos usar Dim Total Dim Ans Print "----------" Input "Total de cocos=", Total Ans = Ans/3 Print Ans Ans=Int(Ans) Print "Cada pirata recibe",Ans, "cocos." Ans = Ans*3 Print Ans Ans=Total-Ans Print "(Ahora Ans vale",Ans, ")" If Ans>0 Then Print "Y el mono recibe", Ans, "cocos." End If Print "(--Fin--)" El programa es parecido al primero hasta llegar a la línea que empieza con If. Al llegar a la línea If Ans>0 Then se fija si es verdad que Ans es mayor que 0.
En ambos casos se ejecutan las instrucciones que están después, en este caso sólo un cartel de finalización. Para indicar visualmente el bloque de instrucciones que controla el If se agregan unos espacios a la izquierda como se ve en el programa. Así es más fácil identificar que es lo que ocurre en cada caso sin tener que buscar entre todas las líneas el correspondiente End If. Para las comparaciones se puede usar:
Hay que recordar que este igual de comparación es distinto del igual de asignación que usábamos antes. Aunque es la misma tecla y el mismo dibujito en pantalla en este caso solamente compara dos números. En cambio lo que hace normalmente es guardar el resultado de una cuenta en una variable. |
|
Tomando más decisiones Si uno es quisquilloso nota que a veces aparece el cartel Y el mono recibe 2 cocos. que es correcto y a veces el cartel Y el mono recibe 1 cocos. al que le sobra una "s". Una solución es poner "coco(s)" como en muchos mensajes del sistema operativo. Otra posibilidad es que si el mono recibe algún coco el programa se fije si es uno o más y según eso cambie el cartel. Entonces hay que cambiar la instrucción Print "Y el mono recibe", Ans, "cocos." por un bloque If...End If que decida cuál es el cartel correcto. Al hacer esto queda el siguiente programa: Dim Total Dim Ans Print "----------" Input "Total de cocos=", Total Ans=Int(Total/3) Print "Cada pirata recibe",Ans, "cocos." Ans=Total-3*Ans Print "(Ahora Ans vale",Ans, ")" If Ans>0 Then If Ans=1 Then Print "Y el mono recibe", Ans, "cocos." End If If Ans <>1 Then Print "Y el mono recibe 1 coco." End If End If Print "(--Fin--)" Nuevamente si la cantidad de cocos es 0 el programa se saltea todo el bloque en negrita y sólo pone el cartel del final. Si hay algún coco para regalarle se fija si es más de uno o no y según eso ejecuta la primera o segunda parte. En este caso se nota más porqué es conveniente agregar los espacios para que el programa parezca una escalerita, si no se hace esto es muy difícil ver que instrucciones saltea cada If cuando la condición es falsa. Se pueden seguir los pasos uno por uno yendo al menú Debug(¿Corregir/Depurar?) y tocando Step(Paso). Otra forma más rápida es tocar la tecla F8. Al tocarla varias veces el programa se ejecuta línea por línea. La línea que se está por ejecutar se marca en rojo. Si quieren ver la pantalla con los resultados tienen que ir al menú Edit(Editar) y tocar Output Screen (Pantalla de Salida) o F4. Múltiplos y divisores Muchas propiedades importantes de los números enteros tienen que ver con la divisibilidad. En el problema anterior los tres piratas se podían repartir exactamente los cocos entre ellos cuando la cantidad de cocos era múltiplo de 3. En ese caso el mono no recibe ningún coco. Con una idea similar podemos ver si un número es múltiplo de 7 por ejemplo, ¡basta con traer 4 piratas mas a la isla y fijarse si el mono esta triste! O también podemos escribir el siguiente programa Dim Numero Dim Division Dim Entero Dim Sobran Print "----------" Input "Numero=", Numero Print "Numero=", Numero Sobran = Numero-7*Int(Numero/7) Print "Sobran=", Sobran If Sobran=0 Then Print "El numero", Numero, "es múltiplo de 7." End If If Sobran<>0 Then Print "El numero", Numero, "no es múltiplo de 7." End If Print "----------" Otra forma de hacer el mismo cálculo es fijarse que si el número es múltiplo de 7 cuando hacemos la división da un entero, sin decimales. Entonces se puede comparar este resultado con su parte entera y ver si son iguales o no . Dim Numero Dim Division Dim Entero Print "----------" Input "Numero=", Numero Print "Numero=", Numero Division = Numero/7 Print "Division=", Division Entero=Int(Division) Print "Entero=", Entero If Division=Entero Then Print "El numero", Numero, "es múltiplo de 7." End If If Division<>Entero Then Print "El numero", Numero, "no es múltiplo de 7." End If Print "----------" Más cortito Juntando varias cuentas en una misma línea obtenemos los siguientes programas, que hacen exactamente lo mismo pero todo amontonado. Dim Numero Print "----------" Input "Numero=", Numero Print "Numero=", Numero If Numero-7*Int(Numero/7)=0 Then Print "El numero", Numero, "es múltiplo de 7." End If If Numero-7*Int(Numero/7)<>0 Then Print "El numero", Numero, "no es múltiplo de 7." End If Print "----------" Otra forma de hacer el mismo cálculo es fijarse que si el número es múltiplo de 7 cuando hacemos la división da un entero, sin decimales. Entonces se puede comparar este resultado con su parte entera y ver si son iguales o no . Dim Numero Print "----------" Input "Numero=", Numero Print "Numero=", Numero If Numero/7=Int(Numero/7) Then Print "El numero", Numero, "es múltiplo de 7." End If If Numero/7<>Int(Numero/7) Then Print "El numero", Numero, "no es múltiplo de 7." End If Print "----------" En cada caso al llegar al If el programa hace los cálculos de cuánto vale lo que esta a la derecha del igual y cuánto vale lo que está a la izquierda del igual reemplazando todas las variables por sus valores y haciendo todas las cuentitas. Después compara los dos resultados para ver si la condición pedida es cierta. Muchas opciones También se pueden utilizar varios If distintos para analizar varias condiciones. Por ejemplo un número puede se par, o puede ser múltiplo de 5, o puede ser múltiplo de los dos. Estas dos condiciones son independientes. Así que podemos escribir un programa que las analice a las dos y muestre un resultado simpático. Dim Numero Print "----------" Input "Numero=", Numero Print "Numero=", Numero If Numero/2=Int(Numero/2) Then Print "El numero", Numero, "es par." End If If Numero/5=Int(Numero/5) Then Print "El numero", Numero, "es múltiplo de 5." End If Print "----------" Para mirar en la ayuda Esperamos que ya estén acostumbrados a tocar la tecla F1 para ver la ayuda. El curso no es infinito y la mayor parte del lenguaje va a quedar afuera así que váyanse acostumbrando a tocar F1. Para los inquietos queda de tarea usar F1 para averiguar
Ejercicios:
Lecciones siguientes: Y otra vez, y otra vez, y otra vez, ... Más adelante: Decisiones más complejas. |
|
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 |