CAPÍTULO 7 VETORES
Objetivos da aula (previsão 8 h/aula)
Objetivos da aula 1) ( ) Entender a importância da utilizacão de vetores em um algoritmo 2) ( ) Entender o conceito de índice de vetor e aprender a sua utilizacão. 3) ( ) Aprender a trabalhar com vetores relacionados (associados) 4) ( ) Desenvolver algoritmos para a localizacão de valores em vetores. (1) Totalmente Alcançado (2) Parcialmente Alcançado (3) Não Alcançado
7 Vetores {texto extraído da apostila do Prof. Wilson Castello Branco Neto – UNIPLAC} 7.1 Introdução Os vetores são variáveis estruturadas homogêneas capazes de armazenar uma série de informações de um mesmo tipo em uma única variável. Sua utilização é importante quando é necessário armazenar várias informações, sobre as quais, em geral, serão realizados os mesmos processamentos dentro do programa. Por exemplo, para armazenar a média dos vários alunos de uma turma na memória usando variáveis simples, seriam necessárias “n” variáveis com nomes distintos, o que torna o programa mais complexo de ser elaborado e difícil de ser entendido. Neste caso podese criar uma variável única que contenha todas estas informações. Os vetores são a forma mais simples de variáveis estruturadas homogêneas. São estruturas unidimensionais que armazenam um conjunto de valores de um mesmo tipo. Um vetor é, na verdade, um conjunto contínuo de posições de memória identificado por um nome único. Ex. Vetor para armazenar as cinco notas de um aluno Notas: 7
8
7
6
8
Para ler e/ou escrever informações dentro de um vetor são necessárias duas informações: 1)O nome do mesmo; e 2) A posição dentro dele. Ex: Para cadastrar a última nota do aluno deve ser utilizada o seguinte comando: Notas[5] < 9
Neste comando podese observar que inicialmente foi definido o nome da variável. Como esta variável é um vetor, em seguida foi definida a posição onde o valor deve ser armazenado, neste caso na posição 5. A definição da posição que está sendo manipulada dentro do vetor é sempre feita entre colchetes [ ] após o nome da variável. Gerando como resultado o vetor: Notas: 7
8
7
6
9
Para ler ou escrever alguma informação de um vetor devem ser utilizados os comandos LEIA e ESCREVA, indicando além da variável a posição do vetor que se deseja ler ou escrever. A linha de código a seguir faz a leitura conteúdo digitado no teclado pelo usuário e o armazena na primeira posição do vetor. Leia(Notas[1])
A linha de código a seguir escreve na tela o conteúdo armazenado na segunda posição do vetor. Escreval(Notas[2])
Variáveis podem ser utilizadas como índices de vetores. Por exemplo, o código a seguir deixará o vetor “Teste” com os seguintes valores. inicio X < 5; Teste[1] <10 * X; Teste[2] < 3; Teste[X1] < 10; Teste[X] < X + 10; Fimalgoritmo
Teste 50
3
?
10
15
O símbolo “?” na terceira posição indica que naquela posição existe um valor desconhecido. 7.2 Declaração de Vetores Para declarar uma variável do tipo vetor, utilizamos a seguinte sintaxe: Var Teste : vetor[1..5] de inteiro
A palavra reservada vetor indica que a variável teste será uma variável estruturada homogênea. O intervalo 1..5, entre colchetes, indica a quantidade de posições do vetor. A palavra de, indica o tipo de informações que serão armazenadas dentro do vetor, neste caso números inteiros. Em geral, os vetores são utilizados com estruturas de repetição, e a variável utilizada como contador (cont), para fazer o controle do número de repetições, é também utilizado como índice do vetor. Desta forma, a cada iteração, o valor do contador é incrementado e uma nova posição do vetor e processada (lida, calculada ou escrita). Exemplo 1 Faça um algoritmo que leia um conjunto de 10 números reais e armazeneos em um vetor. algoritmo "exemplo1" var numeros: vetor[1..10] de real cont: inteiro inicio para cont < 1 ate 10 faca escreval("digite um numero real") leia(numeros[cont]) fimpara fimalgoritmo
Neste caso, inicialmente a variável cont tem o valor 1, assim o primeiro número digitado será armazenado na primeira posição do vetor. Na segunda iteração, a variável cont é incrementada para dois e o segundo número digitado será armazenado na posição de numero dois dentro do vetor. Este processo é repetido por dez vezes, e como a variável cont é utilizada como índice do vetor a cada nova iteração uma nova posição do vetor é preenchida, ficando as dez posições completas ao final do programa.
7.3 Utilização de Vários Vetores Relacionados Mais de um vetor pode ser utilizado em um mesmo programa para armazenar informações de diferentes tipos mas que se referem a uma mesma entidade. Por exemplo, supondo que se deseja armazenar o nome, a idade e o sexo de 100 pessoas. Para isto devem ser criados três vetores distintos, um para os nomes, outro para as idades e, por fim, outro para os sexos, conforme código abaixo: Var
Nomes : vetor[1..100] de caracter Idades : vetor[1..100] de inteiro Sexos : vetor[1..100] de caracter
Nomes 1 2 3 João Maria José
4
5
............................ 100
Idades 1 2 3 25 32 19
4
5
............................ 100
Sexos 1 2 3 M F M
4
5
............................ 100
Apesar dos vetores serem armazenados na memória como três variáveis independentes, eles estão logicamente relacionados pelo índice. A pessoa cujo nome está armazenado na posição 1 do vetor “nomes”, tem sua idade armazenada na primeira posição do vetor “idades” e o sexo na posição 1 do vetor “sexos”. Esta associação é facilmente implementada quando se utiliza o contador de uma estrutura de repetição como índice dos três vetores ao mesmo tempo. O trecho de código abaixo é responsável por fazer a leitura dos dados das 100 pessoas e por armazenálos nos vetores. Exemplo 2 – Leitura e armazenamento do nome, idade e sexo de 100 pessoas em três vetores distintos. para cont< 1 ate 100 faca escreval(‘Digite o nome da pessoa : `) leia(nomes[cont]) escreval(‘Digite a idade da pessoa : `) leia(idades[cont]) escreval(‘Digite o sexo da pessoa : `) leia(sexos[cont]) fimpara
O relacionamento entre os diferentes vetores para a recuperação de informações também é feito através dos índices dos mesmos. Por exemplo, para imprimir, o nome da pessoa mais jovem, devese inicialmente procurar a menor idade no vetor idades. Em seguida, de posse da posição onde estava armazenada a menor idade, é possível recuperar o nome desta pessoa, já que ele estará armazenado nesta mesma posição no vetor nomes. Exemplo 3 – Código para encontrar o nome da pessoa mais jovem. {Código para encontrar a menor idade} MenorIdade < Idades[1] para cont < 2 to 100 faca se Idades[cont] < MenorIdade entao MenorIdade < Idades[cont] PosicaoMenorIdade < cont fimse fimpara Escreval(’Pessoa mais jovem : ‘, nomes[PosicaoMenorIdade])
Neste código, inicialmente, é buscada a menor idade no vetor de “idades”. Além de armazenar o valor da menor idade na variável “MenorIdade”, o programa guarda a posição que está esta idade na variável “PosicãoMenorIdade”. Se a menor idade está na posição “PosicãoMenorIdade” no vetor idade, então o nome desta pessoa estará na mesma posição do vetor nomes, como mostrado no último comando do código acima.
7.1 Exercícios 1) Faça o teste de mesa para os algoritmos abaixo. a. Algoritmo "dez_nomes" var nomes: vetor[1..10] de caracter i: inteiro inicio para i:= 1 ate 10 faca nomes[i]< "Joao" fimpara para i:= 1 ate 10 faca escreva(nomes[i], " na posicao ", i) fimpara fimalgoritmo
b. algoritmo "t" var t: vetor[1..10] de inteiro i, n: inteiro inicio escreva("digite um numero") leia(n) para i< 1 ate 10 faca t[i]< i * n fimpara para i< 1 ate 10 faca escreval(i ," X ", n , " = " , t[i]) fimpara fimalgoritmo
c. algoritmo "varias_notas" var notas: vetor[1..5] de real cont: inteiro inicio para cont< 1 ate 5 faca escreva("digite a nota do aluno ", cont) leia(notas[cont]) fimpara para cont< 1 ate 5 faca escreval("o aluno " , cont , " tirou nota " , notas[cont]) fimpara fimalgoritmo
2) Implemente os algoritmos do exercício anterior no Visualg e observe a execução dos mesmos. 3) Implemente um algoritmo que leia as notas de 10 alunos armazenandoas em um vetor (matriz) de 10 posições. Ao final escreva na tela somente as notas maiores que 5.0. 4) Implemente um algoritmo que leia as notas e os nomes de 5 alunos armazenando os dados em vetores (matriz) de 5 posições, sendo que as notas serão armazenadas em um vetor de reais e os nomes em um outro vetor do tipo caractere. Ao final o algoritmo deve escrever na tela somente os nomes dos alunos que tiraram nota maior que 5.0. 5) Desenvolva um algoritmo que leia um conjunto de 15 números inteiros e armazeneos em um vetor A. Após a leitura dos dados o algoritmo deve multiplicar todos os números do vetor A por 3 e armazenar o resultado em um segundo vetor B. 6) Construa um algoritmo que solicite ao usuário o sexo de várias pessoas armazenando os dados em um vetor. Ao final o algoritmo deve imprimir quantas pessoas são do sexo masculino e quantas são do sexo feminino. O algoritmo deve parar de solicitar o sexo quando o número de pessoas chegar a 30. 7.2 Exercícios Desenvolva os algoritmos abaixo, observando as gradativas alterações nos códigos à medida que são solicitadas novas características ao problema. 1) Algoritmo para fazer a leitura da idade de dez pessoas e armazenálas em um vetor 2) Algoritmo para localizar a menor idade entre as 10 idades que estão armazenadas em um vetor de idades. 3) Algoritmo que leia o nome e a idade de dez pessoas armazenando os dados em vetores. 4) Algoritmo que leia o nome e a idade de dez pessoas armazenando os dados em vetores e que localize o nome da pessoa de menor idade. 5) Algoritmo que leia o nome, a idade, e o sexo de dez pessoas armazenando os dados em vetores. 6) Algoritmo que leia o nome, a idade, e o sexo de dez pessoas armazenando os dados em vetores e que localize o nome e o sexo da pessoa de menor idade. 7) Algoritmo que leia o nome, a idade, e o sexo de dez pessoas armazenando os dados em vetores e que faca a contagem do numero de pessoas do sexo masculino e do sexo feminino que possuem idade maior que 18.
8) Algoritmo que leia o nome, a idade, e o sexo de dez pessoas armazenando os dados em vetores e que imprima o nome das pessoas do sexo masculino que possuem idade maior que 18. 7.3 Exercícios 1) Elabore um algoritmo que leia a nota de 80 alunos e que imprima ao final a nota de cada aluno e a média da turma (utilize a estrutura de repetição enquanto faca). 2) Elabore um algoritmo que leia a nota de 80 alunos e que imprima ao final a nota de cada aluno e a média da turma (utilize a estrutura de repetição para faca). 3) Elabore um algoritmo que armazene o nome e duas notas de 5 alunos e imprima uma listagem contendo nome, as duas notas e a média de cada aluno. 4) Elabore um algoritmo que armazene números em dois vetores inteiros de cinco elementos cada, gere e imprima o vetor soma. 5) Um armazém trabalha com 100 mercadorias diferentes identificadas pelos números inteiros de 1 a 100. O dono do armazém anota a quantidade de cada mercadoria vendida durante o mês. Ele tem uma tabela que indica para cada mercadoria o preço de venda. Elabore um algoritmo para calcular o faturamento mensal do armazém, ou seja: faturamento = ∑ (quantidadei * preçoi); Exemplo Quantidade Preço Subtotal (R$) 1 20,00 20,00 4 10,00 40,00 6 15,00 90,00 150,00 Faturamento 6) Elabore um algoritmo que leia um conjunto X com 10 números e calcule a diferença entre o maior e o menor elemento existente. 7) Elabore um algoritmo que leia um conjunto X com 10 números e calcule a diferença entre as posições que maior e o menor elemento existentes ocupam. 8) Dada uma coleção de N números, imprimir o índice do primeiro número negativo, se houver.
9) Elabore um algoritmo que leia nome e salário de 20 pessoas. Calcular e armazenar o novo salário sabendose que o reajuste foi de 8%. Ao final imprimir uma listagem numerada com nome e novo salário. 10) Elabore um algoritmo que leia o nome, a idade e o sexo de 10 pessoas e imprima (Caso preferir, desenvolva algoritmos separados para cada item): a) média de idade das pessoas b) nome da pessoa mais jovem c) nome da pessoa mais idosa d) nome e a idade do homem mais jovem e) nome e idade da mulher mais idosa