CyM98

<<Algunas Funciones y Tomando Decisiones>>

Dificultad: Computación
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

 
Google
Web www.oma.org.ar


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.

  • Si es verdad ejecuta todo lo que está entre el If y el End If.
  • Si es mentira entonces se saltea todo y sigue después del End If.

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:

= Igual <> Distinto > Mayor < Menor >= Mayor o Igual <= Menor o Igual

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

  • Buscar las funciones Abs y Sgn.
  • Si saben trigonometría pueden buscar Sin y Cos, ¡pero ojo que están en radianes!
  • Como se usa Else.

Ejercicios:

  1. Sigan modificando todos los programas. Nos gustaría que nos mandaran algunos ejemplos y problemas interesantes que se les hayan ocurrido que se puedan solucionar con lo que vimos hasta ahora.
  2. Escribir un programa que pregunte la superficie de un círculo y calcule su radio. Además pueden agregarle un mensaje de error si el valor de la superficie es negativo.
  3. Escribir un programa que pida la longitud de los catetos AB y BC de un triángulo rectángulo y calcule:
    • Su superficie
    • La longitud de su hipotenusa AC
    • La longitud de su otra altura XB

    Triángulo Rectángulo (Sugerencia: Usar el teorema de Pitágoras)

  4. Escribir un programa que pregunte un número menor o igual que 100 y se fije si es primo. (Sugerencia: Si un número entre 1 y 100 no es múltiplo de 2 ni de 3 ni de 5 ni de 7 entonces es primo. Si no conocen la justificación traten de averiguarla.)
  5. Modificar el programa de los piratas de la lección anterior, para que ponga un mensaje de alegría cuando después de hacer todas las cuentas obtiene los 59 cocos. Si no es así que sugiera cambiar la cantidad inicial. Si son valientes de verdad hagan que el programa indique si hay que subir o bajar este número.

Lecciones siguientes:

Y otra vez, y otra vez, y otra vez, ... Comp.

Sumando 1000 números Comp.

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.

¿Cuál es tu calificación general de esta clase?

No entendí nada   Mala   Regular   Buena   Muy buena

El contenido de esta clase te resultó:

Nuevo   Conocido en parte   Conocido

El contenido de esta clase te pareció:

Difícil   Regular   Fácil

Los ejercicios de esta clase te parecieron:

Difíciles   Regulares   Fáciles

Comentarios, preguntas, sugerencias:

Agregar más información o una nueva lección sobre:

Funciones del lenguaje(Sqr, Abs, Cos, ...)

Cómo usar Else

Funciones de los Menús (Step/Paso, Trazar/Trace...)

Traducciones a Pascal o C/C++

Nombre y apellido (opcional):

E-mail (opcional):

    


OmaNet   Curso CyM98 OmaNet - Educación Interactiva
   
www.oma.org.ar/omanet | omanet@oma.org.ar
mensajes: webmaster@oma.org.ar
duty free alcohol prices duty free cigarette uk buy cigars online buy cosmetics online buy duty free perfume online buy tobacco online canada