:.Sentencias de Control.:

Estamos explorando lo básico de C, lo que no es poca información, ya que lleva un poco de teoría y la práctica es fundamental. Una vez terminado este y el siguiente tema, me gustaría trabajar con ejemplos y ejercicios propuestos para agarrar un poco de experiencia. Las sentencias de control es un tema muy interesante, las usamos para detener, pausar u orientar el flujo de un programa para que se ejecuten las acciones que deseamos.

Entre las diferentes sentencias de control, nos encontramos con: if, if-else,operador Ternario, que nos sirven para ejecutar una u otra sentencia de acuerdo a una cierta condición;switch que nos sirve para ejecutar una u otra línea de código de acuerdo a ciertos ‘casos’. Bueno, empecemos con algo ya conocido, que fue el ternario, y ahora veremos que es una forma ‘elegante’ de hacer un if-else.

Intentemos este ejemplo:

Picture 2011-12-27 19 11 35

Click en la Imagen para Ampliar

Nos entrega:

Picture 2011-12-27 19 11 58

Click en la Imagen para Ampliar

Ahora, vemos que es muy similar a lo que hicimos con el ternario, pregunta una condición, de cumplirse, se ejecuta lo que le indiquemos que “pertenece” al if en caso verdadero, que está encerrado entre llaves, de no estar entre llaves, únicamente cubriría la siguiente línea, no todo un bloque de código, recomiendo probar, luego tal vez haga, en ejemplos, una muestra de ello. Sin embargo, en este caso tenemos únicamente que pasa algo “si es cierto o si es falso”, pero… si los números son iguales no es válido que diga que uno es mayor que otro. ¿Qué hacemos? Podemos ‘anidar’ ifs o usar un else-if. Ahora me explico, podemos hacer esto:

if(condición){Ejecutar;
}//Fin del primer if

else{Ejecutar en caso falso;
if(condición2){Ejecutar esto;
}//Fin del segundo if (condición2)
else{En caso de que condición2 haya sido “evaluada” y sea falsa;
}//Fin del else del segundo if

}//Fin del else que perteneciente al primer if

Como se ve, esto ya complica el flujo. Primero entra a comprobar “condición”, de ser cierta, ejecuta su bloque de código y se salta hasta después de que termina todo eso de los ifs; en caso de ser falsa, va al ‘else’ y dentro de él ejecuta código y se encuentra con otra condición a comprobar, “condición2” y nuevamente, de ser cierta, ejecuta algo de código y de ser falsa ejecuta otra cosa.

No es la única forma de anidar, en este caso, anidamos en el else, pero puede ser que sea algo así:
if(condición){
código1;
if(condición2){
código2;
if(condición3){
código3
}
}
}
else{
pertenece a “condición”;}
Todo tan complicado como lo deseemos, aunque no es lo más recomendable porque abrimos muchos “{}” y es delicado cerrarlos, por eso recomiendo escribirlos y luego poner el cursor “en medio” y escribir ya teniendo encerrado lo que deseamos que se ejecute.

Modificaré ese programa y haré otros 2 que hagan lo mismo, espero que ilustre lo que quiero decir, hay formas más “cuidadosas” de hacer las cosas:

Picture 2011-12-27 19 14 03

Click en la Imagen para Ampliar

Nos entrega:

Picture 2011-12-27 19 14 26

Click en la Imagen para Ampliar

Y otro ejemplo sin los errores del primer programa:

Picture 2011-12-27 19 15 50

Click en la Imagen para Ampliar

Nos entrega:

Picture 2011-12-27 19 16 27

Click en la Imagen para Ampliar

Ahora, otro par de capturas para que se note la diferencia entre el primero y el tercero:

Picture 2011-12-27 19 16 47

Click en la Imagen para Ampliar

Picture 2011-12-27 19 17 31

Click en la Imagen para Ampliar

Aquí, como se podrá inferir, no hay lugar para el azar, debemos ser lo más atentos que sea posible, no escribir código ambiguo, como el primero de estos tres ejemplos, porque aunque técnicamente hace lo que le pedimos, también hace algo que no le pedimos, escribir 2 cosas inútiles al propósito y que lo que hacen es crear confusión, como auxiliar, podemos ayudarnos de && y || (and y or booleanos) como vimos en una entrega anterior y hacer que se ejecuten únicamente las acciones que deseamos.

Ahora, pasemos a switch, doy por visto el Operador Ternario, ya que no es sino un if-else simple y elegante. Esta sentencia de control nos permite ejegir de una lista las acciones a realizar de acuerdo a un criterio, que caiga una variable dentro de un caso. Esta variable puede ser tanto un char como un número entero. Como cualquier char, necesitas indicarlo con una comilla simple, los enteros, no tanto. La sintaxis es:

switch(opción){//Los casos van dentro
case 1:
cosas;
break;
case 2:
cosas;
break;
case algo:
cosas;
break;
default:
cosas;
break;
}//Termina switch()

Qué es el ‘break’, nos sirve para “detener” la ejecución, pues de no especificarlo, digamos que la opción vale 1, entra a 1, ejecuta sus acciones, y continúa con el case 2, y el case 3, y el case 4 …. hasta llegar el default, que también ejecuta o hasta topar con un break, a veces olvidar colocarlo es bastante perjudicial.

Picture 2011-12-27 19 20 47

Click en la Imagen para Ampliar

Como podemos ver, nos permite controlar las situaciones, si colocamos la opción ‘c’, imprime 2 veces la sentencia que está en TODAS las opciones. ¿Por qué? Como lo dije, al no encontrar un break, pasa al siguiente caso y al siguiente, si no encuentra uno, hasta terminar la lista. Si uno coloca una opción que no coincide con ninguno de los cases, sencillamente pasa al default -de tenerlo, es recomendable- y luego sale del bloque de código correspondiente al switch();

Picture 2011-12-27 19 21 07

Click en la Imagen para Ampliar

Como recordatorio y redundancia, si se ocupan números, debe usarse una varaible int y los casos van con el número SIN comilla simple, si son chars, como este ejemplo, ya queda expuesto. NO es lo mismo el número 1 que el char 1, recuerden que en la tabla ASCII se encuentran los símbolos que podemos usar en C “normalmente”, cada uno con un valor numérico, como experimentamos en programas anteriores.

Picture 2011-12-27 19 21 23

Click en la Imagen para Ampliar

Bueno, termina mi perorata, espero que sea medianamente digerible. Espero algún comentario -si alguien se anima a hacer una crítica constructiva-. Hago lo mejor que puedo con el material del que dispongo, sigo investigando para poder hacer los tutoriales, espero que esto sea de utilidad. Saludos

Anuncios

~ por wkats en diciembre 27, 2011.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: