Escolar Documentos
Profissional Documentos
Cultura Documentos
Imagine, por exemplo, que você receba o nome e a nota de 100 alunos de uma escola, e depois precise
listar o nome de cada um, a média final de cada aluno e ainda a média da turma.
Agora imagine você declarando uma a uma, todas as 100 variáveis para o nome, depois as 100 variáveis
para as notas. O seu algoritmo ficaria semelhante a este:
inicio
caractere aluno1, aluno2, aluno3, aluno4, aluno5, aluno6, aluno7, aluno8, aluno9, aluno10,
aluno11, aluno12, aluno13, aluno14, aluno15, aluno16, aluno17, aluno18, aluno19, aluno20,
aluno21, aluno22, aluno23, aluno24, aluno25, aluno26, aluno27, aluno28, aluno29, aluno30,
aluno31, aluno32, aluno33, aluno34, aluno35, aluno36, aluno37, aluno38, aluno39, aluno40,
aluno41, aluno42, aluno43, aluno44, aluno45, aluno46, aluno47, aluno48, aluno49, aluno50,
aluno51, aluno52, aluno53, aluno54, aluno55, aluno56, aluno57, aluno58, aluno59, aluno60,
aluno61, aluno62, aluno63, aluno64, aluno65, aluno66, aluno67, aluno68, aluno69, aluno70,
aluno71, aluno72, aluno73, aluno74, aluno75, aluno76, aluno77, aluno78, aluno79, aluno80,
aluno81, aluno82, aluno83, aluno84, aluno85, aluno86, aluno87, aluno88, aluno89, aluno90,
aluno91, aluno92, aluno93, aluno94, aluno95, aluno96, aluno97, aluno98, aluno99, aluno100;
real nota1, nota2, nota3, nota4, nota5, nota6, nota7, nota8, nota9, nota10,
nota11, nota12, nota13, nota14, nota15, nota16, nota17, nota18, nota19, nota10,
nota21, nota22, nota23, nota24, nota25, nota26, nota27, nota28, nota29, nota10,
nota31, nota32, nota33, nota34, nota35, nota36, nota37, nota38, nota39, nota10,
nota41, nota42, nota43, nota44, nota45, nota46, nota47, nota48, nota49, nota10,
nota51, nota52, nota53, nota54, nota55, nota56, nota57, nota58, nota59, nota10,
nota61, nota62, nota63, nota64, nota65, nota66, nota67, nota68, nota69, nota10,
nota71, nota72, nota73, nota74, nota75, nota76, nota77, nota78, nota79, nota10,
nota81, nota82, nota83, nota84, nota85, nota86, nota87, nota88, nota89, nota10,
nota91, nota92, nota93, nota94, nota95, nota96, nota97, nota98, nota99, nota100;
Além do trabalho de declarar todas as variáveis, você deveria gerenciar as variáveis no algoritmo.
Provavelmente seu algoritmo iria ficar muito grande, o que poderia deixar lenta a aplicação.
Seria bem trabalhoso, não? É para casos como esse que usamos as estruturas de dados homogêneos.
1
101 – Algoritmo | Unidade 04
02
Estruturas de dados homogêneos são estruturas que permitem armazenar conjuntos de dados de um
mesmo tipo (daí o nome ‘homogêneos’) em uma única variável.
Essas estruturas são também chamadas de variáveis compostas homogêneas ou variáveis compostas
indexadas.
• os vetores (ou arrays), estruturas que armazenam os dados em uma única linha e várias colunas
(dizemos que são unidimensionais);
• as matrizes, estruturas que armazenam os dados em forma de tabela, com várias linhas e várias
colunas (são bidimensionais).
No presente módulo nosso objeto de estudo serão os vetores. As matrizes serão estudadas em outra
ocasião.
03
Suponha a seguinte situação: você precisa elaborar um algoritmo que receba dois números reais
fornecidos pelo usuário e forneça como resultado a soma dos mesmos. Rapidamente é possível pensar a
solução:
#incluir <biblioteca>
principal()
inicio
real a, b, soma;
escreva(“Digite os números: ”);
leia(a, b);
soma = a + b;
escreva(“Soma = “, soma);
fim
Vetores homogêneos são matrizes unidimensionais que armazenam dados de um mesmo tipo.
Veremos oportunamente o que é matriz, mas podemos dizer agora, de forma resumida, que uma matriz
2
101 – Algoritmo | Unidade 04
seria vários vetores do mesmo tipo e do mesmo tamanho um em cima do outro, ou um do lado do
outro.
04
Declaração de um vetor
Os vetores precisam ser declarados antes de serem utilizados, assim como fazemos com as variáveis
simples. A declaração de um vetor, entretanto, é um pouco diferente da declaração de uma variável
comum, pois se trata de uma variável indexada. É como se declarássemos diversas variáveis dentro de
uma só, diferenciadas por um índice.
Essas variáveis correspondem aos elementos do vetor (em nosso exemplo, os nomes dos alunos). Já o
índice é um valor numérico do tipo inteiro, que sempre começa em 1 e corresponde à posição de cada
elemento no vetor. Observe a tabela a seguir.
Essa tabela representa um vetor de 5 elementos. Os elementos são os nomes (Carla, Cleide, Dalton,
Diana, Edson). Os números de 1 a 5 representam os índices, que são as posições de cada elemento no
vetor. Por exemplo, o elemento ‘Diana’ ocupa a posição ‘4’ do vetor.
Ao declarar um vetor, o seu ‘tamanho’ deve ser informado. O ‘tamanho’ de um vetor é a quantidade de
dados que será armazenada na variável. Na tabela acima, o tamanho do vetor é 5. No nosso exemplo
(dos nomes dos alunos), o tamanho do vetor é 100, pois queremos armazenar os nomes de 100 alunos.
Nosso exemplo:
No nosso exemplo, ao invés de declararmos diversas variáveis (aluno1, aluno2... aluno100), estamos
declarando diversos elementos (os nomes) em uma variável.
Variável indexada
É o conjunto de variáveis do mesmo tipo, referenciadas pelo mesmo nome e individualizadas por
índices. Podem ter um ou mais índices e ao número de índices necessários para a localização de um
elemento dentro da variável indexada dá-se o nome de dimensão.
3
101 – Algoritmo | Unidade 04
05
Nesta representação cada dado é determinado por um índice na forma aij, sendo “a” a variável, “i” a
linha e “j” a coluna. No caso dos vetores, o índice j é constante e igual a 1 e, portanto, pode ser
desconsiderado. A tabela a seguir apresenta a representação dos elementos de um vetor.
SINTAXE:
Para acessar os conteúdos dos dados de um vetor basta escrever o índice em pesquisa.
SINTAXE:
#incluir <biblioteca>
principal()
inicio
inteiro i;
real vetor[1000], soma;
para(i←1; i<=1000; i←i+1)
inicio
escreva(“Digite o número”, i,”:”);
leia(vetor[i]);
fim
4
101 – Algoritmo | Unidade 04
soma = 0;
para(i←1; i<=1000; i←i+1)
soma = soma + vetor[i];
escreva(“Soma = “, soma);
fim
Às vezes, a quantidade total de dados armazenados é conhecida, portanto, é necessário criar algoritmos
que permitam a entrada de todos estes dados.
07
Os vetores possuem seus tamanhos descritos logo no início, na declaração das variáveis, e seu endereço
interno dos valores na memória é declarado como “i”, também logo no início.
inteiro vetor[101];
inteiro i;
Para que possamos ler e escrever os valores de um vetor é necessário realizar a chamada do índice, no
caso o [i]. Assim serão lidos e apresentados na tela os valores contidos em cada vetor.
leia(vetor[i]);
escreva(vetor[i]);
O valor de [i] varia de acordo com o tamanho do vetor, essa leitura ou armazenamento depende da
mudança do valor do endereço. Para que essa mudança ocorra é necessário usar uma estrutura de
repetição. Lembrando que a estrutura de repetição PARA é utilizada quando se sabe o número de vezes
que um trecho do algoritmo deve ser repetido.
Com esses elementos elencados acima temos condições de utilizar vetores em nossos algoritmos.
08
5
101 – Algoritmo | Unidade 04
Exemplo 1
Foi realizada uma análise estatística sobre a idade de garotos de ruas em uma
determinada cidade. Elaborar um algoritmo que armazene até 100 destas idades
em um vetor e depois as apresente na ordem em que foram armazenadas.
Solução:
#incluir <biblioteca>
principal()
inicio
inteiro vetor[101];
inteiro i;
inteiro total;
para (i ← 1; i <= 100; i ←i + 1)
inicio
escreva ("Entre com um numero");
leia(vetor[i]);
total = i + 1;
fim
escreva("Os números que você digitou foram:");
para (i ← 1; i < total; i ←i + 1)
escreva(vetor[i]);
fim
09
Exemplo 2
A média aritmética é obtida dividindo-se a soma das observações pelo
número delas. Elaborar um algoritmo, para calcular a média aritmética das
50 notas de uma turma de alunos.
Solução:
#incluir <biblioteca>
principal()
inicio
real notas[50];
real soma;
inteiro i;
para(i ← 1; i <= 50; i ←i + 1)
inicio
6
101 – Algoritmo | Unidade 04
10
Exemplo 3
A média geométrica de um conjunto de números positivos é definida como
o produto de todos os membros do conjunto elevado ao inverso do
número de membros. Elaborar um algoritmo, para calcular a média
geométrica das 50 notas de 1 turma de alunos.
Solução:
#incluir <biblioteca>
principal()
inicio
real notas[50];
real prod;
inteiro i;
para(i ← 1; i <= 50; i ←i + 1)
inicio
escreva(“Digite a”, i, “nota do aluno: “);
leia(notas[i]);
fim
prod = 1.0;
para(i ← 1; i <= 50; i ←i + 1)
prod = prod*notas[i];
escreva(“Media geométrica das notas: “, pot(prod,1/50));
fim
11
Exemplo 4
O dinheiro é o meio usado na troca de bens, na compra de bens, serviços, força
7
101 – Algoritmo | Unidade 04
de trabalho, divisas estrangeiras ou nas demais transações financeiras. É emitido e controlado pelo
governo de cada país, que é o único que tem essa atribuição. Elaborar um algoritmo que, dado um
determinado valor inteiro em reais, calcule a menor quantidade de cédulas de R$ 1,00; R$ 2,00; R$ 5,00;
R$ 10,00; R$ 20,00; R$ 50,00 e R$ 100,00 que representa tal valor.
Solução exemplo 4
#incluir <biblioteca>
principal()
inicio
inteiro i, valor, quant;
inteiro tab[7] ;
tab[1] = 100;
tab[2] = 50;
tab[3] = 20;
tab[4] = 10;
tab[5] = 5;
tab[6] = 2;
tab[7] = 1;
escreva(“Digite o valor em reais: “);
leia(valor);
para(i ← 1; i < 7; i ←i + 1)
inicio
quant = valor DIV tab[i];
se (quant> 0)
inicio
escreva(“Valor da nota = ”, tab[i]);
escreva(“Numero de notas = ”, quant);
fim
valor = valor MOD tab[i];
fim
fim
Exemplo 5
A tabuada é uma tabela contendo todos os produtos dos números inteiros de 1 a
9. Elaborar um algoritmo que apresente a tabuada de um dado valor t, utilizando
vetor.
8
101 – Algoritmo | Unidade 04
Solução exemplo 5
#incluir <biblioteca>
principal
inicio
inteiro a[10], i, t;
escreva("Digite qual tabuada deseja pesquisar: ");
leia(t);
para(i ← 1; i<=10; i ←i + 1)
a[i] = i * t;
para(i ← 1; i<=10; i ←i + 1)
escreva(i, “x”, t, “=”, a[i]);
fim
12
Não é possível operar diretamente todos os valores do vetor, como um conjunto todo, mas um
de cada vez. Vejamos a imagem abaixo:
Se quisermos somar um vetor com outro, deve-se somar separadamente cada valor, unitariamente. O
mesmo ocorre se quisermos somar os valores do mesmo vetor. A soma é de um elemento com outro.
Para isso, é necessário utilizar a estrutura de repetição, a qual possibilita percorrer todo o vetor e
realizar a soma.
Os vetores também podem realizar outras operações, tudo depende da necessidade de cada algoritmo.
Exemplo 6
Elaborar um algoritmo que imprima 100 números na ordem oposta em que
foram informados em um vetor.
#incluir <biblioteca>
principal()
inicio
inteiro i;
inteiro a[100];
para(i ← 1; i <= 100; i ←i + 1)
9
101 – Algoritmo | Unidade 04
inicio
escreva(“Elemento “, i);
leia(a[i]);
fim
para(i ← 100; i>=1; i ←i - 1)
escreva(“Elemento : “, a[i]);
fim
13
Exemplo 7
Elaborar um algoritmo que imprima os elementos de posição ímpar de um vetor
de 100 elementos.
#incluir <biblioteca>
principal()
início
inteiro i;
inteiro a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (i MOD 2 = 1)
escreva(“Elemento: “, a[i]);
fim
fim
14
Exemplo 8
Elaborar um algoritmo que imprima os elementos pares de um vetor de 100
elementos.
10
101 – Algoritmo | Unidade 04
#incluir <biblioteca>
principal()
início
inteiro i;
inteiro a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (a[i] MOD 2 = 0)
escreva(“Elemento: “, a[i]);
fim
fim
15
Exemplo 9
Elaborar um algoritmo que imprima os elementos ímpares de posição par de
um vetor de 100 elementos.
Solução Exemplo 9
#incluir <biblioteca>
principal()
início
inteiro i;
inteiro a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (i MOD 2 = 0 & a[i] MOD 2 = 1)
escreva(“Elemento: “, a[i]);
fim
fim
11
101 – Algoritmo | Unidade 04
Exemplo 10
Elaborar um algoritmo que imprima os elementos pares de posição ímpar e os elementos
múltiplos de 3 de posição par de um vetor de 100 elementos.
Solução Exemplo 10
#incluir <biblioteca>
principal()
início
inteiro i, a[100];
para (i ← 1; i <= 100; i ←i + 1)
início
escreva(“Elemento “, i);
leia(a[i]);
fim
para (i ← 1; i <= 100; i ←i + 1)
início
se (i MOD 2 = 1 & a[i] MOD 2 = 0)
escreva(“Elemento:“, a[i], “de posição”, i);
se (i MOD 2 = 0 & a[i] MOD 3 = 0)
escreva(“Elemento:“, a[i], “de posição”, i);
fim
fim
Exemplo 11
Elaborar um algoritmo que carregue um vetor com dez números
inteiros. Calcule o quadrado dos valores e mostre em um vetor
resultante.
Solução Exemplo 11
#incluir <biblioteca>
principal()
inicio
inteiro vet1[10], vet2[10], i;
para (i ← 1; i <= 10; i ←i + 1)
inicio
escreva("Digite um numero ");
leia(vet[i]);
fim
12
101 – Algoritmo | Unidade 04
16
Para fixar o conceito de vetor e compreender melhor a aplicação de vetores em algoritmos, assista ao
vídeo abaixo.
https://www.youtube.com/watch?v=MWR37yk2uwo
17
RESUMO
Aprendemos até agora, que a execução dos comandos com as estruturas de controle utilizou tipos de
dados básicos, com variáveis simples dos tipos: real, inteiro, literal, caractere e lógico. Neste módulo
aprendemos situações em que os tipos de dados básicos não são suficientes para resolver os problemas,
assim, é necessário utilizar estruturas de dados homogêneas, que são estruturas que permitem
armazenar conjuntos de dados de um mesmo tipo (daí o nome ‘homogêneos’) em uma única variável.
Vimos que as estruturas de dados homogêneas são classificadas em dois tipos: os vetores (ou arrays,
que são estruturas que armazenam os dados em uma única linha e várias colunas) e as matrizes, que
são estruturas que armazenam os dados em forma de tabela, com várias linhas e várias colunas (são
bidimensionais). O vetor é um conjunto de valores do mesmo tipo, armazenados em locais contíguos na
memória e possuem o mesmo nome, ou seja, é uma variável que armazena diversas variáveis do mesmo
tipo.
1 - CONCEITO
Aprendemos no módulo passado o conceito de vetores, que são estruturas de dados unidimensionais,
com variáveis indexadas referenciadas por um único índice. Você aprendeu que, armazenando os dados
em um vetor e acessando-o, em seguida, podemos exibir suas informações em uma lista. Vimos também
13
101 – Algoritmo | Unidade 04
que os vetores lidam com apenas uma dimensão, ou seja, se fosse uma tabela, ela só teria uma coluna
com várias linhas ou uma linha com várias colunas, como podemos ver na tabela abaixo.
Exemplificamos no módulo anterior a declaração de um vetor com 1000 alunos. Infelizmente fica quase
inviável trabalhar com um vetor tão grande, por isso é indicado o uso de matriz, no caso para um vetor
de 1000 alunos teríamos uma matriz de 10x100 ou 100x10.
Para melhorar o exemplo, imagine um tabuleiro de damas ou de xadrez, podemos representar como um
vetor de 100 posições. Como você diria em qual posição está a peça vermelha mais avançada à direita? E
utilizando uma matriz? Caso você vá fazer as contas da posição da peça, lembre que a leitura deverá ser
da esquerda para direita, do ponto mais alto para o mais baixo.
Sendo assim, para melhor visualização e melhor forma de trabalhar nesse caso, é aconselhável utilizar
matriz, neste exemplo matriz 10x10.
02
A declaração do vetor ou matriz multidimensional é efetuada com múltiplos colchetes, que informam a
quantidade de elementos que a matriz poderá conter, podendo ser atribuídos valores aos itens em sua
declaração inicial ou, atribuídos valores durante a demanda do processamento da aplicação, de acordo
com as necessidades do algoritmo.
14
101 – Algoritmo | Unidade 04
Uma matriz pode ser definida como um conjunto de variáveis de mesmo tipo e identificadas pelo
mesmo nome. Essas variáveis são diferenciadas por meio da especificação de dois índices que definem
posições dentro dessa estrutura.
Vamos pegar como exemplo uma matriz bidimensional (duas dimensões linha X colunas). Podemos
considerar que ela será assim:
Consideramos que para acessarmos o valor um (1), localizamos o índice por sua linha (1) e coluna (1),
deste modo seu índice é (1,1). O valor 2 (dois), por exemplo, será (1, 2).
03
Nesta estrutura, o índice da esquerda indexa as linhas e o da direita indexa as colunas. Ao preencher ou
ler uma matriz, o índice mais à direita varia mais rapidamente que o índice à esquerda.
Observe a matriz 3x2 abaixo: enquanto o índice à esquerda “i” fica fixo o índice a direita “j” fica variando
mais rapidamente.
Componente [i][j]
15
101 – Algoritmo | Unidade 04
04
2 - EXEMPLOS
Vejamos alguns exemplos de algoritmos utilizando matrizes.
Exemplo 1
Elaborar um algoritmo que construa uma matriz de dimensão 20 x 10, e armazene
em cada célula o valor de 1 a 200, sequencialmente ordenados por linha. O
programa deve mostrá-los na tela em formato tabular.
#incluir <biblioteca>
principal()
inicio
inteiro mtrx [20][10];
inteiro i,j,cont;
cont← 1;
para (i←1;i<=20;i←i+1)
para (j←1;j=10;j←j+1)
inicio
mtrx[i][j] ←cont;
cont←cont + 1;
fim
para (i←1;i<=20;i←i+1)
16
101 – Algoritmo | Unidade 04
inicio
escreva(“|”);
para (j←1;j=10;j←j+1)
inicio
escreva(mtrx[i][j]);
fim
escreva(“|”);
escreva(pular linha);
fim
fim
05
Exemplo 2
Elaborar um algoritmo que carregue uma matriz 2 x 2, calcule e mostre uma
matriz resultante que será a matriz digitada multiplicada pelo maior elemento
da matriz.
#incluir <biblioteca>
principal()
inicio
inteiromat[2][2], resultado[2][2], i, j, maior;
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
inicio
escreva("Digite o elemento da linha”, i, “e coluna”, j);
leia(mat[i][j]);
fim
fim
maior←mat[i][j];
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
inicio
se (mat[i][j] > maior)
maior←mat[i][j];
fim
fim
17
101 – Algoritmo | Unidade 04
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
resultado[i][j] ← maior * mat[i][j];
fim
escreva("Imprimindo a matriz resultante ");
para(i←1;i<=2;i←i+1)
inicio
para(j←1;j<=2;j←j+1)
inicio
escreva(resultado[i][j]);
fim
fim
fim
06
Exemplo 3
Elaborar um algoritmo que carregue uma matriz 10 x 3 com as notas de
dez alunos em três provas. Mostre um relatório com o número do aluno
(número da linha) e a prova em que cada aluno obteve menor nota. Ao
final do relatório, mostre quantos alunos tiveram menor nota na prova
1, quantos alunos tiveram menor nota na prova 2 e quantos alunos
tiveram menor nota na prova 3.
18
101 – Algoritmo | Unidade 04
para (i←1;i<=10;i←i+1)
inicio
escreva("Aluno numero %d", i);
menor = notas[i][1];
prova_menor = 0;
para(j←1;j<=3;j←j+1)
inicio
se (notas[i][j] <= menor)
inicio
menor← notas[i][j];
prova_menor← j;
fim
fim
escreva("A menor nota do aluno”, i, “foi na”, prova_menor, prova.");
se (prova_menor = 1)
q1 = q1 + 1;
se (prova_menor = 2)
q2 = q2 + 1;
se (prova_menor = 3)
q3 = q3 + 1;
fim
escreva("Quantidade de alunos com menor nota na prova 1 = ", q1);
escreva("Quantidade de alunos com menor nota na prova 2 = ", q2);
escreva("Quantidade de alunos com menor nota na prova 3 = ", q3);
fim
07
Exemplo 4
Elaborar um algoritmo que carregue uma matriz 10 x 20 com
números inteiros e some cada uma das linhas, armazenando o
resultado das somas em um vetor. A seguir, multiplique cada
elemento da matriz pela soma da linha e mostre a matriz
resultante.
19
101 – Algoritmo | Unidade 04
para (j←1;j<=20;j←j+1)
inicio
escreva("Digite o elemento da lin=”, i, “e col=”, j, “da matriz");
leia(mat[i][j]);
fim
fim
para (i←1;i<=10;i←i+1)
inicio
soma[i] ← 0;
para (j←1;j<=20;j←j+1)
soma[i] ← soma[i] + mat[i][j];
fim
para (i←1;i<=10;i←i+1)
inicio
para (j←1;j<=20;j←j+1)
mat[i][j] ←mat[i][j] * soma[i];
fim
escreva("Imprimindo a matriz resultante");
para (i←1;i<=10;i←i+1)
inicio
escreva("Linha”, i);
para (j←1;j<=20;j←j+1)
escreva(mat[i][j]);
fim
fim
08
Exemplo 5
Uma matriz é uma série de variáveis do mesmo tipo referenciadas por um
único nome, onde cada variável é diferenciada por meio de um número
chamado índice. Elaborar um algoritmo que carregue uma matriz 3 x 3,
calcule e mostre uma matriz resultante que será a matriz digitada
multiplicada pelo menor elemento da matriz.
#incluir <biblioteca>
principal()
inicio
inteiromat[3][3], resultado[3][3], i, j, menor;
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
20
101 – Algoritmo | Unidade 04
inicio
escreva("Digite o elemento da linha”, i, “e coluna”, j);
leia(mat[i][j]);
fim
fim
menor←mat[i][j];
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
inicio
se (mat[i][j] < menor)
menor←mat[i][j];
fim
fim
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
resultado[i][j] ← menor * mat[i][j];
fim
escreva("Imprimindo a matriz resultante ");
para(i←1;i<=3;i←i+1)
inicio
para(j←1;j<=3;j←j+1)
inicio
escreva(resultado[i][j]);
fim
fim
fim
09
3 - MATRIZES MULTIDIMENSIONAIS
As matrizes multidimensionais possuem duas (mat [i][j]) ou mais dimensões (mat [i][j][k]), porém são
pouco utilizadas devido ao consumo de memória que exigem. O aumento é exponencial, pois guarda as
informações multidimensionais dinamicamente na memória. Conforme a necessidade do programa que
está sendo construído pode-se usar outros métodos para guardar as informações. Atualmente os
sistemas utilizam bancos de dados para isso. Bancos de dados são locais específicos onde se pode
armazenar todo o tipo de informação e recuperar, quando necessário.
21
101 – Algoritmo | Unidade 04
SINTAXE:
SINTAXE:
A lista de valores é composta por valores (do mesmo tipo da variável) separados por vírgula. Os valores
devem ser dados na ordem em que serão colocados na matriz.
10
4 - ORDENAÇÃO E PESQUISA
Uma das formas de deixar o algoritmo mais rápido é ordenando os vetores e matrizes. Isso facilita, em
uma pesquisa, encontrar mais rapidamente o que se deseja. Imagine você com um baralho completo,
você sabe que são muitas cartas e estão desordenadas. Se alguém pedir a carta 7 de Copas, você deverá
procurar a carta em todo o baralho. Sua consulta será demorada e muito, pois dependerá da sorte para
que o 7 de Copas esteja logo no início da pilha. Se a carta procurada estiver na última posição, você
passará por todas as cartas do baralho para achar a carta desejada.
Se esse baralho estivesse ordenado por número ou por naipes, sua busca seria bem mais rápida. A
ordenação ajudaria em muito a sua consulta, reduzindo drasticamente o tempo de pesquisa.
22
101 – Algoritmo | Unidade 04
11
O método bolha ordena uma lista comparando valores entre pares consecutivos e rearranjando os
valores de acordo com a ordem.
Possui esse nome pelo fato de que se um valor, que deveria estar no topo da lista, estiver embaixo, ele
vai progredindo até o seu devido lugar.
Exemplo 6
Elabore um algoritmo que carregue um vetor com 100 números inteiros. Após
isto, o algoritmo deve ordenar de maneira crescente os dados.
#incluir <biblioteca>
principal()
inicio
inteiro vet[100], i, j, aux;
para (i ← 1; i <= 100; i ← i + 1)
inicio
escreva("Digite um numero ");
leia(vet[i]);
fim
para (i ← 1; i <= 100; i ← i + 1)
para (j ← 1; j <= 99; j ← j + 1)
se (vet[j] >vet[j+1])
23
101 – Algoritmo | Unidade 04
inicio
aux←vet[j];
vet[j] ←vet[j+1];
vet[j+1] ←aux;
fim
para (i ← 1; i <= 100; i ← i + 1)
escreva(vet[i]);
fim
Para ordenar o vetor de forma decrescente é apenas necessário trocar o sinal de maior para o sinal de
menor na linha “se (vet[j] <vet[j+1])”
12
Algoritmos de pesquisa de valores, assim como os de ordenação, também têm como objetivo a
recuperação de dados. Ambos os algoritmos evoluem conjuntamente com as tecnologias da
computação.
A pesquisa linear ou sequencial é o método mais intuitivo de busca, ele lê um valor sequencialmente e
compara com todos os elementos do vetor.
Voltando ao exemplo do baralho, seria como se nós passássemos carta a carta para achar o 7 de Copas,
respeitando a sequência das cartas. Esse método é utilizado quando há pequena quantidade de
elementos para pesquisar. Imagine que temos 10 cartas no baralho e nos é solicitada uma específica.
Iremos olhar as cartas uma a uma conforme sequência.
Exemplo 7
Elabore um algoritmo que carregue um vetor com 10 números de telefones. Após
isto, o algoritmo deve informar a posição de um determinado telefone.
#incluir <biblioteca>
principal()
inicio
inteiro i, j, aux;
literalvet[10], tel;
para (i ← 1; i <= 10; i ← i + 1)
inicio
escreva("Digite um telefone ");
24
101 – Algoritmo | Unidade 04
leia(vet[i]);
fim
escreva("Pesquisa telefone ");
leia(tel);
para (i ← 1; i <= 10; i ← i + 1)
se (vet[i] == tel)
escreva("Telefone na posição ",i);
fim
13
A pesquisa binária é muito utilizada quando se quer ganhar tempo na pesquisa. Geralmente a pesquisa
binária é utilizada quando temos muitos elementos.
Se fôssemos aplicar a pesquisa binária no exemplo do baralho, deveríamos reparti-lo ao meio e verificar
se a carta que apareceu está antes ou depois daquela que estamos procurando. Caso estejamos longe
da carta procurada, devemos descartar a metade mais distante e repartir novamente o bolo do baralho.
E assim seguimos até encontrar a carta desejada. Veja que, para isso funcionar, o baralho deve estar na
ordem, ou gastaremos muito tempo na procura.
A pesquisa binária ou logarítmica é uma otimização do algoritmo simples, no entanto, neste caso, é
necessário que a lista esteja ordenada. A busca consiste em pegar o elemento central da lista e
comparar com o valor a ser buscado, caso o elemento esteja na parte superior da lista, a parte inferior
é descartada e o processo se repete.
14
Exemplo 8
Elabore um algoritmo que carregue um vetor com 10 números inteiros.
Após isto, o algoritmo deve informar a posição de um determinado
número.
25
101 – Algoritmo | Unidade 04
#incluir <biblioteca>
principal()
inicio
inteiro inicial, meio, final, i, num, vet[10];
para (i ← 1; i <= 10; i ← i + 1)
inicio
escreva("Digite um numero ");
leia(vet[i]);
fim
escreva("Pesquise o numero ");
leia(num);
inicial← 1
final← 10
enquanto (inicial <= final)
inicio
meio← (inicial + final)/2
se (num == vet[meio] )
inicio
escreva("Número na posição ",i);
inicial← final;
fim
senão
se (num <= vet[meio])
final← meio -1;
senão
inicial← meio + 1;
fim
fim
15
RESUMO
Aprendemos nesse módulo que as matrizes são conjuntos de vetores do mesmo tipo, ou melhor, são
estruturas de dados homogêneos de duas (ou mais) dimensões. As matrizes facilitam a forma de
representação das variáveis e também ajudam no armazenamento bidirecional dos dados. Aprendemos
os tipos de pesquisas e como realizar uma pesquisa linear e a pesquisa binária, que propõe agilizar uma
pesquisa quando temos muitos elementos. Não podemos esquecer que a ordenação é fundamental
para que as pesquisas possam ser rápidas e eficientes. Todas essas ferramentas ajudam no
desenvolvimento dos algoritmos e consequentemente dos futuros programas, que serão construídos
por programadores.
26
101 – Algoritmo | Unidade 04
01
1 - ESTRUTURAS
Antes de iniciarmos com o assunto “Árvores”, primeiro apresentaremos o conceito de estruturas, que
estará presente em quase todo o conteúdo desse módulo.
Buscamos nesse momento o apoio do dicionário Aurélio on-line, que descreve dessa forma a
palavra estrutura:
s.f. Maneira como um edifício ou uma coisa qualquer é construída, organizada e disposta. / Maneira
como as partes de um todo estão dispostas entre si: estrutura do corpo humano. / Armação, esqueleto,
arcabouço. / Ordem, disposição e relações das partes que compõem uma obra: a estrutura do poema. /
Geologia Natureza das camadas geológicas e disposição dessas camadas, umas em relação às outras. /
Matemática Caráter de um conjunto resultante das operações nele definidas e das propriedades dessas
operações: estrutura de grupo. / Psicologia Conjunto orgânico de formas que, segundo os gestaltistas,
seria percebido de imediato, antes da captação dos detalhes. // Reforma das estruturas, reformas
legislativas que modificam profundamente as estruturas administrativas, econômicas ou sociais de uma
coletividade. // Estrutura latente de um grupo, configuração dos membros de um grupo, que a análise
de um teste sociométrico permite pôr em evidência.
Percebemos então que a palavra estrutura pode ser usada para diversos aspectos, tudo depende da
visão e da necessidade. Necessidade essa de demonstrar as partes de um todo, que juntos formam uma
estrutura única. No exemplo abaixo é apresentada a estrutura de uma empresa, percebe-se que há uma
hierarquia funcional entre os cargos, que são representados por caixas. Essa hierarquia demonstra uma
precedência de regras e atividade do dia a dia. Na altura superior da estrutura está o Vice Presidente e
então vai descendo, explorando a área da Direção da TI, que possui três gerências no mesmo nível
hierárquico (Gerência de Infraestrutura e serviços, Gerência de Desenvolvimento e Gerência de
Arquitetura e Processos). Essas gerências estão subdivididas internamente, conforme características de
cada área.
27
101 – Algoritmo | Unidade 04
Estrutura Organizacional
02
Logo abaixo, apresentamos um exemplo de árvore genealógica, onde os mais velhos precedem os mais
jovens: temos os bisavós, avós, pais e o filho. Na verdade essa árvore é de uma pessoa somente, pois
não está considerando outros parentes, como irmãos, primos, tios etc. Seria uma árvore gigantesca se
colocássemos todos os parentes.
28
101 – Algoritmo | Unidade 04
Árvore genealógica
03
2 - ÁRVORES
As árvores são utilizadas para representar hierarquicamente estruturas, como demonstrado acima nos
exemplos da árvore genealógica e a estrutura organizacional. Na tecnologia as árvores podem ser
utilizadas para representar decisões, definições formais de linguagem ou mesmo para representar
hierarquia entre elementos.
Para melhor entendimento iremos pegar o exemplo de uma árvore, isso mesmo, só que você a colocará
de cabeça para baixo. Todas as árvores possuem raiz, a raiz é o um elemento principal da árvore, sem a
raiz não teríamos a árvore. Visualizando a imagem abaixo percebemos que a árvore além da raiz possui
outros elementos e outras ligações, que são denominados galhos ou filhos. Essas ramificações são
originadas dos nós. Os galhos levam a outros nós que também possuem outros galhos. O elemento que
não possui galhos é conhecido como folha ou nó terminal.
29
101 – Algoritmo | Unidade 04
04
Árvore binária
Uma árvore binária é um conjunto finito de elementos que está vazio ou é particionada em três
subconjuntos.
A árvore pode não ter nenhum elemento (árvore vazia). A construção de uma árvore pode ser recursiva
e, devido a isso, muitas operações sobre árvores binárias utilizam recursão. Lembrando
que recursividade é o processo de definir algo em termos de si mesmo e é, algumas vezes, chamado de
definição circular. Assim, pode-se dizer que o conceito de algo recursivo está dentro de si, que por sua
vez está dentro de si e assim sucessivamente, infinitamente, ou seja, se não tiver um mecanismo de
saída ou de parada o algoritmo entrará em loop.
As árvores onde cada nó que não seja folha numa árvore binária tem subárvores esquerda e direita.
30
101 – Algoritmo | Unidade 04
05
A figura abaixo apresenta um método convencional de representação de uma árvore. Nesta árvore, o
elemento A é a raiz da árvore, a subárvore da esquerda é o elemento B e a da direita é representada
pelo elemento C. Um nó sem ilhós é chamado de folha. Sendo A a raiz de uma árvore binária e B sua
subárvore, é dito que A é pai de B e que B é filho de A.
Representação de árvore
Sendo assim temos outras relações de parentesco conforme figura acima, onde B e C são filhos
de A, B e C são irmãos, D e E são irmãos e H e I são irmãos. Outra forma visualizada na figura é que C é
pai de F, que é pai de H e I.
As letras B, C, E, F são chamados de nós, e as letras D, G, H, I são nós sem filhos, que são chamados de
folhas.
06
Tamanho da árvore
O caminho da raiz de uma árvore até a sua folha final é calculada pela seguinte fórmula k – 1. Onde se
conta o número de nós do lado maior da árvore, que é a letra k e subtrai por um. Assim você terá o
31
101 – Algoritmo | Unidade 04
tamanho de uma árvore. Veja a figura abaixo, K é igual a 4, usando a fórmula k – 1, o tamanho da árvore
é 3. Sendo assim a raiz não se conta.
07
Altura do nó
A altura do nó pode se confundir com o tamanho, mas não é. A altura do nó é comprimento do maior
caminho do nó até alguns de seus descendentes. Descendentes do nó são todos os nós que podem ser
alcançados caminhando-se para baixo a partir da raiz. A altura de cada uma das folhas é 1. Desta
maneira a altura de A é 4, a altura de C é 3 enquanto que de D, E e F são 2 e G, H e I são 1.
08
Outro ponto importante a observar é como medir o grau de saída de cada nó. Que é número de filhos
de um nó. Por exemplo, o nó B tem grau de saída 2, o nó C tem grau 1, o nó F grau 2.
32
101 – Algoritmo | Unidade 04
09
Nível do nó
O nível de um nó pode ser definido, a partir do nó raiz, que é de nível 0. Os outros nós têm um nível que
é uma unidade a mais do que o nível do seu pai. Na árvore da figura abaixo temos:
Nível 0: A
Nível 1: B e C
Nível 2: D, E e F
Nível 3: G, H e I
10
Uma árvore completa é uma árvore binária na qual todas as folhas estão no mesmo nível k. Sendo k a
profundidade da árvore (tamanho). Para se calcular o número total de nós utiliza a seguinte fórmula
(2k+1– 1) e para calcular número total de folhas utiliza a seguinte fórmula (k2).
33
101 – Algoritmo | Unidade 04
Embora uma árvore binária completa possua muitos nós (o máximo para cada profundidade), a distância
da raiz a uma folha qualquer é relativamente pequena.
A árvore da figura abaixo tem profundidade 3, então utilizando a fórmula para calcular a quantidade de
nós:
(2k+1– 1)
(23+1– 1)
(24 - 1)
(16 – 1) = 15, então temos 15 nós.
11
Importante, primeiramente, antes de realizar uma busca em uma árvore é a organização dos dados
contidos na árvore. O objetivo de organizar é para facilitar a tarefa de procura de um determinado valor.
Lembrando que a busca em qualquer tipo de estrutura de dados é mais rápida quando os dados estão
ordenados.
A partir da raiz e de posse da informação a ser encontrada, é possível saber qual o caminho (galho) a ser
percorrido até encontrar o nó desejado. Para tanto, basta verificar se o valor procurado é maior, menor
ou igual ao nó que se está posicionando. Deve-se observar que não existe uma única forma de organizar
um conjunto de informações em uma árvore de busca binária, afinal, dependendo da escolha do nó raiz,
obtêm-se árvores diferentes.
12
3 – GRAFO
Primeiramente é bom registrar que grafo não é gráfico, apesar de os nomes serem parecidos e de o
grafo poder ser representado graficamente.
34
101 – Algoritmo | Unidade 04
Grafos são estruturas matemáticas usadas para representar ideias ou modelos, por intermédio de uma
ilustração, gráfico ou esquema.
Estritamente, em matemática, a teoria dos grafos é utilizada para representar o relacionamento entre
dois ou mais conjuntos, grandezas ou valores. A representação de um mapa de rotas, redes e outros
modelos semelhantes podem ser feita por meio do que se denominam grafos.
Vamos tomar, por exemplo, um mapa de rotas aéreas. Na figura abaixo, nota-se que existem várias
rotas de um ponto a outro, por exemplo, de Florianópolis a Brasília existem as possibilidades via
Curitiba, via São Paulo ou via Rio de Janeiro. Algumas rotas podem ter mais escalas, por exemplo, pode-
se ir a Brasília por São Paulo, passando por Curitiba, Rio e Belo Horizonte. Podemos ter também um voo
panorâmico, onde o avião sai de um lugar e volta para o mesmo lugar. Por exemplo, voo de São Paulo
para São Paulo, onde o avião sai do aeroporto de Congonhas sobrevoa a cidade e volta para Congonhas.
13
A representação de dados como estrutura de dados, pode ser aplicada em Mapas de distâncias, Mapas
Metabólicos, Diagramas e Fluxogramas, Redes de computadores, Redes Neurais, Estruturas químicas,
redes sociais etc.
35
101 – Algoritmo | Unidade 04
No caso das redes sociais, por exemplo, Facebook, Orkut, Linkedin existe um relacionamento social e
negocial entre pessoas. Nesses relacionamentos as pessoas se interligam através da amizade e grupos
de interesse. Se A é amigo de B e B é amigo de C, indiretamente, A está "conectado" a C. Essas redes de
amigos são exemplos de um grafo. Você possui amigos e está "conectado" a eles. Estes, eventualmente
estão conectados a outras pessoas. Quando entramos no perfil de um amigo e entramos no perfil de
algum conhecido do nosso amigo, que você não conhece, vimos um caminho de pessoas, de você até o
amigo do amigo. Isso é um problema de grafo. Deve-se partir de uma pessoa (você) e, percorrendo seus
relacionamentos, encontrar um "caminho" até outra pessoa.
As pessoas que se relacionam entre si são chamados de nós do grafo. Cada relacionamento entre os nós
é chamado de aresta. Abaixo, temos uma imagem que representa um GRAFO simplesmente.
Os nós podem representar os números das casas no sistema de distribuição de água, poderia ser o nome
da cidade no mapa, lista de amigos do Facebook.
14
36
101 – Algoritmo | Unidade 04
37
101 – Algoritmo | Unidade 04
Dá para perceber, a partir de todos esses exemplos, que o conceito de grafos é bastante abrangente e
pode ser utilizado para diversas coisas. Mas como assim “utilizar”? Uma das maneiras, citando o
exemplo das linhas do Metrô, como poderíamos aumentar o fluxo de pessoas em cada linha (nó)? Esse é
um grande problema hoje para as grandes cidades, como São Paulo e Rio de Janeiro. Aumentar o
número de pessoas que utilizam o metrô, tirando carros em circulação das ruas. Não é apenas construir
novos nós, ou novas estações, é um estudo de fluxo de pessoas, horários de picos, velocidade de cada
trem, temperatura etc.
É isso que torna a teoria dos grafos um campo tão estudado. As pessoas estudam esse modelo
matemático porque sabem que, se conseguirem desenvolver novos trabalhos em cima desse modelo
abstrato, esses trabalhos serão aplicáveis a inúmeros problemas reais. Imagine que você tenha
conseguido desenvolver um trabalho para aumentar o fluxo entre dois nós de um grafo. Esse seu
trabalho poderá ser aplicado a qualquer modelo, dentro das características de cada problema. É
importante então sempre levar em consideração todas as necessidades de cada problema.
Outro exemplo que podemos usar é a ampliação de casas com luz elétrica. Vejamos, expandir energia
elétrica para pessoas que não possuem pode tirar de quem já tem, ou prejudicar o funcionamento.
Ampliar e melhorar a distribuição da rede de energia elétrica é um desafio para o governo e as centrais
elétricas. Aumentar com responsabilidade.
São estudos que devem ser feitos para não prejudicar a distribuição para o restante da cidade. Estamos
vendo que não é o caso só de colocar mais postes e fios. Deve se ter um estudo de como atender a
demanda de melhoria, que é a expansão de energia para quem não tem.
38
101 – Algoritmo | Unidade 04
15
RESUMO
As estruturas estão presentes no nosso dia a dia, no trabalho, na escola, entre outras. Na tecnologia as
árvores podem ser utilizadas para representar decisões, definições formais de linguagem ou mesmo
para representar hierarquia entre elementos. As árvores também são estruturas, que apoiam em vários
momentos o desenvolvimento do software. A construção de uma árvore pode ser recursiva, até atender
a necessidade do algoritmo.
Uma árvore binária é um conjunto finito de elementos que está vazio ou é particionada em três
subconjuntos: raiz da árvore; subárvore da esquerda e subárvore da direita.
Os grafos são estruturas matemáticas usadas para representar ideias ou modelos, por intermédio de
uma ilustração, gráfico ou esquema. O seu estudo é importante para ajudar na melhoria do cotidiano
das pessoas, não somente para a TI. Estudos de fluxos de transporte, distribuição de energia, cursos de
água e rotas e áreas são exemplos de grafos e estão, todos os dias, sendo avaliados em prol da
população.
39