• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

HIT_Braga

Dúvida sobre listas

17 mensagens neste tópico

Boas ppl.

Antes de mais ainda bem que existem fóruns como este. Sou novato por aki mas gostava de poder já contar com a ajuda preciosa de quem sabe e percebe. Quando for o caso eu tb ajudarei no que souber :confused:

Já estou literalmente farto de  :wallbash:.

O meu problema é tenho uma lista de listas, quero trabalhar sobre uma lista e depois voltar a coloca-la no mesmo sitio.

[[1,1],[],[],[],[]] quero pegar numa determinada lista colocar um elemento e voltar a construir como estava [[1,1],[],[],[],[1]]

Isto é o meu código:

escreve::[[int]]->Int->Int->[[int]]
escreve list pos num= let a= aux list !!pos
                                    in ?????????
aux::[int]->Int->[int]
aux list pos= pos:list

Tao vamos lá ver. A função escreve recebe uma lista de listas, um inteiro que é a posição da lista, um inteiro que é o que eu desejo colocar lá e devolve a lista de listas

Quando faço "let a" pego na lista que está na posição que eu desejo alterar. na função aux, pego na lista devolvida escrevo o inteiro que quero e devolvo a nova lista.Agoar como a volto a colocar no sitio direitinho é que não sei. :rant_01:

Sds,

HIT_Braga

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com as funções take e drop isso é simples. Pegas nos elementos até à posição x, e nos elementos que estão depois da posição x, e juntas as listas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi muito bem a ideia de take e drop, podes exemplificar com o código que enviei.

Sds,

HIT_Braga

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens a lista [1,2,3,4,5].

Queres substituir o 3º elemento por 10.

Pegas nos 2 primeiros elementos, através do take ([1,2]).

Pegas no resultado de deitar fora os 3 primeiros elementos, através do drop ([4,5]).

Juntas [1,2]++[10]++[4,5].

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Antes de mais desde já obrigado pelo tempo disponibilizado.

O problema se calhar não foi bem explicado, pois com take e drop não soluciona o problema

tens uma lista de listas [ [1,1,1,1,1],[2,2,2,2,2],[ ],[ ],[ ] ]

eu quero adicionar um determinado numero a uma determinada lista. Cada lista representa uma coluna. [[coluna1],[coluna2],[coluna3],[coluna4]].

Quando o utilizador carrega na tecla 4 irá inserir um numero nessa coluna(que é uma lista). com o take e drop fico lixado no caso da primeira coluna e da ultima.

O que eu tinha como ideia era

joga::[[int]]->Int->Int->[[int]]

--a será a posição na lista

--b será o inteiro que quero colocar

joga l a b = let x= l !!a --retira a lista que eu desejo para trabalhar

Depois com outra função faço o que eu quero à lista mas tenho o problema de não conseguir ficar com o resto da lista.

Imagina que tenho esta lista

[ [1,1,1,1,1],[2,2,2,2,2],[ ],[ ],[ ] ]

faço joga [ [1,1,1,1,1],[2,2,2,2,2],[ ],[ ],[ ] ] 2 1, daqui resulta a lista [ ] mas o resto da lista eu quero guardar e construir com a nova lista com o numero 1 ou seja a lista

[ [1,1,1,1,1],[2,2,2,2,2],[ 1 ],[ ],[ ] ], e assim sucessivamente.

joga [ [1,1,1,1,1],[2,2,2,2,2],[ 1 ],[ ],[ ] ] 3 2 resulta [ [1,1,1,1,1],[2,2,2,2,2],[ 1 ],[ 2 ],[ ] ].

Espero ter-me expressado bem agora

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta isto:

joga l pos n = let ini = take (pos-1) l
	   fim = drop pos l
       in ini ++ [(add n l pos)] ++ fim
       

ind l pos = l!!(pos-1)

add n l pos = ( n $ ind l pos

Só tens de ter cuidado com a posição onde vais jogar, de modo a que não ultrapasse o tamanho da lista.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gracias Baderous

funciona na perfeição :confused:

(:D n $ ind l po para que serve o $

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito obrigado Baderous...Foi muito útil a tua ajuda e a explicação do $. Gostava de poder esclarecer mais coisas contigo, visto que vou ter mais dúvidas  :cheesygrin:

Admin podem fechar este tópico tá resolvido

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

desculpem, mas este tópico tem alguma relação com o 4 em linha???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como é que ele vai saber se uma determinada posiçao da coluna está disponivel?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como é que ele vai saber se uma determinada posiçao da coluna está disponivel?

Armazenas numa variável qualquer a dimensão do tabuleiro (podes criar um tipo de dados que contenha, para além da lista, as dimensões do tabuleiro), e, ao efectuares uma nova jogada, vês se a coluna está dentro da dimensão, e se a dimensão da lista correspondente àquela coluna ainda é inferior ao número de linhas. Caso isto não se verifique, a jogada é inválida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por exemplo, tenho uma função k simplesment retorna uma lista vazia, e tenho outra k recebe esse lista e altera a mesma, pondo elementos na lista vazia...

a minha duvida é como é k eu guardo essa alterações da lista, para depois numa outra função usar a tal lista ja modificada pela outra função

0

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