20. CONJUNTOS. SET. 20.1. Valores. Un tipo de datos especifica el

Anuncio
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Programación en Pascal
Capítulo 20. Conjuntos. Set.
20. CONJUNTOS. SET.
20.1. Valores.
Un tipo de datos especifica el conjunto de valores que una variable de ese tipo puede
adoptar. El tipo conjunto es estructurado a partir de un tipo base; el tipo base debe ser de
enumeración o subrango.
El tipo conjunto define el conjunto de valores que es el conjunto potencia de su base. Es
decir, el conjunto de todos los posibles conjuntos que consisten de elementos tomados del
tipo base.
Ejemplo: type base = 0..1;
conjunto = set of base;
Entonces los valores de conjunto son los conjuntos:
[]; [0]; [1]; [0,1];
Donde [] es el conjunto vacío.
20.2. Sintaxis.
<definición de tipo conjunto> ::=
'type' <nombre conjunto> '=' 'SET OF' <tipo base>
<valores de tipo conjunto> ::=
'[' {(<vacío> |<expresión> ['..' <expresión>])* ','} ']'
Las expresiones deben ser del tipo base.
Prof. Leopoldo Silva Bijit.
07-07-2003
255
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Programación en Pascal
Capítulo 20. Conjuntos. Set.
Un valor de tipo conjunto es una variedad de factor en la sintaxis general de expresión.
La construcción de un conjunto se efectúa por la enumeración de sus elementos, separados
por comas y encerrados entre paréntesis cuadrados.
Los conjuntos deben contener constantes, del tipo base, solamente. Normalmente está
limitada la cardinalidad de los conjuntos, a un número pequeño; generalmente el número de
bits en una palabra del computador. Suele ser 16 ó 32.
Si bien estas reglas reducen la generalidad del concepto, la definición de este tipo favorece
la abstracción de situaciones típicas basadas en el concepto matemático de conjunto.
Normalmente simplifican el planteo de condiciones complicadas (en caso que no se usen
conjuntos).
Usualmente los conjuntos se representan en forma interna por conjuntos de bits; por esta
razón los operadores que manipulan conjuntos suelen implementarse con las instrucciones
lógicas de la máquina. Debido a esto suelen ser muy rápidas, incluso más que la suma de
enteros.
20.3. Manipulación.
No pueden leerse ni escribirse variables de este tipo; de ser necesario es preciso elaborar
procedimientos especiales.
Sólo puede asignarse a una variable de tipo conjunto una expresión de igual tipo.
Los operadores definidos son:
+ unión
* intersección
- diferencia de conjuntos
Si X e Y son variables de tipo conjunto:
X+Y contiene todos los elementos que pertenecen a X ó a Y ó a ambos.
X*Y contiene todos los elementos que pertenecen a X y a Y.
Prof. Leopoldo Silva Bijit.
07-07-2003
256
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Programación en Pascal
Capítulo 20. Conjuntos. Set.
X-Y contiene sólo los elementos de X que no pertenecen a Y
Los siguientes operadores relacionales pueden aplicarse a expresiones simples de tipo
conjunto:
= test de igualdad
<> test de desigualdad
>= test de inclusión
<= test de inclusión
Ejemplos:
X <= Y se lee: X es subconjunto de Y.
X >= Y se lee: X contiene a Y.
Existe un operador relacional especializado para probar si un elemento es miembro o no
de un conjunto:
x in X
Donde: x debe ser del tipo base
X es un conjunto del tipo base
La expresión es verdadera si x pertenece a X.
20.4. Ejemplos de Conjuntos.
a) [2, 3, 4, 5] es igual a [3, 5, 2, 4] ya que no está definida una relación de orden.
b) [5..3] es el conjunto vacío [].
c) [] no es igual a [0]; este último es un conjunto cuyo único elemento es un cero.
d) Si i es de tipo base y
u y v son conjuntos:
d1) (i in u) <> (i in v)
Es la diferencia simétrica, es decir, i está en u o en v, pero no en ambos.
d2) (i in u) and (i in v)
Prof. Leopoldo Silva Bijit.
07-07-2003
257
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Programación en Pascal
Capítulo 20. Conjuntos. Set.
Puede escribirse:
i in (u*v)
Es decir i está en ambos (u y v).
d3) (i in u) and not (i in v)
Puede escribirse:
i in (u-v)
Es decir, i está en u pero no en v.
d4) (i in u) or (i in v)
Puede escribirse:
i in (u+v)
Es decir i está en u o en v o en ambos.
e) ['A'..'Z','0'..'9'] define un conjunto formado por letras mayúsculas y dígitos (literales de los
dígitos decimales).
f) Si se desea probar si una variable de tipo char es una letra minúscula, puede escribirse:
ch in ['a'..'z']
g) La siguiente instrucción:
if (ch='x') or (ch='y') or (ch='z') then A;
Puede escribirse:
if ch in ['x','y','z'] then A;
y también:
if ch in ['x'..'z'] then A;
h) Definición de intervalos.
Prof. Leopoldo Silva Bijit.
07-07-2003
258
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Programación en Pascal
Capítulo 20. Conjuntos. Set.
La condición:
(x>=a) and (x<=b); {con a<b}
Puede escribirse:
x in [a..b]
i) Las prioridades de los operadores son:
La de mayor prioridad es la intersección;
luego, en un mismo nivel, la unión y diferencia;
finalmente, el test de inclusión o pertenencia.
Entonces:
i1)
x in u+v
Debe entenderse: x in (u+v)
i2)
u-v*w
Es equivalente a: u-(v*w)
i3)
u-v+w
Puede interpretarse: (u-v)+w
Pero es preferible emplear la expresión con paréntesis.
j) Jerigonza.
Entre los niños suele emplearse un lenguaje secreto, consistente en agregar después de cada
vocal la sílaba formada por la consonante P y la vocal correspondiente.
Por ejemplo:
Prof. Leopoldo Silva Bijit.
07-07-2003
259
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Programación en Pascal
Capítulo 20. Conjuntos. Set.
mi mamá me mima
Quedaría traducido en:
mipi mapamapa mepe mipimapa
El programa siguiente hace la traducción:
program jerigonza(x,output);
var
x : text;
ch : char;
vocales : set of char;
begin
assign(x,'ejem.pas'); {Turbo Pascal}
reset(x);
vocales := ['A','E','I','O','U','a','e','i','o','u'];
while not eof(x) do
begin
while not eoln(x) do
begin
read(x,ch);write(ch);
if ch in vocales then write('p',ch);
end;
readln(x);writeln {mantiene estructura de líneas}
end
end.
Prof. Leopoldo Silva Bijit.
07-07-2003
260
Descargar