lista4-2008-1

Propaganda
4a lista de exercícios (tuplas e listas) – 2008/2
Processamento de Dados I – Eng. de Computação
Entrega: 13/06/2008
A resolução desta lista deve ser um script com a descrição de funções para as soluções de cada um dos
problemas. As respostas da parte I devem ser colocadas no script na forma de comentário.
Parte I: Forneça as respostas das avaliações das expressões abaixo. Avalie estas espressões no HUGS e
compare com sua resposta. Explique a razão do erro na avaliação de algumas expressões.
a) [if x > 0 then x^2 else abs x | x  [(-5),(-3)..10]]
b) [ p | p  [(0,1), (2,4), (2,5), (3,6), (7,14), (4,10)], snd p == fst p]
c) [x == y | (x,y)  [(0,1), (4,4), (6,6), (3,6), (7,7), (4,10)]]
d) head [x == y | (x,y)  [(0,1), (4,4), (6,6), (3,6), (7,7), (4,10)]]
e) [y | even y, y  [0..100]]
f) [(x,y) | x  [1..20], y  x+1]
g) [2,4,6,10]++[1,3,5,7]++[2,2]
Parte II: Construa um script com funções definidas através de descrição por listas, para cada um dos
problemas abaixo. Teste suas funções com valores adequados para cada tipo de argumento. Verifique
através dos testes, se as funções estão com o comportamento adequado.
a) Dado um número inteiro positivo n, construa uma lista com todos os pares de números naturais cuja
soma dos componentes é igual a n.
b) Verificar se uma cadeia de caracteres é uma palavra (ou seja, é formada apenas de letras).
c) Verificar se uma cadeia de caracteres representa um número inteiro positivo.
d) Dada uma lista l, contendo uma quantidade igual de números inteiros pares e ímpares (em qualquer
ordem), defina uma função que, quando avaliada, produz uma lista na qual esses números pares e ímpares
encontram-se alternados.
e) Dada uma lista xs, fornecer uma dupla contendo o menor e o maior elemento dessa lista.
f) Dadas duas listas de elementos distintos, determinar a união delas.
Parte III:Espetáculos Teatrais: Vários espetáculos estão sendo apresentados em um grande teatro da
cidade. Para cada um dos espetáculos, registra-se o mapa de ocupação da platéia, conforme as vendas dos
ingressos. A platéia está representada por m filas numeradas de 1 a m, sendo que cada fila contém n
cadeiras também numeradas de 1 a n. Considere a seguinte representação para os dados:
(fila, cadeira), onde fila é representada por um inteiro de 1 a m e cadeira, por um
Lugar na platéia
inteiro de 1 a n.
Platéia
Lista de duplas (lugar, situação) sendo que a situação é : 1 para indicar lugar
ocupado e 0 para indicar lugar vago.
Lista de duplas (espetáculo, platéia) onde espetáculo é representado por um inteiro
Teatro
de 1 a p.
Escreva um script em HUGS, com funções que resolvam os problemas abaixo. Nomes para cada uma das
funções são sugeridos ao final do enunciado de cada problema.
1 - Dada uma platéia pls, descreva a quantidade total de lugares ocupados (totalOcup).
2 - Dado um lugar lg e uma platéia pls, verifique se o lugar lg está livre (estaLivre).
3 - Dado um lugar lg e uma platéia pls, verifique se existe algum vizinho lateral de lg que está livre
(vizinhoLivre).
4 - Dada uma fila fl e uma platéia pls, descreva a lista de cadeiras livres da fila fl (cadeirasLivresFila).
5 - Dada uma platéia pls, descreva a lista de cadeiras livres para cada fila (lugLivresFila)
6 - Dada uma platéia pls, descreva a(s) lista(s) com o maior número de cadeiras livres (filaMaxLivre).
7 - Dado um teatro trs e um espetáculo ep, descreva a sua platéia (plateiaEsp).
8 - Dado um teatro trs, um espetáculo ep e uma fila fl, descreva a lista de cadeiras livres da fila fl
(cadeirasLivresFilaEsp).
Parte IV: Gerência acadêmica: Considere a gerência acadêmica dos cursos de graduação de uma
universidade. As disciplinas cursadas por um aluno são registradas em seu histórico. O registro deve conter
o código da disciplina, o ano e o semestre (primeiro ou segundo) em que foi cursada e a nota obtida.
Semestralmente o aluno deve requerer matrícula em novas disciplinas. O pedido de matrícula é realizado
através da apresentação das disciplinas desejadas pelo aluno. Um dos critérios para conseguir se matricular
em uma disciplina é que o aluno tenha cumprido, com aprovação, os pré-requisitos da disciplina. Um
aluno é aprovado em uma disciplina se obtiver média superior ou igual a 5 (cinco). Cada curso possui uma
grade curricular que relaciona cada disciplina do curso com seus respectivos pré-requisitos. Considere as
seguintes definições:
Histórico Escolar
Um par contendo o código de matrícula do aluno e a lista de disciplinas cursadas.
Cada disciplina cursada é representada por uma tripla com o código da disciplina, o
ano e o semestre que ela foi cursada e a nota obtida.
Formato: (matrícula, [ (disciplina, (ano, semestre), nota), ... ]) onde
matrícula = (ano, curso, númeroIdentificaçãoIndividual)
Cadastro de Disciplinas Uma lista contendo, para cada disciplina, um par com o código da disciplina e a
quantidade de créditos.
Grade Curricular
Um par com o código do curso e uma lista de pares onde cada par representa uma
disciplina (código) e uma lista dos seus pré-requisitos.
Formato: (curso, [(disciplina, [disciplina, disciplina,...]), ...])
Pedido de matrícula
Um par com o código do aluno e uma lista contendo o código das disciplinas nas
quais o aluno deseja se matricular.
Formato: (matrícula, [pedido1, pedido2, ...])
Oferta
Uma lista contendo as turmas a serem ofertadas, com seus horários e limite de vagas.
Formato: [(disciplina, turma, quantidade_de_vagas, horário),...] onde
horário = [(dia_da semana, hora_inicial, hora_final), ...]
Lista de disciplinas de Um par contendo o código do curso e uma lista de pares, onde cada par representa um
um curso, apresentadas período do curso e uma lista das disciplinas do período.
por período
Formato: (curso, [(período, [disciplina, disciplina,...])
Escreva funções em Hugs para resolver os problemas propostos abaixo, usando os nomes indicados em
negrito. A palavra semestre, nestes problemas, pode assumir os valores 1 ou 2. As definições acima
representam todas as situações possíveis no gerenciamento de matrícula. Não necessariamente haverá
necessidade de utilização de todas nos problemas propostos abaixo.
1. (conterep) Dado um histórico, contar o número de reprovações.
2. (jubila) Verificar se um determinado aluno se encontra em situação de jubilamento (possui três
reprovações em uma mesma disciplina).
3. (abandono) Verificar se o aluno deixou de cursar disciplinas em algum semestre.
4. (divida) Obter a lista das disciplinas que foram cursadas por um dado aluno, nas quais ele ainda não
obteve aprovação.
5. (reprova) Obter uma lista de reprovações por período, para um dado aluno.
6. (crend) O coeficiente de rendimento (CR) de um dado aluno é determinado pela média ponderada das
notas obtidas, tendo como peso, o número de créditos das disciplinas. Determine o CR de um dado
aluno.
7. (semprereq) Obter uma lista das disciplinas de um dado curso, que não possuem pré-requisito.
8. (cumprereq) Dada uma disciplina, verificar se o aluno cumpriu seus pré-requisitos.
9. (dividas) Obter para um dado aluno, a lista de disciplinas que ele ainda não cursou, com respeito a uma
dada grade curricular.
10. (sugestao) Obter para um dado aluno, a lista de disciplinas que ele está apto a cursar, com respeito a
uma dada grade curricular.
Download