Sie sind auf Seite 1von 30

Lgica de Programao

Aplicaes Prticas do Uso de Vetores

Prof. Vincius Breda

Vetor como Lista

Os vetores possuem muitas aplicaes,


dentre elas a de servir como uma lista para
armazenar dados.
Nesta aula ser estudado como utilizar um
vetor como uma lista de dados, sendo
capaz de organizar o vetor e pesquisar
algum dado no mesmo.

Utilizando um Vetor como Lista


Imagine um programa que deva fazer a leitura de 20
nmeros e em seguida apresent-los na mesma
ordem em que foram informados.
Teriamos o seguinte algortmo:
1 Definiar a varavel I do tipo inteiro para controlar
a malha de repetio;
2 Definiar o vetor Numero do tipo inteiro para os
20 nmeros;
3 Iniciar o programa fazendo a leitura dos 20
nmeros e armazen-los no vetor Numero;
4 Apresentar aps a leitura os 20 nmeros.

Utilizando um Vetor como Lista


Diagrama de Blocos
Incio
I = 0, I < 20,
I=I+1
I = 0, I < 20,
I=I+1
Numeros[I]

Numeros[I]

Fim

Utilizando um Vetor como Lista


Pseudocdigo
Algoritmos Lista
Incio
var inteiro I, Numeros[20];
para I = 0, I < 20, I = I+1 faa
leia(Numero[I]);
fim_para
para I = 0, I< 20, I = I+1 faa
escreva(Numero[I]);
fim_para
Fim

Classificao dos Elementos de


um Vetor
Seria bastante til se o programa, antes de apresentar
os nmeros, efetuasse o processamento de
ordenao crescente, facilitando assim a localizao
de algum nmero, quando for efetuada uma
pesquisa visual.
Existem vrios mtodos para se organizar um vetor.
Aqui ser estudado um mtodo simples de
ordenao que consiste na comparao de cada
elemento com todos os elementos subsequentes.
Sendo o elemento comparado menor para
ordenao descrescente, ou maior para ordenao
crescente, que o atual, ele ser trocado de posio
com o outro.

Classificao dos Elementos de


um Vetor
Para fazer a ordenao do vetor, acrescentaremos
mais um passo ao algoritmo anterior.
Teriamos o seguinte algortmo:
1 Definiar a varavel I do tipo inteiro para controlar a
malha de repetio;
2 Definiar o vetor Numero do tipo inteiro para os 20
nmeros;
3 Iniciar o programa fazendo a leitura dos 20
nmeros e armazen-los no vetor Numero;
4 Colocar em ordem crescente os elementos do
vetor;
5 Apresentar aps a leitura os 20 nmeros
ordenados.

Classificao dos Elementos de


um Vetor
Para fazer a ordenao do vetor, acrescentaremos
mais um passo ao algoritmo anterior.
Teriamos o seguinte algortmo:
1 Definiar a varavel I do tipo inteiro para controlar a
malha de repetio;
2 Definiar o vetor Numero do tipo inteiro para os 20
nmeros;
3 Iniciar o programa fazendo a leitura dos 20
nmeros e armazen-los no vetor Numero;
4 Colocar em ordem crescente os elementos do
vetor;
5 Apresentar aps a leitura os 20 nmeros
ordenados.

Classificao dos Elementos de


um Vetor
Agora falta definir como o quarto passo, ou seja, a
ordenao do vetor ser feita. Para isso consideraremos
o seguinte algoritmo:
1 Comparar nmero da primeira posio do vetor com
todos os outros;
2 Quando o nmero comparado for maior, trocar ambos
de posio;
3 Aps comparar o nmero na primeira posio com
todos os outros, comparar o nmero da segunda
posio com os de posio maior;
4 Quando o nmero comparado for maior, trocar ambos
de posio;
5 Continuar o processo, comparando o nmero na
terceira posio, quarta, etc, at que todos tenham sido
comparados.

Exemplo de Ordenao
Crescente
Dado o seguinte vetor de cinco posies:

N[0] = 9
N[1] = 8
N[2] = 7
N[3] = 5
N[4] = 3
Podemos orden-lo em ordem crescente seguindo
os passos do algoritmo anterior, gerando o
seguinte resultado a cada passo:

Exemplo de Ordenao
Crescente
Passo 1
N[0] = 8
N[1] = 9
N[2] = 7
N[3] = 5
N[4] = 3
Passo 5
N[0] = 3
N[1] = 9
N[2] = 8
N[3] = 7
N[4] = 5

Passo 2
N[0] = 8
N[1] = 9
N[2] = 7
N[3] = 5
N[4] = 3
Passo 6
N[0] = 3
N[1] = 8
N[2] = 9
N[3] = 7
N[4] = 5

Passo 3
N[0] = 7
N[1] = 9
N[2] = 8
N[3] = 5
N[4] = 3
Passo 7
N[0] = 3
N[1] = 7
N[2] = 9
N[3] = 8
N[4] = 5

Passo 4
N[0] = 5
N[1] = 9
N[2] = 8
N[3] = 7
N[4] = 3
Passo 8
N[0] = 3
N[1] = 5
N[2] = 9
N[3] = 8
N[4] = 7

Exemplo de Ordenao
Crescente
Passo 9
N[0] = 3
N[1] = 5
N[2] = 8
N[3] = 9
N[4] = 7

Passo 10
N[0] = 3
N[1] = 5
N[2] = 7
N[3] = 9
N[4] = 8

Resultado
N[0] = 3
N[1] = 5
N[2] = 7
N[3] = 8
N[4] = 9

Classificao dos Elementos de


um Vetor Ordenao Crescente
A seguir mostrado o diagrama de blocos e o
pseudocdigo do completo do programa capaz de
ler 20 nmeros, orden-los em ordem crescente
(utilizando o mtodo visto) e mostr-los para o
usurio.
A primeira e a ltima parte do diagrama de blocos j
foi estuda no incio dessa aula. So as partes que
fazem a leitura e exibem os valores armazenados
no vetor.
A

parte central responsvel


ordenamento, da seguinte forma:

por

fazer

Classificao dos Elementos de


um Vetor Ordenao Crescente
Incio
I = 0, I < 20,
I=I+1

Numeros[I]

I = 0, I < 19,
I=I+1

I = 0, I < 20,
I=I+1

J = I+1, J < 20,


J=J+1

Numeros[I]

Fim
Numero[I]
>
Numero[J]

X = Numero[I]
Numero[I] = Numero[J]
Numero[J] = X

Classificao dos Elementos de


um Vetor Ordenao Crescente
O primeiro a ser observado a utilizao de uma
segunda varivel para controlar o ndice
subsequente no processo de ordenao, no caso a
varivel J.
Observe que no primeiro loop para a varivel I
iniciada em 0, e no segundo loop para a varivel J
iniciada em I+1. Isso implica na seguinte
J ser
sequncia: Quando I for
0

1,2,3,4,5,6,7,...,19

2,3,4,5,6,7,...,19

3,4,5,6,7,...,19

4,5,6,7,...,19

...

,19

18

19

Classificao dos Elementos de


um Vetor Ordenao Crescente
Observe que somente quando a varivel J atinge o
valor 19 que este looping se encerra, retornando
ao looping da varivel I, acrescentando mais um
em I at que I atinja o seu limite e ambos os
loopings sejam encerrados.
Quando a varivel I for 0, a varivel J ser 1 e contar
at 19. Ao final deste ciclo, a varivel I
acrescentada de mais 1 tornando-se 1; assim sendo
a varivel J passa a ser 2. Quando a varivel J
voltar a ser 19, a varivel I passa a ser 2 e a varivel
J passa a ser 3. Este ciclo ir ser executado at que
por fim a varivel I seja 18 e a varivel J seja 19, e
ser comparado o penltimo elemento com o seu
elemento subsequente, no caso, o ltimo.

Classificao dos Elementos de


um Vetor Ordenao Crescente
Outro ponto a ser observado o fato da utilizao do algoritmo
de troca, que utiliza a instruo se Numero[I] > Numero[J]
ento. Aps a verificao desta condio, sendo o primeiro
nmero maior que o segundo, efetua-se ento a sua troca
com o algoritmo:
X = Numero[I]
Numero[I] = Numero[J]
Numero[J] = X
Considere o vetor Numero[I] com valor 15 e o vetor Numero[J]
com valor 10. Ao final Numero[I] dever estar com 10 e
Numero[J] dever estar com 15. Para conseguir este efeito,
necessria a utilizao de uma varivel de apoio, que foi
chamada de X.

Classificao dos Elementos de


um Vetor Ordenao Crescente
X = Numero[I]
Numero[I] = Numero[J]
Numero[J] = X
Para que o vetor Numero[I] fique livre para receber o valor do
vetor Numero[J], X dever receber o valor de Numero[I].
Assim sendo, X passa a ser 15. Neste momento pode-se
implicar o valor de Numero[J] em Numero[I]. Desta forma o
vetor Numero[I] passa a possuir o valor 10. Em seguida o
vetor Numero[J] recebe o valor que est em X. Ao final deste
processo, ter-se- Numero[I] com 10 e Numero[J] com 15.

Classificao dos Elementos de


um Vetor Ordenao Crescente
Algoritmos Lista_crescente
Incio
// declarao das variveis
var inteiro I, J, Numeros[20];
// rotina de entrada de dados
para I = 0, I < 20, I = I+1 faa
leia(Numero[I]);
fim_para

Classificao dos Elementos de


um Vetor Ordenao Crescente
// rotina de processamento de ordenao crescente
para I = 0, I < 19, I = I+1 faa
para J = I+1, J<20, J = J+1 faa
se ( Numero[I] > Numero[J] ) ento
X = Numero[I];
Numero[I] = Numero[J]
Numero[J] = X;
fim_se
fim_para
fim_para

Classificao dos Elementos de


um Vetor Ordenao Crescente
// rotina de sada com dados ordenados
para I = 0, I< 20, I = I+1 faa
escreva(Numero[I]);
fim_para
Fim

Classificao dos Elementos de


um Vetor Ordenao Alfabtica
Agora que j sabemos como ordenar um vetor numrico,
vamos adaptar nosso cdigo para um vetor do tipo
cadeia!
Fazer um cdigo capaz de ler o nome de 20 pessoas,
organizar os nomes em ordem alfabtica e exibir a lista
ordenada.
Lembrar que a cada caractere corresponde um nmero na
tabela ASCII, desse modo possvel saber qual
caractere maior que o outro.

Mtodos de Pesquisa em um Vetor


Quando se trabalha com vetores, eles podero ser muito
grandes, dificultando localizar um determinado
elemento de forma rpida. Imagine um vetor possuindo
4000 elementos, como nome de pessoas. Mesmo
estando em ordem alfabtica, seria demorado e
exaustivo encontrar um determinado nome de forma
manual.
Para solucionar este tipo de problema existem tcnicas de
pesquisa em vetores com o uso da programao. Aqui
sero apresentados dois mtodos, sendo o primeiro o
mtodo sequencial e o segundo o mtodo de pesquisa
binria.

Mtodo de Pesquisa Sequencial


Este o mtodo mais simples, e consistem em efetuar a
busca da informao desejada a apartir do primeiro
elemento sequencialmente at o ltimo. Localizando a
informao no caminho, ela apresentada.
Este mtodo de pesquisa lento, porm eficiente nos
casos em que uma matriz encontra-se com seus
elementos desordenados.

Mtodo de Pesquisa Binria


Em mdia, este mtodo de pesquisa mais rpido que o
mtodo sequencial, porm exige que o vetor esteja
previamente classificado, pois este mtodo divide a
lista em duas partes e procura saber se a informao
a ser pesquisada est acima ou abaixo da linha de
diviso.
Se estiver acima, por exemplo, toda a metade abaixo
desprezada. Em seguida, se a informao no foi
encontrada, a metade superior novamente dividida
em duas partes, e pergunta se aquela informao est
acima ou abaixo, e assim vai sendo executada at
encontrar ou no a informao pesquisada.

Mtodo de Pesquisa Binria


Como exemplo, imagine o seguinte vetor:
ndice

Nomes

Andr

Carlos

Frederico

Golias

Slvia

Slvio

Waldir

Deseja-se localizar o elemento Waldir.

Mtodo de Pesquisa Binria


Pelo processo de pesquisa binria, devemos dividir a lista
pela metade. Sendo assim, 7 div 2 = 3. Observe que o
que nos interessa somente o valor inteiro do
quociente. Logo a lista fica dividida em duas, como
segue:
Primeira Parte

Segunda Parte

ndice

Nomes

ndice

Nomes

Andr

Golias

Carlos

Slvia

Frederico

Slvio

Waldir

Mtodo de Pesquisa Binria


Estando a lista dividida em duas partes, dever ser
verificado se a informao Waldir est na primeira ou
na segunda parte. Detecta-se que Waldir est na
segunda parte. Desta forma despreza-se a primeira
parte e divide-se em duas partes novamente a segunda
parte. Como so 4 elementos divididos por 2, resultam
duas tabelas com dois elementos:
Primeira Parte

Segunda Parte

ndice

Nomes

ndice

Nomes

Golias

Slvio

Slvia

Waldir

Mtodo de Pesquisa Binria


Aps esta segunda diviso, verifica-se em qual das partes
Waldir est situado. Como est na segunda parte,
despreza-se a primeira e divide-se a segunda parte
novamente por dois, sobrando um elemento em cada
parte.
Primeira Parte

Segunda Parte

ndice

Nomes

ndice

Nomes

Slvio

Waldir

Aps a terceira diviso, Waldir encontrado na segunda


parte da lista. Se for pesquisado um elemento que no
existe, este no ser apresentado.

Exerccios para a Aula


Desenvolver o diagrama de blocos e pseudocdigo para
as pesquisas sequencial e binria, aplicadas a uma lista
com 20 nomes.

Das könnte Ihnen auch gefallen