Baixe o app para aproveitar ainda mais
Prévia do material em texto
VETORES Prof. Cipriano Carneiro DEFINIÇÃO Vetores são estruturas estáticas que armazenam diversas variáveis do mesmo tipo e sequencialmente em memória. Eles podem conter variáveis primitivas ou complexas. E são acessáveis por índices. (número inteiro que varia de 0 a n ou de 1 a n). CADA ITEM EM UM VETOR É CHAMADO DE ELEMENTO, E CADA ELEMENTO É ACESSADO PELA POSIÇÃO NUMÉRICA. COMO NA ILUSTRAÇÃO ABAIXO AS POSIÇÕES SÃO NUMERADAS A PARTIR DO 0. O 9O ELEMENTO, POR EXEMPLO, É ACESSADO NA POSIÇÃO 8. ARRAYS E DIMENSÕES ARRAYS UNI E BIDIMENSIONAIS Sabe-se que um array é uma série de elementos do mesmo tipo (primitivo ou não) endereçáveis por um índice. Contudo, esse índice pode ter mais de uma dimensão. Aumentando, assim, a capacidade de organização da informação na memória. Na matemática chamamos de vetor os arrays unidimensionais e matriz os arrays bidimensionais. QUAL A DIMENSÃO MÁXIMA DE UM ARRAY? Arrays multidimensionais podem conter quantos índices forem necessários. Contudo, a quantidade de memória necessária para armazenar um array multidimensional cresce em proporção geométrica. Observe o exemplo: char seculo[100][365][24][60][60] O array multidimensional acima armazenaria cada segundo dos próximos 100 anos. Apenas a declaração de tal estrutura consumiria 3 GB de memória! Arrays multimensionais são apenas abstrações para os programadores, desde que se obtenha o mesmo resultado, basta organizar o fator entre os índices. Por Exemplo: int x[3][5]; é equivalente a int x[15]; Deve-se avaliar a relevância de arrays multidimensionais com cuidado; Os mais utilizados são os uni e bidimensionais. Os bidimensionais carregam as vantagens óbvias das operações com matrizes da matemática; MATRIZ A contrapartida clássica de uma matriz é o que aprendemos na escola. Uma organização endereçável pelo cruzamento de linhas e colunas. (No exemplo um matriz (3x4) 0 1 2 3 DECLARANDO UM VETOR C = Vetor [1..n] de inteiro; ou C = Vetor[n] de inteiro; N = Vetor [1..n] de real; ou C = Vetor[n] de real; C = Vetor [1..n] de cadeia; ou C = Vetor[n] de cadeia; OBS.: algoritmicamente falando n pode ser indeterminado, mas na prática para se criar um vetor ele deve ser conhecido previamente. Lembre-se que vetores são estruturas estáticas; 1. algoritmo "LeituraEscritaVetor" 2. var 3. vetorA : vetor[0..9] de real 4. i:inteiro 5. inicio 6. escreval("Digite 10 números inteiros: ") 7. para i de 0 ate 9 faca 8. escreva("Elemento[",i,"]: ") 9. leia(vetorA[i]) 10. escreval() 11.fimpara 12.escreval(" ———- VETOR A ———-") 13.para i de 0 ate 9 faca 14. escreva(vetorA[i]," ") 15.fimpara 16.fimalgoritmo EXEMPLO Vamos analisar um algoritmo que leia 3 números inteiros e os coloque em ordem crescente. A diferença do nosso primeiro algoritmo, feito apenas considerando o conhecimento da estrutura de decisão SE, é que, desta vez, utilizaremos a estrutura de vetor. E a solução servirá para mais do que 3 elementos. O que antes era inviável. A IDEIA TRABALHANDO JUNTOS TROCAMOS INFORMAÇÕES Usam-se dois índices “i” e “j” para se descobrir o menor de todos os elementos do vetor a medida que avançamos nos seus valores armazenados. O índice “j” é usado para garantir que os números que estão para trás dele estejam em ordem crescente. O índice “i” é usado para “varrer” o vetor nesta busca a cada interação. Mas, primeiro precisamos criar e ler o vetor com os valores, vamos a primeira parte do algoritmo. 1. algoritmo "OrdemCrescente" 2. var 3. vetorA : vetor[0..2] de inteiro 4. i,j,menor,posmenor,temp:inteiro 5. inicio 6. temp<-0 7. escreval("Digite 3 números inteiros: ") 8. para i de 0 ate 2 faca 9. escreva("Elemento[",i,"]: ") 10. leia(vetorA[i]) 11. escreval() 12.fimpara Além dois índices i e j citados e do próprio vetor. Temos aqui outras variáveis que nos auxiliarão nesta solução. Basicamente neste primeiro trecho são lidos os valores do vetor e a variável temp é iniciada com o valor zero; 13. posmenor<--1 14. menor<-vetorA[j] 15. para j de 0 ate 2 faca 16. para i de j+1 ate 2 faca 17. Se vetorA[i]<menor entao 18. posmenor<-i 19. fimse 20. fimpara 21. se (posmenor>-1) entao 22. menor<-vetorA[posmenor] 23. temp<-vetorA[j] 24. vetorA[j]<-menor 25. vetorA[posmenor]<-temp 26. posmenor<--1 27. fimse 28. fimpara Este é o coração da solução explicada no texto anterior. Entretanto, ela precisa de dois ajustes para funcionar completamente. Vamos descobrir que problemas são estes?!! Simular é um bom caminho. A PARTE FINAL DO ALGORITMO 29.escreval(" ———- VETOR em ordem crescente ———-") 30.para i de 0 ate 2 faca 31. escreva(vetorA[i]," ") 32.fimpara 33.escreval() 34.fimalgoritmo SIMULAÇÃO 1 1 3 2 1 2 3 A primeira sequencia OK. A segunda falha. Porque não mudo o foco de preocupação depois que encontro o menor número na primeira rodada. Encontrei o menor número. Então não preciso e não posso mais me preocupar com ele. Pois o foco agora é encontrar o segundo menor número e assim por diante. Basicamente abandono o menor número encontrado e passo a busca do próximo. 13. posmenor<--1 14. //menor<-vetorA[j] 15. para j de 0 ate 2 faca 16. menor<-vetorA[j] 17. para i de j+1 ate 2 faca 18. Se vetorA[i]<menor entao 19. posmenor<-i 20. fimse 21. fimpara 22. se (posmenor>-1) entao 23. menor<-vetorA[posmenor] 24. temp<-vetorA[j] 25. vetorA[j]<-menor 26. vetorA[posmenor]<-temp 27. posmenor<--1 28. fimse 29. fimpara Este problema é resolvido, simplesmente, trocando-se a posição desta linha. Pois o objetivo é encontrar o menor número da rodada. Com esta linha fora do laço (e agora comentada) o menor número de todos vai atrapalhar o encontro do segundo menor, do terceiro menor, e assim por diante. Observe agora a linha 16. SIMULAÇÃO 2 1 2 3 ok 1 3 2 ok 2 1 3 ok 2 3 1 ok 3 1 2 falha 3 2 1 ok A solução tem que ser efetiva para todos os casos. Sem falhas. O que aconteceu com a sequencia apontada? Simule a sequencia que falha e explique. Qual a solução para consertarmos o algoritmo? VAMOS FAZER AS ATIVIDADES (LISTA 7) FIM
Compartilhar