Manipulando matrizes

Teoria Completa

Introdução

Fala aí, aqui é o Guga do Responde Aí! Tudo bem com você?

A utilização de matrizes, como você deve imaginar, é muito interessante em alguns casos e principalmente para a resolução de alguns problemas computacionais, você conhece algum deles?

Sem perder tempo, vamos finalizar o nosso estudo sobre matrizes aprendendo um pouco mais sobre a sua utilização.

Inserindo elementos em uma matriz

Antes de começar, eu vou te dar uma dica que vai economizar muito tempo de estudo. Lembre-se de tudo aquilo que nós conversamos sobre vetores e para saber como manipular uma matriz apenas troque o índice simples por um índice composto (conjunto de linha e coluna).

Fui muito longe? Então vamos pensar um pouco.

Sendo bem sincero, é muito difícil utilizarmos matrizes que possuem mais de 2 dimensões, por outro lado as matrizes bidimensionais são muito comuns na programação e acabam carregando o legado inteiro dessa estrutura.

Para entendermos melhor tudo isso, vamos criar uma matriz bidimensional qualquer e utilizá-la como exemplo daqui para frente:

24 13 17 81

Agora que temos uma matriz, para programarmos ela basta realizarmos a execução das seguintes instruções:

Notou algo de interessante? A sintaxe de inserção em uma matriz é extremamente semelhante a sintaxe que utilizamos para inserir elementos em um vetor.

Isso acontece porque o vetor é uma estrutura unidimensional, já a matriz uma estrutura bidimensional. Isso significa que uma matriz contém todas as características do vetor com o acréscimo apenas de uma dimensão (que em nossa visualização são as colunas).

É justamente por esse motivo que todas as operações realizadas em matrizes são as mesmas realizadas em vetores, a grande diferença está na utilização de um índice composto (linhas e colunas).

De maneira geral, podemos resumir a operação de inserção em uma matriz através das seguintes instruções:

Moleza de entender, né?

Acessando elementos em uma matriz

Para acessarmos o valor de um dado armazenado em uma matriz, basta termos conhecimento da posição que esse dado está na matriz, ou seja, conhecer as coordenadas (conjunto de linha e coluna) dele.

Por exemplo, suponha que tenhamos que imprimir o primeiro elemento da segunda linha da matriz criado anteriormente:

Eu acho que você já sacou que toda essa semelhança com os vetores não é mera coincidência, né? De maneira geral, o acesso ao valor de dados armazenados em uma matriz é feito da seguinte forma:

Operações com matrizes

Não menos importante do que tudo que já foi dito e ainda muito semelhante com o que vimos antes com os vetores, é possível realizar operações com os valores de dados armazenados em uma matriz tranquilamente como se fossem variáveis, por exemplo:

Relacionar o conhecimento prévio sobre vetores com o aprendizado de matrizes é uma forma muito legal e rápida de aprendermos, porém não é motivo para deixarmos de resolver os exercícios de fixação!

É justamente por isso que esperarei você aqui na página do lado, não esquece de passar lá hein?!

Expandir

Exercício Resolvido #1

Elaboração própria.

Desenvolva um programa em C capaz de preencher e imprimir uma matriz de caracteres de ordem 3   x   3 .

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

A primeira coisa que nós temos que fazer, como na grande maioria dos programas, é definir um escopo.

Passo 2

Com o escopo definido, nós podemos declarar a matriz em si e as variáveis que serão úteis.

Aqui está algumas informações sobre elas:

  • i e j são variáveis contadoras;
  • m a t r i z é uma matriz de caracteres de ordem 3   x   3 .

Passo 3

A grande lógica envolvida no preenchimento de uma matriz está na utilização de duas estruturas de repetição aninhadas.

Isso acontece, pois o primeiro laço de repetição é utilizado para avançar as linhas (nesse caso) e o segundo laço para avançar as colunas.

Ou seja, o primeiro laço de repetição vai falar para o programa que está se iniciando em 0 e essa será a primeira linha da matriz que será preenchida com elementos. Em seguida, outro laço se inicia também em 0, mas esse tem a função de preencher as colunas dessa linha, fazendo assim com que o primeiro laço só avance a linha quando todas as posições dela já estiverem preenchidas (segundo laço finalizado).

Além disso, não podemos nos esquecer de colocarmos o comando %*c após o identificador de tipo. Isso pois, sempre que apertarmos a tecla Enter para confirmarmos um dos caracteres que preencherá a matriz desconsideraremos o caractere especial \n (quebra de linha) proveniente dessa tecla, que nesse caso é indesejado.

Passo 4

Por fim, basta realizarmos a impressão dessa matriz. Portanto, da mesma forma que os dois laços de repetição são úteis para escanear todas as posições de uma matriz, são também eles que nós utilizamos para imprimir uma.

A grande questão é que agora utilizamos o comando printf() ao invés de scanf() e devemos pular uma linha sempre que uma linha da matriz for avançar (linha 12), pois senão estaríamos imprimindo uma sequência de números e não a matriz em seu formato comum.

Resposta

Exercício Resolvido #2

Universidade Federal Fluminense – UFF, Lista de vetores e matrizes, pp. 01 – Exercício 03 da seção de matrizes.

Faça um programa que gere uma matriz transposta (toda matriz onde são trocadas as linhas pelas colunas, ou vice-versa).

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Vamos começar definindo o escopo do nosso programa.

Passo 2

Com o escopo definido, já podemos declarar as variáveis e matrizes que serão úteis para nós.

Onde:

  • i e j são variáveis contadoras;
  • m a t r i z t r a n s p o s t a são matrizes do tipo float de ordem 3   x   3 .

Passo 3

Com tudo declarado, vamos iniciar a lógica do nosso programa com o preenchimento de m a t r i z .

Passo 4

Em seguida, podemos preencher a matriz t r a n s p o s t a com os elementos de m a t r i z .

Basicamente a única coisa que temos que fazer é percorrer m a t r i z atribuindo os seus elementos na posição contrária a t r a n s p o s t a . Ou seja, o elemento na linha i e coluna j de m a t r i z é atribuído a linha j e coluna de i de t r a n s p o s t a .

Passo 5

Ao fim desse laço de repetição, teremos t r a n s p o s t a preenchida e pronta para ser impressa na tela. Para isso, basta utilizarmos o seguinte trecho de código:

Resposta

Exercício Resolvido #3

Elaboração própria.

Faça um programa que leia uma matriz e um escalar, faça a multiplicação entre os dois e imprima a matriz resultante.

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

A primeira coisa que devemos fazer é definir um escopo para o nosso programa.

Passo 2

Com o escopo definido, nós podemos declarar as variáveis que nos ajudarão nesse desenvolvimento.

A seguir estão algumas informações sobre elas:

  • i e j são variáveis contadoras;
  • e s c a l a r é a variável responsável por armazenar o número escalar inserido como entrada pelo usuário;
  • m a t r i z é uma matriz do tipo int de ordem 3   x   3 .

Passo 3

Com tudo aquilo que é necessário já declarado, podemos agora requisitar ao usuário os dados de entrada do programa.

Nesse caso, esses dados são todos os elementos de m a t r i z e o número escalar que será armazenado na variável e s c a l a r .

Passo 4

Logo após o usuário inserir os dados de entrada, nós podemos percorrer todos os elementos de m a t r i z multiplicando o elemento de cada posição pelo número armazenado em e s c a l a r e atualizando essa posição com o resultado.

Passo 5

Ao fim de tudo, teremos todos os elementos de m a t r i z sendo a multiplicação de seus valores originais (inseridos como entrada do programa) pelo número escalar.

Para realizarmos a impressão de m a t r i z , basta executarmos o seguinte trecho de código:

Resposta

Exercício Resolvido #4

Elaboração própria.

Faça um programa que calcule e imprima o determinante de uma matriz de ordem 2   x   2 .

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Iniciaremos o nosso programa com a definição de seu escopo.

Passo 2

Já que temos o escopo definido, podemos agora declarar e inicializar as variáveis que nos ajudarão a desenvolver esse programa.

Onde:

  • i e j são variáveis contadoras;
  • d i a g P r i n c i p a l e d i a g S e c u n d a r i a