A maior rede de estudos do Brasil

Grátis
146 pág.
livro programando com pascal - jaime evaristo

Pré-visualização | Página 46 de 50

p seja nil, o que 
acontecerá quando o elemento pesquisado não for elemento da lista.
function Pesquisa(x : integer; var p, Anterior : TPonteiro) : boolean;
var Achou : boolean;
begin
Achou := false;
p := Inicio; 
Anterior := Inicio;
while (p <> nil) and not Achou do
if p^.Dado = x
then
Achou := true
else
begin
Anterior := p;
p := p^.Prox;
end;
Pesquisa := Achou;
end;
Note que o procedimento retorna tanto o ponteiro que está apontando para o elemento (quando a busca é 
bem sucedida), como o ponteiro que aponta para o elemento anterior. Este ponteiro, Anterior, é útil para se 
efetuarem inserções e deleções em listas ordenadas. 
O processamento de uma lista se faz de maneira natural. Fazemos p apontar para o início da lista e a 
percorremos realizando o processamento desejado até que não haja mais elementos, o que acontecerá quando 
o conteúdo de p for nil. Para exemplificar, apresentamos o procedimento abaixo que exibe todos os 
elementos da lista. 
procedure EscreveLista;
begin
p := Inicio;
while p <> nil do
begin
write(p^.Dado,' ');
p := p^.Prox;
end;
end;
A inserção de um elemento numa lista ordenada requer um procedimento que determine a posição de 
inserção, procedimento semelhante à função Pesquisa discutido acima.
procedure Posicao(var x : integer; var p, Anterior : TPonteiro);
begin
p := Inicio;
while (p <> nil) and (p^.Dado > x) do
begin
Anterior := p;
p := p^.Prox;
end;
end;
Se a posição de inserção for anterior ao último elemento da lista, a inserção é feita antes do elemento 
apontado pelo ponteiro p obtido pelo procedimento Posicao. Neste caso, transfere-se o registro apontado por 
p para um ponteiro auxiliar Aux, faz-se o ponteiro deste elemento apontar para o registro apontado por Aux e 
armazena-se no campo denominado Dado do elemento apontado por p o elemento que se quer inserir. A 
figura a seguir indica graficamente estas operações se quiséssemos inserir x = 6.
p
o        ¬
Inicio ↓
o → 9 o → 8 o → 5 o → 3 o ¬
Aux
o  5 o
 p
o        ¬
Inicio ↓
o → 9 o → 8 o → 6 o  3 o ¬
 
Aux ↓ 
o        → 5 o
Se a inserção deve ser feita no final lista, p terá conteúdo nil e então o elemento deve ser inserido após o 
elemento apontado pelo ponteiro Anterior obtido também pelo procedimento Posicao. Neste caso, cria-se um 
novo elemento apontado por p, atribui-se o valor a ser inserido no campo Dado deste elemento e aponta-se o 
ponteiro deste elemento para o elemento apontado pelo campo ponteiro de Anterior.
Estas idéias estão implementadas no procedimento a seguir. 
procedure InsereLista(x : integer);
var Aux, p, Anterior : TPonteiro;
 begin
Posicao(x, p, Anterior);
if p <> nil
then
begin
Aux^.Prox := p^.Prox;
p^.Prox := Aux;
Aux^.Dado := p^.Dado;
p^.Dado := x;
end
else
begin
New(p);
p^.Dado := x;
p^.Prox := Anterior^.Prox;
Anterior^.Prox := p;
end;
end;
Para finalizar, discutiremos a remoção de um elemento da lista. Se o elemento a remover é o primeiro 
elemento da lista, basta atualizar o ponteiro Inicio, apontando-o para o segundo elemento da lista. Se o 
elemento a remover não é o primeiro da lista, basta apontar o ponteiro do elemento apontado por Anterior 
para o elemento seguinte àquele apontado por p e liberar a variável apontada por p através do procedimento 
predefinido Dispose.
procedure Remove(var x : integer);
var Aux , p, Anterior : TPonteiro;
begin
if Pesquisa(x, p, Anterior)
then
begin
if (Anterior = Inicio) and (p = Inicio)
then 
Inicio := p^.Prox
else 
Anterior^.Prox := p^.Prox;
Dispose(p);
end;
end;
Bibliografia
Dijkstra, E. W., A Discipline of Programiming. Prentice-Hall. New Jersey, 1975.
Evaristo, J. e Crespo, S, Aprendendo a Programar Programando numa Linguagem
 Algorítmica Executável (ILA). Book Express, Rio de Janeiro, 2000.
Evaristo, J., Aprendendo a Programar Programando em Linguagem C. Book Express, Rio de Janeiro, 2001.
Evaristo, J., Aprendendo a Programar Programando em Turbo Pascal. Editora da 
 Universidade Federal de Alagoas (EDUFAL). Alagoas, 1996.
Evaristo, J., Introdução à Algebra (com aplicações à Ciência da Computação). Editora da 
 Universidade Federal de Alagoas (EDUFAL). Alagoas, 1999.
Farrer, Harry e outros, Pascal Estruturado. Editora Guanabara. Rio de Janeiro, 1985.
Grogono, Peter, Programming in Pascal. Addison-Wesley. Massachusetts, 1985.
Knuth, D. E., The Art of Computer Programming, volume 2, Seminumerical Algorithms,
 Addison-Wesley Publishing Company. USA, 1988.
Kowaltowski, T. & Lucchesi, C., Conceitos Fundamentais e Teoria da Computação. Anais do 
 II WEI. Minas Gerais, 1994
Mecler, Ian & Maia, Luiz Paulo, Programação e Lógica com Turbo Pascal. Editora Campus. 
 Rio de Janeiro, 1989. 
Norton, P., Introdução à Informática. Makron Books. Sãp Paulo, 1996.
Rangel, J. L., Os Programas de Graduação em Linguagens de Programação. Anais do II
 WEI. Minas Gerais, 1994.
Schmitz, Eber Assis & Teles, A. S. de Souza, Pascal e Técnicas de Programação. LTC 
 Editora. Rio de Janeiro, 1988.
Szwarcfiter, J. L. & Markenzon, Estruturas de Dados e seus Algoritmos. LTC Editora. Rio 
 de Janeiro, 1994.
Wirth, N., Algorithms & Data Structures. Prentice-Hall. New-Jersey, 1986.
Índice remissivo
A
Algoritmo............................................................................................................................................. 9
Algoritmo de Euclides........................................................................................................................62
Alocação dinâmica da memória...................................................................................................... 133
Ambiente de programação..................................................................................................................20
Amplitude........................................................................................................................................... 90
And..................................................................................................................................................... 25
Áreas de programas............................................................................................................................ 25
Arquivo texto....................................................................................................................................118
Arquivos........................................................................................................................................... 107
Array...................................................................................................................................................79
B
Begin...................................................................................................................................................25
Binary digit...........................................................................................................................................8
Bit......................................................................................................................................................... 8
Boolean...............................................................................................................................................23
BubbleSort........................................................................................................................................126
Busca................................................................................................................................................ 123
Byte.................................................................................................................................................9,