Bloque de control switch
El bloque de control switch es una variación del bloque if, para múltiples casos. La sintaxis de este bloque es la siguiente:
switch(caso) { case Caso1: Accion1_1; Acción1_2; ... break; case Caso2: Accion2_1; Acción2_2; ... break; ... ... default: AccionD_1; AcciónD_2; ... break; }
Aqui, caso es una variable o expresión entera, cuyo resultado define que conjunto de acciones se ejecutarán. Si el resultado (o valor) de caso no es ninguno de los casos enumerados y existe un caso default, es su conjunto de acciones el que se ejecuta.
La sentencia de control break se coloca si se desea terminar la secuencia de ejecución de sentencias, de no estar, se seguirían ejecutando las sentencias que siguen, aunque no pertenezcan al caso dado.
Un ejemplo de uso donde se cuentan vocales y otros caracteres:
switch(c)
{
case 'a':
case 'A':
tot_a++;
break;
case 'e':
case 'E':
tot_e++;
break;
case 'i':
case 'I':
tot_i++;
break;
case 'o':
case 'O':
tot_o++;
break;
case 'u':
case 'U':
tot_u++;
break;
default:
tot_otro++;
}
Ejemplo:
ejem_switch.c
/* Programa que simula el comportamiento
de una entidad que se mueve al azar en el plano */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define IZQUIERDA 0
#define DERECHA 1
#define ARRIBA 2
#define ABAJO 3
#define QUIETO 4
#define NUM_PASOS 100000
int main()
{
int PosX = 0, /* Posisión X */
PosY = 0; /* Posición Y */
int Contador;
double distancia;
srand(time(NULL)); /* Inicializa generador aleatorio */
for(Contador = 0; Contador < NUM_PASOS; Contador++)
{
switch(rand()/(RAND_MAX/5)) /* Sortea una dirección */
{
case IZQUIERDA:
PosX--;
break;
case DERECHA:
PosX++;
break;
case ARRIBA:
PosY++;
break;
case ABAJO:
PosY--;
break;
}
}
distancia = sqrt(PosX*PosX+PosY*PosY);
printf("PosX: %d, PosY: %d\n", PosX, PosY);
printf("Distancia: %lf\n", distancia);
return 0;
}
Puntos a notar
- Uso de números pseudo-aleatorios. Generalmente, todas las bibliotecas de funciones que vienen con un compilador C poseen un conjunto de funciones para la generación de números pseudo-aleatorios. Para hacer uso de ellos hay que primero inicializar el generador (función srand(Semilla)) con una semilla que definirá la secuencia de números a generar (es por ello que habría que hacer que la semilla fuera distinta cada vez que esta función se ejecute; una manera de hacer esto es que la semilla dependa de la hora). Una vez inicializado el generador, llamando a la función rand(), esta función retorna un número entre 0 y RAND_MAX (este símbolo depende de la implementación del generador y esta definida en el archivo stdlib.h).
- Uso de los operadores ++ y --. Estos operan sobre una variable incrementando o decrementando su valor (A++; => A = A + 1;). Estos operadores pueden usarse como pre o post-operadores, Teniendo esto una leve implicancia.
- Uso de la función time (ir a un manual de referencia para ver la descripción y uso de esta función.) 4. Uso de la función sqrt para calcular la raíz cuadrada (notar que se debe compilar con la opción -lm además de incluir math.h)
ICOM