Jump to content

[Resolvido]Funcao QuickSort


luchhozito
 Share

Recommended Posts

type Inscritos=[Aluno]
type Aluno=(Nome,Num,Curso)
type Nome=String
type Num=Integer
type Curso=String

Tenho esta função abaixo que tem como objectivo ordenar os Inscritos pelo numero (crescente).

ordenada :: Inscritos -> Inscritos						
ordenada ((a,b,c):xs) = ordenada (filter(\(_,b,_) (< xs)) ++ [(a,b,c)] ++ ordenada (filter(\(_,b,_) -> (>=b) xs))

mas está a dar um erro.

Link to comment
Share on other sites

Estás a definir um tipo de dados para representar o número com uma palavra reservada: Num. Esta palavra representa uma classe de Haskell, não podes utilizar para dar nomes aos teus tipos.

Para além disso, tens aí uns parêntesis a mais no filter e a função < e >= têm tipo Ord a => a -> a -> Bool e da forma que estavas a fazer, o compilador inferia que o tipo era a -> Bool.

ordenada :: Inscritos -> Inscritos                                             
ordenada [] = []
ordenada ((a,b,c):xs) = let mi = filter (\(_,t,_) -> t<b) xs
                           mai = filter (\(_,t,_) -> t>=b) xs
                       in ordenada mi ++ [(a,b,c)] ++ ordenada mai 
Link to comment
Share on other sites

Estás a definir um tipo de dados para representar o número com uma palavra reservada: Num. Esta palavra representa uma classe de Haskell, não podes utilizar para dar nomes aos teus tipos.

Para além disso, tens aí uns parêntesis a mais no filter e a função < e >= têm tipo Ord a => a -> a -> Bool e da forma que estavas a fazer, o compilador inferia que o tipo era a -> Bool.

ordenada :: Inscritos -> Inscritos                                             
ordenada [] = []
ordenada ((a,b,c):xs) = let mi = filter (\(_,t,_) -> t<b) xs
                           mai = filter (\(_,t,_) -> t>=b) xs
                       in ordenada mi ++ [(a,b,c)] ++ ordenada mai 

eishh... pois. obrigadao

Link to comment
Share on other sites

Utilizando o tipo do primeiro post.

type Inscritos=[Aluno]
type Aluno=(Nome,Num,Curso)
type Nome=String
type Num=Integer
type Curso=String

Objectivo: Calcular a lista de alunos de um dados curso ordenada por número.

Dão isto:

listagem :: Inscritos -> Curso -> [Num]
listagem t c = ordena (filter(==c) t)

Exercicio:

Apresente uma definição para a função ordena e apresenta o seu tipo

----- minha resolução ---



-- saca apenas os numeros
da_num :: Inscritos -> [Num]
da_num [] = []
da_num ((a,b,c):xs) = [b] ++ da_num xs

-- funcao ordena
ordena :: Inscritos -> [Num]
ordena [] = []
ordena t = da_num (ordenada t) 

-- ordenar por numero
ordenada :: Inscritos -> Inscritos                                           
ordenada [] = []
ordenada ((a,b,c):xs) = filter (\(_,t,_) -> t<b) xs ++ [(a,b,c)] ++ filter (\(_,t,_) -> t>=b) xs
Link to comment
Share on other sites

Utilizando o tipo do primeiro post.

type Inscritos=[Aluno]
type Aluno=(Nome,Num,Curso)
type Nome=String
type Num=Integer
type Curso=String

Objectivo: Calcular a lista de alunos de um dados curso ordenada por número.

Dão isto:

listagem :: Inscritos -> Curso -> [Num]
listagem t c = ordena (filter(==c) t)

Exercicio:

Apresente uma definição para a função ordena e apresenta o seu tipo

----- minha resolução ---



-- saca apenas os numeros
da_num :: Inscritos -> [Num]
da_num [] = []
da_num ((a,b,c):xs) = [b] ++ da_num xs

-- funcao ordena
ordena :: Inscritos -> [Num]
ordena [] = []
ordena t = da_num (ordenada t) 

-- ordenar por numero
ordenada :: Inscritos -> Inscritos                                           
ordenada [] = []
ordenada ((a,b,c):xs) = filter (\(_,t,_) -> t<b) xs ++ [(a,b,c)] ++ filter (\(_,t,_) -> t>=b) xs

Boas olha podes explicar me como e que esta funcao funciona?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.