Capítulo 5. Estructura de control alternativa. 1. Introducción.

Anuncio
Capítulo 5.
Estructura de control alternativa.
1. Introducción.
2. Estructura alternativa simple.
3. Estructura alternativa doble.
4. Estructura alternativa múltiple.
5. Anidamiento de alternativas.
1
1. Introducción.
Además de la estructura secuencial, vista en el tema anterior, en la
programación estructurada puede emplearse la estructura de control
alternativa.
Con la estructura alternativa se puede hacer que unas determinadas
sentencias de un programa se ejecuten sólo cuando se cumpla una
determinada condición. Ya sabemos que una condición es una expresión
booleana, es decir que puede tomar solamente valor verdadero o falso.
También se ha mencionado que en C cualquier expresión puede ser una
condición, ya que si la expresión vale 0 es tomada como falsa, y si no vale cero
es verdadera.
Veamos los tres tipos de estructuras alternativas.
2. Estructura alternativa simple.
En pseudocódigo, esta estructura se escribe de la forma:
...
si (condición)
Sentencia1
Sentencia2
...
finsi
...
La condición será una expresión booleana, es decir con valor verdadero
o falso. Si la condición es verdadera, se ejecutan las sentencias colocadas
entre si y finsi. Si la condición es falsa, esas sentencias no se ejecutan. La
ejecución del programa continuará, en cualquier caso, con las sentencias que
haya debajo del finsi.
En C, la sintaxis de esta estructura es:
...
if (condición)
{
Sentencia1;
Sentencia2;
...
} //equivale al finsi del pseudocódigo.
Ej.
scanf(“%d”, &nota); fflush(stdin);
if (nota >= 5)
{
printf(“Aprobado”);
}
2
No debe olvidarse que una condición puede ser compuesta, utilizando
los operadores lógicos && (AND) y
|| (OR), enlazando en una misma
condición dos o más expresiones relacionales.
Ej.
scanf(“%d”, &nota); fflush(stdin);
if (nota >= 5 && nota <= 10)
{
printf(“Aprobado”);
}
2. Estructura alternativa doble.
En pseudocódigo, esta estructura se escribe de la forma:
...
si (condición)
Sentencia1
Sentencia2
...
sino
Sentencia3
Sentencia4
...
finsi
...
Si la condición es verdadera, se ejecutan las sentencias colocadas entre
si y sino. Si la condición es falsa, se ejecutan las sentencias colocadas entre
sino y finsi. La ejecución del programa continuará, en cualquier caso, con las
sentencias que haya debajo del finsi.
En C, la sintaxis de esta estructura es:
...
if (condición)
{
Sentencia1;
Sentencia2;
...
}
else
{
Sentencia3;
Sentencia4;
...
}
Ej.
scanf(“%d”, &numero); fflush(stdin);
if (numero % 2 == 0)
{
3
printf(“El número %d es par.”, numero);
}
else
{
printf(“El número %d es impar.”, numero);
}
Como se ha comentado en el tema anterior, en C existe el operador ?,
cuya función es asignar a una variable una expresión u otra dependiendo de si
una condición es verdadera o falsa.
Ej.
scanf(“%d”, &nota); fflush(stdin);
pasa_curso = (nota >= 5) ? ‘S’: ‘N’;
Que equivale a:
if (nota >= 5)
{
pasa_curso = ‘S’;
}
else
{
pasa_curso = ‘N’;
}
2. Estructura alternativa múltiple.
En pseudocódigo, esta estructura se escribe de la forma:
...
opción (expresión)
caso (valor1)
Sentencia1
Sentencia2
...
caso (valor2)
Sentencia3
Sentencia4
...
...
caso (valorN)
SentenciaN1
SentenciaN2
...
otrocaso
SentenciaO1
SentenciaO2
...
finopción
4
...
En esta alternativa, se calcula el valor de la expresión, y se ejecutarán
las sentencias dentro del caso cuyo valor coincida con el de la expresión. Sólo
vale para el caso de igualdad entre expresión y valor. Si ningún valor coincide
con el resultado de la expresión, se ejecutan las sentencias de otrocaso. De
cualquier manera, la ejecución del programa continúa por las sentencias que
estén debajo de finopción.
En C, la sintaxis de esta estructura es:
...
switch (expresión)
{
case constante-1:
Sentencia1;
Sentencia2;
...
break;
case constante-2:
Sentencia3;
Sentencia4;
...
break;
...
case constante-N:
SentenciaN1;
SentenciaN2;
...
break;
default:
//Este caso, default, es opcional.
SentenciaD1;
SentenciaD2;
...
}
...
Al final de cada case debe ponerse la sentencia break, aunque no es
obligatoria. Si no se pone, se seguirá comprobando si la expresión coincide con
algún otro case debajo del que se esté ejecutando. La sentencia break hace
que se salga de la estructura completa, continuando la ejecución del programa
debajo de la llave cerrada }.
Las constantes pueden ser enteras o de caracteres, pero no reales ni
cadenas. La sentencia default es opcional. Cuando la expresión no ha
coincidido con ninguna constante, se ejecutarán las sentencias de default, si es
que existe.
Ej.
opcion = getche();
switch (opcion)
5
{
case ‘A’:
printf(“Altas”);
hacer_altas();
break;
case ‘B’:
printf(“Bajas”);
hacer_bajas();
break;
case ‘C’:
printf(“Consultas”);
hacer_consultas();
break;
case ‘S’:
printf(“Salir”);
break;
default:
printf(“Opción errónea.”);
}
También se pueden usar los case de la siguiente manera:
scanf(“%d”, &nota); fflush(stdin);
switch (nota)
{
case 1:
case 2:
printf(“Muy deficiente”);
break;
case 3:
case 4:
printf(“Insuficiente”);
break;
case 5:
printf(“Suficiente”);
break;
case 6:
printf(“Bien”);
break;
case 7:
case 8:
printf(“Notable”);
break;
case 9:
case 10:
printf(“Sobresaliente”);
break;
default:
printf(“Nota incorrecta”);
}
En ese ejemplo, sólo funciona para notas enteras, no reales.
6
Con estructuras alternativas dobles anidadas puede implementarse la
estructura alternativa múltiple. Así podrá usarse no sólo para la igualdad entre
expresión y constante, sino para cualquier condición. Además también podrá
implementarse para valores reales y cadenas.
Ej.
scanf(“%f”, &nota); fflush(stdin);
if (nota >= 0 && nota < 5)
{
printf(“Suspenso”);
}
else
{
if (nota >= 5 && nota < 6)
{
printf(“Suficiente”);
}
else
{
if (nota >= 6 && nota < 7)
{
printf(“Bien”);
}
else
{
if (nota >= 7 && nota < 9)
{
printf(“Notable”);
}
else
{
if (nota >= 9 && nota <= 10)
{
printf(“Sobresaliente”);
}
else
{
printf(“Nota incorrecta”);
}
}
}
}
}
5. Anidamiento de alternativas.
La estructura alternativa es una sentencia más, aunque ocupe más de
una línea de programa. En todos los puntos previos etiquetados con sentencia
puede colocarse una sentencia alternativa, con lo que puede quedar una
alternativa dentro de otra, lo que se llama anidamiento, como se ha hecho en el
último ejemplo.
7
El anidamiento puede darse repetidamente, profundizando más de dos
niveles. Para no cometer errores sintácticos al anidar estructuras, es importante
cerrar la estructura interior antes de continuar con la estructura exterior.
Por ejemplo:
if (...)
{
Sentencia1;
Sentencia2;
...
}
else
{
Sentencia3;
Sentencia4;
...
}
En ese ejemplo genérico, cualquiera de las sentencias podría ser otra
alternativa, simple, doble o múltiple. Si Sentencia1 fuera una alternativa doble,
se escribiría:
if (...)
{
// Desde aquí
if (...)
{
Sentencia10;
Sentencia11;
...;
}
else
{
Sentencia12;
Sentencia13;
...;
}
// Hasta aquí ocupaba la Sentencia1.
Sentencia2;
...
}
else
{
Sentencia3;
Sentencia4;
...
}
8
EJERCICIOS - CAPITULO 5:
Realizar los siguientes algoritmos en pseudocódigo y en C.
1. Teclear dos nombres y visualizarlos de mayor a menor.
2. Teclear 4 números enteros y visualizar si son pares o impares en columnas.
3. Teclear 3 nombres y sus 3 edades y visualizarlos del mayor al menor en
columnas, es decir un nombre y su edad en cada fila.
4. Teclear un año (4 dígitos) y visualizar si es bisiesto, es decir: divisible por 4
y no por 100; o si lo es por 4 y 100, que también lo sea por 400.
5. Teclear 5 números reales y visualizar cuántos son positivos, negativos y
ceros. Visualizar también la media de los positivos y de los negativos.
6. Teclear nota y visualizar a qué corresponde: “Muy Deficiente”, “Insuficiente”,
“Suficiente”, “Bien”, “Notable”, “Sobresaliente” y “Nota Incorrecta”.
7. Diseñar un menú con las 5 opciones: 1.-(A)ltas, 2.-(B)ajas, 3.(M)odificaciones, 4.-(C)onsultas, 5.-(S)alir. Visualizar la palabra
correspondiente a la opción que teclee el usuario. Una opción se podrá
elegir con el número (de 1 a 5) o con su letra inicial (‘A’, ‘B’, ‘M’, ‘C’ o ‘S’).
9
Descargar