DMarlon Studio

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.

Pascal · La sentencia case en DMarlon Studio: el código del ejemplo y su salida en la terminal

`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 of elige una opción según el valor de x.
  • Las opciones admiten listas (6, 7) y rangos (1..5).
  • else recoge los valores que no aparecen.
  • Solo funciona con tipos ordinales, no con reales.
  • Cada case termina con end;.

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.