0% acharam este documento útil (0 voto)
7 visualizações24 páginas

Unidade 2 - Array & Matrix 2025

O documento aborda o conceito de arrays e matrizes em programação, explicando sua definição, declaração, representação na memória e tipos. Destaca a importância dos arrays para armazenar coleções de dados de forma eficiente, além de discutir suas vantagens e desvantagens. O texto também menciona como acessar e manipular elementos dentro de um array, enfatizando a necessidade de cuidado ao trabalhar com índices.

Enviado por

lukzeravalorant
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
7 visualizações24 páginas

Unidade 2 - Array & Matrix 2025

O documento aborda o conceito de arrays e matrizes em programação, explicando sua definição, declaração, representação na memória e tipos. Destaca a importância dos arrays para armazenar coleções de dados de forma eficiente, além de discutir suas vantagens e desvantagens. O texto também menciona como acessar e manipular elementos dentro de um array, enfatizando a necessidade de cuidado ao trabalhar com índices.

Enviado por

lukzeravalorant
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 24

UniAcademia Estruturas de Dados

Professor Luiz Thadeu Grizendi

_________
Capítulo

___________
2 Array & Matrix
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Array
O 𝑎𝑟𝑟𝑎𝑦 ou 𝑣𝑒𝑡𝑜𝑟 é uma coleção de itens do mesmo tipo de variável armazenados de forma
contígua na memória e, cuja ordem de inserção e remoção, não é definida previamente. O
tipo do item pode ser, por exemplo : um número do tipo 𝑖𝑛𝑡, um número do tipo 𝑓𝑙𝑜𝑎𝑡 , um
número do tipo do tipo 𝑑𝑜𝑢𝑏𝑙𝑒 ou um 𝑐ℎ𝑎𝑟. É uma das estruturas de dados mais populares
e simples usadas em programação.
Como exemplos podem-se destacar: o 𝑎𝑟𝑟𝑎𝑦 com os números inteiros pares, o
𝑎𝑟𝑟𝑎𝑦 com as letras do alfabeto e, o 𝑎𝑟𝑟𝑎𝑦 com os salários de funcionários de uma empresa.
Para conhecer mais, visite:
• https://docs.python.org/pt-br/3/library/array.html
• https://www.geeksforgeeks.org/introduction-to-arrays-data-structure-and-algorithm-
tutorials/

Declaração de um array
O Python implementou a classe 𝑎𝑟𝑟𝑎𝑦 com todo o formalismo que a classe necessita. O link
para ter acesso à documentação dessa classe é

sintaxe: <variável> = array(‘<tipo>’, <valores>)

Exemplos de criação de vetores

A tabela 2.1 ilustra todos os tipos de código utilizado na classe 𝑎𝑟𝑟𝑎𝑦.

Tabela 2.1 – Representação dos tipos permitidos


UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Terminologias básicas
• Índice de array: em um 𝑎𝑟𝑟𝑎𝑦, os elementos são identificados por seus índices. O
índice da matriz começa em 0.
• Elemento do array: Elementos são itens armazenados em um 𝑎𝑟𝑟𝑎𝑦 e podem ser
acessados por seu índice.
• Comprimento do array: O comprimento de um 𝑎𝑟𝑟𝑎𝑦 é determinado pelo número
de elementos que ele pode conter.

Representação na memória
Quando criamos um novo 𝑎𝑟𝑟𝑎𝑦, o Python reserva espaço na memória (e inicializa os
valores) para este vetor. Este processo é chamado de alocação de memória. Na realidade,
quando se cria uma variável do tipo vetor, esta variável irá guardar um endereço de memória,
variável de referência do vetor, e neste endereço serão armazenados os seus elementos.

Na estrutura de dados 𝑎𝑟𝑟𝑎𝑦 o princípio básico de organização de seus elementos


é alocação feita por contiguidade física, ou seja, tipicamente todos os elementos de um
𝑎𝑟𝑟𝑎𝑦 são armazenados em células adjacentes na memória. Mas o Python implementa a
estrutura de dados 𝑎𝑟𝑟𝑎𝑦 com uma alocação mista de seus elementos, estática e dinâmica.

Considere o 𝑎𝑟𝑟𝑎𝑦 de inteiros data com a seguinte inicialização.

A figura 2.1 ilustra a representação em memória do 𝑎𝑟𝑟𝑎𝑦 data. Vamos assumir que
todo o conjunto de os bytes sejam endereçáveis. O campo integer utiliza 4 bytes(32bits).
Considere que o primeiro inteiro esteja armazenado no endereço 100.

Figura 2.1 – Visão esquemática da alocação de um vetor de inteiros na memória.

Se desejarmos obter o elemento data[3] tomamos o endereço do início do


vetor, no caso exemplificado na figura 2.1 como100, e adicionamos a quantidade
de bytes calculado da seguinte forma:

Index * size
Considerando que cada elemento tenha tamanho(𝑙𝑒𝑛) de 4 bytes (tipo inteiro) para
acharmos o elemento data[3] fazemos:

Data[3] 100 + 3 * 4 = 112


UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Observe que o endereço 112, corresponde logicamente ao 4º elemento do vetor,


logo para acessarmos o primeiro elemento devemos passar o endereço 0

data[0] 100 + 0 * 4 = 100

Por isso o vetor com n elementos é endereçável de 0 até n-1.

A representação lógica em memória pode ser exemplificada na figura 2.2.

Figura 2.2 – Visão lógica da representação em memória de um vetor de caracteres.

A representação física em memória de um de um vetor de caracteres fisicamente na


memória pode ser exemplificada na figura 2.3.

Figura 2.3 – Visão esquemática da representação em memória de um vetor de caracteres fisicamente


na memória.

Onde X é o endereço de memória da variável alpha.

A posição inicial do vetor é sempre a posição 0. Quando, por exemplo, estivermos


manipulando um determinado elemento do vetor, como por exemplo 𝑎𝑟𝑟𝑎𝑦 [3], estamos
fazendo referência ao valor do elemento da célula de posição 3, 4ª célula.

Vantagens da alocação estática de memória

▪ O acesso a um determinado elemento do 𝑎𝑟𝑟𝑎𝑦 é rápido

Desvantagens da alocação estática de memória

▪ A inserção e remoção de um determinado elemento acarreta ter que


deslocarmos vários elementos do vetor.
▪ Necessitamos de um bloco da memória largo para colocarmos todo o 𝑎𝑟𝑟𝑎𝑦
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Por que precisamos de um array?


Suponha que haja uma turma de cinco alunos e se tivermos que manter registros de suas
notas no exame, podemos fazer isso declarando cinco variáveis individuais e mantendo o
controle dos registros, mas e se o número de alunos se tornar muito grande, seria difícil
manipular e manter os dados.

O que isso significa é que podemos usar variáveis normais (v1, v2, v3, ..) quando
temos um pequeno número de objetos. Mas se quisermos armazenar um grande número de
instâncias, torna-se difícil gerenciá-las com variáveis normais.

Disponível em https://www.geeksforgeeks.org/introduction-to-arrays-data-structure-and-algorithm-tutorials/ acessado


em 20 de dezembro de 2024.

A ideia de um array é representar muitas instâncias em uma variável.

Tipos de arrays
Os 𝑎𝑟𝑟𝑎𝑦𝑠 podem ser classificados de duas formas:

▪ Com base no tamanho


▪ Com base nas dimensões

Disponível em https://www.geeksforgeeks.org/introduction-to-arrays-data-structure-and-algorithm-tutorials/ acessado


em 20 de dezembro de 2024.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Tipos de array com base no tamanho


Array com tamanho fixo
A declaração de um 𝑎𝑟𝑟𝑎𝑦 com tamanho fixo pode ser feita da seguinte forma:

Nesse caso, a variável arr conterá 30 posições de memória inicializadas com o


valor 0, da seguinte forma

O Python aceita o aumento de tamanho, mesmo que inicialmente pré-definimos esse


tamanho. Na realidade ele trata o tamanho do 𝑎𝑟𝑟𝑎𝑦 sempre de forma dinâmica.

Array com tamanho dinâmico


A declaração de um 𝑎𝑟𝑟𝑎𝑦 com tamanho dinâmico pode ser feita da seguinte forma:

O tamanho do array muda de acordo com os requisitos do usuário durante a execução


do código, para que os codificadores não precisem se preocupar com tamanhos. Podemos
adicionar e remover os elementos conforme a necessidade. A memória é principalmente
alocada e desalocada dinamicamente.

Tipos de array com base na dimensão


Podemos imaginara dimensão de um 𝑎𝑟𝑟𝑎𝑦 como uma matriz de várias dimensões como
por exemplo: 1D-array, 2D- array, 3D-array, ...

Array unidimensional (1-D Array):

Podemos imaginar um array 1-D como uma linha, onde os elementos são armazenados um
após o outro, de forma contígua.

Disponível em https://www.geeksforgeeks.org/introduction-to-arrays-data-structure-and-algorithm-tutorials/ acessado


em 20 de dezembro de 2024.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Array multidimensional (2-D Array):


Podemos imaginar um 𝑎𝑟𝑟𝑎𝑦 2D como uma matriz de duas dimensões, os elementos estão
dispostos em linhas e colunas, como por exemplo:

Disponível em https://www.geeksforgeeks.org/introduction-to-arrays-data-structure-and-algorithm-tutorials/ acessado em 20 de


dezembro de 2024.

Array multidimensional (3-D Array):


O 𝑎𝑟𝑟𝑎𝑦 3-D Multidimensional pode ser considerado um 𝑎𝑟𝑟𝑎𝑦 de 𝑎𝑟𝑟𝑎𝑦 (matrizes) do tipo
2-D 𝑎𝑟𝑟𝑎𝑦 ou, um 𝑎𝑟𝑟𝑎𝑦 de matrizes com linhas e colunas.

Disponível em https://www.geeksforgeeks.org/introduction-to-arrays-data-structure-and-algorithm-tutorials/ acessado em 20 de


dezembro de 2024.

O Python NÂO aceita a definição de 𝑎𝑟𝑟𝑎𝑦𝑠 multidimensionais usando a classe nativa


𝑎𝑟𝑟𝑎𝑦. Ele disponibiliza a classe 𝑙𝑖𝑠𝑡, ou as bibliotecas adicionadas, com por exemplo a
biblioteca 𝑛𝑢𝑚𝑝𝑦, para esse tratamento.

Uma forma simples seria criarmos uma lista de 𝑎𝑟𝑟𝑎𝑦𝑠 da seguinte forma:

Ou, de maneira mais simples, criamos uma lista de listas da seguinte forma:

No final do Capítulo estudaremos a ideia de 𝑎𝑟𝑟𝑎𝑦𝑠 multidimensionais (matrizes)


implementadas por listas multidimensionais.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Acessando e atribuindo valores aos elementos de um array


O acesso aos elementos do 𝑎𝑟𝑟𝑎𝑦 é feito colocando o índice da célula entre colchetes, da
seguinte forma:

A atribuição é feita da seguinte forma:

Obtendo o índice de um determinado elemento em um 𝑎𝑟𝑟𝑎𝑦

Cuidado, se o elemento não existir a rotina é terminada com erro, da seguinte forma

Por isso, antes de cada execução da verificação do índice de um determinado


elemento no 𝑎𝑟𝑟𝑎𝑦 , deve-se verificar se está no 𝑎𝑟𝑟𝑎𝑦 , da seguinte forma

Observa-se que usando essa sintaxe é retornado um valor lógico no caso True

Outro modo pode ser feito o tratamento do erro da seguinte forma

Observações

▪ É importante frisar que o vetor declarado com N posições é endereçado de 0 até N-


1, isto é, o vetor números[10] pode ser acessado pelos endereços 0, 1, 2, ..., 9.

▪ O tamanho do vetor é determinado pelo método 𝑙𝑒𝑛 da classe 𝑎𝑟𝑟𝑎𝑦. A seguir pode-
se destacar alguns exemplos de utilização do método 𝑙𝑒𝑛 aplicado à alguns vetores.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Verificação de limites. Ao programar com 𝑎𝑟𝑟𝑎𝑦 , deve-se ser sempre cuidadoso. É


de responsabilidade do programador usar índices permitidos ao acessar um determinado
elemento do 𝑎𝑟𝑟𝑎𝑦 .

Exemplo: Considere o 𝑎𝑟𝑟𝑎𝑦 com as letras do alfabeto.

Vamos obter o tamanho do 𝑎𝑟𝑟𝑎𝑦:

Observe que o tamanho do 𝑎𝑟𝑟𝑎𝑦 é 26, logo, os endereços visitáveis são 0,1,2, ....,25.
Se tentarmos qualquer índice diferente,isto é, fora do limite, será exibida uma mensagem de
erro como ilustrado a seguir:

O Python enxerga os índices também na forma inversa dos seus elementos. A


figura ilustra o 𝑎𝑟𝑟𝑎𝑦 de números inteiros com essa característica.

O índice -1, corresponde ao primeiro elemento na ordem inversa, índice -2,


corresponde ao primeiro segundo na ordem inversa e, assim sucessivamente.

OBS: Seja 𝑎𝑟𝑟 um 𝑎𝑟𝑟𝑎𝑦 , na sintaxe 𝑎𝑟𝑟[𝑖𝑛𝑑𝑒𝑥], temos:

• qualquer 0 ≤ 𝑖𝑛𝑑𝑒𝑥 < 𝑙𝑒𝑛(𝑎𝑟𝑟), será exibido o conteúdo da célula de índice


index,
• qualquer −𝑙𝑒𝑛(𝑎𝑟𝑟) ≤ 𝑖𝑛𝑑𝑒𝑥 ≤ −1, será exibido o conteúdo da célula de
índice index no sentido reverso,
• qualquer índice > 𝑙𝑒𝑛(𝑎𝑟𝑟) ou índice < - 𝑙𝑒𝑛(𝑎𝑟𝑟), será exibido uma
mensagem de erro.

Percorrendo um array
Existem casos em que se necessita percorrer todas as células ou grande partes das células
de um 𝑎𝑟𝑟𝑎𝑦, como por exemplo: imprimir todos os elementos, ou pesquisar se um
determinado elemento está ou não no 𝑎𝑟𝑟𝑎𝑦 .

A primeira forma de se percorrer o vetor é utilizar o processo de iteração da classe


𝑎𝑟𝑟𝑎𝑦. Este processo está descrito a seguir
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

A segunda forma de se percorrer o vetor é obter o valor de cada célula do 𝑎𝑟𝑟𝑎𝑦


de forma exaustiva da seguinte maneira

Inserindo em um array

Uso do método insert


A figura 2.4 ilustra a visão esquemática da inserção de um elemento numa posição “i”,
informada como parâmetro em um 𝑎𝑟𝑟𝑎𝑦. Inicialmente, pode-se observar que todos os
elementos que estão à direita da posição “i”, devem ser ajustados uma posição à esquerda,
a partir do último elemento, abrindo assim a “vaga” na posição solicitada para posterior
inserção.

A figura 2.4(a), ilustra o 𝑎𝑟𝑟𝑎𝑦 representado esquematicamente, a letra b, ilustra a


inserção do elemento 44 na posição de índice 1. Observa-se que logicamente os dados são
reorganizados dentro do vetor.

Figura 2.4 – Visão esquemática de inserção em um 𝑎𝑟𝑟𝑎𝑦 numa posição pré-determinada: (a) a
estrutura antes da remoção e (b) após a inserção.

O método básico do processo de inserção é o método 𝑖𝑛𝑠𝑒𝑟𝑡(𝑖, 𝑣) que insere o


elemento de valor v na posição de índice igual a i.

Vamos exemplificar a utilização desse método. Considere o 𝑎𝑟𝑟𝑎𝑦 de inteiros

Visão esquemática da estrutura interna:

Vamos inserir utilizando o método 𝑖𝑛𝑠𝑒𝑟𝑡 da seguinte forma:

Nesse exemplo a função vai inserir o elemento “15” na posição de índice igual a 1.
O 𝑎𝑟𝑟𝑎𝑦 ficará [ 10, 15, 20, 30].

Esquematicamente, podemos exemplificar da seguinte forma


UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

O Python enxerga os índices também na forma inversa dos seus elementos na


adição dos elementos em um 𝑎𝑟𝑟𝑎𝑦. Suponha agora o comando 𝑖𝑛𝑠𝑒𝑟𝑡(−1,25) ,o 𝑎𝑟𝑟𝑎𝑦
ficará:

Esquematicamente, podemos exemplificar da seguinte forma

O índice -1, corresponde ao primeiro elemento na ordem inversa, índice -2,


corresponde ao primeiro segundo na ordem inversa e, assim sucessivamente.
OBS: Considerando o 𝑎𝑟𝑟𝑎𝑦 𝑎𝑟𝑟, na sintaxe 𝑖𝑛𝑠𝑒𝑟𝑡(𝑖𝑛𝑑𝑒𝑥), temos:
• qualquer 0 ≤ 𝑖𝑛𝑑𝑒𝑥 < 𝑙𝑒𝑛(𝑎𝑟𝑟), será inserido uma nova célula na posição
𝑖𝑛𝑑𝑒𝑥 e, os dados à direita da posição 𝑖𝑛𝑑𝑒𝑥, serão ajustados à direita.
• qualquer −𝑙𝑒𝑛(𝑎𝑟𝑟) ≤ 𝑖𝑛𝑑𝑒𝑥 ≤ −1, será inserido uma nova célula na
posição 𝑖𝑛𝑑𝑒𝑥 no sentido reverso e, os dados à direita da posição
𝑖𝑛𝑑𝑒𝑥 serão ajustados à direita.
• qualquer í𝑛𝑑𝑒𝑥 > 𝑙𝑒𝑛(𝑎𝑟𝑟), será inserido no final do 𝑎𝑟𝑟𝑎𝑦,
• qualquer í𝑛𝑑𝑒𝑥 < − 𝑙𝑒𝑛(𝑎𝑟𝑟), será inserido na posição 0.

Uso do método append


O método 𝑎𝑝𝑝𝑒𝑛𝑑 insere um valor na posição final do 𝑎𝑟𝑟𝑎𝑦 .

Considere o 𝑎𝑟𝑟𝑎𝑦 L a seguir

Inserindo usando o método 𝑎𝑝𝑝𝑒𝑛𝑑 da seguinte forma:

Nesse exemplo a função vai inserir o elemento “40” no final do vetor. O 𝑎𝑟𝑟𝑎𝑦 ficará
[10, 15, 20, 25, 30, 40]. Esquematicamente, podemos exemplificar da seguinte forma
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Removendo um elemento em uma determinada posição

Uso do método pop


A figura 2.5 ilustra a visão esquemática da operação de remoção do elemento da posição
“𝑖𝑛𝑑𝑒𝑥”, informada como parâmetro (pop(index)). A letra (a) representa um 𝑎𝑟𝑟𝑎𝑦 com n
elementos. Na letra (b), é feito a remoção do elemento da posição igual a “𝑖𝑛𝑑𝑒𝑥”. Neste
caso as células à direita da posição “1”, correspondente, ao valor do 𝑖𝑛𝑑𝑒𝑥, são ajustadas
uma casa à esquerda.

Figura 2.5 – Visão esquemática de remoção do elemento da posição index do 𝑎𝑟𝑟𝑎𝑦. (a) estrutura
antes da remoção e (b) após a remoção.

O método básico do processo de exclusão é o método 𝑝𝑜𝑝(𝑖𝑛𝑑𝑒𝑥) que exclui o


elemento da posição de índice ‘𝑖𝑛𝑑𝑒𝑥’.

Vamos exemplificar a utilização desse método. Considere o 𝑎𝑟𝑟𝑎𝑦 de inteiros

Estruturação lógica:

Podemos também remover um elemento de uma determinada posição específica do


vetor, utilizando a função 𝑝𝑜𝑝(𝑖𝑛𝑑𝑒𝑥 = −1). A sequência de comandos ilustra a utilização do
método 𝑝𝑜𝑝(𝑖𝑛𝑑𝑒𝑥 = −1).

Comando

Estruturação lógica após a remoção:

Repare que no caso anterior, foi omitido o index, logo ele aciona o valor 𝒅𝒆𝒇𝒂𝒖𝒕, no
caso index=-1

Comando

Estruturação lógica após a remoção:


UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Comando

Estruturação lógica após a remoção:

CUIDADO!!!: Se digitarmos um valor do index que não existe o comando pop(index) retorna uma
mensagem de erro.
Por exemplo

O primeiro caso, o método 𝑝𝑜𝑝(), sem parâmetros, elimina o último elemento. O


método 𝑝𝑜𝑝(−1), elimina o primeiro elemento considerando o vetor na ordem inversa, isto
é, elimina-se o último elemento. O método 𝑝𝑜𝑝(0), elimina o primeiro elemento do 𝑎𝑟𝑟𝑎𝑦,
isto é, de endereço 0. Finalmente, o método 𝑝𝑜𝑝(20), elimina o elemento da posição 20,
nesse caso, retorna erro pois não existe essa posição no 𝑎𝑟𝑟𝑎𝑦.

OBS: na sintaxe pop(index), temos:

• qualquer 0 ≤ 𝑖𝑛𝑑𝑒𝑥 < 𝑙𝑒𝑛( 𝑎𝑟𝑟), será removido a célula de índice index, os
dados são ajustados à direita para posição index
• qualquer −𝑙𝑒𝑛(𝑎𝑟𝑟) ≤ 𝑖𝑛𝑑𝑒𝑥 ≤ −1, será removido a célula de índice
𝑖𝑛𝑑𝑒𝑥 no sentido reverso, os dados são ajustados à direita para posição
𝑖𝑛𝑑𝑒𝑥
• qualquer índice 𝑖𝑛𝑑𝑒𝑥 > 𝑙𝑒𝑛(𝑎𝑟𝑟) ou 𝑖𝑛𝑑𝑒𝑥 < −𝑙𝑒𝑛(𝑎𝑟𝑟), será exibido uma
mensagem de erro.

Removendo um elemento específico


Uso do método remove
Podemos remover um determinado elemento do 𝑎𝑟𝑟𝑎𝑦, utilizando a função 𝒓𝒆𝒎𝒐𝒗𝒆(𝒗𝒂𝒍𝒖𝒆).
O elemento deverá estar no 𝑎𝑟𝑟𝑎𝑦.

Por exemplo, considere o 𝑎𝑟𝑟𝑎𝑦

Se digitarmos

Nesse exemplo a função vai excluir o elemento de valor 15 do vetor. O 𝑎𝑟𝑟𝑎𝑦 ficará

CUIDADO!!!: Se digitarmos um valor v que não existe no 𝑎𝑟𝑟𝑎𝑦, o comando


remove(v) retorna uma mensagem de erro.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Por exemplo

Reverso de um vetor
Supondo que o 𝑎𝑟𝑟𝑎𝑦 de inteiros

Estruturação lógica:

É possível inverter a ordem dos elementos de um 𝑎𝑟𝑟𝑎𝑦 de algumas formas diferentes.


O comando L[::-1] retorna um vetor na forma reversa, isto é, as posições vão estar em ordem
reversa.

Uma outra forma está em aplicar o método reverse() ao vetor que se queira obter o
reverso, por exemplo

CUIDADO, nessa sintaxe o 𝑎𝑟𝑟𝑎𝑦 L, original é alterado para a ordem INVERSA dos
elementos
Observe que o vetor L foi modificado.

É importante frisar que L.reverse() transforma o vetor original em um 𝑎𝑟𝑟𝑎𝑦 em


reverso, mas não deve ser usada na forma de atribuição, pois esse método não tem
parâmetro de retorno.

Observação Importante
Como o 𝑎𝑟𝑟𝑎𝑦 em Python os itens devem ser do mesmo tipo. Não conseguimos em um
𝑎𝑟𝑟𝑎𝑦 armazenar objetos e, nem itens de diferentes tipos. Uma maneira de simularmos o
𝑎𝑟𝑟𝑎𝑦 seria a utilização da estrutura 𝑙𝑖𝑠𝑡 que será detalhada mais tarde, e implementa todos
os principais métodos apresentados na classe 𝑎𝑟𝑟𝑎𝑦.

É importante frisarmos que a classe 𝑙𝑖𝑠𝑡 os elementos são estruturados de forma


dinâmica, isto é, não contíguos na memória. Mais tarde estudaremos a estrutura lista com
alocação dinâmica.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Exercícios
1. Reverso de um vetor. Escreva uma função que retorna o 𝑎𝑟𝑟𝑎𝑦 informado como parâmetro
(𝑎𝑟𝑟) em ordem inversa. OBS: O Python já possui implementado o método reverse().

2. Maior elemento do vetor. Dados um vetor de inteiros, fazer uma rotina para retornar o maior
elemento deste 𝑎𝑟𝑟𝑎𝑦. OBS: O Python já possui implementado o método 𝑚𝑎𝑥

3. Menor elemento do vetor. Dados um 𝑎𝑟𝑟𝑎𝑦 de inteiros, fazer uma rotina para retornar o
menor elemento desse 𝑎𝑟𝑟𝑎𝑦. OBS:O Python já possui implementado o método 𝑚𝑖𝑛.

4. Soma dos elementos do vetor. Dados um 𝑎𝑟𝑟𝑎𝑦 de inteiros, fazer uma rotina para retornar
a soma de todos os elementos desse 𝑎𝑟𝑟𝑎𝑦. OBS:O Python já possui implementado o
método 𝑠𝑢𝑚.

5. Verificação de palíndromo. Verificar se uma palavra informada como parâmetro é


palíndromo. Uma palavra é considerada palíndromo, quando escrita de forma reversa é igual
à palavra original. Por exemplo: ROMA e AMOR são palíndromos. Fazer uma função que
retorna se duas palavras informadas como parâmetros são ou não palíndromos.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Exercícios Criativos

1. Validação de DNA. O DNA é uma molécula que transmite informações genéticas


codificadas de uma espécie para os seus sucessores. Ele determina todas as
características de um indivíduo e sua composição não muda de uma região do corpo
para outra, nem com a idade ou ambiente. Ele contém as bases adenina (A), guanina
(G), citosina (C) e timina(T) .

Escreva uma função que toma como entrada uma string e retorna true se o string
consiste inteiramente de A, C, G e T, e false caso contrário

def DNAtest (string):

2. DNA para RNA. Os nucleotídeos de RNA (chamados ribonucleotídeos) é um polímero


cujos elementos da fita de ribonucleotídeos estão ligados covalentemente. Trata-se do
elemento que está entre o DNA e a produção de proteínas, ou seja, o DNA se reestrutura
para formar o RNA, que por sua vez codifica a produção de proteínas. O RNA contêm as
bases adenina (A), guanina (G), citosina (C) e uracila (U), mas esta última uracila, está
presente em lugar de timina (T) que está no DNA.

Escreva uma função que recebe uma string de DNA (A, C, G, T) e retorna a
seqüência de RNA (A, C, G, U).

def DNAtoRNA (string):

3. Max Area. Considere um array de entrada (height) com as alturas de comprimento 𝑛.


Existem 𝑛 linhas verticais desenhadas de modo que os dois pontos finais da i-ésima
linha sejam (i, 0) e (i, altura[i]).

Encontre duas linhas que, juntamente com o eixo 𝑥, formam um recipiente, de modo
que o recipiente contenha mais água. Devolva a quantidade máxima de água que o
recipiente pode armazenar. OBS: Não pode inclinar o contêiner.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Exemplo 1:

Input: height = [1,8,6,2,5,4,8,3,7]


Output: 49
Explicação: As linhas verticais acima são representadas pelo array
[1,8,6,2,5,4,8,3,7]. Nesse caso, a área máxima de água (seção azul) que o
recipiente pode conter é 49 ( 7 x 7).

Exemplo 2:

Input: height = [1,5,6,2,5,4,8,3]


Output: 25
Explicação: As linhas verticais acima são representadas pelo array
[1,5,6,2,5,4,8,3]. Nesse caso, a área máxima de água (seção azul) que o
recipiente pode conter é 25 ( 5 x 5).

4. Matriz de Hadamard. A matriz 𝐻(𝑛) de 𝐻𝑎𝑑𝑎𝑚𝑎𝑟𝑑 n-por-n é uma matriz booleana com
a notável propriedade de que quaisquer duas linhas diferem em exatamente 𝑛/2 bits.
(Essa propriedade a torna útil para criar códigos de correção de erros.) 𝐻(1) é uma
matriz 1 por 1 com a entrada única verdadeira, e para 𝑛 > 1, 𝐻(2𝑛) é obtido alinhando
quatro cópias de 𝐻(𝑛) em um quadrado grande e, em seguida, invertendo todas as
entradas na cópia inferior direita 𝑛 por 𝑛, conforme mostrado nos exemplos a seguir
(com 𝑇 representando verdadeiro e 𝐹 representando falso, como de costume).

H(1) H(2) H(4)


---------------------------------
T TT TTTT
TF TFTF
TTFF
TFFT

Escreva um programa denominado 𝐻𝑎𝑑𝑎𝑚𝑎𝑟𝑑 que pegue um argumento o número


de linhas n e imprima 𝐻𝑎𝑑𝑎𝑚𝑎𝑟𝑑(𝑛). Suponha que 𝑛 seja uma potência de 2 (1 = 20 , 2 =
21 , 4 = 22 , … )
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Matriz (Matrix)
O conceito inicial de matriz remete-se à matemática onde pode-se definir uma matriz como
sendo uma coleção de objetos dispostos em linhas e colunas. Por exemplo a matriz A de
ordem m x n ( m linhas e n colunas) pode ser representada da seguinte forma.

 a11 a12 a13 ... a1n 


a a 22 a 23 ... a 2 n 
 21
A =  a31 a32 a33 ... a3n 
 
    ...  
a m1 am2 a m3 ... a mn 

Como em Python não se tem uma representação nativa do tipo matriz, uma
alternativa que se faz é criar uma coleção de estruturas do tipo list.

A biblioteca 𝑛𝑢𝑚𝑝𝑦 implementa a ideia de vetor e matriz onde os principais métodos


são similares às classe list e array nativas do Python.

Para saber mais e utilização do array e matrix em Python usando a biblioteca numpy
visite o sítio https://numpy.org/doc/stable/reference/generated/numpy.matrix.html.

No texto desse capítulo vamos implementar a ideia de matriz uma como uma coleção
de estruturas do tipo list.

A matriz os elementos estão dispostos logicamente em linhas e colunas. A figura 2.6


ilustra logicamente a estrutura dos elementos de uma matriz denominada B, e destacando-
se o elemento B[2][3].

Figura 2.6 – Visão lógica esquemática dos elementos de uma matriz.

Considere que os elementos de uma matriz A, sejam do tipo None, e 𝑚 𝑒 𝑛, variáveis


do tipo inteiro, inicializadas previamente, pode-se representar a matriz A, da seguinte forma:
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Uma outra forma de inicialização da matriz, está em se enumerar os elementos desta


matriz, como por exemplo:

Uma vez que uma lista (list) é alocada de forma dinâmica e, um array (vetor) é
armazenado de forma contígua na memória, então, podemos armazenar vários vetores,
consecutivamente para obter algo que represente de forma contígua (e seja tratado como)
matriz.

A figura 2.7 ilustra uma imagem onde alocamos nl vetores consecutivos na memória,
cada vetor com nc posições de memória, desde vet[0] até vet[nc-1].

Assim, podemos ver este agregado de dados como uma matriz mat[][], cuja primeira
linha é o primeiro vetor e assim por diante. Isso está ilustrado na imagem da figura 2.7.

Figura 2.7 – Visão esquemática de alocação em memória de uma matrix (considerando um conjunto
de vetores).

Novamente, é importante frisarmos que a classe list() os elementos são estruturados de


forma dinâmica.

Logo, a estruturação lógica de uma matriz corresponde à um conjunto de vetores. Se


desejarmos criar fisicamente uma estrutura contígua para uma matriz, devemos criar vários
vetores correspondendo as linhas.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Acessando e atribuindo valores aos elementos de uma matriz


Considere as matrizes a seguir:
a 
1 2 e 
   
A = 3 4 e B = i 
5 6  
  o 
u 

Em Python a criação destas matrizes pode ser da seguinte forma

O acesso aos elementos da matriz é feito da seguinte forma:

A figura 2.8 ilustra a definição da matriz data como uma lista de 2 dimensões
denominada de data, acessos à uma linha inteira data[0], um determinado elemento
data[1][2] (2ª linha e 3a coluna), um determinado elemento data[2][5] (3ª linha e 6ª coluna),
e a sua visão gráfica esquemática.

Figura 2.8 – Definição da matriz data como uma lista de 2 dimensões, alguns acessos aos seus
elementos e a sua visão gráfica esquemática.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

A atribuição é feita da seguinte forma:

Quando criamos uma matriz por exemplo (4x2) do tipo inteiro, podemos escrever
inicializados com zero

A alocação das células desta matriz pode ser entendida da seguinte forma

zeroes[0][0] zeroes[0][1] zeroes[0][2] zeroes[0][3]


zeroes[1][0] zeroes[1][1] zeroes[1][2] zeroes[1][3]

Obtendo a dimensão de uma matriz


O número de linhas e de colunas de uma matriz é determinado pelo método 𝑙𝑒𝑛 da classe
𝑙𝑖𝑠𝑡, utilizando-o da seguinte forma:

Percorrendo uma matriz


Existem casos em que se necessita percorrer todas as células de uma matriz, como por
exemplo: imprimir todos os seus elementos. O Fragmento de código 2.1 ilustra este
procedimento, considerando a matriz como sendo do tipo inteiro.

Fragmento de Código 2.1 – Percorrendo todos os elementos de uma matriz.

Como em Python, matrizes são na verdade lista de listas, podemos ter números
diferentes de colunas para cada linha.
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Exemplo:

A representação esquemática da criação da matriz mat em memória pode ser


ilustrada da seguinte forma.

O campo 𝑙𝑒𝑛 está disponível para descobrirmos o tamanho dos vetores quando
necessário. Para a matriz mat anterior, temos:

Imprimindo uma matriz


O Fragmento de código 2.2 ilustra o procedimento de imprimir uma matriz.

Fragmento de Código 2.2 – Imprimindo uma matriz.


UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Considerando a matriz como sendo do tipo inteiro, podemos criar um exemplo de


ativação da função show

Será impresso
UniAcademia Estruturas de Dados
Professor Luiz Thadeu Grizendi

Participe dos sítios leetcod e geeksforgeeks e tente resolver os problemas de array.

https://leetcode.com/problem-list/array/

https://www.geeksforgeeks.org/explore?page=1&category=Arrays&sortBy=submissions&ref=shm

Visite o sítio
https://introcs.cs.princeton.edu/python/14array/

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy