Introdução às matrizes 2-D em C

Uma matriz é um grupo de elementos com o mesmo tipo de dados (homogêneo). Também é chamado de tipo de dados Derivado. Se considerarmos um tipo de dados primitivo e atribuirmos um valor como mostrado abaixo,

E agora, se queremos armazenar um novo valor na variável a, o novo valor substitui o valor antigo. Usando uma variável primitiva, podemos armazenar apenas um valor por vez, não podemos armazenar múltiplos valores.

Para armazenar mais de um elemento em uma única variável, como notas de alunos, IDs de funcionários, números de celular com uma grande quantidade de dados, precisamos criar centenas de variáveis ​​exclusivas, o que é uma tarefa muito complexa. É por isso que o conceito de Arrays foi introduzido.

Conceitos em matrizes 2-D em C

Podemos definir matrizes em

  • Unidimensional
  • Bidimensional

E assim por diante, até N-Dimensional, com base no requisito. Mas aqui vamos lidar com matrizes 2-D. Como o nome sugere, as matrizes 2-D podem ser uma representação matricial dos dados, criada para implementar uma estrutura de dados semelhante ao banco de dados relacional e pode ser armazenada em formas de tabela. Ele facilita a retenção de dados em massa que podem ser passados ​​para qualquer número de funções com base no requisito. Os dados nessas matrizes podem ser acessados ​​através dos IDs de linha e coluna.

Como podemos defini-los e implementá-los? Onde podemos usá-los? Indo além, vamos entender esses conceitos.

Em C, matrizes dimensionais podem ser declaradas da seguinte maneira:

Sintaxe

Portanto, da mesma maneira, podemos declarar a matriz 2-D como:

O significado da representação acima pode ser entendido como:

  1. A memória alocada para a variável b é do tipo de dados int.
  2. Os dados estão sendo representados na forma de 2 linhas e 3 colunas.


Os dados dentro da matriz podem ser acessados ​​através da representação acima. Na representação de matrizes 2D, o primeiro colchete representa o número de linhas e o segundo é o número de colunas. A representação de índice da matriz para o primeiro elemento sempre começa com zero e termina com tamanho-1. A variável de matriz (aqui b) sempre mantém o endereço base do bloco de memória e é chamada de variável de ponteiro interno.

Portanto, por exemplo, se o número de linhas for 3, a representação do índice para acessar os dados nas linhas será 0, 1 e 2. A mesma lógica também se aplica aos índices da coluna. Para a representação acima, para obter os dados da linha da coluna, podemos acessar por b (1) (2).

Inicializando matrizes

Temos dois métodos diferentes para inicializar os valores em C. Os métodos diferem apenas sintaticamente.

Abaixo está um deles.

Outra maneira de inicializar é a seguinte:

Geralmente, o primeiro método de inicialização é preferido, pois podemos entender e visualizar claramente as linhas e colunas das matrizes 2-D em C.

Abaixo está o exemplo da representação pictórica de elementos e seu endereço para a matriz b.

Os elementos de uma matriz são geralmente armazenados em locais de memória consecutivos com base no tipo de dados dos elementos.

Inserindo elementos em matrizes 2-D

Para inserir elementos em matrizes 2-D, precisamos inserir os dados nas linhas e nas colunas. Então, para isso, usamos o conceito de loops. No processo acima para inicializar os dados em uma matriz, predefinimos os valores.

Aqui, os elementos podem ser inseridos dinamicamente pelo usuário, conforme os requisitos. Abaixo está um código de exemplo para inserir os elementos.

#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
)

Conforme observado no código:

  1. Primeiro, estamos declarando a variável da matriz e as dimensões da matriz com o número de linhas e colunas.
  2. Em seguida, declaramos duas variáveis ​​para iterar sobre os elementos na matriz.
  3. Então, para loops são usados. O loop for externo é para a iteração das linhas e o loop interno é para as colunas.
  4. A função Scanf é usada para ler os dados à medida que introduzimos e, em seguida, coloque o valor inserido nas posições de iej.

No exemplo acima, inserimos os dados em uma matriz com 2 linhas e 3 colunas. A saída do seguinte pode ser obtida como abaixo:

Como não usamos a função printf para exibir a saída, o programa gravado apenas leu os valores inseridos pelo usuário. Depois de escrever a função de impressão (usando para loops), a saída seria exibida como:

Atualizar elementos em matrizes 2-D

A atualização de elementos em uma matriz pode ser feita especificando um elemento específico a ser substituído ou identificando uma posição em que a substituição deve ser feita. Para atualizar, geralmente exigimos os seguintes detalhes.

  1. Elementos de uma matriz
  2. Posição / elemento, onde deve ser inserido
  3. O valor a ser inserido.

Para atualizar os dados em uma matriz através dos detalhes do elemento, primeiro precisamos procurar esse elemento na matriz, entender sua posição e, em seguida, substituir o elemento antigo pelo novo.

Aqui, fornecemos abaixo dois exemplos de atualização do elemento de uma matriz 2-D.

Primeiramente, vamos dar um exemplo em que a posição do elemento a ser atualizado já é conhecida.

#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
b(0)(2)=10;
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
printf("\n");
)
return 0;
)

No programa acima, o elemento na 1ª linha e na coluna são selecionados e o valor dos dados nessa posição foi atualizado.

A saída acima é a seguinte:

No segundo exemplo, mostraremos como a posição do elemento pode ser tomada dinamicamente como um valor inserido pelo usuário e atualizar o valor do elemento nessa posição específica.

#include
int main()
(
int b(2)(3);
int i, j, num;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
printf("Enter the value of row and coulmn number :");
scanf("%d %d", &i, &j);
printf("Enter the number you want to update with: ");
scanf("%d", &num);
b(i)(j)=num;
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
printf("\n");
)
return 0;
)

Aqui, usamos a função scanf para ler o valor fornecido pelo usuário conforme sua escolha para a posição de um elemento com base nos números de linha e coluna.

A saída é a seguinte:

Como exercício, você pode tentar escrever um programa para atualizar toda a linha da matriz com valores inseridos pelo usuário?

Agora, como sabemos, na matriz 2-D, declaramos o tamanho da matriz no início. Estamos cientes do tamanho da matriz, mas e se o usuário fornecer um número aleatório de linhas e colunas fora do tamanho da matriz?

Observe que, como não escrevemos nenhuma condição if / else ou blocos try / catch, a saída da matriz não muda. No entanto, podemos escrever o código usando as condições mencionadas acima para exibir erros para esses casos.

Exclusão de elementos em matrizes 2-D

Após os conceitos de inserção e atualização dos dados dentro da matriz, agora vamos ver como podemos excluir uma linha inteira da matriz.

Escrevemos um programa em um formato simples para que o conceito de operações diferentes em uma matriz 2-d possa ser facilmente entendido.

#include
int main()
(
int b(2)(3), i, j, num, x;
printf("Enter elements into 2-D array: ");
for(i=0;i<2;i++)
(
for(j=0;j<3;j++)
(
scanf("%d", &b(i)(j));
)
)
printf("Enter the value of row number :");
scanf("%d", &x);
for(i=0;i<2;i++)
(
if(i==x)
(
for(j=0;j<3;j++)
(
if((i+1)<2)
(
printf("\t%d", b(i+1)(j));
)
)
i++;)
else
(
for(j=0;j<3;j++)
(
printf("\t%d", b(i)(j));
)
)
printf("\n");
)
)

Os passos seguidos são:

  1. Tomou os valores de uma matriz dinamicamente
  2. Solicitou ao usuário para inserir o número (índice) da linha que deve ser excluída.
  3. Usando a iteração de loop, estamos comparando se o número da linha e o número de entrada do usuário estão correspondentes ou não.
  4. Se eles corresponderem e se o número da linha for menor que o tamanho de uma matriz, estamos imprimindo a próxima linha. Senão, estamos imprimindo a linha como está.

A saída é a seguinte:

E se eu fornecer o número da linha fora do limite da matriz?

Ele não encontrará a linha para excluir e sair do programa imprimindo toda a matriz.

Como já se sabe, podemos até declarar os valores para os números de linha e coluna dinamicamente e escrever o programa de acordo.

Isso não parece simples e fácil de aprender?

Como exercício, você pode tentar excluir um elemento específico da matriz 2-d agora?

Conclusão

Nesta seção, aprendemos as operações básicas em matrizes bidimensionais. Essas matrizes 2D são úteis em tempo real com as operações da matriz e muitos cálculos matemáticos.

Matrizes podem até ser usadas na exibição de calendários, colocações do estacionamento, e podemos até jogar um jogo de xadrez.

Muitas outras estruturas de dados, como listas vinculadas, fila, gráficos e árvores, precisam usar esse conceito de matrizes 2D como requisito básico para armazenar e acessar os locais de diferentes elementos. Tente resolver as operações básicas das matrizes 2D e divirta-se aprendendo C.

Artigos recomendados

Este é um guia para matrizes 2D em C. Aqui discutimos a introdução, inicialização de matrizes, inserção, atualização e exclusão de elementos em matrizes 2D. Você também pode consultar os seguintes artigos para saber mais -

  1. Matrizes em R
  2. Vantagens da matriz
  3. Matrizes em C ++
  4. Matrizes em JavaScript
  5. Exemplos de matrizes em c #
  6. Matrizes em PHP