Compreender e manipular
estruturas de dados básicas:
vetores e matrizes
• Como já aprendemos, as variáveis são utilizadas
para armazenar dados na memória. A partir de
seus valores, o nosso código (programa) realiza
ações, toma decisões e emite resultados. Mas uma
variável pode armazenar apenas um único valor de
cada vez. Bem, pelo menos foi o que aprendemos
Estrutura até agora. Veja:
de Dados
Composta
Homogênea
É preciso relembrar que toda variável é um apelido (ou simples nome) que aponta
para um
endereço de memória onde o dado está armazenado. Ocorre que as linguagens de
programação implementam outras formas de armazenamento como os VETORES
e as MATRIZES que veremos a seguir. Para começar, vamos observar o conceito de
um vetor:
Observando a imagem anterior, podemos perceber que o VETOR é um conjunto de
variáveis que armazenam diversos valores. Cada valor armazenado possui uma
localização que será acessada por um índice. O vetor, assim como a variável, também
possui um apelido (ou simples nome) que aponta para um endereço de memória onde os
dados estão armazenados.
As estruturas de dados consistem em organizações lógicas sobre o armazenamento e
manipulação dos dados que serão necessários ao algoritmo e ao programa resultante de
tal representação (português estruturado ou fluxograma).
As principais estruturas a serem manipuladas nos algoritmos são classificadas em
homogêneas (de um mesmo tipo de dado) e heterogêneas (tipos de dados diferentes).
Por meio do uso mais correto dessas estruturas de dados, os algoritmos e programas se
tornam altamente eficientes sobre os recursos computacionais disponíveis.
A MATRIZ, assim como o VETOR e a VARIÁVEL, também possui um apelido (ou simples nome) que
aponta para um endereço de memória onde os dados estão armazenados. Seus dados estão
acessíveis por meio de dois índices (bidimensional - linhas e colunas) conforme demonstra a Figura
3.
Tanto o VETOR quanto a MATRIZ, particularmente em Português Estruturado (utilizando VISUALG),
possuem a característica de serem estruturas homogêneas, pois irão armazenar dados de um
mesmo tipo. Veja os exemplos desse aspecto nas Figuras 3 e 4.
Vamos pensar em como ler e armazenar 5 notas de uma aluno. Como ficaria esse
algoritmo?
Bem, a reflexão mais rápida é criar 5 variáveis e armazenar os valores das 5 notas.
Veja o código abaixo. Observe como os valores estão sendo lidos e armazenados
Desse exemplo, podemos tirar algumas reflexões:
Uma instrução de repetição não melhoraria muito esta lógica,
pois os cinco valores precisarão estar disponíveis independentes
dos outros valores informados em variáveis distintas. Imagine
então que as leituras de todas as notas dos alunos do seu curso
tivessem de ser lidas por seu algoritmo. Como você faria? E
como saber a quantidade de alunos do próximo semestre para
armazenar suas respectivas notas?
É em uma situação como essa que as estruturas de dados são
fundamentais para o eficiente processamento dos dados. Essas
estruturas fundamentais podem ser de dois tipos básicos:
• Homogênea (vetor ou matriz)
• Heterogênea (registro ou estrutura).
Estrutura de Dados Composta Homogênea Unidimensional (vetor)
consiste em uma única estrutura (variável ou constante) com
capacidade de armazenamento de mais de um valor (por isso
composta) com um mesmo tipo de dado (por isso homogênea).
Suas principais características são:
• contém vários valores, porém com quantidade definida;
• todos os valores são do mesmo tipo de dado (homogêneo);
• possui um único nome, ou seja, um único identificador para
vários valores a serem armazenados na memória; e
• cada um de seus valores é acessível independentemente, de
acordo com o seu índice ou posição da estrutura de dados.
Vejamos um exemplo:
Suponha a existência de uma estrutura que armazene a idade de
12 pessoas, sendo o identificador desta estrutura a expressão
idades. Observe a imagem do vetor “idade” com os dados na
Figura 5.
Os índices correspondem às posições de identificação dos valores armazenados
de forma independente, apesar de possuírem acesso por meio do mesmo
identificador. Por meio de seus valores inteiros é que se torna possível
manipular, especificamente, um ou mais valores armazenados nesta estrutura
de dados, conforme seja necessária a lógica operacional deste algoritmo.
Os valores correspondem aos conteúdos informados pelo usuário, ou seja, são
as idades solicitadas ao usuário que as informou por meio da instrução leia.
Esses valores são armazenados, independentemente, na estrutura de dados
indicada nesta instrução de entrada de dados.
Atenção!!!! A primeira posição de armazenamento tem seu índice igual a zero,
sendo seu sexto elemento de idade armazenado no índice ou posição 5 da
estrutura.
Logo, o VETOR é uma estrutura unidimensional e possibilita a criação
de variáveis compostas unidimensionais com tamanho definido na
declaração do vetor, possuindo as seguintes características:
● Composta: porque podem armazenar vários valores.
● Unidimensional: porque só possui variação em uma dimensão.
● Homogênea: porque armazena um único tipo de dado.
A sintaxe geral para criação de uma estrutura de dados composta
unidimensional, também chamada de vetor, em um algoritmo em
português estruturado, é apresentada na forma geral a seguir:
É possível perceber certa semelhança com a declaração de uma variável
convencional. Houve apenas uma mudança que é o acréscimo da indicação de
“vetor” (palavra reservada) com a definição do tamanho do vetor.
Vejamos, agora, como seria a declaração de um vetor chamado notas que pode
armazenar até 20 números reais independentes.
Exemplo:
notas : vetor [0 ..19 ] de real
Essa quantidade de valores (20) é a capacidade de armazenamento declarada
no bloco de declarações do algoritmo em português estruturado, pois de zero
a dezenove existem vinte posições, ou seja, a capacidade do vetor notas é de
20 valores reais. O primeiro guardado na posição zero, enquanto o último, na
posição dezenove.
O acesso independente a um elemento do vetor acontece por meio da
especificação de seu nome e de seu índice ou posição entre colchetes. No vetor
“idade”, da Figura 6, temos que o valor armazenado em idades[2] é 43. Já para
idades[8] o valor armazenado é 25 e assim por diante. Podemos acessar
diretamente cada valor da variável idade, do tipo vetor, apenas indicando o
índice da posição que armazena o valor que queremos acessar. Observe a Figura
6 que demonstra o acesso a outros valores do vetor “idade”.
Propriedades dos vetores:
● O tamanho deve ser ajustado na
definição do vetor.
● Todos os valores de um vetor pertencem
ao mesmo tipo.
notas: vetor[0..3] de inteiro
nome, telefone: vetor[0..3] de literal
●Toda atribuição ou acesso a dados do vetor deve utilizar um índice inteiro ou valor (veja
a Figura 7):
Valor: vetor[0..2] de real idx <- 0
Valor[1] <- 2.0 // (atribuição de valor para o vetor Valor na posição [1])
Valor[idx] <- 1.0 // (atribuição de valor para o vetor Valor na posição [idx])
A utilização de vetores permite criar uma área de memória indexada.
Podemos utilizar diversas variáveis para armazenar as notas de um aluno.
Veja o exemplo abaixo:
not1,not2,not3,not4 : inteiro
Com vetores, podemos utilizar apenas uma variável e acessar os diversos
valores por meio de um identificador (índice).
Veja o exemplo abaixo:
Notas: vetor[1..4] de inteiro
Vamos observar os dois exemplos seguintes, nas Figuras 8 e 9, sobre a
aplicação de vetores. Implemente e teste os dois exemplos no VISUALG.
Execute e entre com valores. Observe os resultados.
Figura 8 - Algoritmo do vetor de idades para implementação no VisualG
Figura 9 - Algoritmo de média aritmética com vetor para implementação no VisualG
Estrutura de Dados Composta Homogênea do Tipo Caracter (string)
Quando se declara uma variável do tipo caracter, para
armazenar um nome, por exemplo, está se criando na verdade
um vetor do tipo de dado caracter, afinal um nome consiste de
um conjunto de letras (ou símbolos alfabéticos) e não
simplesmente de um único caracter. Vejamos um exemplo da
declaração de um vetor de caracteres no VISUALg:
var
// vetor nome com capacidade de 10
caracteres nome : vetor [0 ..9 ] de caracter
Vamos observar os dois exemplos seguintes, nas Figuras 10 e 11, sobre a
aplicação de vetores com caracteres. Implemente e teste os dois
exemplos no VISUALG. Execute e entre com valores. Observe os
resultados .
Figura 10 - Algoritmo de manipulação de um nome com vetor de caracteres
Figura 11 - Algoritmo de manipulação senha com vetor de caracteres
Uma matriz de dados consiste em uma estrutura de dados
composta homogênea com variação em mais de uma
dimensão, ou seja, sua organização lógica não está definida
sobre uma única posição, mas sobre a quantidade de
Matriz dimensões definidas em sua declaração.
Observe o tabuleiro de xadrez descrito na Figura 12 logo
abaixo.
• É possível uma grande variação de dimensões na criação de um vetor. No entanto, essa
criação deve ser coerente com o problema computacional que estará envolvendo este
vetor. A limitação no número de dimensões de um vetor está apenas na quantidade de
memória disponível no computador utilizado. Contudo, a capacidade de representação e
entendimento de uma estrutura com muitas dimensões é limitada para o ser humano. O
mais comum é utilizarmos o vetor com até 3 dimensões, ou seja, um cubo.
A forma de declaração de uma matriz bidimensional em português estruturado é definida
abaixo:
Sintaxe Geral:
<identificador> : vetor [<inicial>..<final> , <inicial>..<final>] de <tipo de dado>
Onde:
•<tipo de dado> é o tipo de dado que será armazenado na estrutura;
•<identificador> é o nome atribuído à estrutura de dados (matriz);
•<inicial> e <final> corresponde
•m, respectivamente, aos valores numéricos inteiros de início e fim dos índices da
primeira dimensão da matriz, sendo seu intervalo a quantidade exata de elementos da
primeira dimensão da matriz;
•<inicial> e <final> correspondem aos valores numéricos inteiros respectivos ao início e
fim dos índices da segunda dimensão da matriz, sendo seu intervalo a quantidade
exata de elementos da
segunda dimensão da matriz.
Exemplo: tabuleiro : vetor [0..7 , 0..7] de inteiro
Vamos observar o exemplo seguinte, na Figura 14, sobre a aplicação de vetores com duas
dimensões (matriz). Implemente e teste o exemplo no VISUALG. Execute e entre com valores.
Observe os resultados.
Figura 14 - Matriz dos Jogos Panamericanos