Está en la página 1de 2

Recuperatorio de Especificación

Algoritmos y Estructuras de Datos I


25 de junio de 2004

Aclaraciones: El parcial es a libro abierto. Cualquier decisión de interpretación que se tome debe
ser aclarada y justificada. Una respuesta sin justificación o con justificación errónea es considerada
como incorrecta. Para aprobar el parcial se requieren al menos 60 puntos. Indicar el número de
orden, LU y la cantidad total de hojas entregadas. Entregar cada ejercicio en hojas separadas.

Con motivo del Festival de Cine Independiente, se ha decidido desarrollar para sus aficionados un
sistema que les permita organizar su concurrencia al festival. Los cines abren a las 9 de la mañana y
cierran a las 3 de la madrugada. Se cuenta con los siguientes tipos compuestos y sus observadores:

Tipo Festival

pelı́culas(f ) : Festival → Conjunto < Pelı́cula > Devuelve todas las pelı́culas que se emiten
en el festival f .
sesión(f, p) : Festival × Pelı́cula → Horario Devuelve el horario en que se emite la
Restricción: p ∈ pelı́culas(f ) pelı́cula p en el festival f .

Restricciones: si el festival f está bien definido entonces

• (∀p : Pelı́cula)(p ∈ pelı́culas(f ) → (NoTrasnoche(f, p) ∨ Trasnoche(f, p))


• (∀p, q : Pelı́cula)((p ∈ pelı́culas(f ) ∧ q ∈ pelı́culas(f ) ∧ igN (nombre(p), nombre(q))) → igP (p, q))

Tipo Pelı́cula

nombre : Pelı́cula → Lista < Ch > Devuelve el nombre de la pelı́cula.


director : Pelı́cula → Lista < Ch > Devuelve el nombre del director de la pelı́cula.
duración : Pelı́cula → Z Devuelve la cantidad de minutos de la pelı́cula.

Restricciones: si la pelı́cula p está bien definida entonces

• 0 < duración(p)
• 0 < |nombre(p)|
• 0 < |director(p)|

Tipo Horario

dı́a : Horario → Z Devuelve el número de dı́a.


hora : Horario → Z Devuelve la hora.
minutos : Horario → Z Devuelve los minutos.

Restricciones: si el horario h está bien definido entonces


• 1 ≤ dı́a(h)
• 0 ≤ hora(h) ≤ 23
• 0 ≤ minutos(h) ≤ 59

1
Se cuenta con los predicados auxiliares:
• igN (a, b : Lista < Ch >) ≡ {(|a| = |b| ∧ (∀i : Z)(0 ≤ i < |a| → φi (a) = φi (b)))}
• igP(a, b : Pelı́cula) ≡ {(igN (nombre(a), nombre(b)) ∧ igN (director (a), director (b))∧
duración(a) = duración(b))}
• igS(s, t : horario) ≡ {(dı́a(s) = dı́a(t) ∧ hora(s) = hora(t) ∧ minuto(s) = minuto(t))}
• cantMin(d, h, m : Z) ≡ {24 · 60 · (d − 1) + 60 · h + m}
• convH(h : Horario) ≡ {cantM in(dı́a(h), hora(h), minutos(h))}
• NoTrasnoche(f : Festival, p : Pelı́cula) ≡ {(cantMin(dı́a(sesión(f, p)), 9, 0) ≤ convH(sesión(f, p))∧
convH(sesión(f, p)) + duración(p) ≤ cantMin(1 + dı́a(sesión(f, p)), 3, 0))}
• Trasnoche(f : Festival, p : Pelı́cula) ≡ {(cantMin(dı́a(sesión(f, p)), 0, 0) ≤ convH(sesión(f, p))∧
convH(sesión(f, p)) + duración(p) ≤ cantMin(dı́a(sesión(f, p)), 3, 0))}

Ejercicio 1.
1. Decidir si las siguientes especificaciones son válidas o no. Justificar su respuesta.

a) (5 p.) ∆ : Horario = Algoritmo1(f : Festival , p, q : Pelı́cula, h : Horario)


P ≡ {((dı́a(h) ≤ 5 → p ∈ pelı́culas(f )) ∨ (dı́a(h) > 5 → q ∈ pelı́culas(f )))}
Q ≡ {(dı́a(h) ≤ 5 ∧ igS(∆, sesión(f, p))) ∨ (dı́a(h) > 5 ∧ igS(∆, sesión(f, q)))}
b) (5 p.) ∆ : Conjunto < Pelı́cula >= Algoritmo2(f : Festival , d : Lista < Ch >)
P ≡ {((∀p : Pelı́cula)(∃q : Pelı́cula)(p ∈ pelı́culas(f ) → (q ∈ pelı́culas(f ) ∧ ¬igP(p, q) ∧
igN(director(p), director(q)))) ∧ (∃p : Pelı́cula)(p ∈ pelı́culas(f ) ∧ igN(director(p), d)))}
Q ≡ {(|∆| = 2 ∧ (∀p : Pelı́cula)(p ∈ ∆ → (p ∈ pelı́culas(f ) ∧ igN(director(p), d))))}
c) (5 p.) ∆ : Conjunto < Pelı́cula >= Algoritmo3(f : Festival )
P ≡ {|pelı́culas(f )| > 0}
Q ≡ {(∀p : Pelı́cula)(p ∈ ∆ ↔ ¬p ∈ pelı́culas(f ))}

2. (10 p.) Sean (P1 , Q1 ) y (P2 , Q2 ) especificaciones de dos algoritmos, tal que P1 ≡ {A → B},
P2 ≡ {B}, Q1 ≡ {C}, Q2 ≡ {C ∨ A}.
¿Es cierto que todo algoritmo que satisface la especificación (P1 , Q1 ) satisface también (P2 , Q2 )?
¿Y al revés?
Ejercicio 2. (25 p.) Definir el predicado Antologı́aTodosLosDias(f : Festival) que sea verdadero sii
existe un segmento temático en todos los dı́as del festival f . Un segmento temático es un perı́odo del
dı́a (de 9 am a 3 am) en que sólo comienzan pelı́culas de un mismo director. Además, cuando en un
segmento temático comienzan pelı́culas del director d, no pueden comenzar pelı́culas de d en ese dı́a
(de 9 am a 3 am) pero fuera del perı́odo. Por último, en cada segmento temático deben comenzar al
menos dos pelı́culas.
Ejercicio 3. (25 p.) Especificar un algoritmo que dado un festival, un dı́a d y una pelı́cula p que
se proyecta en el festival en el dı́a d, devuelva una lista con los nombres de todas las pelı́culas que
se comienzan a emitir después del final de p, en el dı́a d (de 9 am a 3 am), en orden cronológico y
sin repeticiones. Si dos pelı́culas comienzan en el mismo horario, no importa el orden entre ellas en el
resultado.
Ejercicio 4. (25 p.) Especificar un algoritmo que recibe un festival f , un real r ∈ [0, 1], p0 , . . . , pn−1
pelı́culas distintas del festival (como variables indexadas) y los enteros no negativos a0 , . . . , an−1 (tam-
bién como variables indexadas) que representan la respectiva cantidad total de entradas vendidas para
cada una de las pelı́culas. El algoritmo debe devolver un conjunto con las pelı́culas que vendieron más
del 100·r % de las entradas (considerando que el 100 % es la suma de todas las entradas en a0 , . . . , an−1 ).

También podría gustarte