Olá e bem-vindo.
Nesta palestra eu quero falar sobre matrizes multidimensionais.
Até este ponto, se você pensou em um array, você acabou de dizer que
um array é uma variável que pode armazenar muitos tipos de dados.
Pode ser mais complicado do que isso.
Você pode ter basicamente muitos dimensões de uma matriz.
Então, se você tiver apenas uma matriz linear que é o que discutimos até agora,
chamado de dimensão única.
E sabemos que é um único dimensão porque tem
apenas um colchetes com um tamanho.
A linguagem c permite matrizes de qualquer dimensão a ser multado.
Portanto, este é o tipo de pensamento como um array aninhado, um array de um array.
Então, matrizes bidimensionais são os mais comuns.
Mas você pode realmente fazer matrizes tridimensionais, matrizes
quadridimensionais, arrays de cinco dimensões, mas não há muitos casos
de uso para 3 4 e 5.
Na verdade, você vai tem uma matriz unidimensional que
você usa em seu programa ou matriz bidimensional.
matrizes bidimensionais são comuns porque eles representam
essencialmente linhas e colunas em uma planilha, é assim que você
pode visualizar isso ou uma matriz ou uma tabela.
Essa é uma matriz bidimensional, você tem linhas e colunas.
Então você pode armazenar mais dados do que
uma única matriz dimensional especificando os tamanhos.
Mas é muito aplicável porque parece uma matriz.
E há aplicativos que você pode querer escrever que tem este conceito de
uma matriz, especificamente uma aplicação matemática seria
mais relevante aqui.
Mas você pode usar para fazer bidimensionais matrizes para muitas coisas diferentes.
Um exemplo é uma matriz.
Mas, novamente, visualize-o como uma mesa.
Matrizes bidimensionais são declarado da mesma forma
que um array unidimensional.
A única diferença é você agora tem outro conjunto de colchetes.
Portanto, neste exemplo, estamos declarando uma matriz denominada matriz do tipo
int que possui 4 linhas e 5 colunas.
Isso significa que você pode armazenar 20 elementos dentro dessa matriz bidimensional.
Então você deve saber como cada dimensão é especificada com
seu próprio par de colchetes.
é assim que você pode identificar facilmente quantas dimensões um array tem.
Se você tivesse 3 colchetes lá, isso seria uma matriz tridimensional.
Se você tiver 4, seriam quatro.
Este aqui tem 2, então é 2.
E até o mais cedo as palestras só tinham uma, então sabíamos que
era uma dimensão única.
Então, olhe para os colchetes, preste atenção a isso.
Novamente 4 linhas, 5 colunas, total de 20 elementos.
Para inicializar uma matriz bidimensional, vai ser inicializado da mesma maneira
que um unidimensional array, mesmo tipo de sintaxe, você apenas
adicionará mais.
Então, quando você lista os elementos para inicialização, os valores
serão listados por linha.
E a diferença aqui é que quando
você coloca os valores iniciais para cada linha, você vai fazer entre colchetes, colchetes e
então você vai colocar todas as linhas entre colchetes.
Então vai parecer algo assim.
Se criarmos uma matriz de números, que é de 2
dimensões, 3 linhas e 4 colunas e queremos inicializá-lo, tudo o que
você precisa fazer é colocar entre colchetes o matriz inteira e, em seguida, adicione colchetes aninhados
internos para cada linha.
Então, aqui estamos inicializando valores 0 sub-0 a 10, 0 sub-1 a 20, 0 sub-2 a 30
e 0 sub-3 a 40.
E é assim que você acessa matrizes multidimensionais também.
Você os acessa com a linha na coluna.
Você só tem que lembrar que é baseado em 0.
Então, o lado esquerdo superior que seria a linha 1, a coluna 1 seria 00 e isso seria
igual a 10.
Linha 1 coluna 2 seria igual a 20, mas
você acessaria como números 0 sub-1.
Porque a primeira matriz contém 3 linhas você acessa, esse é o número que você especifica para o número da linha e
então, o número da coluna é a próxima especificação
para acessar a matriz.
Mas a individualização é bonita simples, basta separar
as coisas por comentários com colchetes.
E ao acessá-los, você acessaria é como se você acessasse um array normal, exceto que
agora você está acessando este conceito de uma linha em uma coluna.
Portanto, o uso dos pares internos de colchetes é realmente opcional, mas você deve
usá-lo para facilitar a leitura.
Se você não forneceu essas chaves, você poderia
realmente fornecer 10 20 30 40 15 25 35, tudo apenas consecutivamente, mas é muito difícil visualizar o que
você está inicializando.
Como um programador, a legibilidade é muito, muito importante porque aumenta a qualidade
do código é mais fácil manter o código.
Quando eu olho para isso bem aqui, Posso identificar facilmente,
especialmente com os comentários, o que sou inicializando para, quais valores e
linhas serão inicializados.
Se eu tivesse isso como uma única linha apenas números consecutivos, eu
me perderia muito rápido.
Portanto, embora os colchetes internos não são necessários, use-os.
Tal como acontece com uma matriz unidimensional, não é necessário que
todo o array seja inicializado.
Você pode apenas inicializar certas áreas.
Então, neste exemplo, estamos criando matriz bidimensional com 4
linhas e 5 colunas.
Estamos apenas inicializando o primeiros 3 elementos de cada linha.
Então, linha 1 coluna 1 é 10, linha 1 coluna 2 é 5 e linha 1 coluna 3 é um 3 negativo,
e o mesmo para a segunda coluna
e assim por diante 900 32 31 008.
Para aqueles que não definimos o 4º e o quinto valores
de cada linha, esses estão realmente indo para ser definido como 0 automaticamente porque os
deixamos de fora.
E neste caso, você realmente tem que fornecer as
chaves, as internas.
Porque aqui se fizéssemos isso, a inicialização
ficaria toda confusa.
Porque se você não tivesse as chaves, ele
faria isso consecutivamente.
Então o que aconteceria é
isso iria realmente inicializar os primeiros 12 elementos.
Então, ele inicializaria todos os elementos na primeira linha, todos os elementos na segunda
linha e depois os primeiros 2 elementos na terceira linha e,
em seguida, o resto dos elementos na terceira linha, o resto dos
elementos da 4ª linha seriam 0.
Novamente, este é um bidimensional matriz de 4 linhas e 5 colunas.
Seria apenas fazê-los consecutivamente.
Portanto, não se esqueça das chaves se você está se
quiser apenas especificar certos elementos de inicialização.
Você também pode fazer inicializadores designados.
Lembre-se, este é o conceito C99.
Isso é opcional em C11, onde você pode
especificar índices específicos a serem inicializados.
Então você pode usar subscritos no lista de inicialização, assim como em
uma única matriz dimensional, se você quiser para fazer um inicializador designado, você
simplesmente faria algo assim.
Então, aqui estamos declarando nossa matriz matriz de 4 linhas e 3 colunas, mas na verdade estamos especificando que
0 0 é igual a 1, 1 1 é igual a 5 e 2 2
é igual a 9.
Então, quando dizemos 2 2 novamente, o que estamos dizendo que é a linha 2, que é realmente
a linha 3, porque começamos em 0, coluna 2, que na verdade é a coluna 3.
Novamente, visualize isso como uma tabela ou uma planilha.
E acessando os elementos começam no canto superior esquerdo.
Mas se você entender que o 4 representa as linhas e o
3 representa as colunas, é muito intuitivo depois disso.
Então o que isso está fazendo é inicializar os 3 elementos indicados
da matriz com os valores especificados.
Mas o que você deveria observe que aqui está a sintaxe.
Todos os valores não especificados aqui serão 0 por padrão.
Então, isso só vai para inicializar 3 valores.
Cada conjunto de valores que você do initialize serão os
elementos em uma linha entre colchetes.
E então toda a inicialização vai entre outro par de chaves.
Então você vê que temos o colchetes nos externos, como
na inicialização normal e então temos os colchetes
para acessar a matriz interna.
E então temos vírgulas para separe cada linha e cada conjunto de valores de
linha é separado do próximo definido por uma vírgula.
Então, os valores são separados e também os índices de linha.
Agora, só porque dissemos isso temos 2 dimensões e
falamos sobre isso; você pode na verdade, têm muitas outras dimensões.
Tudo que eu falei 2 dimensões também se aplica a
3 dimensões 4 dimensões 5 dimensões.
Então, se você quiser declarar
um Array tridimensional, você faria isso com 3 colchetes.
Então aqui está uma matriz chamada box do tipo int de 10 20 e 30.
Você pode querer usar um
array tridimensional, talvez se você estivesse armazenando valores xyz de algum tipo, você provavelmente não precisará fazer isso.
Matrizes tridimensionais e não são realmente comuns.
Como um resumo, você pode visualizar um array unidimensional
como uma linha de dados, linha única, bidimensional array como uma tabela,
uma matriz ou planilha, de forma tridimensional array, você pode visualizar como uma pilha de tabelas
de dados, portanto, uma pilha de tabelas.
Se você precisava de tantos dados, vai ser muito
difícil acessá-lo e provavelmente confuso.
E qualquer pessoa que esteja mantendo este programa para
uma matriz tridimensional ou superior, provavelmente vai se
perder tentando descobrir o que está acontecendo, mas você pode fazer isso novamente e se
você precisar iterar por qualquer um desses um, dois arrays tridimensionais, você provavelmente
usará um loop.
E quanto mais dimensões você tem no loop, mais loops aninhados
você terá.
Então, se você deseja processar um array tridimensional, você
terá 3 loops aninhados.
E se você quiser processar um array quadridimensional, você
terá 4 loops aninhados.
Até a inicialização de um array que é maior do que 2 dimensões, novamente, você vai
aplicar o mesmo tipo de coisa, você só vai
estender um pouco.
Portanto, uma matriz tridimensional terá 3 níveis
de colchetes aninhados com o nível interno contendo um conjunto de valores de
inicialização para cada linha, então se parece com algo assim.
Aqui temos um tridimensional array, 2 3 e 4, uma pilha de tabelas
de dados essencialmente.
E o primeiro bloco de 3 linhas,
vamos inicializar e o segundo bloco de 3 linhas vamos inicializar.
Então, o que isso está dizendo é novamente primeiro bloco e segundo bloco porque não inicializamos
o terceiro e o quarto bloco, apenas o primeiro
e o segundo.
Portanto, temos 4 blocos e você pode pensar em cada bloco como uma
pilha de tabelas de dados, cada bloco com linhas e colunas.
Então, o primeiro bloco vai ser inicializando apenas as 3 primeiras linhas, que é tudo o
que temos são 3 linhas.
E então o segundo bloco vai para inicializar as próximas 3 linhas, mas o terceiro e
o quarto blocos não vão ser inicializados.
Se você deseja inicializar o terceiro
e quarto blocos, você teria mais chaves internas, colchetes e assim por diante.
A mesma coisa se aplica, porém, para o aqueles que você não
inicializar, eles serão inicializados em 0.
Mas, novamente, você pode ver como fica muito tedioso e
também muito difícil de seguir.
Quando você deseja processar os elementos em uma matriz dimensional, eu
mencionei, você usará loops aninhados.
Mais uma vez, vai corresponder diretamente para o número de dimensões.
E cada loop vai iterar em uma dimensão de array.
Então vai parecer algo assim.
Este é um exemplo de matriz tridimensional.
Você tem um loop externo e então você tem 2 loops internos.
O loop externo será o primeira matriz externa, de modo que o loop externo essencialmente atravessaria as linhas, a
segunda passará pelas colunas e a terceira
um irá percorrer os blocos.
Novamente, o que você deve estar percebendo é uau, isso fica
muito cabeludo e muito tedioso, muito rápido.
Portanto, tente evitar tridimensionais matrizes quadridimensionais e nem mesmo vejo muitos usarem
caixas para ele, um e dois são realmente tudo o
que você vai usar.
Mas entenda multidimensional arrays são uma possibilidade em c, uma maneira de armazenar mais dados e
acessar o mesmo nome com muitos elementos de dados. Obrigada.