miércoles, 9 de octubre de 2013

ESTRUCTURAS DE DECISION

Estructuras de decisión y tomas de 

control.


Tomas de decisión

if ... then ... else
Esta estructura se adapta especialmente al caso más simple de una toma de  decisión.
Ejemplo: Imaginemos que queremos restringir la entrada a un aula a todo aquel que no sea de tercer curso, por ejemplo. Tendremos una variable que nos indique el curso al que pertenece el alumno.Una variable que, por ejemplo, podremos llamar curso.

if (curso == 3) {
printf("El muchacho es de tercero. Puede pasar\n");
}
else {
printf("Lo siento, no puede pasar porque su curso es %d\n",curso);
}

Vayamos por partes. En primer lugar vemos nuestro if, objeto de nuestro estudio. A continuación, y entre paréntesis, la expresión curso == 3 (observad que uno de los errores más normales, y no necesariamente de principiantes, es poner un signo = en lugar de los dos ==; si se pone uno solo, se estará realizando una asignación (dándole a curso el valor 3), no una comparación. Esta expresión es evaluada y, en el caso de resultar cierta (lo que en C equivale a dar un valor distinto de cero) se entra en el cuerpo del if (el espacio entre llaves). En el caso de ser falsa, pasará a ejecutar el código entre las llaves que siguen al else.


switch ... case ...
Existen ocasiones en las que queremos tomar diferentes acciones según el valor de una determinada expresión o variable. Por ejemplo, supongamos que queremos imprimir una determinada expresión según nuestra personalidad. Tenemos una función hipotética Somos, que devolverá lo que somos (unas constantes predefinidas, por ejemplo, en un enum). 

somos=Somos();
if (somos==ELFO) {
 print "Que bien se esta en este bosquecillo\n";
}
else if (somos==GANDALF) {
 print "He de partir hacia el este\n";
}
else if (somos==SAM) {
 print "Tanta tranquilidad es sospechosa\n";
}
else if (somos==GOLLUM) {
 print "Mi tessssssssoro\n";
}

En los paréntesis que siguen al switch situamos la expresión a evaluar y, entre llaves, ponemos unconjunto de case, a continuación de los cuales va la constante correspondiente.
El default se utiliza si es necesario tener en cuenta la posibilidad de que se de algún valor nocontemplado, y los break son necesarios para que el programa salga del switch; en otro caso,seguiría realizando comparaciones.

Estructuras de control

while ...
En ocasiones se necesita realizar algo mientras (while) se cumpla una determinada condición. Recordemos, una vez más, que para el lenguaje C, cumplirse significa ser distinto de cero. Vamos,que una expresión tan sencilla como 4 se cumple siempre, y la expresión 0 no se cumple nunca.Por ejemplo, vamos a lanzar misiles hasta ganar la guerra.

 fin=0; /* Inicializacion de la variable */
 while (!fin) { /* Mientras no acabamos */
 if (GuerraGanada()) {
 fin=1;
 }
 }
El cierre de admiración antepuesto a cualquier expresión, la niega. Es decir, si fin es falso, !fin es verdadero.



do ... while
Esta expresión es semejante a la while .... Hace algo mientras se cumpla una determinada condición pero, a diferencia de la expresión anterior, lo realiza al menos una vez. (Obsérvese que, en el ejemplo anterior, si fin es 0, no entra en el bloque). 
do {
... /* Este bloque se realiza al menos una vez */
} while (!fin); /* Mientras no acabemos */


for ...
Se emplea esta expresión generalmente -no siempre- cuando queremos realizar una determinada acción un número prefijado de veces. Su sintaxis es:
for ( [INICIALIZACION]; [CONDICION PARA SEGUIR EN EL BUCLE] ; [ACCIONES EN CADA
EJECUCION DEL BUCLE] ) { ... }
Por ejemplo, si queremos que un programa nos imprima la tabla del 9:
for (i=1; i<=10; i++) {
 print ("9 x %d es %d\n",i,9*i);
}
Aquí comenzamos el bucle dando a i el valor de inicialización 1. No hay inconveniente en
inicializar varias variables a la vez, separándolas por comas: i=1, m=9. Para seguir en el bucle se ha de cumplir la condición i<=10 y, a cada paso del bucle, incrementamos en una unidad la variable i. Conseguimos el mismo efecto haciendo lo siguiente:
for (i=1,m=9;i<=10;m+=9,i++)
 print ("9 x %d es %d\n",i,m);Aquí, por un lado vemos que no son necesarias las llaves cuando solamente hay una línea en el
cuerpo del bucle. Inicializamos dos variables (i=1,m=9), entramos en el bucle mientras i<=10 y, acada paso, incrementamos m en 9 e i en una unidad. 

No hay comentarios.:

Publicar un comentario