1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Haskell - Ajuda [Urgente]

Discussão em 'Programação' iniciada por kripton2007, 11 de Dezembro de 2008. (Respostas: 3; Visualizações: 856)

  1. kripton2007

    kripton2007 Power Member

    Estou com dúvidas na resolução desta ficha... dá para dar uma ajudinha?


    --Para representar a informação sobre arvores genealogicas vamos usar os seguintes tipos:

    data Pessoa = P String ArvG --nome e genealogia
    data ArvG = Orfao --ambos os pais desconhecidos
    |SoPai Pessoa
    |SoMae Pessoa
    |PaeMae Pessoa Pessoa



    --Para simplificar vamos assumir que os nomes que aparecem são unicos, isto é, se aparecerem nomes repetidos referem-se à mesma pessoa.

    --1.Defina a função avos::Pessoa->[String] que, calcula os nomes dos avós de uma pessoa.



    --2. A árvore genealogica de uma pessoa permite apenas consultar os antecedentes de um dado individuo. Para consultar os seus descendentes
    --precisamos de ter uma lista de árvores destas.
    --Defina então uma função netos::String->[Pessoas]->[String] que, dada uma lista de pessoas e um nome determine os netos dessa pessoa (aqueles cujos avós são a pessoa dada).



    --3.Finalmente, defina uma função primos::String->[Pessoas]->[String] que calcule os primos de uma dada pessoa (duas pessoas são primas se têm um avô em comum).


    Cumps
     
  2. VuDu

    VuDu Power Member

    Esqueceste-te de dizer qual é a duvida.
     
  3. coldfire

    coldfire Power Member

    é para fazeres o código certamente :)
     
  4. Baderous

    Baderous Banido

    1 - Para os avós o melhor é definir 2 funções auxiliares: uma que te dê o nome de uma pessoa e outra que te dê uma lista dos pais de uma pessoa. De seguida, para saber os avós, apenas precisas de invocar a função que te dá os pais, sobre os pais da pessoa parâmetro.
    2 - Para os netos, apenas precisas de ver se o nome da pessoa passada por parâmetro (o avô) pertence à lista de avós de cada elemento da lista de Pessoas. Se sim, então basta-te colocar o nome dessa pessoa na lista final.
    3 - Para os primos, o melhor será ter 2 funções auxiliares: uma que, dado 2 listas de avós, te diz se há algum elemento da primeira que existe na 2ª. A outra função seria para, dado uma pessoa e uma lista de pessoas, saberes se a 1ª pessoa tem um avô em comum com alguma das pessoas da lista. Se sim, então é porque são primos, logo podes juntar essa pessoa da lista à lista final. Por fim terias a função "primos" onde te basta comparar a string com o nome da pessoa na lista e, se for igual, invocas a função auxiliar que te retorna os primos dessa pessoa sobre a cauda da lista, usando a função que te dá o nome da pessoa para colocar na lista final.
     

Partilhar esta Página