Una
instrucción
alternativa múltiple (o simplemente alternativa múltiple)
permite seleccionar, por medio de una expresión, el
siguiente
bloque de instrucciones a ejecutar de entre varios posibles. En
Pascal, para escribir una alternativa múltiple se
utiliza la sintaxis:
case <expresión> of
<lista_de_constantes_1>
:
begin
<bloque_de_instrucciones_1>
end;
<lista_de_constantes_2>
:
begin
<bloque_de_instrucciones_2>
end;
...
<lista_de_constantes_n>
:
begin
<bloque_de_instrucciones_n>
end
[ else
begin
<bloque_de_instrucciones_n+1>
end ]
end
|
El resultado de evaluar la <expresión>
debe ser un valor perteneciente a un tipo de dato finito y ordenado, es
decir, entero, lógico, carácter, enumerado o
subrango.
Dependiendo del valor obtenido al evaluar la <expresión>,
se ejecutará un bloque de instrucciones
u otro. En las listas de constantes se deben escribir los valores que
determinan el bloque de instrucciones a ejecutar, puediendo ser
constantes (por ejemplo: 5
ó '5')
o subrangos (por ejemplo: 1..5 ó
'1'..'5').
Opcionalmente, se puede escribir un <bloque_de_instrucciones_n+1>
después de la palabra reservada else.
Este bloque de instrucciones se ejecutará en
el caso de que el valor obtenido al evaluar la <expresión>,
no se encuentre en ninguna de las listas de constantes.
Ejemplo
1: Se quiere escribir
un programa
que:
1º)
Pida por teclado el número (dato entero) de un
día de la semana.
2º) Muestre por
pantalla el nombre (dato cadena) correspondiente a dicho día.
Nota:
Si el número de día introducido es menor que 1
ó
mayor que 7, se mostrará el mensaje: "ERROR: Día
incorrecto.".
En pantalla:
Introduzca dia de la semana: 2
Martes
|
Introduzca dia de la semana: 9
ERROR: Dia incorrecto.
|
Cuando un
bloque de instrucciones sólo contiene una
instrucción, las palabras reservadas begin
y end,
que enmarcan dicho bloque, son opcionales. Así pues, podemos
escribir:
program EJE12041;
uses Crt;
var Dia : Integer;
begin
ClrScr;
GotoXY( 4,
2 );
Write( 'Introduzca
dia de la semana: ' );
ReadLn( Dia );
GotoXY( 4,
4 );
case
Dia of
1 : Write( 'Lunes' );
2 : Write( 'Martes' );
3 : Write( 'Miercoles' );
4 : Write( 'Jueves' );
5 : Write( 'Viernes' );
6 : Write( 'Sabado' );
7 : Write( 'Domingo' )
else
Write( 'ERROR: Dia
incorrecto.' )
end
end.
|
Cuando en una
lista de constantes de una alternativa
múltiple aparece más de un valor, estos se
escriben separados por el carácter coma (,).
Estúdiese el siguiente ejemplo.
Ejemplo
2: En la siguiente tabla se
muestran las categorías a las que pertenecen los signos del
zodíaco:
Se quiere escribir un programa que:
1º)
Muestre el listado de los signos del zodíaco, con sus
números asociados.
2º) Pida por
teclado un número (dato entero) asociado a un signo del
zodíaco.
3º) Muestre la
categoría a la que pertenece el signo del zodíaco
seleccionado.
Nota: Si el
número introducido por el usuario,
no está asociado a ningún signo del
zodíaco, se
mostrará el mensaje: "ERROR:
<número> no
está asociado a ningún signo.".
En pantalla:
Listado de signos del zodiaco:
1. Aries
2. Tauro
3. Geminis
4. Cancer
5. Leo
6. Virgo
7. Libra
8. Escorpio
9. Sagitario
10.
Capricornio
12. Acuario
13. Piscis
Introduzca
numero de signo: 7
Es un signo
de Aire.
|
Listado de signos del zodiaco:
1. Aries
2. Tauro
3. Geminis
4. Cancer
5. Leo
6. Virgo
7. Libra
8. Escorpio
9. Sagitario
10.
Capricornio
12. Acuario
13. Piscis
Introduzca
numero de signo: 15
ERROR: 15 no
esta asociado a ningun signo.
|
Una posible solución es:
program EJE12051;
uses Crt;
var Numero :
Integer;
begin
ClrScr;
GotoXY( 4,
2 );
Write( 'Listado
de signos del zodiaco:' );
GotoXY( 4,
4 );
Write( '1.
Aries' );
GotoXY( 4,
5 );
Write( '2.
Tauro' );
GotoXY( 4,
6 );
Write( '3.
Geminis' );
GotoXY( 4,
7 );
Write( '4.
Cancer' );
GotoXY( 4,
8 );
Write( '5.
Leo' );
GotoXY( 4,
9 );
Write( '6.
Virgo' );
GotoXY( 4,
10 );
Write( '7.
Libra' );
GotoXY( 4,
11 );
Write( '8.
Escorpio' );
GotoXY( 4,
12 );
Write( '9.
Sagitario' );
GotoXY( 4,
13 );
Write( '10.
Capricornio' );
GotoXY( 4,
14 );
Write( '11.
Acuario' );
GotoXY( 4,
15 );
Write( '12.
Piscis' );
GotoXY( 4,
17);
Write( 'Introduzca
numero de signo: ' );
Read( Numero );
GotoXY( 4,
19 );
case
Numero of
1, 5, 9 :
Write( 'Es un
signo de Fuego.' );
2, 6, 10 : Write( 'Es un signo de Tierra.'
);
3, 7, 11 : Write( 'Es un signo de Aire.'
);
4, 8, 12 : Write( 'Es un signo de Agua.'
)
else
Write( 'ERROR: ',
Numero,
'
no esta asociado a ningun signo.' )
end
end.
|
Otra solución es:
program EJE12052;
uses Crt;
var
Numero : Integer;
Categoria : String
[6];
begin
ClrScr;
GotoXY( 4,
2 );
Write( 'Listado
de signos del zodiaco:' );
GotoXY( 4,
4 );
Write( '1.
Aries' );
GotoXY( 4,
5 );
Write( '2.
Tauro' );
GotoXY( 4,
6 );
Write( '3.
Geminis' );
GotoXY( 4,
7 );
Write( '4.
Cancer' );
GotoXY( 4,
8 );
Write( '5.
Leo' );
GotoXY( 4,
9 );
Write( '6.
Virgo' );
GotoXY( 4,
10 );
Write( '7.
Libra' );
GotoXY( 4,
11 );
Write( '8.
Escorpio' );
GotoXY( 4,
12 );
Write( '9.
Sagitario' );
GotoXY( 4,
13 );
Write( '10.
Capricornio' );
GotoXY( 4,
14 );
Write( '11.
Acuario' );
GotoXY( 4,
15 );
Write( '12.
Piscis' );
GotoXY( 4,
17);
Write( 'Introduzca
numero de signo: ' );
Read( Numero );
case
Numero mod
4 of
1 : Categoria
:= 'Fuego';
2 : Categoria
:= 'Tierra';
3 : Categoria
:= 'Aire';
0 : Categoria
:= 'Agua'
end;
GotoXY( 4,
19 );
if
( Numero >= 1
) and (
Numero <= 12
) then
Write( 'Es un signo de ',
Categoria, '.'
)
else
Write( 'ERROR: ',
Numero,
'
no esta asociado a ningun signo.' )
end.
|
En esta
segunda solución existen las siguientes diferencias
importantes con respecto a la solución anterior:
- En el
código
se utiliza una alternativa doble (if),
además de una alternativa
múltiple (case).
- En la
alternativa múltiple no se escribe el <bloque_de_instrucciones_n+1>.
- La <expresión>
de la alternativa múltiple es diferente.
- La
expresión 'Es
un signo de ' sólo se escribe una vez.
- Se ha utilizado
una variable más: Categoria
|