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.
Download

Slides vetores