Sie sind auf Seite 1von 82

Linguagens de Programao

Parte 4: Vetores, Matrizes, Registros, Listas Ligadas e Grafos


Elizabeth Carvalho
ecarvalho@uatlantica.pt

DCTIC - [GSC | STI]

Introduo
As variveis que se viram at o momento guardavam apenas um nico valor. Existe um recurso que nos permite guardar e aceder um conjunto de dados agrupados na memria do computador:
As ESTRUTURAS DE DADOS

Isso nos permite, por exemplo, guardar a nota dos alunos de uma turma usando apenas uma varivel.

DCTIC - [GSC | STI]

Estruturas de dados
As estruturas de dados so formas agrupar dados na memria do computador, usando variveis ou outros recursos de armazenamento. Tipos de estruturas de dados:
Homogneas: guardam dados do mesmo tipo. Ex: vetores e matrizes Heterogneas: guardar dados de tipos diferentes. Ex: registros

DCTIC - [GSC | STI]

VETORES

DCTIC - [GSC | STI]

Conceito de vetor
Um vetor, tambm conhecido como varivel homognea unidimensional, um conjunto de variveis do mesmo tipo, que possuem o mesmo identificador e so alocadas sequencialmente na memria. Podemos entender um vetor como uma varivel dividida em vrios pedaos, onde cada pedao identificado atravs de um nmero, chamado de ndice. O ndice representa a posio que um dado ocupa no vetor.

DCTIC - [GSC | STI]

Estrutura de um vetor
Podemos Imaginar que na memria do computador um vetor seja mais ou menos da seguinte forma.

DCTIC - [GSC | STI]

Declarao de vetores
Para declarar um vetor procedemos como indicado a seguir:

Exemplos:
Notas[1..10]: Real
(vetor chamado Notas com 10 posies para guardar nmeros reais)

Codigo[1..12]: Inteiro
(vetor chamado Codigo com 12 posies para guardar nmeros inteiros)

Nomes[1..10]: String
(vetor chamado nomes com 10 posies para guardar strings)

DCTIC - [GSC | STI]

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):
Nomes[1] Joo
Guarda a string Joo na posio 1 do vetor nomes

Exemplo 2 (lendo):
Escreva(Nomes[1])
Mostra o contedo da posio 1 do vetor nomes

DCTIC - [GSC | STI]

Usando vetores
O nmero do ndice pode ser indicado por uma varivel ou expresso
A posio a ser acessada depende do valor da varivel ou expresso

Exemplos:

DCTIC - [GSC | STI]

Utilizando vetores
Podemos usar um vetor diretamente num comando Leia:
X5 Leia(Nomes[x-1])

No exemplo acima, o valor ser lido do teclado e guardado na posio 4 do vetor Nomes

DCTIC - [GSC | STI]

Algoritmo para preencher um vetor


Para preencher um vetor inteiro, devemos usar uma estrutura de repetio, pois o vetor tem vrias posies e temos que preencher uma a uma. Exemplo:

DCTIC - [GSC | STI]

Algoritmo para listar um vetor


Para listar ou percorrer todos os elementos de um vetor, usamos tambm uma estrutura de repetio, similar ao usado no preenchimento:

DCTIC - [GSC | STI]

Exemplos com vetores


Um algoritmo que preenche um vetor com 8 nmeros inteiros, calcula e mostra quantos elementos do vetor so nmeros pares

DCTIC - [GSC | STI]

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:

DCTIC - [GSC | STI]

MATRIZES

DCTIC - [GSC | STI]

Conceito de matriz
Uma matriz, tambm conhecido como varivel homognea multidimensional, um conjunto de variveis do mesmo tipo, que possuem o mesmo identificador e so alocadas sequencialmente na memria. Assim como o vetor, uma matriz pode ser vista como uma varivel dividida em vrios pedaos No caso da matriz cada pedao identificado atravs DOIS OU MAIS ndices (um ndice para cada dimenso)

DCTIC - [GSC | STI]

Estrutura de uma matriz


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

DCTIC - [GSC | STI]

Declarao de matrizes
A sintaxe da declarao de matrizes a seguinte:

Exemplos:
Vendas[10, 12]: Real
Uma matriz chamada Vendas com 10 linhas e 12 colunas, para armazenar nmeros reais.

Mat[3, 6]: Inteiro


Uma matriz chamada Mat com 3 linhas e 6 colunas para armazenar nmeros inteiros

DCTIC - [GSC | STI]

Utilizando Matrizes
Para usar uma matriz (armazenar dados ou ler dados da mesma), devemos especificar o nome da matriz e os ndices correspondentes, separados por vrgula Exemplo 1 (armazenando):
Mat[2,5] 10
Guarda o valor 10 na posio 2,5 (linha 2, coluna 5) do matriz Mat

Exemplo 2 (lendo):
Escreva(Mat[1,4])
Mostra o contedo da posio 1,4 (linha 1, coluna 4) da matriz Mat

DCTIC - [GSC | STI]

Utilizando matrizes
Os nmeros dos ndices podem ser indicados por variveis ou expresses
A posio a ser acedida depende do valor das variveis ou expresses

Exemplos:

DCTIC - [GSC | STI]

Utilizando matrizes
Podemos usar uma matriz diretamente num comando Leia:

No exemplo acima, o valor ser lido do teclado e guardado na posio 2,3 da matriz Mat

DCTIC - [GSC | STI]

Algoritmo para preencher uma matriz


Para preencher uma matriz inteira, devemos usar duas estruturas de repetio aninhadas, uma para as linhas e outra para as colunas Exemplo:

DCTIC - [GSC | STI]

Algoritmo para listar uma matriz


Para listar ou percorrer todos os elementos de um vetor, usamos tambm estruturas de repetio anihadas, similar ao usado no preenchimento:

DCTIC - [GSC | STI]

Exerccios
Faa algoritmo para ler um vetor de 10 valores inteiros e depois identificar e mostrar o menor valor. Altere o algoritmo anterior para procurar um nmero digitado pelo utilizador, informando a sua posio, se ele constar no vetor. Faa um algoritmo que inverta a posio dos valores de um vetor de seis posies de inteiros

DCTIC - [GSC | STI]

Exerccios
Crie um algoritmo que crie uma matriz 4 x 4 de inteiros, solicite os valores ao usurio e depois mostre qual o maior e menor valor na matriz Altere o algoritmo anterior para procurar na matriz um valor digitado pelo utilizador Faa um algoritmo para guardar os nomes e resultados de jogos da loteria esportiva

Faa um algoritmo para multiplicar duas matrizes Faa um algoritmo para calcular o determinante de uma matriz
DCTIC - [GSC | STI]

REGISTROS

DCTIC - [GSC | STI]

Conceito
Um registro um conjunto de campos, em que cada campo pode ser de um tipo de dado diferente. Registros so estruturas que podem agregar diferentes informaes. So tambm chamadas de variveis compostas heterogneas.

DCTIC - [GSC | STI]

Estrutura de um registro
Um registro formado por um conjunto de itens de dados (membros da estrutura), que no necessitam ser do mesmo tipo. Exemplo:

DCTIC - [GSC | STI]

Declarao de um registro
Antes de usar um registro preciso declar-lo, conforme a sintaxe abaixo:

Exemplo
conta: Registro (num: Inteiro, saldo, limite: Real, tipo, cliente: String)
Neste exemplo foi declarado um registro chamado conta, cujos campos so num do tipo inteiro, saldo e limite do tipo real e tipo e cliente do tipo string.

DCTIC - [GSC | STI]

Utilizando de um registro
Como um registro contm vrios dados, para aceder um campo individualmente necessrio indicar o nome da varivel e o nome do campo, separado por um ponto. Exemplo 1 (armazenando no registro)
conta.num 12 Coloca o nmero 12 no campo num da varivel registro denominada conta.

Exemplo 2 (lendo dado do registro)


Escreva conta.saldo Mostra na tela o contedo do campo saldo da varivel conta.

DCTIC - [GSC | STI]

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 vrios elementos distintos. Exemplos:
100 registros de contas bancrias 40 registros de alunos de uma turma

DCTIC - [GSC | STI]

Vetor de registros - declarao


Exemplo

Neste exemplo foi declarada uma varivel chamada conta.


Esta varivel um vetor de trs posies. Em cada posio ser armazenado um registro, composto por trs campos.

DCTIC - [GSC | STI]

Vetor de registros - uso


Acesso aos Campos do Registro
Conta[2].num 13
O exemplo armazeno o nmero 13 no campo num da segunda posio da varivel registro denominada conta.

Leia conta[2].cliente
Neste exemplo lida uma string e armazenada no campo cliente da posio 2 da varivel conta.

DCTIC - [GSC | STI]

Exemplo
Uma indstria faz a folha mensal de pagamento de seus 80 empregados baseado numa tabela com os dados de cada funcionrio (matrcula, nome e salrio bruto);
Vamos escrever um algoritmo para ler e processar essa tabela e emitir, para cada funcionrio, seu contra cheque.

O desconto do INSS 11% do salrio bruto. O salrio lquido a diferena entre o salrio bruto e o valor do INSS.

DCTIC - [GSC | STI]

A estrutura de um funcionrio dada por uma varivel do tipo registro. Como so 80, preciso trabalhar com um vetor de 80 posies.
A declarao do registro a seguinte:

O algoritmo consistir em preencher o vetor com 80 registros para representar os 80 funcionrios da empresa. Em seguida, para cada funcionrio, calcular e mostrar o contra cheque (salrio lquido e deduo da SS)

DCTIC - [GSC | STI]

Exemplo
A primeira parte do algoritmo consiste em preencher os dados de todos os 80 funcionrios. Para isso, utilizamos uma estrutura de repetio contada para controlar as posies do vetor de funcionrios.

DCTIC - [GSC | STI]

Exemplo
Uma vez que os 80 registros esto preenchidos, preciso calcular o valor da SS e do salrio lquido. Isso feito dentro de uma estrutura Para-Faa, pois deve ser para os 80 funcionrios.

Para aceder o campo de cada funcionrio, utilizamos o nome da varivel mais o ndice.
A primeira instruo calcula o valor do campo inss, multiplicando o valor do campo salBruto pela taxa de 11%. A segunda instruo calcula o valor do campo salLiq, subtraindo do salrio bruto o valor da SS.

DCTIC - [GSC | STI]

Exemplo
Aps realizar todos os clculos, preciso imprimir os contra cheques na tela. Para isso, utilizamos mais uma vez uma estrutura Para-Faa.

DCTIC - [GSC | STI]

Observao
As estruturas estudadas neste captulo (vetores, matrizes e registros) podem ser implementadas em qualquer linguagem de programao.
Devemos conhecer a sintaxe da linguagem em que queremos implementar os algoritmos para escrever os comandos conforme as regras da gramtica da linguagem.

DCTIC - [GSC | STI]

Exerccios
Crie um algoritmo para guardar o nome e as duas notas dos 40 alunos de uma turma e depois calcular a mdia e resultado de cada um deles, sendo que a mdia para aprovao 7

DCTIC - [GSC | STI]

LISTAS LIGADAS

DCTIC - [GSC | STI]

ROP1

Listas Ligadas

Caractersticas:
Tamanho da lista no pr-definido Cada elemento guarda quem o prximo Elementos no esto contguos na memria
info prox NULL info info prox info prox NULL info NULL

Diapositivo 194 ROP1 Vetor x Listas: Vetor: tamanho pr-definido, sabe qual o prximo, contguo na memria Lista: no tem tamanho pr-definido, cada um guarda quem o prximo, espalhados pela memria

Figura - Cada elemento armazenado numa lista guarda um ponteiro para o prximo elemento. - O ltimo elemento da lista possui um ponteiro invlido, indicando o trmino da estrutura. - Com isto, a partir do primeiro elemento e percorrendo-se os ponteiros, pode-se acessar todos os elementos da lista. - Portanto, numa lista encadeada, as informaes no esto armazenadas de forma contnua na memria. Cada informao tem seu espao de memria e ligada outra atravs de um enlace (ponteiro). - Cada elemento uma estrutura: informaes + prximo da fila. Filas e pilhas dividem caractersticas comuns: Primeiro, ambas tm regras especficas para referenciar elementos s estruturas de dados. Segundo, operaes de restaurao so por natureza destrutivas, isto , acessar um elemento em uma pilha ou fila requer sua retirada.
Raquel Prates; 17-11-2004

Sobre os Elementos da Lista Elemento: guarda as informaes sobre cada elemento.

Para isso define-se cada elemento como uma estrutura que possui:

campos de informaes ponteiro para o prximo elemento


info prox

Sobre a Lista
Uma lista pode ter uma clula cabea
info prox ltimo prox info prox info NULL

Uma lista pode ter um apontador para o ltimo elemento

Cria Lista Vazia

Cabea

NULL

ltimo

Insero de Elementos na Lista

info prox ltimo prox

info prox

info NULL

3 opes de posio onde pode inserir:


1. posio ltima posio Aps um elemento qualquer E

Insero na Primeira Posio

info prox NULL

info prox ltimo prox

info prox

info NULL

Insero na ltima Posio

info prox prox

info prox

info prox NULL

info NULL

ltimo

Algoritmos e Estrutura de Dados I

Insero Aps o Elemento E

info prox NULL

info prox ltimo prox

info prox

info NULL

Elem E

Retirada de Elementos na Lista

info prox ltimo prox

info prox

info NULL

3 opes de posio de onde pode retirar:


1. posio ltima posio Um elemento qualquer E

Retirada do Elemento na Primeira Posio da Lista

info prox ltimo prox

info prox

info NULL

Retirada do Elemento E da Lista

info prox prox

info prox

info NULL

ltimo

Anterior

Elem E

Retirada do ltimo Elemento da Lista

info prox ltimo prox

info NULL prox

info NULL

Anterior

Pilhas e Filas Pilha:


Quem entra por ltimo sai primeiro

Fila:
Quem entra primeiro sai primeiro

GRAFOS

DCTIC - [GSC | STI]

Introduo (1)
Um grafo G=(V,E) consiste em cum conjunto V de vrtices e um conjunto E de pares de vrtices ou arestas. Os grafos so uma forma de modelar os problemas. Muitos problemas algortmicos so simplificados ao pensarmos neles em termos de grafos.

Introduo (2)
A teoria dos Grafos fornece uma linguagem para tratarmos com as propriedades dos grafos. Conhecer diferentes problemas algortmicos em grafos melhor do que entender os detalhes de algoritmos particulares em grafos.

Contedo
Estruturas de dados bsicas e operaes de atravessamento. Algoritmos mais sofisticados para: caminhos mais curtos e rvore geradora.

Observaes
Grafos podem ser utilizados para modelar uma variedade de estruturas e relaes. Muitas aplicaes de grafos podem ser reduzidas a propriedades padro de grafos e usando algoritmos bem conhecidos. Busca em profundidade e busca em largura fornecem mecanismos para visitar cada aresta e cada vrtice do grafo.

O grafo de relacionamento

O grafo de relacionamento
Se sou seu amigo, voc meu amigo? Sou amigo de mim mesmo? Quo ntimo um amigo? Estou relacionado atravs de uma cadeia a algum famoso? Quo prximo estou de algum famoso?
Grafos orientados e no-orientados Laos, multi-arestas, grafos simples. Grafos com pesos Caminho em um grafo Caminho mnimo

O grafo de relacionamento
Existe um caminho de relacionamento entre quaisquer duas pessoas no mundo? Quem tem mais amigos? E menos? Qual o maior clique? Quanto tempo uma fofoca minha leva para retornar a mim?
Componentes conexas

Grau de um vrtice, grafos regulares

Clique Circuitos

Estruturas de Dados
Matriz de adjacncias Lista de adjacncias

1 2 3 4 5

1 0 1 0 0 1

2 1 0 1 1 1

3 0 1 0 1 0

4 0 1 1 0 1

5 1 1 0 1 1

1 2 3 4 5

2 1 2 2 4

5 5 4 5 1 3 2 3 4

2 3

Linguagens de Programao

Parte 5: Sub-algoritmos
Elizabeth Carvalho
ecarvalho@uatlantica.pt

DCTIC - [GSC | STI]

Introduo
Conforme a complexidade dos problemas, os algoritmos tornam-se mais extensos e difceis de acompanhar
Soluo: Dividir para conquistar

Nesses casos (e mesmo em problemas mais simples) importante dividirmos a tarefa de resoluo do problema em tarefas menores chamados MDULOS ou SUB-ALGORITMOS Cada parte (mdulo) do algoritmo fica responsvel por uma determinada parte do processo e o conjunto de mdulos resolve o problema principal

DCTIC - [GSC | STI]

Conceito
Sub-algoritmos, sub-rotinas, subprogramas ou mdulos so blocos de instrues que realizam tarefas especficas. Cada sub-algoritmo um trecho do algoritmo completo e resolve uma parte do problema. Os algoritmos podem tambm ser REUTILIZADO na soluo de outros problemas

DCTIC - [GSC | STI]

Funcionamento
Um algoritmo completo dividido em:
UM Algoritmo principal Diversos Sub-algoritmos

A execuo sempre comea pelo algoritmo principal. A execuo de um subalgoritmo solicitada sempre que necessrio, atravs de uma chamada ou invocao. Quando um subalgoritmo chamado, a execuo do algoritmo principal interrompida para que o subalgoritmo seja executado. Aps isso, o algoritmo principal continua de onde parou.

DCTIC - [GSC | STI]

Funcionamento

DCTIC - [GSC | STI]

Funcionamento
A execuo pode ser visualizada como segue:

DCTIC - [GSC | STI]

Variveis Locais e Variveis Globais


Variveis Globais so declaradas no incio do algoritmo e pode ser usadas no algoritmo principal e por todos os subalgoritmos. Variveis Locais so definidas dentro de um subalgoritmo e s podem ser utilizadas dentro dele.

DCTIC - [GSC | STI]

Tipos de sub-algoritmos
Existem dois tipos de sub-algoritmos:
PROCEDIMENTOS FUNES

DCTIC - [GSC | STI]

Procedimento
PROCEDIMENTO um sub-algoritmo que no retorna valor ao algoritmo chamador ou que retorna dois ou mais valores
A chamada de procedimentos s pode ser feita com uma linha de comando isolada dentro do algoritmo Se retornar valores, o retorno feito por meio de parmetros ou variveis globais

Exemplos: solicita_valores, lista_resultados

DCTIC - [GSC | STI]

Funes
FUNO um sub-algoritmo que calcula um valor a partir de outros fornecidos a ela, retornando o valor calculado
A chamada a uma funo sempre ocorre dentro de uma expresso do mesmo tipo que tem o valor retornado por ela. Sua chamada feita pelo seu nome, seguido de seus respectivos parmetros entre parnteses. A funo executada e, ao seu trmino, o trecho do comando que a invocou substitudo pelo valor retornado

Exemplos: primo(<nmero>), fatorial(<nmero>)

DCTIC - [GSC | STI]

Parmetros e retorno
Os parmetros possibilitam a comunicao entre um subalgoritmo e o algoritmo chamador.
Corresponde aos dados que so passados ao subalgoritmo pelo algoritmo chamador. A passagem de dados para procedimentos e funes se d da mesma forma.

Retorno de Dados
No caso dos procedimentos os dados so retornados atravs dos parmetros. No caso das funes, o retorne se d pelo comando Retorne. Retorne <expresso>
Ao encontrar este comando, a expresso retornada ao chamador e a funo terminada.

DCTIC - [GSC | STI]

Parmetros e retorno
A passagem de parmetros pode se dar de duas formas:
Por valor: neste caso passada uma cpia do contedo de uma varivel. Essa cpia s existir no procedimento ou na funo.
Qualquer alterao que for feita no valor, no ir alterar o contedo da varivel original.

Por referncia: no existe cpia do contedo enviado, o que ocorre o envio do endereo de memria onde a varivel se encontra.
Neste caso, qualquer alterao no valor alterar o valor da varivel original.

DCTIC - [GSC | STI]

Declarando sub-algoritmos
O NOME dos sub-algoritmo deve seguir as mesmas regras para definio de nomes de variveis. Sempre que um sub-algoritmo recebe parmetros, estes devem ser especificados entre parnteses, com seus respectivos tipos, logo aps o nome do sub-algoritmo.

DCTIC - [GSC | STI]

Declarando procedimentos
Para declarar um procedimento, devemos seguir o modelo a seguir.

DCTIC - [GSC | STI]

Declarando funes
Para declarar uma funo, devemos seguir o modelo a seguir.

DCTIC - [GSC | STI]

Exemplo
Um algoritmo, com uma funo que recebe dois nmeros inteiros como parmetros e retorna a soma desses nmeros ao algoritmo principal.

DCTIC - [GSC | STI]

Exemplo (algoritmo completo)

DCTIC - [GSC | STI]

Exerccios
Reescreva um dos exerccios de vetores ou matrizes criando um procedimento para ler os dados e outro para processar e mostrar os resultados Crie uma funo para calcular o fatorial de um nmero Crie uma funo para determinar se um nmero primo

DCTIC - [GSC | STI]