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
FinSiComo 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
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