6 nov 2011

Condicionales/Selectivas! Parte II

Estructura Selectiva Doble
Bueno, ya vimos como usar el SiEntonces y dijimos que es una estructura selectiva simple, ahora veremos una estructura selectiva doble, que es mas bien una extensión del SiEntonces. En la simple, si la condicion es verdadera, se ejecutan todas las sentencias, y si es falsa, no ejecuta ninguna y termina el Si. Con la sentencia: Sino despues de cada SiEntonces, ejecutara otras sentencias en caso de que el SiEntonces fuera falso:

Si(condicion)Entonces
sentencias
Sino
sentencias por falso
FinSi 
Y para que lo entiendan mejor, lean lo siguiente de corrido:
Si(se cumple esto)Entonces
Se ejecutan estan sentencias
Sino
Se ejecutan estas sentencias
FinSi

Como ven, el Sino, va dentro del Si, e indica que tendra que hacer el programa en caso de que la condicion del Si no se cumpla, esto tiene sus pro y sus contra. Volvamos al ejemplo de la parte 1:

Proceso mayor_menor
   
    Escribir "Ingrese un numero";
    Leer num;
    Si (num>10) Entonces
        Escribir num," es mayor a diez";
    FinSi
    Si (num<10) Entonces
        Escribir num," es menor a diez";
    FinSi
   
FinProceso
Aca, el programa con dos Si, pero ahora lo podemos hacer de otra forma y funcionara (casi) igual:
Proceso mayor_menor
   
    Escribir "Ingrese un numero";
    Leer num;
    Si (num>10) Entonces
        Escribir num," es mayor a diez";
    Sino
        Escribir num," es menor a diez";
    FinSi
   
FinProceso
Aca, el programa cumple (casi) la misma fincion, pero no hizo faltar usar dos Si, solo con uno fue suficiente, si se ingresa un numero mayor, la condicion es verdadera, entonces mostraria "mayor a diez" si el numero fuera menor, la condicion seria falsa, y ahi entraria en accion el Sino, por lo que mostraria "es menor a diez". Excelente! pero por que siempre dije: casi... porque: ¿Que pasaria si el usuario ingresa el numero 10? pasaria lo siguiente:
Proceso mayor_menor

    Escribir "Ingrese un numero";
    Leer num; //supongamos que el user ingresa 10
    Si (num>10) Entonces //aca, num(10) no es mayor a diez, entonces esto seria falso
        Escribir num," es mayor a diez"; //como es falso, no ejecuta esta sentencia, perfecto!, pero...
    Sino //que paso!, como es falso, el Sino si funciona, y ejecutaria las acciones
        Escribir num," es menor a diez"; //entonces mostraria "10(num) es menor a diez" :( MAL!
    FinSi
   
FinProceso
 ¿Y como solucionamos esto? y hay muchas formas, lo mas comun seria poner otro Si, dentro del Si (si, se puede! jeje)

Proceso mayor_menor
   
    Escribir "Ingrese un numero";
    Leer num;
    Si (num>10) Entonces
        Escribir num," es mayor a diez";
    Sino //Si la condicion es falsa entra aca
        Si(num<10) Entonces //y si se cumple tambien esta condicion
            Escribir num," es menor a diez"; //muestra esto
        FinSi //Cuidado, cada Si, tiene su FinSi, este cierra el de < a 10
    FinSi //Y este cierra el primero
   
FinProceso //Finalmente, este programa queda igual que el primero
En este caso, si el user ingresa 10, el programa no muestra nada, (como el primero) por que cuando entra al sino apaece otro Si, que mostraria el mensaje si se cumpliera que num es < a 10.
A simple vista, nos damos cuenta que en ese ejemplo, el Sino no nos convenia, por que escribiendo dos Si, ahorrabamos lineas de codigo, y para cualquier programador, cuanto menos lineas escribe, mejor.
Pero hay casos en los que si nos conviene. En el ejemplo habia tres posibilidades:
1. Que el usuario ingresara un numero mayor a diez (verdadero)
2. Que ingresara uno menor (falso)
3. Que ingresara uno igual (10) (falso)
Usar la estructura doble, nos conviene cuando solo tenemos dos posibilidades, una verdadera, y otra falsa, en ese caso, el Sino seria lo mas conveniente. Veamos un ejemplo un poco mas complejo, para que se empiecen a acostumbrar jeje.
Ejemplo: Realizar un algoritmo para un programa que lea 3 notas de un alumno, calcule el promedio, y si este es mayor o igual a 7, muestre en pantalla "alumno aprobado" y si es menor a 7, que muestre "alumno desaprobado".

Proceso promedio

    Escribir "Ingrese las tres notas";
    Leer not1;
    Leer not2;
    Leer not3;
    prom<-(not1+not2+not3)/3; //sacamos el promedio
    Si(prom>=7)Entonces //si prom es mayor o igual a 7
        Escribir "alumno aprobado"; //muestra esto
    Sino //si es menor
        Escribir "alumno desaprobado"; //muestra esto
    FinSi

FinProceso  
En este caso, lo mas comodo y efectivo fue poner el Sino, por que solo habia dos posibilidades:
1. Que el promedio de como resultado mayor o igual a 7 (verdadero)
2. Que el promedio sea menor a 7 (falso)
Por eso, esta estructura es DOBLE, por que ejecuta sentencias en 2 casos: si la condicion es verdadera, por un lado, y si es falsa, por el otro, pero si hubiera mas casos se necesitarian mas Si...
Aca termina todo lo que es Selectiva Simple, en la proxima les mostrare la Multiple, que es bastante util tambien, hasta luego!!

No hay comentarios:

Publicar un comentario