Lógica e Linguagem de Programação
Prof. Eng. Derig Almeida Vidal
Mestre em Computação Aplicada, Engenheiro de Produção e Tecnólogo em Automática
Aula 07
Estruturas de Dados
Prof. Derig Almeida Vidal, MSc
Sumário
• Introdução • Vetores • Matrizes • Exercícios
Prof. Derig Almeida Vidal, MSc
Introdução
• Ao utilizamos variáveis, podemos armazenar apenas um valor por vez.
• Agora, imagine um programa onde precisa-se armazenar as notas de 5 provas realizadas por um aluno.
• Para isso seria necessário criar cinco variáveis para armazenar as notas.
• Desta forma:
NOTA1, NOTA2, NOTA3, NOTA4, NOTA5 : real;
Prof. Derig Almeida Vidal, MSc
Introdução
• Em Pascal existem estruturas que nos permitem agrupar várias informações dentro de uma mesma variável.
• Estas estruturas são chamadas de: – Vetores; e,
Prof. Derig Almeida Vidal, MSc
Vetores
• Este tipo de estrutura é também chamado de
matriz unidimensional.
• Um vetor é representado por seu nome, tamanho e seu tipo. Sintaxe:
Nome_da_variável : ARRAY[tamanho] of tipo_de_dado;
• O tamanho é o tamanho atribuído ao vetor, em número de elementos e tipo_de_dado é o tipo de elemento armazenado (inteiro, real, etc.).
Prof. Derig Almeida Vidal, MSc
Vetores
• Os vetores poderão armazenar mais de um valor por vez, pois são dimensionados exatamente para este fim.
• Exemplo de declaração:
NOTAS : array[1..5] of real;
• A leitura e exibição de vetores são feitas indicando individualmente quais elementos se deseja ler ou imprimir.
Vetores
• Vejamos como inserir as notas do aluno: NOTAS[1] := 5.2;
NOTAS[2] := 8.0; NOTAS[3] := 9.2; NOTAS[4] := 7.5; NOTAS[5] := 8.3;
• Observe que o nome é um só, o que muda é a informação indicada dentro dos colchetes.
• A esta informação dá-se o nome de índice, sendo
este o endereço onde o valor está armazenado, ou seja, a nota do aluno.
Vetores
• Podemos imaginar o vetor como uma tabela com cinco colunas:
Prof. Derig Almeida Vidal, MSc
Vetores
• Exemplo:
• Para ler dados do teclado e atribuir a um vetor: for i:=1 to 7 do
readln(vetor[i]);
• Para imprimir os elementos de um vetor: for i:=1 to 7 do
writeln(vetor[i]);
Prof. Derig Almeida Vidal, MSc
Vetores
program vetor;
var a: array[1..10] of real; i: integer;
begin
for i:=1 to 10 do begin
writeln(‘digite o elemento ’,i,’ do vetor’); readln(a[i]);
end;
writeln(‘elementos do vetor em ordem inversa’); for i:=10 downto 1 do
writeln(a[i]:8:2); end. i ← 1,10,1 Fim Inicio a [ i ] I ← 10,1,1 a [ i ]
Prof. Derig Almeida Vidal, MSc
Exercícios
1. Leia e exiba o nome de 5 pessoas, armazenando anteriormente em um vetor.
2. Faça um programa que carregue 2 vetores com 5 elementos numéricos cada um e imprima um vetor resultante da intercalação desses 2 vetores.
3. Faça um programa que carregue 1 vetor de 6 elementos inteiros; calcule e imprima a quantidade de números pares e a quantidade de números ímpares.
4. Faça um programa que leia as notas da primeira prova de 5 alunos e armazene essas notas em um vetor. Receba as notas da segunda prova e armazene essas em um outro vetor. Calcule e imprima a média entre essas 2 notas de cada aluno.
Prof. Derig Almeida Vidal, MSc
1ª Questão
Program questao_1;
Var NOME : array[1..5] of string; I: integer;
begin
writeln('Lista de nomes'); for I := 1 to 5 do
begin
write('Digite o ', I:2, ' o. nome: '); readln(NOME[I]);
end;
for I := 1 to 5 do
writeln('Nome: ' , I:2, ' --> ', NOME[I]); end. I ← 1,5,1 Fim Inicio NOME [ I ] I ← 1,5,1 NOME [ I ]
Prof. Derig Almeida Vidal, MSc
2ª Questão
Program questao_2 ; var I,indece : integer;
A,B : array[1..5] of integer; C : array[1..10] of integer; begin
indice := 1; for I:= 1 to 5 do
begin
writeln('Digite valores de A'); readln(A[I]); end; for I:= 1 to 5 do begin writeln('Digite valores de B'); readln(B[I]); end; for I:= 1 to 5 do begin C[indice] := A[I]; indice:=indice+1; C[indice] := B[I]; indice:=indice+1; end; writeln('Valores Intercalados'); for indice:= 1 to 10 do begin writeln(C[indice]); end; End.
Prof. Derig Almeida Vidal, MSc I ← 1,5,1 Fim Inicio A[ I ] indice ← 1 C[Indice] indice ← 1,10,1 indice ← indice+1 I ← 1,5,1 B[ I ] C[indice] ← A[ I ] C[indice] ← B[ I ] indice ← indice+1
3ª Questão
Program questao_3 ;var A : array[1..6] of integer; i,qtdp,qtdi: integer begin qtdp :=0; qtdi :=0; for i:= 1 to 6 do begin writeln('Digite os numeros'); readln(A[i]); end; for i:= 1 to 6 do begin
if (A[i] mod 2 = 0) then
qtdp = qtdp +1; else
qtdi = qtdi +1; end;
writeln(‘O total de pares eh',qtdp); writeln(‘O total de impares eh',qtdi); End. i ← 1,6,1 Fim Inicio qtdp = qtdp +1 qtdi ← 0 qtdi = qtdi +1 A[i] mod 2 = 0 qtdp ← 0 A [ i ] A [ i ] i ← 1,6,1
Prof. Derig Almeida Vidal, MSc
4ª Questão
Program questao_4 ;
var A,B : array[1..5] of integer; i : integer;
C : array[1..5] of real; begin
for i:= 1 to 5 do begin
writeln('Digite a 1a nota do',i,‘o Aluno');
readln(A[i]); end;
for i:= 1 to 5 do begin
writeln('Digite a 2a nota do',i,‘o
Aluno'); readln(B[i]); end; for i:= 1 to 5 do begin C[i]:=((A[i]+B[i])/2); end; for i:= 1 to 5 do begin
writeln('A media do aluno ',i,'º Eh:',C[i]);
end; End.
Prof. Derig Almeida Vidal, MSc I ← 1,5,1 Fim Inicio A[ i ] I ← 1,5,1 C[i] ← ((A[i]+B[i])/2 I ← 1,5,1 B[ i ]
Prof. Derig Almeida Vidal, MSc
Matrizes
• Vamos imaginar que queremos reescrever o programa das notas do aluno, agora mantendo o controle para cinco alunos ao invés de apenas um. • Seria necessário criar cinco vetores (matrizes
unidimensionais), um para cada aluno.
• Para facilitar o trabalho com estruturas deste porte, existem as chamadas matrizes (ou matrizes
multidimensionais).
• A mais comum é a matriz de duas dimensões.
Prof. Derig Almeida Vidal, MSc
Matrizes
• Uma matriz de duas dimensões estará sempre fazendo menção a linhas e colunas e será representada por seu nome e seu tamanho. • Sintaxe:
Nome_matriz : array [dimensão_linha, dimensão_coluna] of <tipo_de_dado>;
• Dimensão_linha é o tamanho da matriz em número de linhas, dimensão_coluna é o tamanho da matriz em número de colunas e tipo_de_dado é o tipo do elemento armazenado(inteiros, reais...).
Prof. Derig Almeida Vidal, MSc
Matrizes
• Vejamos como ficaria a matriz das notas dos nossos 5 alunos:
• Em Pascal:
NOTAS : array[1..5,1..4] of real;
Prof. Derig Almeida Vidal, MSc
Matrizes
• Para atribuir valores:
{Atribui o valor 5 a primeira linha da quarta coluna} X[1,4]:=5;
{Atribui a palavra a primeira linha da quarta coluna} Mat[2,3]:=‘Dia’;
Matrizes
• Para ler valores:
for i:=1 to 5 do begin
for j:= 1 to 3 do readln(mat[i,j]); end;
• Para escrever valores:
for i:=1 to 5 do begin for j:= 1 to 3 do writeln(mat[i,j]); end;
Matrizes
program nota_aluno;var notas : array[1..5,1..4] of real; i, j : integer;
begin
writeln(‘leitura e apresentacao da notas’); for i := 1 to 5 do
begin
writeln(‘informe as notas do ’, i:2, ‘o. aluno: ’); for j:= 1 to 4 do begin write(‘nota’, j:2, ‘:’); readln(notas[i, j]); end; end; for i:= 1 to 5 do begin
write(‘as notas do aluno ’, i:2, ‘ são: ’); for j := 1 to 4 do
write(notas[i, j] :2 :2, ‘ ’); end; end.
Prof. Derig Almeida Vidal, MSc
Exercícios
1. Leia e exiba o nome (1º coluna) e sobrenome (2º coluna) de 5 pessoas.
2. Faça um programa que carregue duas matrizes 3 x 4 com números inteiros, calcule e imprima a matriz resultante da soma dessas duas matrizes.
3. Faça um programa que carregue uma matriz 2 x 2 com números reais, calcule e imprima a soma dos elementos da diagonal principal.
4. Faça um programa que carregue uma matriz 3 x 2 com números inteiros, calcule e imprima o maior elemento da matriz e com a sua respectiva posição (linha e coluna).
Prof. Derig Almeida Vidal, MSc
Exercícios
5. Desenvolver um programa de agenda que cadastre o nome, endereço, CEP, bairro e telefone de 10
pessoas.
Prof. Derig Almeida Vidal, MSc
Bibliografia
• ASCENCIO, Ana Fernanda Gomes. Lógica de Programação com Pascal. São Paulo: Makron Books, 2003.
Prof. Derig Almeida Vidal, MSc
Observações
• Exercícios resolvidos e fluxogramas elaborados por Aldemir Alencar Alves (inspiracaoal@hotmail.com) • Visite o site do professor Derig Almeida Vidal
(https://sites.google.com/site/derigalmeida/) • Caso encontre erros, favor nos informar.