quinta-feira, 29 de janeiro de 2015

Programação em C - Matrizes dinâmicas

Olá pessoal, nesse post iremos falar sobre matrizes dinâmicas, a implementação será feita utilizando a linguagem C.

Se as dimensões de uma matriz só são conhecidas em tempo de execução, então deve-se utilizar alocação dinâmica.

É bem verdade que a linguagem C só permite alocar dinamicamente conjuntos unidimensionais. Caso você queira trabalhar com matrizes alocadas dinamicamente, terá que criar abstrações conceituais com vetores para representar conjuntos bidimensionais.

Primeiramente iremos ver um exemplo de implementação de matriz com vetor simples. Nessa representação, armazenamos nas primeiras posições do vetor os elementos da primeira linha, depois os da segunda linha e assim sucessivamente.

Perceba que o conceito é de um conjunto bidimensional, mas na verdade o que temos é um vetor unidimensional.

O problema aqui é como acessar um elemento de uma determinada linha e coluna? Veja a matriz abaixo:

1 2 3 4 5
6 7 8 9 1
2 3 4 5 6

Supondo que uma variável "i" representa a linha e uma variável "j" representa a coluna, como acessar o elemento 9? O elemento 9 está na segunda linha e quarta coluna. Se eu tenho um vetor "vet", sendo "n" o número de colunas da matriz, basta fazer:

vet[i*n + j]

Se o "i" for 1 (lembre-se que começamos a contar do 0, então 1 representa a segunda linha) e "j" for 3, então ficará vet[1*5 + 3] que é igual a vet[8] que realmente é onde encontra-se o número 9 no nosso vetor.

O código é bem simples, veja:


Agora iremos representar uma matriz através de vetor de ponteiros. O interessante dessa representação é que não precisamos fazer "i*n + j" para o índice. Primeiro alocamos o vetor de ponteiros e depois alocamos cada uma das linhas da matriz. Veja o código:



Simples não é mesmo? Quaisquer dúvidas deixem nos comentários!


Nenhum comentário: