Upload
vinicius-morais-breda
View
221
Download
0
Embed Size (px)
Citation preview
8/17/2019 Lógica de Programação - Listas
1/30
Lógica de ProgramaçãoAplicações Práticas do Uso de Vetores
Prof. Vinícius Breda
8/17/2019 Lógica de Programação - Listas
2/30
Vetor como Lista
● Os vetores possuem muitas aplicações,dentre elas a de servir como uma lista paraarmazenar dados.
● Nesta aula será estudado como utilizar umvetor como uma lista de dados, sendocapaz de organizar o vetor e pesquisaralgum dado no mesmo.
8/17/2019 Lógica de Programação - Listas
3/30
Utilizando um Vetor como Lista
magine um programa que deva fazer a leitura de !"n#meros e em seguida apresentá$los na mesmaordem em que foram informados.
%eriamos o seguinte algorítmo&' ( )efiniar a varíavel do tipo inteiro para controlar
a mal*a de repetiç+o! ( )efiniar o vetor Numero do tipo inteiro para os
!" n#meros- ( niciar o programa fazendo a leitura dos !"
n#meros e armazená$los no vetor Numero ( /presentar ap0s a leitura os !" n#meros.
8/17/2019 Lógica de Programação - Listas
4/30
Utilizando um Vetor como Lista
Diagrama de BlocosInício
I = 0, I < 20,I = I + 1
Numeros[I]
I = 0, I < 20,I = I + 1
Numeros[I]
Fim
8/17/2019 Lógica de Programação - Listas
5/30
Utilizando um Vetor como Lista
PseudocódigoAlgoritmos 1istaInícioar inteiro , Numeros2!"3
para 4 ", 5 !", 4 6' !aça leia7Numero238!im"para
para 4 ", 5 !", 4 6' !aça escrea7Numero238!im"para
#im
8/17/2019 Lógica de Programação - Listas
6/30
$lassi!icação dos %lementos de
um Vetor 9eria :astante #til se o programa, antes de apresentaros n#meros, efetuasse o processamento deordenaç+o crescente, facilitando assim a localizaç+o
de algum n#mero, quando for efetuada umapesquisa visual.
;
8/17/2019 Lógica de Programação - Listas
7/30
$lassi!icação dos %lementos de
um Vetor Para fazer a ordenaç+o do vetor, acrescentaremosmais um passo ao algoritmo anterior.
%eriamos o seguinte algorítmo&' ( )efiniar a varíavel do tipo inteiro para controlar a
mal*a de repetiç+o! ( )efiniar o vetor Numero do tipo inteiro para os !"
n#meros
- ( niciar o programa fazendo a leitura dos !"n#meros e armazená$los no vetor Numero
& ' $olocar em ordem crescente os elementos doetor(
> ( /presentar ap0s a leitura os !" n#merosordenados.
8/17/2019 Lógica de Programação - Listas
8/30
$lassi!icação dos %lementos de
um Vetor Para fazer a ordenaç+o do vetor, acrescentaremosmais um passo ao algoritmo anterior.
%eriamos o seguinte algorítmo&' ( )efiniar a varíavel do tipo inteiro para controlar a
mal*a de repetiç+o! ( )efiniar o vetor Numero do tipo inteiro para os !"
n#meros
- ( niciar o programa fazendo a leitura dos !"n#meros e armazená$los no vetor Numero
& ' $olocar em ordem crescente os elementos doetor(
> ( /presentar ap0s a leitura os !" n#merosordenados.
8/17/2019 Lógica de Programação - Listas
9/30
$lassi!icação dos %lementos de
um Vetor /gora falta definir como o quarto passo, ou se?a, aordenaç+o do vetor será feita. Para isso consideraremoso seguinte algoritmo&
' ( @omparar n#mero da primeira posiç+o do vetor comtodos os outros
! ( Auando o n#mero comparado for maior, trocar am:osde posiç+o
- ( /p0s comparar o n#mero na primeira posiç+o comtodos os outros, comparar o n#mero da segundaposiç+o com os de posiç+o maior
( Auando o n#mero comparado for maior, trocar am:osde posiç+o
> ( @ontinuar o processo, comparando o n#mero naterceira posiç+o, quarta, etc, at= que todos ten*am sidocomparados.
8/17/2019 Lógica de Programação - Listas
10/30
%)emplo de *rdenação
$rescente)ado o seguinte vetor de cinco posições&
N2"3 4
N2'3 4 CN2!3 4 DN2-3 4 >N23 4 -
Podemos ordená$lo em ordem crescente seguindoos passos do algoritmo anterior, gerando oseguinte resultado a cada passo&
8/17/2019 Lógica de Programação - Listas
11/30
%)emplo de *rdenação
$rescente
Passo 5 N[0] = 3N[1] = 9
N[2] = 8
N[3] = 7 N[4] = 5
Passo 1
N[0] = 8
N[1] = 9
N[2] = 7 N[3] = 5
N[4] = 3
Passo 2
N[0] = 8
N[1] = 9
N[2] = 7
N[3] = 5
N[4] = 3
Passo 3
N[0] = 7
N[1] = 9
N[2] = 8N[3] = 5
N[4] = 3
Passo 4
N[0] = 5
N[1] = 9
N[2] = 8 N[3] = 7
N[4] = 3
Passo N[0] = 3N[1] = 8
N[2] = 9N[3] = 7
N[4] = 5
Passo 7 N[0] = 3N[1] = 7
N[2] = 9 N[3] = 8N[4] = 5
Passo 8 N[0] = 3 N[1] = 5
N[2] = 9
N[3] = 8
N[4] = 7
8/17/2019 Lógica de Programação - Listas
12/30
%)emplo de *rdenação$rescente
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] = 7N[3] = 9
N[4] = 8
!esu"#a$o
N[0] = 3 N[1] = 5
N[2] = 7 N[3] = 8
N[4] = 9
8/17/2019 Lógica de Programação - Listas
13/30
$lassi!icação dos %lementos deum Vetor ' *rdenação $rescente
/ seguir = mostrado o diagrama de :locos e opseudoc0digo do completo do programa capaz deler !" n#meros, ordená$los em ordem crescente
7utilizando o m=todo visto8 e mostrá$los para ousuário.
/ primeira e a #ltima parte do diagrama de :locos ?áfoi estuda no início dessa aula. 9+o as partes que
fazem a leitura e e
8/17/2019 Lógica de Programação - Listas
14/30
$lassi!icação dos %lementos deum Vetor ' *rdenação $rescente
Início
I = 0, I < 20,I = I + 1
Numeros[I]
I = 0, I < 20,I = I + 1
Numeros[I]
Fim
I = 0, I < 19,I = I + 1
% = I+1, % < 20,% = % + 1
Numero[I]&
Numero[%]
' = Numero[I] Numero[I] = Numero[%]
Numero[%] = '
(
8/17/2019 Lógica de Programação - Listas
15/30
$lassi!icação dos %lementos deum Vetor ' *rdenação $rescente
O primeiro a ser o:servado = a utilizaç+o de umasegunda variável para controlar o índicesu:sequente no processo de ordenaç+o, no caso a
variável +.O:serve que no primeiro loop para a variável I =iniciada em ", e no segundo loop para a variável + = iniciada em I,-. sso implica na seguintesequEncia& .uando I !or + será
" ',!,-,,>,F,D,...,'
' !,-,,>,F,D,...,'
! -,,>,F,D,...,'
- ,>,F,D,...,'
... G,'
'C '
8/17/2019 Lógica de Programação - Listas
16/30
$lassi!icação dos %lementos deum Vetor ' *rdenação $rescente
O:serve que somente quando a variável + atinge ovalor ' = que este looping se encerra, retornandoao looping da variável I, acrescentando mais um
em I at= que I atin?a o seu limite e am:os osloopings se?am encerrados.Auando a variável I for ", a variável + será ' e contará
at= '. /o final deste ciclo, a variável I =acrescentada de mais ' tornando$se ' assim sendo
a variável + passa a ser !. Auando a variável + voltar a ser ', a variável I passa a ser ! e a variável+ passa a ser -. ;ste ciclo irá ser e
8/17/2019 Lógica de Programação - Listas
17/30
$lassi!icação dos %lementos deum Vetor ' *rdenação $rescente
Outro ponto a ser o:servado = o fato da utilizaç+o do algoritmode troca, que utiliza a instruç+o se Numero23 / Numero2H3então. /p0s a verificaç+o desta condiç+o, sendo o primeiron#mero maior que o segundo, efetua$se ent+o a sua troca
com o algoritmo&
I 4 Numero23Numero23 4 Numero2H3Numero2H3 4 I
@onsidere o vetor Numero23 com valor '> e o vetor Numero2H3com valor '". /o final Numero23 deverá estar com '" eNumero2H3 deverá estar com '>. Para conseguir este efeito,= necessária a utilizaç+o de uma variável de apoio, que foi
c*amada de 0.
8/17/2019 Lógica de Programação - Listas
18/30
$lassi!icação dos %lementos deum Vetor ' *rdenação $rescente
I 4 Numero23Numero23 4 Numero2H3Numero2H3 4 I
Para que o vetor Numero23 fique livre para rece:er o valor dovetor Numero2H3, 0 deverá rece:er o valor de Numero23. /ssim sendo, 0 passa a ser '>. Neste momento pode$seimplicar o valor de Numero2H3 em Numero23. )esta forma ovetor Numero23 passa a possuir o valor '". ;m seguida o
vetor Numero2H3 rece:e o valor que está em 0. /o final desteprocesso, ter$se$á Numero23 com '" e Numero2H3 com '>.
8/17/2019 Lógica de Programação - Listas
19/30
$lassi!icação dos %lementos deum Vetor ' *rdenação $rescente
Algoritmos 1istaJcrescenteInício
// declaração das variáveisar inteiro , H, Numeros2!"3
// rotina de entrada de dadospara 4 ", 5 !", 4 6' !aça
leia7Numero238!im"para
8/17/2019 Lógica de Programação - Listas
20/30
$lassi!icação dos %lementos deum Vetor ' *rdenação $rescente
// rotina de processamento de ordenação crescente
para 4 ", 5 ', 4 6' !aça para H 4 6', H5!", H 4 H6' !aça se 1 Numero23 K Numero2H3 2 então I 4 Numero23 Numero23 4 Numero2H3 Numero2H3 4 I
!im"se !im"para!im"para
8/17/2019 Lógica de Programação - Listas
21/30
$lassi!icação dos %lementos deum Vetor ' *rdenação $rescente
// rotina de saída com dados ordenadospara 4 ", 5 !", 4 6' !aça escrea7Numero238!im"para
#im
8/17/2019 Lógica de Programação - Listas
22/30
$lassi!icação dos %lementos deum Vetor ' *rdenação Al!a34tica
/gora que ?á sa:emos como ordenar um vetor num=rico,vamos adaptar nosso c0digo para um vetor do tipocadeiaL
Mazer um c0digo capaz de ler o nome de !" pessoas,organizar os nomes em ordem alfa:=tica e e
8/17/2019 Lógica de Programação - Listas
23/30
54todos de Pes6uisa em um Vetor
Auando se tra:al*a com vetores, eles poder+o ser muitograndes, dificultando localizar um determinadoelemento de forma rápida. magine um vetor possuindo""" elementos, como nome de pessoas. esmoestando em ordem alfa:=tica, seria demorado ee
8/17/2019 Lógica de Programação - Listas
24/30
54todo de Pes6uisa 7e6uencial
;ste = o m=todo mais simples, e consistem em efetuar a:usca da informaç+o dese?ada a apartir do primeiroelemento sequencialmente at= o #ltimo. 1ocalizando ainformaç+o no camin*o, ela = apresentada.
;ste m=todo de pesquisa = lento, por=m eficiente noscasos em que uma matriz encontra$se com seuselementos desordenados.
8/17/2019 Lógica de Programação - Listas
25/30
54todo de Pes6uisa Binária
;m m=dia, este m=todo de pesquisa = mais rápido que om=todo sequencial, por=m e
8/17/2019 Lógica de Programação - Listas
26/30
54todo de Pes6uisa Binária
@omo e
8/17/2019 Lógica de Programação - Listas
27/30
54todo de Pes6uisa Binária
Pelo processo de pesquisa :inária, devemos dividir a listapela metade. 9endo assim, D di ! 4 -. O:serve que oque nos interessa = somente o valor inteiro doquociente. 1ogo a lista fica dividida em duas, comosegue&
8ndice 9omes
" /ndr=' @arlos
! Mrederico
8ndice 9omes
- Rolias
9ílvia
> 9ílvio
F Qaldir
Primeira Par#e )e*un$a Par#e
8/17/2019 Lógica de Programação - Listas
28/30
54todo de Pes6uisa Binária
;stando a lista dividida em duas partes, deverá serverificado se a informaç+o Qaldir está na primeira ouna segunda parte. )etecta$se que Qaldir está nasegunda parte. )esta forma despreza$se a primeiraparte e divide$se em duas partes novamente a segundaparte. @omo s+o elementos divididos por !, resultamduas ta:elas com dois elementos&
8ndice 9omes
- Rolias
9ílvia
8ndice 9omes
> 9ílvio
F Qaldir
Primeira Par#e)e*un$a Par#e
8/17/2019 Lógica de Programação - Listas
29/30
54todo de Pes6uisa Binária
/p0s esta segunda divis+o, verifica$se em qual das partesQaldir está situado. @omo está na segunda parte,despreza$se a primeira e divide$se a segunda partenovamente por dois, so:rando um elemento em cadaparte.
/p0s a terceira divis+o, Qaldir = encontrado na segundaparte da lista. 9e for pesquisado um elemento que n+oe 9ílvio
8ndice 9omes
F Qaldir
Primeira Par#e )e*un$a Par#e
8/17/2019 Lógica de Programação - Listas
30/30
%)ercícios para a Aula
)esenvolver o diagrama de :locos e pseudoc0digo paraas pesquisas sequencial e :inária, aplicadas a uma listacom !" nomes.