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

drmnep2

Matriz Haskel

6 mensagens neste tópico

OLa tudo bom? sou novo aqui, gostaria de uma ajuda, estou fazendo um trabalho em que um programa em haskel que recebe numero de linhas e colunas de uma matriz e retorna ela prenchida com 0  tipo matirz 3x3

[ 0 0 0 ]

[ 0 0 0 ]

[ 0 0 0 ]

Quem souber como faz me ajuda ai

vlw falows t++

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A forma mais habitual de representar uma matriz em Haskell deve ser através de uma lista de listas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Haskell é a minha linguagem de programação favorita.

Para representar uma matriz eu usaria algo do género:

module Mat where

data Matrix = Matrix { x1, y1, z1
                     , x2, y2, z2
                     , x3, y3, z3
                     :: Int }
                    

zeroMatrix = Matrix 0 0 0
                    0 0 0
                    0 0 0

identityMatrix = Matrix 1 0 0
                        0 1 0
                        0 0 1


A descrição da matriz usa ali um "type record", que permite aceder facilmente aos elementos de uma matriz.

Assim para obter o coeficiente de z2 de uma dada matriz usaria algo deste género:

f :: Matrix -> Int
f mat = z2 mat

Dá para ser mais simples ? :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sempre usei listas de listas, mas quando se sabe a partida que o tamanho da matriz é fixa essa via é de facto muito interessante.

Mas acho mais interessante pelo motivo que não demonstraste, que é permitir apenas focar nos valores da matriz que seja de interesse. Por exemplo:

incrementaZ3 matrix@(Matrix {z3 = val}) = matrix { z3 = (val+1)}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito fácil.

Use isso:

matrizZero :: Int -> Int -> Array (Int,Int) Int
matrizZero x n = array ((1,1),(x,n)) [((i,j),0)|i<-[1..x],j<-[1..n]]

Servirá para qualquer matriz.

x é linha.

n é coluna.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou então, se for para usar arrais, a inicialização fica mais legível assim :P

matrizZero x n = listArray ((1,1),(x,n)) $ repeat 0

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