Logo Hardware.com.br
whitehat
whitehat Zerinho Registrado
26 Mensagens 2 Curtidas

[Resolvido] Array multidimensional

#1 Por whitehat 26/03/2024 - 17:14
Alguém pode, por favor me explicar como funciona um array multidimensional dinâmico em C?
Preciso aprender isso para avançar no meu estudo.

Atualização: 26/03/2024 22:26


tentando aqui, mas sem sucesso!
#include <stdio.h>
#include <stdlib.h>
    int main(){
        int *vector, linhas, colunas;
vector = (int*) malloc(linhas * colunas * sizeof(int));
for(int i=0; i < 3; i++){
    for(int o=0; o < 3; o++){
        vector[i * linhas + o] = i * colunas + o;
    }
}
for(int i=0; i < 3; i++){
    for(int o=0; o < 3; o++){
        printf("%d\n", (vector[i * linhas + o] = i * colunas + o));
    }
}
   
        return 0;
    }
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
03/04/2024 - 00:07
Ao instanciar o vetor você multiplica m×n, ou seja, criou uma matriz unidimensional simples.

- Porém, para preencher e também para exibir o vetor aplicou dois laços de 3 repetições cada:
Com isso a sua intenção seria criar uma matriz tridimensional? — Se for, não é deste modo.

Ao usar os laços de comprimento 3 poderá trazer problemas dependendo dos valores de linhas e colunas.
Veja:
  1. Quando linhas=2 e colunas=2, vetor terá tamanho 4 (2*2)
  2. Quando linhas=4 e colunas=4, vetor terá tamanho 16 (4*4)


O seu cálculo da posição do vetor é:
vector(i * linhas + o)

No primeiro caso lin e col são menores que 3 e o tamanho será 4; mas olhe o cálculo da última posição:

2 * 2 + 2 = 4 + 2 = 6 (n/existe => ERRO)

No segundo caso lin e col são maiores que 3 e o tamanho será 16; e o cálculo da posição final:

2 * 4 + 2 = 8 + 2 = 10 (menor, não alcança 16 => o vetor não estará preenchido)

- Percebe?

No seu caso, para preencher matrizes unidimensionais (1×n) vai precisar 1 laço de tamanho n (linhas x colunas);

Em matrizes bidimensionais (m×n) usam-se 2 laços de tamanhos m e n, respectivamente;

Matrizes tridimensionais, três laços... E assim por diante.

Tendo entendido e seguindo estes princípios eu acho que agora você conseguirá resolver matrizes diversas.


Mas, com alguns ajustes o seu programa ainda pode funcionar, sabendo que por usar um único vetor, unidimensional, o programa é fake por simular o tratamento dado a uma matriz bidimensional:

#include <stdio.h>
#include <stdlib.h>

int main () {
  int *vector, linhas=2, colunas=2;
  vector = (int *) malloc (linhas * colunas * sizeof (int));
  for (int i = 0; i < linhas; i++) {
    for (int o = 0; o < colunas; o++) {
      vector[i * colunas + o] = i * colunas + o;
    }
  }
  for (int i = 0; i < linhas; i++) {
    for (int o = 0; o < colunas; o++) {
      printf("(%d,%d) %d\n", i, o, vector[i * colunas + o]);
    }
  }

  return 0;
}


wink.png Bom proveito.
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal