Você está na página 1de 16

RACIOCÍNIO

ALGORÍTMICO

Camila Andrade Santos


Estruturas de dados
homogêneas do tipo
matriz em Python
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

 Descrever a lógica de manipulação de uma estrutura do tipo matriz.


 Reconhecer casos em que é necessário utilizar matriz.
 Programar algoritmos empregando matrizes.

Introdução
Na área de computação, a estrutura de dados refere-se a um conjunto de
valores e operações, como uma implementação concreta de algo abstrato.
Existe uma grande variedade de estruturas de dados disponíveis, desde
estruturas simples, como vetores e listas, até estruturas complexas, como
árvores balanceadas. No entanto, cada estrutura de dados existente tem
um contexto no qual se enquadra melhor. Por exemplo, para armazenar
números de pessoas a serem atendidas em um banco, pode-se usar uma
estrutura do tipo fila (FIFO, do inglês fist in first out).
Matrizes são estruturas de dados relativamente simples, capazes de
armazenar dados e associar informações, como uma tabela. No entanto,
a implementação de certas estruturas pode variar sua complexidade,
de acordo com a linguagem de programação utilizada. Por exemplo,
na linguagem C, geralmente matrizes são implementadas contendo
duas dimensões (linhas e colunas) e com apenas um tipo de dados.
Na linguagem Python, isso pode ser mais flexível. Por se tratar de uma
linguagem que oferece facilidades, é possível implementar matrizes de N
dimensões com certo controle. Além disso, por se tratar de uma lingua-
gem dinamicamente tipada, é possível implementar matrizes contendo
diferentes tipos de dados.
2 Estruturas de dados homogêneas do tipo matriz em Python

Neste capítulo, você verá como as matrizes são implementadas em


Python, bem como o que são e como utilizar matrizes multidimensionais.
Além disso, verá em quais casos é necessário utilizar matrizes. Por fim,
verá como programar algoritmos utilizando matrizes.

1 Matrizes
Em estruturas de dados em linguagem de programação, os dados podem ser do
tipo homogêneo ou heterogêneo. Por homogêneo, tem-se que todos os elementos
de uma estrutura precisam ser do mesmo tipo, ou seja, todos os elementos devem
assumir o tipo inteiro, por exemplo. Já no tipo heterogêneo, os dados em uma
estrutura podem assumir vários tipos, como inteiro, string, ponto flutuante
( float), entre outros (TENENBAUM; LANGSAM; AUGENSTEIN, 1995).
Na computação, existem diversos tipos de estruturas de dados, como pilha,
fila, listas, árvores, entre outras. Nesta seção, será abordada a estrutura de
dados do tipo matriz. Uma matriz nada mais é do que um vetor bidimensio-
nal, ou seja, possui duas dimensões. Em um vetor (do inglês array), pode-se
armazenar um grupo de valores, sendo cada um associado a um número, que
se refere à posição em que o valor está sendo armazenado (DEITEL; DEITEL,
2010). A Figura 1, a seguir, apresenta a estrutura de um vetor.

Figura 1. Exemplificação de um vetor.

Cada elemento é armazenado em uma posição, e o vetor possui todos


os elementos do mesmo tipo, sendo tipo string. Ao nível de código, os
elementos são acessados via posição em que o elemento está armazenado.
Estruturas de dados homogêneas do tipo matriz em Python 3

É importante ressaltar que, na maioria das linguagens de programação, os


vetores são zero-based, ou seja, possuem como posição inicial o índice 0, e
não 1 (MANZANO, 2010). Desse modo, para acessar o primeiro elemento
“Texto”, deve-se acessar a posição 0. Além disso, um vetor possui apenas
uma dimensão, ou seja, é unidimensional. Para acessar ou manipular um
vetor, utiliza-se apenas uma instrução de looping, como, por exemplo, o
for (Figura 2).

Figura 2. Exemplo de acesso de um vetor em Python.

Na Figura 2, no primeiro quadro, pode-se observar um exemplo de acesso


a um vetor em Python. Na primeira linha do código, tem-se a declaração do
vetor, bem como a atribuição de valores. Os elementos do vetor possuem o
tipo string. Para imprimi-los na tela, foi necessário utilizar a estrutura de
repetição for, onde i representa o contador, que será utilizado para acessar as
posições do vetor range( ), que delimita o intervalo de i de 0 ao tamanho
do vetor vetorExemplo, que, por sua vez, possui 7 posições. Dessa forma,
o i assume os valores de 0 a 6. Na terceira linha, utiliza-se o print( ) para
imprimir os elementos do vetor. As posições do vetor são acessadas por meio
do valor assumido por i no for. Assim, na primeira iteração, o valor de i
é 0, de modo que se acessa a posição 0 do vetor (vetorExemplo[0]), na
qual será impressa o valor “Texto”. O Quadro 1, a seguir, mostra a execução
do código apresentado na Figura 2.
4 Estruturas de dados homogêneas do tipo matriz em Python

Quadro 1. Execução do código apresentado na Figura 2

Valor impresso de
Iteração Valor de i vetorExemplo

0 0 Texto

1 1 Texto1

2 2 Texto2

3 3 Texto3

4 4 Texto4

5 5 Texto5

6 6 Texto6

Como supracitado, as matrizes bidimensionais podem conter duas ou mais


dimensões, ou seja, duas ou mais linhas. Sendo assim, relaciona-se direta-
mente com casos em que se utiliza tabelas. A Figura 3, a seguir, apresenta a
estrutura de uma matriz.

Figura 3. Exemplo de matriz.

Ao contrário dos vetores, em que, para acessar um elemento, é preciso se


preocupar somente com o índice da coluna, uma vez que só existe uma linha,
em matrizes, para acessar os elementos, faz-se necessário levar em consideração
Estruturas de dados homogêneas do tipo matriz em Python 5

o índice da linha e da coluna. Dessa forma, a representação de uma matriz


é dada pela linha (L) × coluna (C). Como exemplo, para acessar o elemento
“Onze”, na estrutura matrizExemplo apresentada no exemplo da Figura
3, deve-se acessar a linha 1 e a coluna 3, ou seja, matrizExemplo[1][3].
A Figura 4, a seguir, apresenta uma visualização mais clara desse conceito.

Figura 4. Código em Python para acessar os elementos do exemplo exposto na Figura 3.

No código exemplificado na Figura 4, na primeira linha, é feita a decla-


ração e a atribuição de dados para a matriz-exemplo. Observe que a matriz
em Python nada mais é do que uma lista de listas. Como essa matriz possui
3 linhas e 7 colunas, é declarada da seguinte forma: matrizExemplo[
[ ], [ ], [ ] ], onde cada [ ] representa uma linha da matriz, e os
elementos dentro dela, as colunas.
Para acessar os elementos, no exemplo do vetor, era necessário construir
apenas um for para percorrer as colunas, uma vez que um vetor possui so-
mente uma linha. Quando se fala de matrizes, é necessário construir dois laços
for, sendo um para percorrer as linhas e outro para percorrer as colunas da
matriz, assim como apresentado nas linhas 2 e 3 do código exposto na Figura
4. Aqui, utiliza-se a mesma lógica, em que a linha armazenará o valor atual
da iteração das linhas, que tem o intervalo de 0 até o tamanho da matriz (3),
e a coluna armazenará o valor atual da iteração das colunas, que possui o
intervalo de 0 até o tamanho das colunas da primeira linha da matriz (7), uma
vez que todas as linhas da matriz do exemplo possuem o mesmo tamanho.
Dentro do segundo laço for, utiliza-se a instrução print para im-
primir na tela os elementos. Observe que, agora, utiliza-se o caractere f’
dentro do print, que é utilizado apenas para formatar o texto que será
6 Estruturas de dados homogêneas do tipo matriz em Python

impresso. Dessa forma, os elementos serão impressos dentro de chaves,


como em uma matriz real. Ainda dentro do print, utiliza-se o parâ-
metro end, que indica o que será impresso ao final do texto formatado.
Por padrão, o Python pula uma linha. Em nosso exemplo, deixamos esse
parâmetro vazio, pois queremos que o código pule uma linha somente após
apresentar todos os elementos da linha da matriz. No segundo quadro da
Figura 4, pode-se observar o resultado do acesso à matriz. Para melhor
visualização, O Quadro 2, a seguir, apresenta um trecho da execução do
código utilizado na Figura 4.

Quadro 2. Execução do código apresentado na Figura 4

Valor de Valor de Resultado


Iteração linha coluna Matriz Impresso

0 0 0 matrizExemplo[0][0] Um

1 0 1 matrizExemplo[0][1] Dois

2 0 2 matrizExemplo[0][2] Três

3 0 3 matrizExemplo[0][3] Quatro

4 0 4 matrizExemplo[0][4] Cinco

5 0 5 matrizExemplo[0][5] Seis

6 0 6 matrizExemplo[0][6] Sete

7 1 0 matrizExemplo[1][0] Oito

8 1 1 matrizExemplo[1][1] Nove

9 1 2 matrizExemplo[1][2] Dez

10 1 3 matrizExemplo[1][3] Onze

... ... ... ... ...

Há, ainda, o conceito de matrizes multidimensionais, em que, em uma


posição de uma matriz, pode haver outra matriz, como é possível observar na
Figura 5. Na posição 0 da matriz, tem-se um elemento do tipo string e outro
do tipo lista, com outros dois elementos dentro.
Estruturas de dados homogêneas do tipo matriz em Python 7

Figura 5. Exemplo de matriz multidimensional.

Para acessar o elemento b1, é preciso acessar a posição [0] [0] [1] [0] da
matriz, como exemplificado no código da Figura 6.

Figura 6. Código em Python da matriz multidimensional da Figura 5.

2 Usabilidade de matrizes
Ao construir sistemas, é normal trabalhar com uma grande quantidade de
dados. Quando se deseja armazenar diversos dados do mesmo tipo, em vez
de criar uma variável para cada dado, costuma-se utilizar matrizes, pois isso
8 Estruturas de dados homogêneas do tipo matriz em Python

diminui o custo de acesso a esses dados. Quando se utiliza várias variáveis


para armazenar o mesmo tipo de dados, sabe-se que para acessá-las, seja para
visualização, edição ou exclusão, o custo de acesso à memória será maior, uma
vez que, em disco, as variáveis não são salvas de forma sequencial.
Quando se utiliza estruturas como matrizes ou vetores para armazenar
dados do mesmo tipo, ao declarar essa estrutura no código, o computador
recebe a ordem de reservar uma quantidade de memória, com a finalidade de
armazenar os elementos de forma sequencial. Por exemplo, imagine um sistema
de monitoramento de saúde em que há o monitoramento constante (30 em 30
minutos) da temperatura do paciente, buscando traçar algum comportamento
sobre essa característica física. Em vez de criar uma variável para cada tempe-
ratura, como temp1, temp2, temp3, e assim por diante, ou ainda, criar um
objeto do mesmo paciente para armazenar cada temperatura (em códigos que
utilizam o paradigma orientado a objetos), pode-se criar apenas uma matriz
unidimensional (vetor), na qual serão armazenadas todas as temperaturas
(do tipo de dados inteiro ou ponto flutuante) daquele paciente. Dessa forma,
serão consumidos menos recursos físicos, como memória, e o custo de acesso
e operação sobre esses dados futuramente será bem menor.
Outro exemplo é salvar as adjacências de ruas ligadas umas às outras para
traçar rotas. Como exemplo, observe um trecho do bairro Paraíso, em São
Paulo – SP, exposto na Figura 7.

Figura 7. Trecho do bairro Paraíso, em São Paulo – SP.


Fonte: Google Maps (2005, documento on-line).
Estruturas de dados homogêneas do tipo matriz em Python 9

Para armazenar as adjacências marcadas com os números, pode-se utilizar


matrizes de adjacência. O Quadro 3, a seguir, apresenta a matriz de adjacência das
relações das ruas enumeradas do bairro Paraíso, em São Paulo, exposta na Figura 7.

Quadro 3. Matriz de adjacência das ruas representadas na Figura 7

1 2 3 4 5 6

1 0 1 0 0 1 0

2 1 0 1 1 0 0

3 0 1 0 0 1 1

4 0 1 0 0 1 1

5 1 0 1 1 0 0

6 0 0 1 1 0 0

As linhas e colunas que possuem o valor 1 indicam que há ligação entre as


ruas, como, por exemplo, na coluna 1 e linha 2, que indicam que há ligação
direta entre as ruas Mario Amaral e Sampaio Viana. Já as linhas e colunas
que possuem o valor 0 não se conectam diretamente. Dessa forma, no código,
para traçar uma rota ou buscar por ruas que se conectam, deve-se buscar pelas
linhas e colunas que possuem o valor 1.

As matrizes de adjacências representam uma forma de se representar um grafo, ou seja, objetos


relacionados entre si. Para saber mais sobre a matriz de adjacência, acesse o link a seguir.

https://qrgo.page.link/WtbCx
10 Estruturas de dados homogêneas do tipo matriz em Python

O Quadro 4, a seguir, apresenta a lista de notas de 5 alunos.

Quadro 4. Notas de 5 alunos

Biologia História Matemática Português Inglês Artes

Paulo 6,0 7,5 8,0 7,5 3,0 4,0

Maria 8,5 6,0 5,0 5,5 6,0 7,0

João 9,0 4,0 6,0 8,0 8,0 8,5

Gabriela 5,5 6,0 6,0 6,5 6,5 7,0

José 6,0 6,5 5,5 5,0 7,0 7,0

Tratar as colunas (disciplinas) e as linhas (nomes dos alunos) como nú-


meros (1, 2, 3 ...) torna mais fácil traçar o perfil estatístico desse grupo de
alunos, como, por exemplo, média de notas por disciplinas, média de notas
por alunos, entre outros.

3 Exemplos de matrizes em Python


Como visto, a estrutura de dados matriz é uma estrutura com tipo de dados
homogêneos, ou seja, em sua maioria, possuem dados do mesmo tipo. No
entanto, na linguagem Python, esse conceito pode não ser verdade, uma
vez que essa linguagem possui tipagem de dados forte e dinâmica, ou seja,
em alguns casos, se você tentar somar um dado inteiro com uma string,
o interpretador não fará a conversão de forma automática, causando uma
exceção de tipo (tipagem forte). Portanto, a tipagem dinâmica permite que o
desenvolvedor atribua valores diferentes a uma variável, independentemente
do tipo. A Figura 8, a seguir, apresenta um exemplo de matriz unidimensional
em Python e Java.
Estruturas de dados homogêneas do tipo matriz em Python 11

Figura 8. Matriz unidimensional (vetor) em Python e Java.

No código 1, tem-se o exemplo de um vetor em Java, em que todos os elementos


do vetor possuem o tipo inteiro (integer), de modo que, ao executar esse código,
ele imprimirá na tela cada elemento. No código 2, declarou-se que o vetorJava
será do tipo inteiro, porém foram inseridos elementos do tipo inteiro, float e string.
Ao executar esse código, ele apresentará um erro de tipo, indicando que não se
pode inserir elementos float e string em uma estrutura do tipo inteiro.
Em Python, um vetor pode receber elementos de qualquer tipo ao mesmo
tempo sem que ocorram erros durante a execução do código. Isso é comprovado
pelo código na linha 5 type( ), que mostra o tipo de cada elemento. Ao
desenvolver sistemas, é importante possuir o conhecimento desses conceitos.
A Figura 9, a seguir, apresenta um exemplo de código para a criação e a
população de dados em uma matriz utilizando a linguagem Python.

Figura 9. Exemplo de criação e população de matriz em Python.


12 Estruturas de dados homogêneas do tipo matriz em Python

Nesse código, foram utilizados três métodos: criaMatriz, popula-


Matriz e mostraMatriz. Para popular uma matriz, é necessário que
ela exista. Desse modo, é preciso chamar o método para criar a matriz, ou
simplesmente declará-la vazia: declaracaoMatriz = [ [ ] , [ ]
, [ ] ]. Inicialmente, o código executará as linhas 18 e 19, e será pedido
ao usuário para inserir a quantidade de linhas e colunas da matriz que será
criada. Após isso, o método criaMatriz será executado, o qual utilizará
como parâmetro a quantidade de linhas e colunas inseridas pelo usuário para
criar a matriz desejada e preenchê-la com o valor ‘0’. Esse método retornará a
matriz criada, que será armazenada na variável matriz (linha 20).
Em seguida, será executado o método populaMatriz, que utilizará
como parâmetro a matriz criada no método anterior e a quantidade de linhas
e colunas já inseridas pelo usuário. Há dois laços de repetição for para poder
percorrer a quantidade de linhas e colunas desejadas, e, de acordo com a ite-
ração dos laços, será requisitado ao usuário que digite o valor que deseja que
seja inserido em determinada linha × coluna, como apresentado na Figura 10.

Figura 10. Execução do código da Figura 9.

Após o usuário inserir todas os valores, o método mostraMatriz será


executado, apresentando na tela a matriz criada pelo usuário.
Estruturas de dados homogêneas do tipo matriz em Python 13

DEITEL, P.; DEITEL, H. Java: how to program. 8th ed. Upper Saddle River: Pearson Pren-
tice Hall, 2010.
GOOGLE Maps. Mountain View: Google, 2005. Disponível em: https://www.google.
com.br/maps. Acesso em: 4 fev. 2020.
MANZANO, J. A. N. G. Algoritmos: lógica para desenvolvimento de programação de
computadores. 24. ed. São Paulo: Érica, 2010.
TENENBAUM, A. M.; LANGSAM, Y.; AUGENSTEIN, M. J. Estruturas de dados usando C. São
Paulo: Makron Books, 1995.

Os links para sites da Web fornecidos neste capítulo foram todos testados, e seu fun-
cionamento foi comprovado no momento da publicação do material. No entanto, a
rede é extremamente dinâmica; suas páginas estão constantemente mudando de
local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade
sobre qualidade, precisão ou integralidade das informações referidas em tais links.

Você também pode gostar