Você está na página 1de 33

Universidade Lúrio

Faculdade de Engenharias

Engenharia Informática
FUNDAMENTOS DE
PROGRAMAÇÃO- FP

Vectores ou arranjos de uma dimensão


Matrizes ou arranjos de duas dimensões

17-11-23 Eng. Maurício Filipe João Quembo


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);

É a única solução ?
...
end.
•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 Valor
Comum para todos Semelhante a uma
os elementos variável simples
Vectores:
variáveis compostas
homogêneas
• Um só tipo;
• Um só nome;
• Múltiplas posições de memória
identificadas por índices.
Vector ou Arranjo de uma dimensão
• conjunto ordenado de informações de mesma
natureza
• elementos todos do mesmo tipo
• acesso randômico

1 2 3 4 5 6 7 8 9
Nota 8,5

Nota [3] vale 8,5


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 Nota [ 6 ]
readln( Nota [ 5 ] );
Nota [ 1 ] := 7.5 ;
Nota [ 2 ] := Nota [ 1 ] + 2 ;
if Nota [ 1 ] > 6.0
then writeln (‘Aprovado’);
...
Arranjo - Pascal
< nome do arranjo > [ < índice > ]

Variável indexada
Índice
• constante / nome de Ex:
variável / expressão
var Nota : array [1 .. 9] of real;
Indice : integer;
• deve ser inteiro ou
begin
char (dependendo do
Indice := 5;
que foi definido)
readln ( Nota [ Indice ] );
Nota [ Indice + 1 ] := 7.5 ;
...
Ex: Nota [ 6 ]
1 2 3 4 5 6 7 8 9

Nota
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 2 3 4 5 6 7 … 100

Valor 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 aluno }
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 vector X de 20 posições inteiras
por leitura.

2. Mostrar o vector obtido


3. Informar o menor elemento deste vector.
4. Informar o valor do maior elemento, e sua
posição.
5. Informar quantos valores ímpares existem no
vector 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 vector 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 vector.
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 1 = 10
Valor armazenado na posicao 2 = 20
Valor armazenado na posicao 3 = 30
Valor armazenado na posicao 4 = 40
Valor armazenado na posicao 5 = 50
Valor armazenado na posicao 6 = 20
Valor armazenado na posicao 7 = 60
Valor armazenado na posicao 8 = 120
Valor armazenado na posicao 9 = 200
Valor armazenado na posicao 10 = 300
Exercício

Preencha um vector X de 10 posições


inteiras por leitura. Preencha um vetor Y,
também de 10 posições inteiras, por
leitura.
Preencha um vector V1 com a soma de X e
y, em cada posição.
Preencha um vector V2 com a diferença de
X e Y, em cada posição.
Exercício

Leia 6 nomes e os armazene em um vector 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 vector de 20 posições inteiras e
classifique os valores do vector 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.
O que NÃO podemos fazer com Vetores
•Não é possível:
•a) Não se pode ler todo um vetor diretamente com um comando read. Não se pode
escrever: read(v);

É necessário ler casa a casa, diretamente, ou com um laço de repetição como for no
exemplo acima.
•b) Não se pode escrever todos os elementos de um vetor com um único comando
write. Não é permitido escrever: write(v). Também nesse caso cada elemento deve ser
tratado como uma variável independente, por exemplo:

for i:= 1 to 6 do write(v[i]:3);


•c) Não é possível copiar os valores dos elementos de um vetor para outro com um
único comando de atribuição. Ou seja, dados dois vetores v e w, ambos do mesmo
tamanho e do mesmo tipo, não é permitido fazer: w:= v; . Também aqui é necessário
trabalhar elemento a elemento, e o comando for mais uma vez é indicado:

for i:= 1 to 6 do w[i]:= v[i];


•d) Não existe comandos ou funções que dão o tamanho (número de elementos) de um
vetor.
•e) Não é permitido tentar acessar uma posição fora do intervalo de posições definido
para o vetor. A tentativa causará um erro em tempo de execução e o programa
abortará. No caso do vetor v com 6 posições, por exemplo, não é permitido escrever:
v[8]:= 20, read(v[8]) ou write (v[8]) porque a faixa de valores das posições vai de 1 a 6
apenas.
27
O que PODEMOS fazer com Vectores
•O que é permitido:
•a) A faixa de valores das posições não precisa começar em 1. Qualquer
intervalo de valores pode ser usado na definição de um vector. Por
exemplo, podemos definir um vetor assim:

var v:array[15..20] of real;


Nesse caso o vector v terá apenas os elementos: v[15], v[16], v[17], v[18],
v[19] e v[20]
•b) As posições não precisam ser necessariamente números inteiros.
Podem ser qualquer tipo ordinal, ou seja, que possa ser definido por
uma sequência ordenada de valores. Por exemplo, os caracteres em
Pascal formam uma sequência ordenada na tabela de caracteres, e
podem portanto serem marcadores de posição em um vetor.

Podemos definir um vetor assim:


var letras: array['a'..'z'] of integer;
Nesse caso os elementos do vetor são: letras['a'], letras['b'], ….., letras['z']
Um uso possível para esse vector poderia ser que cada posição poderia
guardar a quantidade de vezes que a letra dessa posição aparece em
uma determinada frase.
28
O que são Matrizes?
•Os elementos de um vetor guardam uma relação de posicionamento
entre si apenas em uma dimensão.
•Essas variáveis estão dispostas como que em uma linha, e cada
elemento é identificado pela sua posição relativa na linha:

•Quando há mais de uma dimensão, damos o nome de matriz a esse


arranjo de variáveis.
•O caso mais comum é a matriz de 2 dimensões. Os elementos ficam
dispostos em um plano, composto por várias linhas do mesmo
tamanho, como abaixo:

29
O que são Matrizes?
•Na matriz de inteiros anterior, existem 3 linhas, cada linha com 4
colunas, ou 3x4 (três por quatro). Essa matriz pode ser declarada
assim:

var mat: array[1..3, 1..4] of integer;


•Após o nome da matriz, são colocados entre colchetes os intervalos
em que ficam os números das linhas, e os números das colunas,
nessa ordem.

Note que também aqui os elementos da matriz devem ser todos do


mesmo tipo.
•Cada elemento da matriz é identificado pela notação: mat[i,j], onde i
é o número da linha, e j o número da coluna, onde se encontra o
elemento. Na figura acima, temos então que mat[1,1] tem o valor
40. 30
O que são Matrizes?
O comando for... do é muito usado para processar os valores de matrizes.
Exemplos:
a) Para zerar todos os elementos de uma matriz m, com 3 linhas e 4 colunas,
declarada como:
var
m: array[1..3, 1..4] of integer;
basta fazer:
for i:= 1 to 3 do
for j:= 1 to 4 do m[i,j] := 0;
Nota: é usual usar-se a variável i para representar as linhas de uma matriz, a
variável j para representar as colunas.

b) Para ler do teclado valores para preencher a matriz acima (12 valores):
for i:= 1 to 3 do
for j:= 1 to 4 do read(m[i,j] );
Nota: O usuário poderá digitar todos os 12 números em uma só linha (separados
por espaços), ou um número por linha, ou, melhor, 4 números por linha, de forma
a visualizar melhor a matriz.
31
Sintaxe e Declaração de Matrizes

•Sintaxe: <nome array>: array [dimensões] of <tipo>;


•Declaração:
•Var mat:array[1..5,1..3] of integer; {matriz 5x3}
Begin
mat[1,2]:=10;
mat[3,1]:=11;
mat[5,3]:=12;
mat[2,2]:=78;
end.

32
• Obrigado pela atenção

Eng. Mauricio Quembo

33

Você também pode gostar