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

47

Como aumentar uma matrix

13 mensagens neste tópico

Boas alguém sabe me dizer se é possível e como faço para aumentar linhas e colunas a uma matrix?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas alguém sabe me dizer se é possível e como faço para aumentar linhas e colunas a uma matrix?

Como assim? Isso só daria se fosse com listas ligadas dinamicamente. Mas tu em array não é? Acho que não dá porque tens de declarar a matriz com um certo tamanho antes de fazeres operações com ela.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois estou mesmo a falar em array o que eu queria fazer era mesmo tipo

declaro a matrix

char mtrx[1][1];

e depois queria redimensionar-la para uma matrix de 10*10 por exemplo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois.. Isso não dá, pelo menos que eu conheça. O máximo que podias fazer era declarar outra matriz que seja maior e passar os elementos da primeira matriz para a segunda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se alocares a matriz dinamicamente (através do 'malloc'), podes usar o 'realloc' para a redimensionar (caso haja espaço o seu tamanho é aumentado, caso contrário aloca um novo espaço e copia os valores antigos para a nova localização).

é claro que se estás a trabalhar com matrizes bidimensionais, alocar espaço dinamicamente complica a manipulação das matrizes (usando uma macro podes simplificar um pouco a coisa, mas continua a ser preciso ter algum cuidado para não cometer erros).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é que faço uma matrix com o malloc? podes me deixar aqui um exemplo sfv?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

int* m=(int*)malloc(10*sizeof(int)); //ou ...calloc(10,sizeof(int));

desta forma ficas com uma matriz de 10 posições. podes aceder às posições da matrix fazendo m[...], tal como fazes normalmente para matrizes de uma dimensão.

de referir que estas matrizes são sempre tratadas como sendo de uma dimensão, ou seja se quiseres fazer dela uma matriz de duas dimensões é necessário fazer "conversões" de posições (o que, tal como referi no post anterior, aconselho a fazer com uma macro).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma matrix NxM

int **a;

a=(int**)calloc(N,sizeof(int*));
for(i=0;i<N;i++)
    a[i]=(int*)calloc(M,sizeof(int));

/*e antes de sair do programa voltar a libertar a memoria alocada*/
for(i=0;i<N;i++)
    free(a[i]);
free(a);

acho que é isto, estou a fazer de cor e posso ter algum erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas isso não é uma matriz NxM, mas sim N matrizes de M elementos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epa... arrays dinamicos...

Faz-se assim: cada vez que for preciso aumentar o tamanho de uma matriz, copia-se esta para uma com o dobro do tamanho ( por exemplo ) e volta-se a atribui-la a mesma variavel.

Em C++ podes definir uma classe de arrays dinamicos que se aumenta sempre que necessario. Alias, a STL é capaz de já trazer uma estrutura de dados desse tipo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz-se assim: cada vez que for preciso aumentar o tamanho de uma matriz, copia-se esta para uma com o dobro do tamanho ( por exemplo ) e volta-se a atribui-la a mesma variavel.

mas se usares o 'realloc', o SO verifique se pode aumentar o tamanho da matriz actual, e caso isso não seja possível é que aloca um novo bloco de memória o copia os valores do antigo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz-se assim: cada vez que for preciso aumentar o tamanho de uma matriz, copia-se esta para uma com o dobro do tamanho ( por exemplo ) e volta-se a atribui-la a mesma variavel.

mas se usares o 'realloc', o SO verifique se pode aumentar o tamanho da matriz actual, e caso isso não seja possível é que aloca um novo bloco de memória o copia os valores do antigo.

Pois é gajo, eu é que ainda sou maçarico nalgumas coisas em C. Nomeadamente na gestão de memoria.

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