Lección 7 · 7 de 20
La sentencia case · Pascal
Elija entre muchos valores con case en Pascal: días de la semana, rangos de notas y el menú de una máquina expendedora.

`case` expresión `of` compara un valor con una lista de opciones y ejecuta la que coincide. Es más claro que una cadena de else if cuando todas las condiciones preguntan por la misma variable.
Cada opción puede ser un valor, varios separados por comas (6, 7) o un rango (1..5). El else final recoge todo lo que no coincide. A diferencia del if, aquí la opción anterior al else sí lleva punto y coma.
Con rangos, la tabla de notas queda muy corta: 83 cae en 80..89 y sale B. Las opciones no pueden repetirse; si un valor aparece en dos, el compilador da un error.
case funciona con cualquier tipo ordinal: enteros, Char, Boolean y los tipos enumerados de la lección 17, pero no con reales. En la máquina expendedora, 'b' elige el café. Como ese case no tiene else, si no coincidiera ninguna opción, simplemente no pasaría nada.
Cada case se cierra con su propio `end;`, aunque no haya ningún begin.
Código · main.pas
program main;var day, score: Integer; option: Char;begin day := 6; case day of 1..5: WriteLn('Day ', day, ': working day'); 6, 7: WriteLn('Day ', day, ': weekend'); else WriteLn('Day ', day, ': not a day of the week'); end; // Ranges keep a grade table short. score := 83; case score of 90..100: WriteLn(score, ' points: A'); 80..89: WriteLn(score, ' points: B'); 70..79: WriteLn(score, ' points: C'); else WriteLn(score, ' points: keep practising'); end; // case also works with Char: a vending machine. option := 'b'; case option of 'a': WriteLn('Water: 1.00'); 'b': WriteLn('Coffee: 1.50'); 'c': WriteLn('Juice: 2.00'); end;end.Salida · fpc main.pas && ./main
Day 6: weekend 83 points: B Coffee: 1.50
Para recordar
case x ofelige una opción según el valor dex.- Las opciones admiten listas (
6, 7) y rangos (1..5). elserecoge los valores que no aparecen.- Solo funciona con tipos ordinales, no con reales.
- Cada
casetermina conend;.
Ejercicio
Añada un case para el número de un mes (month) que escriba cuántos días tiene: 28 para el 2; 30 para el 4, 6, 9 y 11; y 31 para el resto.