Lección 17 · 17 de 20
Enumerados y conjuntos · Pascal
Defina tipos enumerados y conjuntos en Pascal: los días de apertura de una tienda con in, Include, Exclude, Ord, Succ y la intersección.

Un tipo enumerado es una lista ordenada de nombres: TDay = (Mon, Tue, ...). Es más claro que usar números para los días, y el compilador no deja mezclarlo con otros tipos. Free Pascal escribe su nombre con WriteLn: Wed.
Cada valor tiene una posición, que empieza en 0: `Ord(Wed)` es 2. `Succ` da el siguiente y `Pred`, el anterior. Como son ordinales, sirven de contador en un for y de opción en un case.
Un conjunto (set of TDay) guarda algunos de esos valores, sin orden y sin repetirlos. [Mon..Fri] son los días laborables; `Include` añade el sábado y `Exclude` quita el miércoles. `in` pregunta si un valor está dentro: Sun in open es FALSE.
Con los conjuntos se opera: + es la unión, - la diferencia y * la intersección. open * [Sat, Sun] da los días del fin de semana en que abre la tienda, y `for ... in` los recorre uno a uno.
Los conjuntos de Char son muy prácticos para clasificar caracteres: c in ['a', 'e', 'i', 'o', 'u'] dice si c es una vocal. for c in también recorre una cadena letra a letra.
Código · main.pas
program main;type TDay = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); // an enumerated type TDays = set of TDay;var day: TDay; open: TDays; c: Char; vowels: Integer;begin day := Wed; WriteLn(day, ' is at position ', Ord(day), '; the next day is ', Succ(day)); // A set holds some of those values, without order or repeats. open := [Mon..Fri]; Include(open, Sat); Exclude(open, Wed); for day := Mon to Sun do if day in open then Write(day, ' '); WriteLn; WriteLn('Open on Sunday? ', Sun in open); for day in open * [Sat, Sun] do // * is the intersection WriteLn('Open at the weekend: ', day); // Sets of Char make quick character tests. vowels := 0; for c in 'free pascal compiler' do if c in ['a', 'e', 'i', 'o', 'u'] then Inc(vowels); WriteLn('Vowels: ', vowels);end.Salida · fpc main.pas && ./main
Wed is at position 2; the next day is Thu Mon Tue Thu Fri Sat Open on Sunday? FALSE Open at the weekend: Sat Vowels: 7
Para recordar
(A, B, C)define un tipo enumerado.Ord,SuccyPreddan la posición, el siguiente y el anterior.set of Tguarda valores sin orden ni repeticiones.in,Include,Exclude,+,-y*trabajan con conjuntos.
Ejercicio
Cree un tipo TTopping = (Cheese, Ham, Mushrooms, Olives, Pepper) y un conjunto con los ingredientes de una pizza; escriba los que lleva y, con -, los que le faltan para llevarlos todos.