quarta-feira, 9 de outubro de 2013

Resolução de questões

Bons estudos à todos e ótima prova na sexta 11/10/2013

-- Resolucao da Prova

 --Dados necessarios para questao

type BancoDeDados = [Onibus]
type Onibus = (Codigo, Origem, Destino, Horario, [Passageiro])
type Codigo = Int
type Origem = String
type Destino = String
type Horario = String
type Passageiro = String

exemplo :: BancoDeDados
exemplo = [ (1, "salvador", "vitoria da conquista", "8:00", ["carlos", "maria", "rita"]),
(2, "salvador", "vitoria da conquista", "12:30", []),
(3, "vitoria da conquista", "Ilheus","9:00", ["ana", "joana", "rita"]),
(4, "salvador", "Ilheus", "22:00", ["fabio", "jose","carlos", "maria", "rita"])]

-- Questao 01
-- _ eh uma variavel anonima, utilizo quando esta variavel é irrelevante para o resultado da minha funcao
-- orig = oriigem recebida
-- ori = origem da tupla definida no BD
-- Letra a

quantOnibus :: BancoDeDados -> Origem -> Int
quantOnibus [ ]  _ = 0
quantOnibus (( cod, ori, des, hor, pas) : cauda) orig
|ori == orig = 1 + quantOnibus cauda orig
| otherwise = quantOnibus cauda orig

-- Letra b

obterHorario :: BancoDeDados -> Origem -> [Horario]
obterHorario [ ] _ = [ ]
obterHorario ((_, ori, _, hor, _) : cauda) orig
| ori == orig = hor : obterHorario cauda orig
| otherwise = obterHorario cauda orig

-- Letra c

obterHorario2 :: BancoDeDados -> Origem -> [Horario]
obterHorario2 bd orig = [ h | (_, ori, _, h, _) <- bd, ori == orig]

-- Letra d

incluir :: BancoDeDados -> Codigo -> Passageiro -> BancoDeDados
incluir [ ] _ _ = [ ]
incluir ((cod, ori, des, hor, pas) : cauda) codi pass
| cod == codi = (cod, ori, des, hor, pass: pas) : cauda
| otherwise = (cod, ori, des, hor, pas) : incluir cauda codi pass

-- Questao 02
-- Letra a
remove :: [Int] -> [Int]
remove [ ] = [ ]
remove [n] = [n]
remove (a : b : c)
| a == b = remove(b : c)
| otherwise = a : remove (b : c)

-- Letra b
intercalar :: [Int] -> [Int] -> [Int]
intercalar  [ ] lista = lista
intercalar (a : b) lista = inserir a (intercalar b lista)

inserir :: Int -> [Int] -> [Int]
inserir n [ ] = [n]
inserir n (a : b)
| n <= a = n : a : b
| otherwise = a : inserir n b

-- Outra forma para letra b da questao 02

intercalar2 :: [Int] -> [Int] -> [Int]
intercalar2 [ ] l = l
intercalar2 l [ ]  = l
intercalar2 (a:b) (c:d)
|a <= c = a : intercalar2 b (c:d)
|otherwise = c : intercalar2 (a:b) d

Com a ajuda de Jaime Freire

0 comentários:

Postar um comentário