jueves, 31 de mayo de 2012

Condiciones



Para las condiciones usaremos las sentencias condicionales.
Estas sentencias son las encargadas de tomar una decisión dentro
de nuestro programa.

Para que se cumplan estas condiciones usaremos los comparadores.

OPERADOR DE COMPARACIÓN
SIGNIFICADO
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que


INSTRUCCIONES DE COMPARACIÓN
FUNCIÓN
AND
Y
OR
O
NOT
Negación

Una sintaxis posible puede ser esta:

si variable1 condición variable2 entonces hacer

Las sentencias condicionales podemos escribirlas en solo una linea,
cuando las sentencias son simples y en un grupo cuando son mas complejas.

Ejemplo de condicionales simple:

Si Juan > 18 Entonces Mostrar “Juan es mayor de edad”

IF Juan > 18 THEN PRINT “Juan es mayor de edad”


Veamos un ejemplo erróneo

SI Juan>=18 Entonces Mostrar “Juan mayor de edad”
Mostrar “Juan no es mayor de edad”

En el caso de que Juan no tenga 18 o más. La primera condición no se cumple
y salta a la siguiente instrucción. Pero ,¿ y si Juan tiene 18? .

Se cumpliría la condición y luego continuaría con la siguiente
instrucción. Mostrando también que no es mayor de edad.
¿ Como evitamos eso ?.

Usaremos una condicional doble. (Juan tiene que estar cansado..:-D)

SI Juan>=18 Entonces
Mostrar “Juan mayor de edad”
SINO
Mostrar “Juan es menor de edad”
FIN DE SI

----código---
IF Juan>=18 Then
PRINT “Juan es mayor de edad”
ELSE
PRINT “Juan es menor de edad”
END
---código---

Ahora usaremos las instrucciones de comparación:
Las dos condiciones se cumple.

SI JUAN=12 Y MARIA=12 Entonces
Mostrar “Juan y María tienen la misma edad”
SINO
Mostrar “Juan y Maria no tienen la misma edad”
FIN DE SI

---código---
IF Juan=12 AND Maria=12 THEN
PRINT “Juan y María tienen la misma edad”
ELSE
PRINT “Juan y Maria no tienen la misma edad”
ENDIF
---código---


Una de las condiciones se cumple.

Si Juan=12 Ó Maria=12 Entonces
Mostrar “Juan o Maria tienen 12 años”
SINO
Mostrar “Juan o Maria no tienen 12 años”
FIN DE SI

---código---
IF Juan=12 OR Maria=12 THEN
PRINT “Juan o María tienen 12 años”
ELSE
PRINT “Juan o María no tienen 12 años”
ENDIF
--código---


Ejemplo de negación:

Si Juan No es >=18 Entonces Mostrar “Juan es menor de edad”

IF NOT (Juan>=18) Entonces Mostrar “Juan no es mayor de edad”



Ahora hagamos una selección con múltiples condiciones.

SI edad < 2 Y edad > 0 ENTONCES
PRINT “Bebé”
EN CAMBIO SI edad<12 Entones
PRINT “Niño”
EN CAMBIO SI edad< 18 Entones
PRINT “Joven”
SINO
PRINT “Adulto”
FIN DE SI

Como veis la “Y” es una forma de decir que tiene que cumplirse
las dos condiciones y actúa como un intervalo de valores.

---código---
IF edad < 2 AND edad > 0 THEN
PRINT “Bebé”
ELSE IF edad < 12 THEN
PRINT “Niño”
ELSE IF edad < 18 THEN
PRINT “Adulto”
ELSE
PRINT “Adulto”
ENDIF
---código---

Bien como veis. Cuando tenemos muchos IF..ELSE IF,logramos
hacer código un poco confuso y aumentamos considerablemente
el número de lineas.

Para solucionar esto y tener un código mas claro usamos
La sentencia condicional múltiple “SELECT CASE”

---código---
DIM edad AS INTEGER

SELECT CASE edad
    CASE 0 TO 2
         PRINT “Bebé”
    CASE 2 TO 12
         PRINT “Niño”
    CASE 13 TO 17
         PRINT “Joven” 'No lo toméis al pie de la letra. ;-)
    CASE 18
        PRINT “Mayor de edad”
    CASE ELSE
       PRINT “Adulto"
END SELECT
---código---

Hemos usados unos rangos de valores.
Y en caso de que la edad sea mayor a 18, sera “adulto” la respuesta

Veis un código mucho mas claro de entender y más estético.

2 comentarios:

  1. Buenas tardes, me parece sencillo el tutorial... pero trato de hacer un ejercicio con esa sintaxis y no me funciona... mi código es el siguiente:

    Public Sub Button1_Click()

    If TxBRespuesta.Text = "Círculo" And Imagen1.Picture = Picture.Load("~/Gambas3/ComoSeLlama/PNG/Circulo.png") Then 'No Funciona esto
    Exec ["aoss", "espeak", "-ves", "-s150", "Excelente, ¡Es un Círculo!"]
    Else
    Exec ["aoss", "espeak", "-ves", "-s150", "Lo siento, no es una " & TxBRespuesta.Text]
    Endif

    End

    ResponderEliminar
  2. Prueba a cambiar la línea con esto:

    If TxBRespuesta.Text = "Círculo" And Imagen1.Picture = Picture["~/Gambas3/ComoSeLlama/PNG/Circulo.png"]

    No es una forma correcta. Mejor usar cadenas.
    Ejemplo:

    Public Sub Form_Open()

    Dim lenguajeicono As New Collection
    Dim respuestausuario As String
    Dim nombredeimagen As String

    'Asignamos como valor la ruta y el nombre de la imagen. La clave es el nombre del lenguaje
    'Las imágenes en este caso están dentro del proyecto

    lenguajeicono.Add(Application.Path &/ "gambas3.png", "Gambas")
    lenguajeicono.Add(Application.Path &/ "python.png", "Python")
    lenguajeicono.Add(Application.Path &/ "java.png", "Java")
    lenguajeicono.Add(Application.Path &/ "c.png", "C")

    'Asignamos a respuestausuario el nombre de un lenguaje
    respuestausuario = "Gambas"

    'Asignamos una clave de la colección lenguajeicono a la variable nombreimagen
    nombredeimagen = "Gambas"

    'Asignamos al control Picture la imagen para mostrarla en el formulario.
    PictureBox1.Picture = Picture[lenguajeicono[nombredeimagen]]

    'Es más sencillo comparar cadenas
    If respuestausuario = nombredeimagen Then
    Print "Correcto"
    Else
    Print "Error"
    Endif

    End


    Como ves no es el lugar adecuado para una respuesta así.
    Mejor en el foro de Gambas.

    ResponderEliminar