Escolar Documentos
Profissional Documentos
Cultura Documentos
Gestão de Sistemas de
Informação
CÓDIGO ISCED1-GSI08
GSITOTAL
HORAS/ 1
SEMESTRE
CRÉDITOS (SNATCA) 6
NÚMERO DE TEMAS 4
CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Fax: 23323501
Email:d i r e c ç ã o @ u n i s c e d . e d u . m z
Website:www.unisced.edu.mz
i
CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Agradecimentos
Solomone Rumhungwe
Revisão Científica e
Linguística
ii
CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Índice
Visão geral 1
Benvindo à Disciplina/Módulo de Programação II ...............................................1
Objectivos do Módulo ..........................................................................................1
Quem deveria estudar este módulo.....................................................................1
Como está estruturado este módulo ....................................................................2
Ícones de actividade............................................................................................3
Habilidades de estudo .........................................................................................3
Precisa de apoio?................................................................................................5
Tarefas (avaliação e auto-avaliação) ..................................................................6
Avaliação.............................................................................................................6
iii
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Visão geral
Objectivos do Módulo
1
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
▪ Um índice completo.
▪ Uma visão geral detalhada dos conteúdos do módulo, resumindoos
aspectos-chave que você precisa conhecer para melhor estudar.
Recomendamos vivamente que leia esta secção com atenção
antes de começar o seu estudo, como componente de
habilidades de estudos.
Conteúdo desta Disciplina/módulo
Este módulo está estruturado em Temas. Cada tema, por sua vez
comporta certo número de unidades temáticas ou simplesmente
unidades. Cada unidade temática se caracteriza por conter uma
introdução, objectivos, conteúdos.
No final de cada unidade temática ou do próprio tema, são
incorporados antes o sumário, exercícios de auto-avaliação, só
depois é que aparecem os exercícios de avaliação.
Os exercícios de avaliação têm as seguintes características: Puros
exercícios teóricos/Práticos, Problemas não resolvidos e actividades
práticas, incluído estudo de caso.
Outros recursos
2
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Ícones de actividade
Ao longo deste manual irá encontrar uma série de ícones nas margens
das folhas. Estes ícones servem para identificar diferentes partes do
processo de aprendizagem. Podem indicar uma parcela específica
de texto, uma nova actividade ou tarefa, uma mudança de
actividade, etc.
Habilidades de estudo
3
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
É impossível estudar numa noite tudo o que devia ter sido estudado
durante um determinado período de tempo; Deve estudar cada ponto
da matéria em profundidade e passar só ao seguinte quando achar
que já domina bem o anterior.
4
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
alguma avaliação, mas sim estude para a vida, sobre tudo, estude
pensando na sua utilidade como futuro profissional, na área em que
está a se formar.
Precisa de apoio?
Caro estudante, temos a certeza que por uma ou por outra razão, o
material de estudos impresso, lhe pode suscitar algumas dúvidas como
falta de clareza, alguns erros de concordância, prováveis erros
ortográficos, falta de clareza, fraca visibilidade, página trocada ou
invertidas, etc). Nestes casos, contacte os serviços de atendimento e
apoio ao estudante do seu Centro de Recursos (CR), via telefone, sms,
E-mail, se tiver tempo, escreva mesmo uma carta participando a
preocupação.
Uma das atribuições dos Gestores dos CR e seus assistentes
(Pedagógico e Administrativo), é a de monitorar e garantir a sua
aprendizagem com qualidade e sucesso. Dai a relevância da
comunicação no Ensino a Distância (EAD), onde o recurso as TIC se torna
incontornável: entre estudantes, estudante – Tutor, estudante –CR,
etc.
As sessões presenciais são um momento em que você caro estudante,
tem a oportunidade de interagir fisicamente com staff do seu CR, com
tutores ou com parte da equipa central do ISCED indigitada para
acompanhar as suas sessões presenciais. Neste período pode
apresentar dúvidas, tratar assuntos de natureza pedagógica e/ou
administrativa.
O estudo em grupo, que está estimado para ocupar cerca de 30%
do tempo de estudos a distância, é muita importância, na medida em
que lhe permite situar, em termos do grau de aprendizagem com
relação aos outros colegas. Desta maneira ficará a saber se precisa
de apoio ou precisa de apoiar aos colegas. Desenvolver hábito de
5
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Avaliação
1
Plágio - copiar ou assinar parcial ou totalmente uma obra literária, propriedade
intelectual de outras pessoas, sem prévia autorização.
6
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
7
ISCED CURSO: Gestão de Sistemas de Informação; 3° Ano Disciplina/Módulo: Programação II
9
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
10
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
11
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
12
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Representação
Nome Significado
gráfica
A oval é usada
para indicar o
Início/Fim começo e fim
de um
algoritmo.
A seta indica a
direção do
Setas
fluxo do
algoritmo.
13
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
O
paralelogramo
Entrada/Saída indica a
entrada ou
saída.
O retângulo
Processo indica uma
computação.
O losango
indica um
Decisão ponto em que
uma decisão é
feita.
1.1.2.3. O Pseudocódigo
14
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
15
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
16
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Mesmo que não haja erro lógico, o algoritmo pode falhar por violar
restrições físicas da máquina e teremos erros que são detetados em
tempo de execução.
Exemplo: Situações de overflow e underflow.
Quantidade finita de cálculos
Como muitos problemas numéricos são resolvidos por métodos
iterativos (repetitivos), faz-se necessário estabelecer um critério de
parada para que o algoritmo possa terminar após um número finito
de passos.
Existência de um critério de exatidão
Em virtude das limitações de precisão da máquina e da exatidão desta
e do método, todo resultado obtido do computador deverá
enquadrar-se num critério de exatidão fornecido de antemão de
modo a possibilitar que um resultado aceitável seja escrito na forma:
Resultado Valor Aproximado Limite de Erro.
Na Matemática Intervalar todos os métodos apresentam essa
característica, uma vez que os resultados são sempre um intervalo
que contém a solução exata e a partir daí temos implicitamente o
limite para o erro.
Independência de máquina
Em algoritmos numéricos não deve haver dados que dependem de
máquina. Devem ser evitadas as cotas que, em geral, são usadas para
terminar ciclos de iterações, pois essas grandezas são dependentes
da máquina em uso e não provêm do problema em si. Em outras
palavras, o programa gerado pelo algoritmo deve ser executado em
diferentes máquinas, visando à máxima portabilidade.
Exemplo: Quantos dígitos devem ser usados na representação da
constante de Euler, e=2.718281828...?
Com precisão infinita, os limites de erro devem convergir a zero
Essa exigência estabelece a dependência entre a solução ideal em R
e a solução de máquina. Sem essa condição de convergência a
solução de máquina não precisará necessariamente estar relacionada
com a solução verdadeira.
Exemplo: Dado 𝑎 ∈ 𝑅 , determinar x = sen(a). Um algoritmo que satisfaz
os cinco critérios anteriores, mas não este por não prever um
17
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
18
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
19
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
20
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
21
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
22
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
23
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
24
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
25
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
26
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
27
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
28
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
29
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
30
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
31
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
32
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Nesse caso, o valor 33 é maior que 14, portanto, ele já está numa
posição ordenada. Em seguida, comparamos 33 com 27.
33
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
Exercícios de AUTO-AVALIAÇÃO
Perguntas
1. O que é um algoritmo?
2. O que é um programa?
3. Um algoritmo quando programado num computador é
constituído pelo menos das 3 partes. Mencione as.
4. Quais são os passos para a resolução de um problema através
de um algoritmo numérico simples?
5. Considere o seguinte algoritmo (v: vetor de entrada, e: índice
da esquerda, d: índice da direita do vetor).
34
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Respostas:
35
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
36
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Objectivos
específicos
Pilhas
Para iniciar, um exemplo: um determinado produto é composto por
diversas peças (digamos p1, p2, ..., pn). O processo de montagem
deste produto é automático (executado por uma máquina) e exige
que as peças sejam colocadas em uma ordem específica (primeiro a
p1, depois a p2, depois a p3 e assim por diante). As peças são
empilhadas na ordem adequada e a máquina de montagem vai
retirando peça por peça do topo desta pilha para poder montar o
produto.
A mesma máquina que faz a montagem é capaz de trocar uma peça
quebrada de um produto já montado. O que a máquina faz é
desmontar o produto até chegar na peça defeituosa, trocá-la e então
depois recolocar as peças que foram retiradas. Isso também é feito
com o uso da pilha de peças. Veja a seguir o algoritmo que a máquina
montadora implementa para fazer a manutenção de um produto
defeituoso.
1. Retirar e empilhar peça por peça do produto até chegar na
peça defeituosa.
2. Retirar a peça defeituosa.
37
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
38
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
39
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
O primeiro fato importante que devemos observar é que uma vez que
a interface da Pilha foi definida, já saberíamos usar a classe Pilha.
Vamos criar uma classe de teste bem simples para exemplificar o uso
de uma Pilha.
40
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
41
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
42
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
43
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
44
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Escapando do Labirinto
Ao percorrer um labirinto para fugir do Minotauro, existe um
algoritmo bastante simples: você sempre escolhe o caminho mais a
direita em toda oportunidade que aparecer a separação do caminho
atual em dois ou mais.
Caso caia em um beco sem saída, deve voltar até o último ponto em
que optou pelo caminho mais a direita e mudar sua decisão: agora
você deve tentar o caminho mais a direita, porém excluindo o que foi
anteriormente selecionado (e que causou a chegada a um beco sem
saída). Se você não tiver mais nenhuma opção, deve voltar mais ainda
pelo caminho já percorrido até encontrar outro ponto em que você
teve a opção de escolha. Esse processo de guardar o caminho e
escolhas já feitos para tomar outra decisão é conhecido como
backtracking.
Para implementar esse algoritmo você deve se lembrar do caminho
percorrido e, além disso, em cada posição (x, y) em que houve opção
de escolha deve também lembrar qual foi a última escolha feita, para
poder mudá-la quando você voltar o caminho (backtrack).
45
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Uma solução é utilizar uma Pilha que armazene cada (x,y) onde uma
decisão foi tomada, e também guardar um inteiro opção que
represente qual das opções foi escolhida no atual caminho: se
escolhemos o mais da direita, guardamos 1, se já precisamos voltar
uma vez e escolhemos o segundo mais da direita, guardamos 2, etc...
Assim quando voltarmos a este ponto e precisarmos mudar de
decisão, basta incrementar esse número.
Caso não haja mais caminhos a percorrer por esse lado (isso é, se
opção == totalDeOpcoes daquele ponto), devemos regredir mais
ainda o nosso caminho.
A maneira que percorremos esse labirinto é conhecida como busca
em profundidade: vamos nos aprofundando no caminho atual até
não poder mais, e só quando não dermais voltamos a profundidade
do caminho para tentar outra alternativa.
Busca em Profundidade está muito relacionada ao uso de uma Pilha,
e também pode ser realizada com o uso de recursão. O algoritmo
sempre funciona, desde que haja saída e que você seja mais rápido
que o fatal Minotauro!
Sumário
46
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
Filas
Estamos acostumados diariamente com as filas em vários lugares:
nos mercados, bancos, hospitais, nos terminais de carro, entre
outros. Filas são importantes pois elas determinam a ordem de
atendimento das pessoas.
As pessoas são atendidas conforme a posição delas na fila. O próximo
a ser atendido é o primeiro da fila.
Quando o primeiro da fila é chamado para ser atendido a fila “anda”,
ou seja, o segundo passa a ser o primeiro, o terceiro passa a ser o
segundo e assim sucessivamente até a última pessoa.
Normalmente, para entrar em uma fila, uma pessoa deve se colocar
na última posição, ou seja, no fim da fila. Desta forma, quem chega
primeiro tem prioridade. Neste capítulo, estamos interessados em
desenvolver estrutura de dados com o comportamento das filas.
47
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
48
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Como já foi dito aqui vamos implementar Fila utilizando algum tipo
de Lista. Neste capítulo, vamos utilizar a classe LinkedList para
armazenar os alunos da Fila.
Operações em fila
Em seguida, implementaremos as operações da Fila de aluno.
1. Inserir um aluno
Os alunos que entram na Fila devem sempre se colocar no fim da
mesma. Vamos definir que o fim da Fila é o fim da Lista que estamos
utilizando para implementar.
Então, entrar na Fila e adicionar no fim da Lista.
49
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
2. Remover um aluno
O próximo aluno a ser atendido é sempre o que está no início da fila.
No nosso caso, quem está no início da fila é o aluno que está no início
da Lista.
Então, basta remover o primeiro aluno.
É bom observar que se o método remove() for usado com a Fila vazia
então uma exceção será lançada pois o método removeFirst() lança
IndexOutOfBoundsException quando não existir elemento para
remover.
3. Informar se a fila esta vazia
Para implementar esta operação basta verificar se o tamanho da Lista
é zero.
Generalização
A Fila só funciona para guardar objetos da classe Aluno. Vamos
generalizá-la para poder armazenar qualquer tipo de objeto. Isso será
feito utilizando a classe Object da qual todas as classes derivam direta
ou indiretamente. Criaremos uma LinkedList de Object em vez de
uma LinkedList de Aluno.
50
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
51
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
52
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Grafos
Os grafos são estruturas matemáticas usadas para representar ideias
ou modelos, por intermédio de uma ilustração, gráfico ou esquema.
Estritamente, em matemática, a teoria dos grafos e utilizada para
representar o relacionamento entre dois ou mais conjuntos,
grandezas ou valores. A representação de um mapa de rotas, redes e
outros modelos semelhantes pode ser feita por meio do que se
denomina grafos.
Vamos tomar, por exemplo, um mapa de rotas áereas. Na figura
abaixo, nota-se que existem várias rotas de um ponto a outro, por
exemplo, de Florianopolis a Brasília existem as possibilidades via
Curitiba, via São Paulo ou via Rio de Janeiro. Algumas rotas podem
ter mais escalas, por exemplo, pode-se ir a Brasília por São Paulo,
passando por Curitiba, Rio e Belo Horizonte. Neste exemplo, temos a
linha que liga cada dois pontos. Note, entretanto, que existe uma rota
de Florianopolis a Florianópolis que, digamos, pode representar um
vôo panorâmico pela ilha que decola e retorna ao mesmo ponto.
O mapa de rotas contém pontos, que representam as cidades, e estão
ligados por linhas, que representam as rotas aéreas.
Cada um dos pontos de um grafo é denominado no e cada uma das
ligações são denominadas arcos. A representação de dados como
estrutura de dados, pode ser aplicada em:
53
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
• Mapas de distâncias
• Mapas Metabólicos
• Diagramas e Fluxogramas
• Redes de computadores
• Redes Neurais
• Estruturas químicas
54
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
g(a6) = 3−4
Como o nó 5 não está ligado por nenhum arco, não temos uma
função que o utilize.
Os arcos de um grafo podem ser simples ou direcionados, o que
significa que a relação entre os nós têm um sentido. Neste caso, o
grafo recebe o nome de dígrafo.
Dígrafos (ou grafos direccionados) são triplas ordenadas (n,a,g), onde
n é um conjunto não-vazio de nós, a é um conjunto de arcos ou
vértices e g é uma função que associa cada arco a a um par ordenado
(x,y) de n, onde x é o ponto inicial e y é o ponto final de a.
55
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
56
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
57
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Figura: Exemplo.
Grafos direccionados e matriz adjacência
A representação de grafos direccionados (dígrafos) em uma matriz
adjacência, quase nunca gera uma matriz simétrica. Na maioria das
vezes, a matriz é uma matriz boolena esparsa. Por exemplo, o grafo
da figura a baixo pode ser representado pela matriz:
58
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
59
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
60
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Caminho mínimo
Os grafos podem representar ligação entre dados, onde os arcos
apresentam “pesos” ou valores que especificam alguma
característica da conexão. Em muitos casos, a solução de um
problema depende de se encontrar o caminho de menor “custo” ou
de menor valor ou, ainda, de maior eficiência. Este caminho recebe o
nome de caminho mínimo entre dois nós de um grafo.
Algoritmos para grafos
Quando os grafos têm poucos nós, todas as operações e cálculos que
envolvam matrizes (adjacência ou acessibilidade) podem, facilmente,
ser efetuados manualmente. No entanto em situações onde o
número de nós ´e maior, a utilização de um computador pode auxiliar
no cálculo destas estruturas. Assim, vamos verificar como se pode
implementar tais algoritmos. Para isso, vamos considerar a descrição
do algoritmo que pode ser implementado em qualquer linguagem.
1. Algoritmo de Warshall
O primeiro algoritmo nos permite achar a matriz acessibilidade de um
grafo. Para isso, vamos considerar um grafo G com n nós, para o qual
se necessita de n+1 matrizes para cada nível de acessibilidade. Tal
algoritmo é conhecido como algoritmo de Warshall.
Exemplo: Algoritmo de Warshall
61
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
62
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
63
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
Bibliografia
Árvores
Pode-se definir uma árvore como um grafo conexo e não cíclico, com
um nó denominado “raiz”, em um nível zero, de onde partem os arcos
(caminhos) para outros nós, denominados “folhas”. Cada folha pode
ter os seus descendentes, sendo que os nós do nível imediatamente
abaixo são denominados “filhos” e os de nível imediatamente acima
são denominados “pais”.
64
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
65
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
66
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
67
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
68
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
69
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Tabelas de Hash
1. Tabelas de Espalhamento
Poderíamos simplesmente criar uma implementação desta estrutura
que internamente encapsule uma LinkedList ou ArrayList como já
fizemos anteriormente no caso da Fila e da Pilha.
Essa implementação é muito ineficiente computacionalmente: a cada
inserção de palavra teremos que buscar dentro da Lista pela queestá
sendo adicionada, para evitar vocábulos repetidos. Também teremos
de buscar dentro da Lista quando formos verificar se determinada
palavra se encontra naquele vocabulário.
O problema de buscar em uma Lista é que fatalmente temos que
percorrer ela por inteira e isso pode demorar muito: o consumo de
tempo é linear em relação ao número de elementos que ela possui.
O espaço de busca pode ser muito grande, a Lista pode ter milhões
de elementos. Imagine uma Lista com as digitais de todos os
brasileiros: são muitas digitais!
Em vez de buscar em todos os elementos do grupo, seria mais
interessante conseguir restringir o espaço de busca, eliminando o
maior número possível de elementos sem precisar “olhar” para eles.
Diferentemente das Listas, Pilhas e Filas, os Conjuntos não precisam
manter os elementos em sequência.
Então tentaremos uma abordagem bem diferente aqui. Vamos
armazenar os elementos do Conjunto espalhados! Isso mesmo,
espalhados, mas não aleatoriamente e sim com uma certa lógica que
facilitará buscá-los.
A idéia é separar os elementos em categorias de acordo com certas
características chaves do próprio elemento. Desta forma, para buscar
um elemento, basta verificar qual é a categoria dele e assim eliminar
todos os outros que estão nas outras categorias. Essa idéia é
fantástica e todo mundo já utilizou algo parecido no dia-a-dia. Um
exemplo clássico em que essa técnica aparece é a agenda de
telefones.
Nas agendas de telefones, os contatos são separados por categorias,
normalmente, o que define a categoria do contato é a primeira letra
do nome dele. Há uma página para cada letra do alfabeto. Desta
forma, quando é preciso buscar um contato, vamos direto para a
70
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
71
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
72
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
73
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
2. Função de Espalhamento
A Função deve observar a primeira letra das palavras e calcular o
índice correto na Tabela. Por exemplo, palavras começadas com “a”
devem ir para uma posição, palavras começadas com “b” devem ir
para outra, e assim por diante até a letra “z”.
Vamos fazer um método para implementar a Função de
Espalhamento. Estemétododeve receber uma String (palavra) e
devolver um int (índice associado a palavra).
74
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
75
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Este método cria uma Lista do tipo ArrayList. Porém, observe que a
referência é do tipo List. Isso é possível por causa do Polimorsmo
(capacidade de referenciar de várias maneiras um mesmo objeto).
Todo objecto do tipo ArrayList também é do tipo List.
Todas as Listas do Java disponibilizam uma operação que permite
adicionar diversos elementos de uma vez só. Esta funcionalidade é
implementada pelo método addAll(Collection). Este método foi
utilizado dentro do for para inserir na Lista de todas as palavras do
Conjunto todas as palavras da Lista da posição i da Tabela.
5. Informar o tamanho do Conjunto de palavras
Para esta operação, temos duas alternativas ou em cada vez que a
operação for executada nós percorremos todas as Listas contanto os
elementos ou fazemos de uma forma mais eficiente que é guardar
em um atributo a quantidade de palavras presentes no Conjunto.
76
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Este atributo deve ser incrementado toda vez que uma palavra for
adicionada e decrementada toda vez que uma palavra for removida.
77
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
Exercícios de AUTO-AVALIAÇÃO
Perguntas
78
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Respostas:
1. R%
2. R%
79
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
3. R%
4. R%
80
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
5. R%
6. R%
7. R%
81
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
8. R%
9. R%
82
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
83
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
84
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
85
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
86
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
87
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
88
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
89
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
90
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
91
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
92
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
93
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
Bibliografia
94
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
UNIDADE Temática 3.3. Problema 2: “Como Substituir a Rede por uma Flor”.
95
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
96
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
• Virar Sul
Passo 4: Algoritmo detalhado
Jeroo_1 deve fazer o seguinte:
• Encontrar Jeroo_2
• Virar-se (para a esquerda ou para a direita duas vezes)
• Saltar (para localização (0, 1))
• Dê uma flor para Jeroo_2
• Dar a frente
• Agora Andy deve fazer o seguinte:
• Encontre a rede
• Saltar duas vezes (para a localização (2, 2))
• Desativar a rede
• Sorteio
• Plante uma flor no local da rede
• Saltar (para a localização (3, 2))
• Plante uma flor
• Virar Sul
• Virar à direita
Etapa 5: Revise o algoritmo
O algoritmo de alto nível ajuda a gerenciar os detalhes.
Esse algoritmo resolve um problema muito específico, mas os locais
específicos não são importantes. A única coisa importante é a
localização inicial dos Jeroos em relação um ao outro e a localização
da rede em relação à localização e direção do segundo Jeroo.
97
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
Exercícios de AUTO-AVALIAÇÃO
Perguntas
98
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
99
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
100
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
101
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
Bibliografia
102
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
import java.util.LinkedList;
103
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
{
LinkedList<String>
listaVinculada = new LinkedList<String>()
;
System.out.println(listaVinculada.s
ize()+" "+ listaVinculada.isEmpty());
listaVinculada.add("a");
listaVinculada.add("b");
listaVinculada.add("c");
listaVinculada.add("d");
listaVinculada.add("e");
listaVinculada.add("f");
System.out.println(listaVinculada);
System.out.println(listaVinculada.s
et(1, "x"));
l.add(2, "a");
System.out.println(listaVinculada);
System.out.println(listaVinculada.p
ollFirst()+ "
"+ listaVinculada.peekFirst());
System.out.println(listaVinculada);
System.out.println(listaVinculada.g
et(4));
listaVinculada.remove("a");
System.out.println(listaVinculada);
System.out.println(listaVinculada.s
ize()+ " "+ listaVinculada.isEmpty());
for (String s : listaVinculada) {
System.out.print(s);
}
}
}
Comando para compilar a classe ExemploLinkedLista.java:
javac ExemploLinkedLista.java
Comando para executar a classe ExemploLinkedLista.java, após
compilação:
java ExemploLinkedLista
104
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
105
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
106
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
listaFrutas.add("Goiaba");
listaFrutas.add("Abacate");
listaFrutas.add("Papaia");
System.out.println(listaFrutas);
Collections.sort(listaFrutas);
System.out.println(listaFrutas);
Ao testarmos o exemplo acima, observará que, primeiro, a lista é
impressa na ordem de inserção e, depois de invocar o sort, ela é
impressa em ordem alfabética do nome das frutas.
Mas toda lista em Java pode ser de qualquer tipo de objeto, por
exemplo, Estudante. E se quisermos ordenar uma lista de Estudante?
Em que ordem a classe Collections ordenará? Pelo ano de ingresso?
Pelo nome desse estudante ou número de matrícula?
Exemplo de uma simples classe Estudante:
public class Estudante {
private String nome;
private String apelido;
private String numeroMatricula;
private int anoIngresso;
//... getters e setters
}
107
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
108
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
Bibliografia
109
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
110
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Ordem de um Set
111
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
112
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Classe HashSet
Características do HashSet
113
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Declaração - HashSet
114
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Classe TreeSet
Características
115
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
116
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Sumário
Exercícios de AUTO-AVALIAÇÃO
Perguntas
Respostas:
117
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
6. R%
118
ISCED CURSO: Gestão de Sistemas de Informação; 2° Ano Disciplina/Módulo: Programação II
Bibliografia
119
121
121