Módulo 6
Estruturas dinâmicas(ponteiros)
O que são ponteiros?
Em programação, um ponteiro ou apontador é um tipo de dado de uma linguagem de programação cujo valor se refere diretamente a um outro valor alocado em outra área da memória, através de seu endereço. Um ponteiro é uma simples implementação do tipo referência da Ciência da computação.
type dados= record
nome: string;
idade : integer;
peso: real;
prox:^dados;
end;
var cauda, px, frente:^ dados;
y,z: char;
procedure introduzir_dados;
begin
new(px);
writeln('insira o nome');
readln(px^.nome);
writeln('insira a idade');
readln(px^.idade);
writeln(' insira o peso');
readln(px^.peso);
if (frente=nil) then
begin
cauda:=px;
frente:=px;
end
else
begin
cauda^.prox:=px;
cauda:=px;
end;
end;
procedure mostrar;
begin
px:=frente;
if(px=nil) then
writeln('pilha vazia')
else
repeat
writeln('nome:', px^.nome);
writeln('idade:', px^.idade);
writeln('peso:', px^.peso);
px:=frente;
px:=px^.prox;
until(px=nil);
end;
procedure apagar;
begin
px:=frente;
if(px=nil) then
writeln('filha vazia')
else
begin
frente:= frente^.prox;
dispose (px);
end;
end;
Begin
px:= nil;
cauda:= nil;
repeat
writeln('1-para introduzir dados');
writeln('2-para mostrar dados');
writeln('3-para elimenar dados');
writeln('qual a opçao');
readln(y);
case y of
'1':introduzir_dados;
'2':mostrar;
'3':apagar;
end;
writeln('deseja continuar?(s-N)');
readln(z);
until(z='n');
End.
Reflexão
O campo endereço do elemento devera apontar para nil;
apontei duas vezes o px apontar para a frente logo vai entrar em ciclo;
tive estes erros no programa.
Program Lista_Ordenada;
Type pessoa=record
nome:string[15];
prox:^pessoa;
end;
var pi,px:^pessoa;
x,z:char;
Procedure Inserir;
Begin
new(px);
writeln('Escrever o dado a inserir na lista');
Readln(px^.nome);
px^.prox:=pi;
pi:=px;
end;
Procedure Listar;
Begin
px:=pi;
If (px=nil) then
writeln('Lista está vazia')
else
While (px<>nil) do
begin
writeln(px^.nome);
px:=px^.prox;
end;
end;
Procedure Ordenar;
var p1,p2:^pessoa;
trocar: boolean;
aux:string[15];
begin
If (pi<>nil) and (pi^.prox<>nil) then
Repeat
trocar:=false;
p1:=pi;
p2:=pi^.prox;
Repeat
If (p1^.nome> p2^.nome) then
Begin
trocar:=true;
aux:=p1^.nome;
p1^.nome:=p2^.nome;
P2^.nome:=aux;
end;
p1:=p1^.prox;
p2:=p2^.prox;
Until p1^.prox=nil;
Until not trocar
Else
Writeln('A lista está vazia ou tem apenas um elemento');
end;
Procedure Remover;
var px,pa:^pessoa;
dado:String[15];
begin
if pi<>nil then
begin
write('Escrever o dado a remover da lista:');
readln(dado);
px:=pi;
pa:=nil;
while (px<>nil) and (px^.nome<>dado) do
begin
pa:=px;
px:=px^.prox;
end;
If px=nil then
Writeln(dado,'nao se encontra na lista')
else
begin
If pa=nil then
pa:=px^.prox
else
pa^.prox:=px^.prox;
dispose(px);
Writeln(dado,'foi removido da lista');
end;
end;
end;
// Programa Principal
Begin
pi:=nil;
Repeat
writeln;
writeln;
Writeln('/////////MENU\\\\\\\\\');
Writeln;
Writeln('1 - Para Inserir dados');
Writeln;
Writeln;
Writeln('2 - Para Listar dados');
Writeln;
Writeln;
Writeln('3 - Para Ordenar dados');
Writeln;
Writeln;
Writeln('4 - Para Remover dados');
Writeln;
Writeln;
Writeln('0 - Para Sair');
Readln(x);
Case x of
'1':Inserir;
'2':Listar;
'3':Ordenar;
'4':Remover;
end;
Until (x='0');
End.
Esquema de uma pilha
Esquema de uma fila
Esquema da lista ordenada
Reflexão
Nos programas que estão visiveis no meu eportefolio, o importante desses programas são os ponteiros, pois o valor se refere diretamente a um outro valor. Os ponteiros são muitos importantes para as estruturas dinamicas.
No programa da fila nao senti muitas dificuldades, é um programa muito usado em serviços como nos hospitais .
A informação que eu coloco não quer dizer que esteja toda correcta, se alguem axar que esta mal agradecia que deixasse um comentario.
Obrigado!



Este comentário foi removido por um gestor do blogue.
ResponderEliminar