Vetores ou arranjos de uma dimensão Prof. Luis Otavio Alvares (Adaptado de material da profa. Magda Bercht) Ex: Ler as notas de 30 alunos. Calcular e informar a média da turma. Program MediaTurma; var Nota : real; { nota de um aluno } Media, Soma: real; Aluno: integer; { variável de controle da repetição } begin Soma := 0; { inicializa a soma das notas } for Aluno := 1 to 30 do { para cada aluno da turma } begin readln(Nota); { obtém a nota do aluno } Soma := Soma + Nota end; Media := Soma / 30; writeln(‘Media da turma: ’, Media:5:1); end. Ex: Ler as notas de 30 alunos. Calcular e informar a média da turma. Informar, ainda, as notas que são superiores à média calculada. Program MediaTurma; var Nota : real; { nota de um aluno } Media, Soma: real; Aluno: integer; { variável de controle da repetição } begin Soma := 0; { inicializa a soma das notas } for Aluno := 1 to 30 do { para cada aluno da turma } begin readln(Nota); { obtém a nota do aluno } Soma := Soma + Nota end; Media := Soma / 30; writeln(‘Media da turma: ’, Media:5:1); end. ? Ex: Ler as notas de 30 alunos. Calcular e informar a média da turma. Informar, ainda, as notas que são superiores à média calculada. Program MediaNotasSup_1; var N1, N2, N3, N4, N5, N6, {... N30 : real; { uma variável para } Media, Soma: real; { cada nota dos alunos ! } Aluno: integer; { variável de controle da repetição } begin readln(N1, N2, N3, N4, N5, N6, ... , N30); { obtém as 30 notas } Soma := N1+N2+N3+N4+N5+N6+ ... +N30; Media := Soma / 30; writeln(‘Media da turma: ’, Media:5:1); if N1 > Media { testa cada nota !!! } then writeln(N1); if N2 > Media then writeln(N2); ... end. É a única solução ? •Vamos precisar de 30 variáveis para armazenar os valores lidos!!!! •Essas 30 variáveis são do mesmo tipo. •Como simplificar isso, para não precisar declarar 30 variáveis diferentes? Solução para o problema de múltiplas variáveis de mesmo tipo: um vetor Índice Posição identificando cada elemento 1 2 3 4 5 6 7 8 9 Nota Nome Comum para todos os elementos Valor Semelhante a uma variável simples Vetores: variáveis compostas homogêneas • Um só tipo; • Um só nome; • Múltiplas posições de memória identificadas por índices. Vetor ou Arranjo de uma dimensão • conjunto ordenado de informações de mesma natureza • elementos todos do mesmo tipo • acesso randômico 1 Nota 2 3 4 8,5 Nota [3] vale 8,5 5 6 7 8 9 Arranjo - Pascal Declaração Tipo ‘array’ array [ < limite inferior > .. < limite superior > ] of < tipo > • limites devem ser inteiros ou caracteres • tipo: qualquer tipo Pascal Ex: var Nota : array [1 .. 30] of real; Y : array [10 .. 15] of string; Z : array [-5 .. 3] of integer; Arranjo - Pascal Utilização Variável indexada < nome do arranjo > [ < índice > ] 1 2 3 4 5 6 7 8 9 Nota Ex: var Nota : array [1 .. 9] of real; begin readln( Nota [ 5 ] ); Nota [ 1 ] := 7.5 ; Nota [ 2 ] := Nota [ 1 ] + 2 ; if Nota [ 1 ] > 6.0 then writeln (‘Aprovado’); ... Nota [ 6 ] Arranjo - Pascal < nome do arranjo > [ < índice > ] Variável indexada Índice Ex: • constante / nome de variável / expressão var Nota : array [1 .. 9] of real; Indice : integer; begin Indice := 5; readln ( Nota [ Indice ] ); • deve ser inteiro ou char (dependendo do que foi definido) Nota [ Indice + 1 ] := 7.5 ; ... Ex: Nota [ 6 ] 1 Nota 2 3 4 5 6 7 8 9 Ex: Preencher por leitura um arranjo de 100 elementos inteiros. var Valor : array [1 .. 100] of integer; Ind : integer; begin for Ind := 1 to 100 do readln ( Valor [ Ind ] ); ... Ind 1 Valor 2 3 4 5 6 7 … 100 X Ex: Somar os elementos de um arranjo X de 200 posições ... Soma := 0; for I := 1 to 200 do Soma := Soma + X [ I ] ; ... Ex: Ler as notas de 30 alunos. Calcular e informar a média da turma. Informar, ainda, as notas que são superiores à média calculada. Program MediaNotasSup_2; var Nota : array [1 .. 30] of real; { vetor para as notas } Media, Soma: real; Aluno: integer; { variável de controle da repetição } begin Soma := 0; { inicializa Soma } for Aluno := 1 to 30 do { para cada a luno } begin readln (Nota [Aluno]); { obtém sua nota} Soma := Soma + Nota [Aluno]; { acumula a soma } end; Media := Soma / 30; writeln(‘Media da turma: ’, Media:5:1); for Aluno := 1 to 30 do { imprime notas maiores que a média } if Nota [Aluno] > Media then writeln (Nota[Aluno]) end. Exercício: Faça um programa para: 1. Preencher um vetor X de 20 posições inteiras por leitura. 2. Mostrar o vetor obtido 3. Informar o menor elemento deste vetor. 4. Informar o valor do maior elemento, e sua posição. 5. Informar quantos valores ímpares existem no vetor X var I, posicao, totimpar, maior, menor: integer; X:array [1..20] of integer; begin {1. Preencher um vetor X de 20 posições por leitura.} for I:=1 to 20 do begin write('Digite um valor inteiro: '); readln(X[I]); end; {2. Mostrar o vetor obtido } for I:=1 to 20 do writeln('Posicao ',i,': ',X[I]); {3.Informar o menor elemento deste vetor} menor:=X[1]; for I:=1 to 20 do if X[I]< menor then menor:=X[I]; writeln('O menor elemento do vetor eh: ',menor); {4. Informar o valor do maior elemento, e sua posição} maior:=X[1]; for I:=1 to 20 do if X[I]>maior then begin maior:=X[I]; posicao:=I; end; writeln('O maior elemento do vetor eh: ',maior); writeln('e esta na posicao: ', posicao); {5. Informar quantos valores ímpares existem no vetor X } totimpar:=0; for I:=1 to 20 do if X[I] mod 2 <>0 then totimpar:=totimpar+1; writeln( 'o vetor X contem ',totimpar, ' valores impares'); readln; end. Exercício Faça um programa que leia um valor n correspondente ao número de valores a serem lidos. Leia também os n valores e depois mostre estes valores na ordem inversa da leitura. Var seq,n:integer; v:array [1..20] of integer; begin write('Digite o comprimento da sequencia (max. 20): '); readln(n); writeln('Digite uma sequencia com ',n,' numeros inteiros: '); {leitura da sequencia} for seq:= 1 to n do readln(v[seq]); {mostra na ordem inversa} for seq:= n downto 1 do write(v[seq],' '); readln; end. Exercício Ler 5 valores inteiros e armazenar nas posições iniciais de um vetor de 10 posições. Nas posições seguintes, armazenar sucessivamente o dobro da primeira posição, o triplo da segunda posição, etc. Mostrar os valores armazenados em cada posição do vetor. var i:integer; N:array[1..10] of integer; begin for I:= 1 to 5 {leitura dos 5 valores} do begin write('digite um valor inteiro: '); readln(N[I]); end; for I:=1 to 5 do {preenche posicoes 6 a 10} N[I+5] := N[I]* (I+1); for I:=1 to 10 do {mostra todo o vetor} writeln('Valor armazenado na posicao ',I, ' = ',N[I]); readln; end. Exemplo de execução: digite um valor inteiro: 10 digite um valor inteiro: 20 digite um valor inteiro: 30 digite um valor inteiro: 40 digite um valor inteiro: 50 Valor armazenado na posicao Valor armazenado na posicao Valor armazenado na posicao Valor armazenado na posicao Valor armazenado na posicao Valor armazenado na posicao Valor armazenado na posicao Valor armazenado na posicao Valor armazenado na posicao Valor armazenado na posicao 1 = 10 2 = 20 3 = 30 4 = 40 5 = 50 6 = 20 7 = 60 8 = 120 9 = 200 10 = 300 Exercício Preencha um vetor X de 10 posições inteiras por leitura. Preencha um vetor Y, tambem de 10 posicoes inteiras, por leitura. Prencha um vetor V1 com a soma de X e y, em cada posição. Preencha um vetor V2 com a diferença de X e Y, em cada posição. Exercício Leia 6 nomes e os armazene em um vetor de 6 posições. Depois disso, coloque o conteúdo da primeira posição na última, o da segunda posição na penúltima e assim sucessivamente. Mostre o resultado. Var vet:array [1..6] of string; aux:string; i:integer; begin {leitura dos nomes} for I:=1 to 6 do begin write('Informe o nome ',I,': '); readln(vet[I]); end; {alteracao do vetor} for I:=1 to 3 do begin aux:= vet[I]; vet[I] := vet[7-I]; vet[7-I]:=aux; end; {mostra resultado} writeln('Nomes reordenados: '); for I:=1 to 6 do writeln(vet[I]); readln; end. Exercício Faca um programa que preencha por leitura um vetor de 20 posições inteiras e classifique os valores do vetor colocando-os em ordem crescente. const TV = 5; {define TV como uma constante com valor 5} var I,J,aux:integer; X:array [1..TV] of integer; begin writeln('informe o vetor X'); for I:=1 to TV do readln(X[I]); {classifica o vetor} for I:=1 to TV do for J:=1 to TV - 1 do if X[J]>X[J+1] then begin aux:=X[J]; X[J]:=X[J+1]; X[J+1]:=aux; end; {mostra o vetor ordenado} writeln('vetor classificado:'); for I:=1 to TV do write(X[I]:4); readln; end.