Utilize um ponteiro duplo para alocar dinamicamente uma matriz com números reais. Os valores de linhas e colunas são obtidos do usuário. Preencha todos os elementos da matriz com e exiba a matriz.
Passo 1
Vamos nessa!
Pessoal, criar uma matriz dinâmica com C++ é uma tarefa um pouco mais complicada. Se você simplesmente tentar usar o operador new com duas chaves, vamos obter um erro:
O que vamos precisar fazer é usar o operador várias vezes consecutivas. A primeira utilização vai criar as linhas da matriz. Depois, dentro de cada linha vamos criar as colunas da matriz.
Passo 2
Vamos começar. Primeiro de tudo, vamos precisar de três variáveis.
Vamos precisar de duas variáveis inteiras para armazenar a quantidade de linhas e colunas.
E também vamos precisar de um ponteiro duplo que vai armazenar o endereço de memória da matriz dinâmica.
E em seguida, vamos precisar receber do usuário a quantidade de linhas e colunas da matriz
Passo 3
Beleza, agora vamos pro coração da questão.
O que vamos fazer aqui é um uso inteligente dos ponteiro. Primeiro, pegar o ponteiro duplo e alocar um “array de ponteiros”. E depois, vamos usar cada um dos ponteiros alocados dinamicamente, e usar esses ponteiros para alocar espaços na memória. O efeito disso será uma matriz.
Primeiro, vamos iniciar as colunas da nossa matriz. Para isso vamos usar o operador . Uma coisa que você deve notar é que é um ponteiro
E depois vamos acessar cada uma das linhas, e em cada uma delas vamos inicializar a quantidade de colunas:
Na prática, o que fazemos na linha 14 é criar uma “array de ponteiros”. E depois no loop, acessamos cada um dos ponteiros e alocamos um array de . O resultado é que temos uma quantidade de arrays dinâmicos, e cada um desses arrays dinâmicos possui uma quantidade de espaços.
Por exemplo, se o usuário digitar uma quantidade de 4 linhas, e 5 colunas, vamos ter a seguinte organização na memória:
Passo 4
Prontinho! Nossa matriz dinâmica foi alocada! E pra usar ela é só a gente utilizar as duplas chaves para acessar cada elemento, assim como faríamos com as matrizes que estamos acostumados:
Então vamos preencher todos os elementos com zeros. Pra isso vamos utilizar um loop aninhado para acessar todas as linhas e colunas.
Faremos um loop externo que vai percorrer as linhas da matriz, e um loop interno que percorre as colunas de cada linha. E para cada posição da matriz vamos preencher com zero:
Passo 5
E agora vamos exibir a matriz!
Vamos fazer um outro loop aninhado igualzinho ao anterior. Mas dessa vez, ao invés de alterar o conteúdo da matriz, vamos exibir o conteúdo.
Faremos um loop externo que vai percorrer as linhas da matriz, e um loop interno que percorre as colunas de cada linha. Um detalhe a mais é que, após terminar o último elemento de uma linha, vamos imprimir um para saltar uma linha
Passo 6
E antes de finalizar a questão, precisamos liberar a memória alocada dinamicamente.
Perceba o seguinte: se foi necessário usar um loop para alocar a memória, então vai ser preciso um loop para liberar a memória também!
Vamos acessar cada uma das linhas da matriz, e liberar o vetor dinâmico existente nesta coluna.
Na prática, o que estamos fazendo é acessando cada um dos ponteiros da “array de ponteiro” e liberando a memória apontada por estes ponteiros.
E antes de finalizar totalmente a questão, lembre-se que a “array de ponteiros” foi alocada dinamicamente também. Então é necessário liberá-la:
E prontinho! Questão concluída.