Ir para o conteúdo
nana91

Trapezium

Mensagens Recomendadas

nana91    0
nana91

Olá pessoal desculpem estar a abrir um novo tópico, mas tenho novidades. O exercicio é o seguinte:

partindo de uma lista inicial, não vazia, aplicarmos a função s sucessivamente, construímos um trapézio de números. Chamamos informalmente “trapézio de números” a uma lista de listas de números, em que o comprimento de cada lista é superior em uma unidade ao da lista anterior. Programemos então uma função trapezium que dada uma lista de inteiros Int e um inteiro Int calcula uma lista de listas de inteiros Int, com tantas listas quantas as indicadas pelo segundo

argumento e em que cada uma é obtida da anterior pela função s.

s :: [int] -> [int]
s [] = []
s [x] = [x,x]
s (x:xs) = [x] ++ s1 x xs ++ [last xs] 
where
s1:: Int -> [int] -> [int]
s1 x [y] = [x+y]
s1 x (y:ys) = (x+y) : s1 y ys

Como vêm já tenho a função s, mas tenho a função trapezium incompleta

trapezium :: [int] -> Int -> [[int]]
trapezium (x:xs) 0 = []
trapezium (x:xs) y = ...

Por exempo se y=3 penso que seja  [x] ++ [ sumAdjacent (x:xs)] ++ [ sumAdjacent ( sumAdjacent (x:xs))], mas não consigo por isso de forma geral (que de para qualquer nº).

:thumbsup:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

É só ires usando a função s para a aplicares sobre a lista que passas como argumento enquanto vais diminuindo o valor do 2º argumento até chegar a 0. Neste processo, vais adicionando o resultando de usares a função s sobre a lista à lista final. É uma função recursiva como muitas outras que já deves ter feito.

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 os nossos Termos de Uso e Política de Privacidade