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.