Algoritmos e lp parte 4-vetores matrizes e registros

Post on 27-Jun-2015

7.160 views 6 download

description

vetores, matrizes e registros

Transcript of Algoritmos e lp parte 4-vetores matrizes e registros

Algoritmos e Linguagem de Programação de Programação

Professor: Mauro Jansen

Parte 4 – Vetores, matrizes e registros

03/11/2010

Introdução

� As variáveis que estudamos até o momento guardavam apenas um único valor

� Existe um recurso que nos permite guardar e acessar um conjunto de dados agrupados

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 2

e acessar um conjunto de dados agrupados na memória do computador:� As ESTRUTURAS DE DADOS

� Isso nos permite, por exemplo, guardar a nota dos alunos de uma turma usando apenas uma variável

Estruturas de dados

� As estruturas de dados são formas agrupar dados na memória do computador, usando variáveis ou outros recursos de armazenamento

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 3

outros recursos de armazenamento

� Tipos de estruturas de dados:� Homogêneas: guardam dados do mesmo tipo. Ex: vetores e matrizes

� Heterogêneas: guardar dados de tipos diferentes. Ex: registros

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 4

Conceito de vetor

Um vetor, também conhecido como variável homogênea unidimensional, é um conjunto de variáveis do mesmo tipo, que possuem o mesmo identificador e são alocadas

sequencialmente na memória.

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 5

� Podemos entender um vetor como uma variável dividida em vários pedaços, onde cada pedaço é identificado através de um número, chamado de índice.

� O índice representa a posição que um dado ocupa no vetor.

� Podemos Imaginar que na memória do computador um vetor seja mais ou menos da seguinte forma.

1 2 3 4 5 6

Nome do Vetor Índices (Posições)

Estrutura de um vetor

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 6

1 2 3 4 5 6

João Maria Carlos JoséNomes

Conteúdo (Elementos)

•Perceba que cada posição do vetor corresponde a uma variável simples.

•Para representar o elemento 3, escrevemos Nomes [3].

•O valor de Nomes[2] é “Maria”

� Para declarar um vetor procedemos como indicado a seguir:

� Exemplos:Notas[1..10]: Real

NomeDoVetor[1..<tamanho>]: TipoDeDado

Declaração de vetores

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 7

Notas[1..10]: Real� (vetor chamado Notas com 10 posições para guardar números reais)

Codigo[1..12]: Inteiro� (vetor chamado Codigo com 12 posições para guardar números inteiros)

Nomes[1..10]: String� (vetor chamado nomes com 10 posições para guardar strings)

Usando vetores

� Para usar um vetor (armazenar dados ou ler dados do mesmo), devemos especificar o nome do vetor e o índice entre colchetes

� Exemplo 1 (armazenando):

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 8

� Exemplo 1 (armazenando):Nomes[1] ���� “João”

� Guarda a string “João” na posição 1 do vetor nomes

� Exemplo 2 (lendo):Escreva(Nomes[1])

� Mostra o conteúdo da posição 1 do vetor nomes

Usando vetores

� O número do índice pode ser indicado por uma variável ou expressão

� A posição a ser acessada depende do valor da variável ou expressão

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 9

� Exemplos:

X ���� 4

Escreva(Nomes[x]) {mostra posição 4}

Escreva(Nomes[x/2]) {mostra posição 2}

Usando vetores

� Podemos usar um vetor diretamente num comando Leia:X � 5

Leia(Nomes[x-1])

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 10

Leia(Nomes[x-1])

� No exemplo acima, o valor será lido do teclado e guardado na posição 4 do vetor Nomes

Algoritmo para preencher um vetor

� Para preencher um vetor inteiro, devemos usar uma estrutura de repetição, pois o vetor tem várias posições e temos que preencher uma a uma

� Exemplo:

Algoritmo “Preenche Vetor” Declaração do vetor com 4

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 11

Algoritmo “Preenche Vetor”

Variaveis

numeros[1..4], i: inteiro

Inicio

Para i de 1 até 4 faca

Escreva(“Digite um valor: “)

Leia(numeros[i])

FimPara

Fim

A variável i fará o controle da repetição, e assumirá todos os valores possíveis para o índice do vetor.

Declaração do vetor com 4 posições

Algoritmo para listar um vetor

� Para listar ou “percorrer” todos os elementos de um vetor, usamos também uma estrutura de repetição, similar ao usado no preenchimento:

Algoritmo “Lista Vetor”

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 12

Algoritmo “Lista Vetor”

Variaveis

numeros[1..4], i: inteiro

Inicio

Para i de 1 até 4 faca

Escreva(numeros[i])

FimPara

Fim

Exemplos com vetores

� Um algoritmo que preenche um vetor com 8 números inteiros, calcula e mostra quantos elementos do vetor são números pares

Algoritmo "ContaPares"

var

vet: vetor[1..8] de inteiro

i, pares: Inteiro

Inicio

Para i de 1 ate 8 faca

Neste trecho é feito o preenchimento do vetor.

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 13

Para i de 1 ate 8 faca

Escreva("Digite um valor: ")

Leia(vet[i])

FimPara

pares <- 0

Para i de 1 ate 8 faca

Se vet[i] mod 2 = 0 entao

pares <- pares +1

FimSe

FimPara

Escreva("Você digitou ",pares,"

numeros pares")

FimAlgoritmo

A variável pares é inicializada com 0, pois será nosso contador.

Neste trecho, o vetor é percorrido, sendo checado para cada posição se o valor ali armazenado é par. Se for par a variável pares é incrementada em uma unidade.

Exemplos com vetores

� Algoritmo que lê dois vetores de seis elementos inteiros, calcula a soma entre os elementos e armazena os resultados em um terceiro vetor:

Algoritmo "soma vetores"

Var

i: inteiro

v1, v2, v3: vetor [1..6] de Inteiro

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 14

v1, v2, v3: vetor [1..6] de Inteiro

Inicio

Para i de 1 ate 6 faca

Escreva("Digite valor ",i," para vetor 1:")

Leia(v1[i])

Escreva("Digite valor ",i," para vetor 2:")

Leia(v2[i])

FimPara

Para i de 1 ate 6 faca

v3[i] <- v1[i]+v2[i]

Escreval(v3[i])

FimPara

fimalgoritmo

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 15

Conceito de matriz

Uma matriz, também conhecido como variável homogênea multidimensional, é um conjunto de variáveis do mesmo tipo, que possuem o mesmo identificador e são

alocadas sequencialmente na memória.

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 16

� Assim como o vetor, uma matriz pode ser vista como uma variável dividida em vários pedaços

� No caso da matriz cada pedaço é identificado através DOIS OU MAIS índices (um índice para cada dimensão)

� Podemos Imaginar que uma matriz seja mais ou menos da seguinte forma.

1 2 3 4 5 6

Nome da Matriz

Índices das Colunas

Estrutura de uma matriz

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 17

1 2 3 4 5 6

1 5 8 5

2 25 10

3 12 3

Mat

Índices das Linhas

Esta é uma matriz bidimensional. Indicamos este elemento como mat[1, 1]

Declaração de matrizes

� A sintaxe da declaração de matrizes é a seguinte:

� Exemplos:� Vendas[10, 12]: Real

NomeDaMatriz[Dim1, Dim2]: TipoDeDado

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 18

� Vendas[10, 12]: Real

� Uma matriz chamada Vendas com 10 linhas e 12 colunas, para armazenar números reais.

� Mat[3, 6]: Inteiro

� Uma matriz chamada Mat com 3 linhas e 6 colunas para armazenar números inteiros

Usando matrizes

� Para usar uma matriz (armazenar dados ou ler dados da mesma), devemos especificar o nome da matriz e os índices correspondentes, separados por vírgula

� Exemplo 1 (armazenando):

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 19

� Exemplo 1 (armazenando):Mat[2,5] ���� 10

� Guarda o valor 10 na posição 2,5 (linha 2, coluna 5) do matriz Mat

� Exemplo 2 (lendo):Escreva(Mat[1,4])

� Mostra o conteúdo da posição 1,4 (linha 1, coluna 4) da matriz Mat

Usando matrizes

� Os números dos índices podem ser indicados por variáveis ou expressões

� A posição a ser acessada depende do valor das variáveis ou expressões

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 20

� Exemplos:

X <- 2

Y <- 4

Escreva(Mat[x,y]) {mostra posição 2,4}

Escreva(Mat[x/2,y/2]) {mostra posição 1,2}

Usando matrizes

� Podemos usar uma matriz diretamente num comando Leia:X <- 2

Y <- 4

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 21

Y <- 4

Leia(Mat[x,y-1])

� No exemplo acima, o valor será lido do teclado e guardado na posição 2,3 da matriz Mat

Algoritmo para preencher uma matriz

� Para preencher uma matriz inteira, devemos usar duas estruturas de repetição aninhadas, uma para as linhas e outra para as colunas

� Exemplo:Algoritmo “Preenche matriz”

Variaveis Declaração da matriz com 3

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 22

Variaveis

i,j: inteiro

Mat: vetor [1..3,1..6] de inteiro

Inicio

Para i de 1 ate 3 faca

Para j de 1 ate 6 faca

Escreva(“Digite um valor: “)

Leia(mat[i,j])

FimPara

FimPara

Fim

A variável i fará o controle das linhas

Declaração da matriz com 3 linhas e 6 colunas

A variável i fará o controle das linhas

Algoritmo para listar uma matriz

� Para listar ou “percorrer” todos os elementos de um vetor, usamos também estruturas de repetição anihadas, similar ao usado no preenchimento:

Algoritmo “Lista matriz”

Variaveis

i,j: inteiro

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 23

i,j: inteiro

Mat: vetor [1..3,1..6] de inteiro

Inicio

Para i de 1 ate 3 faca

Para j de 1 ate 6 faca

Escreval(mat[i,j])

FimPara

FimPara

Fim

Exercícios

� Faça algoritmo para ler um vetor de 10 valores inteiros e depois identificar e mostrar o menor valor

� Altere o algoritmo anterior para procurar um número digitado pelo usuário, informando a sua

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 24

número digitado pelo usuário, informando a sua posição, se ele constar no vetor

� Faça um algoritmo que inverta a posição dos valores de um vetor de seis posições de inteiros

Exercícios

� Crie um algoritmo que crie uma matriz 4 x 4 de inteiros, solicite os valores ao usuário e depois mostre qual o maior e menor valor na matriz

� Altere o algoritmo anterior para procurar na matriz um valor digitado pelo usuário

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 25

matriz um valor digitado pelo usuário

� Faça um algoritmo para guardar os nomes e resultados de jogos da loteria esportiva

� Faça um algoritmo para multiplicar duas matrizes

� Faça um algoritmo para calcular o determinante de uma matriz

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 26

� Registros são estruturas que podem agregar

Um registro é um conjunto de campos, em que cada campo pode ser de um tipo de dado

diferente.

Conceito

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 27

� Registros são estruturas que podem agregar diferentes informações.

� São também chamadas de variáveis compostas heterogêneas.

� Um registro é formado por um conjunto de itens de dados (membros da estrutura), que não necessitam ser do mesmo tipo.

� Exemplo:

Dados de uma Conta Bancária

Estrutura de um registro

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 28

Dados de uma Conta Bancária

ITEM DE DADO VALOR

Número: 2245

Tipo: Especial

Cliente: José da Silva

Saldo: R$5.250,00

Limite: R$950,00

Neste registro, representamos uma conta bancária, que tem os seguintes tipos de dados:

Inteiro (Número)Real (Saldo e Limite)Literal (Tipo e Cliente)

� Antes de usar um registro é preciso declará-lo, conforme a sintaxe abaixo:

� Exemplo

NomeDaVariavel: Registro (NomesDosCampos: TiposDosCampos)

Declaração de um registro

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 29

� Exemploconta: Registro (num: Inteiro, saldo, limite: Real,

tipo, cliente: String)

� Neste exemplo foi declarado um registro chamado conta, cujos campos são num do tipo inteiro, saldo e limite do tipo real e tipo e cliente do tipo string.

� Como um registro contém vários dados, para acessar um campo individualmente é necessário indicar o nome da variável e o nome do campo, separado por um ponto.

� Exemplo 1 (armazenando no registro)

Usando de um registro

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 30

� Exemplo 1 (armazenando no registro)conta.num ← 12

� Coloca o número 12 no campo num da variável registro denominada conta.

� Exemplo 2 (lendo dado do registro)Escreva conta.saldo

� Mostra na tela o conteúdo do campo saldo da variável conta.

Vetor de registros

� O uso de registros torna-se mais efetivo quando associado a vetores

� Podemos criar um vetor de registros, podendo guardar dados de vários

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 31

podendo guardar dados de vários elementos distintos. Exemplos:

� 100 registros de contas bancárias

� 40 registros de alunos de uma turma

� Exemplo

conta[3]: Registro (num: Inteiro,

saldo: Real, cliente: string)

Vetor de registros - declaração

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 32

� Neste exemplo foi declarada uma variável chamada conta.

� Esta variável é um vetor de três posições.

� Em cada posição será armazenado um registro, composto por três campos.

� Acesso aos Campos do Registro

Conta[2].num ← 13

� O exemplo armazeno o número 13 no campo num da segunda posição da variável registro denominada conta.

Vetor de registros - uso

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 33

Leia conta[2].cliente

� Neste exemplo é lida uma string e armazenada no campo cliente da posição 2 da variável conta.

� Uma indústria faz a folha mensal de pagamento de seus 80 empregados baseado numa tabela com os dados de cada funcionário (matrícula, nome e salário bruto);� Vamos escrever um algoritmo para ler e processar essa tabela e

emitir, para cada funcionário, seu contracheque.

Exemplo

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 34

� O desconto do INSS é 11% do salário bruto.

� O salário líquido é a diferença entre o salário bruto e o valor do INSS.

Matrícula:

Nome:

Salário Bruto:

Dedução do INSS:

Salário Líquido:

� A estrutura de um funcionário é dada por uma variável do tipo registro. Como são 80, é preciso trabalhar com um vetor de 80 posições.

� A declaração do registro é a seguinte:

func[80]: Registro (mat: Inteiro, nome: String,

Exemplo

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 35

� O algoritmo consistirá em preencher o vetor com 80 registros para representar os 80 funcionários da empresa.

� Em seguida, para cada funcionário, calcular e mostrar o contracheque (salário líquido e dedução do INSS)

func[80]: Registro (mat: Inteiro, nome: String,

salBruto, inss, salLiq: Real)

� A primeira parte do algoritmo consiste em preencher os dados de todos os 80 funcionários. Para isso, utilizamos uma estrutura de repetição contada para controlar as posições do vetor de funcionários.

Algoritmo ControleFuncionarios

Variáveis

func[80]: Registro (mat: Inteiro, nome: String,

Exemplo

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 36

func[80]: Registro (mat: Inteiro, nome: String,

salBruto, inss, salLiq: Real)

i: Inteiro

Início

Para i de 1 até 80 Faça

Escreva “Digite a matrícula do funcionário”

Leia func[i].mat

Escreva “Digite o nome do funcionário”

Leia func[i].nome

Escreva “Digite o salário bruto do funcionário”

Leia func[i].salBruto

FimPara

...

� Uma vez que os 80 registros estão preenchidos, é preciso calcular o valor do INSS e do salário líquido. Isso é feito dentro de uma estrutura Para-Faça, pois deve ser para os 80 funcionários.

...

Para i de 1 até 80 Faça

func[i].inss ← func[i].salBruto * 0.11

func[i].salLiq ← func[i].salBruto – func[i].inss

Exemplo

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 37

� Para acessar o campo de cada funcionário, utilizamos o nome da variável mais o índice.

� A primeira instrução calcula o valor do campo inss, multiplicando o valor do campo salBruto pela taxa de 11%.

� A segunda instrução calcula o valor do campo salLiq, subtraindo do salário bruto o valor do INSS.

func[i].salLiq ← func[i].salBruto – func[i].inss

FimPara

...

� Após realizar todos os cálculos, é preciso imprimir os contracheques na tela. Para isso, utilizamos mais uma vez uma estrutura Para-Faça.

...

Para i de 1 até 80 Faça

Exemplo

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 38

Para i de 1 até 80 Faça

Escreva func[i].mat

Escreva func[i].nome

Escreva func[i].salBruto

Escreva func[i].inss

Escreva func[i].salLiq

FimPara

Fim

� As estruturas estudadas neste capítulo (vetores, matrizes e registros) podem ser implementadas em qualquer linguagem de programação.

Devemos conhecer a sintaxe da linguagem em

Observação

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 39

� Devemos conhecer a sintaxe da linguagem em que queremos implementar os algoritmos para escrever os comandos conforme as regras da gramática da linguagem.

Exercícios

� Crie um algoritmo para guardar o nome e as duas notas dos 40 alunos de uma turma e depois calcular a média e resultado de cada um deles, sendo que a média para aprovação é 7

Prof. MauroAlgoritmos e Ling.de Programação

Vetores, matrizes e registros 40

aprovação é 7