Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

nana91

Problema com tuplos

Mensagens Recomendadas

nana91    0
nana91

Olá, tenho aqui um problema gostava de saber a vossa opinião, o que fariam se o tivessem de resolver:

Estamos numa visita de estudo em que os alunos têm de andar em fila indiana, à frente vai a professora que tenta conferir que não falta ninguém, contanto os alunos na fila. No entanto, como os alunos, estão rigorosamente alinhados e muito chegados uns aos outros, os mais altos ocultam os mais baixos que estão mais atrás, e a professora não consegue vê-los todos.

Objectivo do problema:

Escrever uma função Haskell para calcular o número de alunos que a professora consegue ver, conhecidos o nome e altura de cada um dos alunos. Consideramos que um aluno de altura H oculta todos os alunos de altura menor ou igual a H que fiquem atrás dele.

A assinatura do problema é: visita :: [(String, Int)] -> Int

O argumento é uma lista de pares (String, Int), em que a cadeia representa o nome do aluno e o número inteiro representa a altura em centímetros. Não há nomes repetidos, mas os nomes vêm na lista por uma ordem indeterminada. O resultado representa o número de alunos que a professora consegue ver.

Aqui ficam uns exemplos:

Main> visita [("joao", 171),("rui", 181),("raquel", 169),("carlos",165),("rita",177),("vitor",174),("manuel",177),("alvaro",170)] 

4

Neste exemplo se não me engano os que são contabilizados pela professora são o joao, rui, rita, manuel.

Main> visita [("jorge",180),("beatriz",182)]

2

Main> visita [("paula",160),("fernanda",158),("sergio",167)]

3

Já fiz a parte mais básica só me falta o mais importante

visita :: [(String, Int)] -> Int
visita [(_,h)] = 1
visita ((_,h):xs) = 

Que dica me dão para completá-lo.

:(

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

Percorres a lista com uma variável auxiliar (esta variável será a altura maior que já encontraste até ao momento), e contabilizando as pessoas que a altura são acima da variável (em caso da pessoa ser mais alta, actualizas a variável para os próximos passos).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nana91    0
nana91

Enganei-me num exemplo:

Main> visita [("jorge",180),("beatriz",182)]

1

Acham que posso usar alguma função do preludio, qual, estou mesmo confusa, tenho de estudar tuplas :wallbash:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

O enunciado do problema fez-me lembrar um dos problemas existentes no concurso de programação que o P@P organizou há uns tempos, tinha um enunciado do género e era resolvido, no melhor caso, com programação dinâmica. O servidor onde os problemas estavam alojados acho que foi desactivado, mas ainda há o tópico da sua discussão: http://www.portugal-a-programar.pt/index.php?showtopic=24715

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade