Untitled
unknown
plain_text
2 years ago
1.8 kB
6
Indexable
type Aluno = (Numero,Nome,Regime,Classificacao)
type Numero = Int
type Nome = String
data Regime = ORD | TE | MEL deriving Show
data Classificacao = Aprov Int
| Rep
| Faltou
deriving Show
type Turma = BTree Aluno -- ´arvore binária de procura (ordenada por número)
arvT :: BTree Aluno
arvT = Node aluno3
(Node aluno2 (Node aluno1 Empty Empty)
Empty)
(Node aluno4 Empty Empty)
aluno1 :: Aluno
aluno1 = (1, "Concha", ORD , Aprov 20)
aluno2 :: Aluno
aluno2 = (5, "Jose", TE, Rep)
aluno3 :: Aluno
aluno3 = (9, "Rui", TE, Faltou)
aluno4 :: Aluno
aluno4 = (11, "Toze", MEL, Aprov 10)
--a)
inscNum :: Numero -> Turma -> Bool
inscNum x Empty = False
inscNum x (Node aluno l r) | numAluno == x = True
| numAluno < x = inscNum x r
| numAluno > x = inscNum x l
where (numAluno, _, _, _) = aluno
--b)
inscNome :: Nome -> Turma -> Bool
inscNome n Empty = False
inscNome n (Node aluno l r) | nomeAluno == n = True
| nomeAluno < n = inscNome n r
| nomeAluno > n = inscNome n l
where (_, nomeAluno, _, _) = aluno
--c) não ordenado por nº
trabEst :: Turma -> [(Numero,Nome)]
trabEst Empty = []
trabEst (Node aluno l r) =
case aluno of
(numero, nome, TE, _) -> (numero, nome) : trabEst l ++ trabEst r
_ -> trabEst l ++ trabEst r
--d)
nota :: Numero -> Turma -> Maybe Classificacao
nota x Empty = Nothing
nota x (Node aluno l r)
| inscNum x (Node aluno l r) == False = Nothing
| otherwise = Just clas
where (x, nome, reg, clas) = alunoEditor is loading...