sexta-feira, 19 de outubro de 2012

Modulo 6 - Estruturas Dinâmicas (Ponteiros)

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;
  textcolor(green);
  Writeln('*********MENU*********');
  Writeln;
  textcolor(brown);
  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.

Program Fila;
Type Dados = record
nome:string[20];
idade:integer;
peso:real;
prox:^Dados;
end;
var cauda, px, frente:^Dados;
z:char;
y:integer;
Procedure Inserir_Dados;
begin
new(px);
writeln('nome:');
readln(px^.nome);
writeln('idade:');
readln(px^.idade);
writeln('peso:');
readln(px^.peso);
if frente = nil then
begin
cauda:=px;
frente:=px;
end
else
begin
frente^.prox:=px;
frente:=px;
end;
end;
Procedure Apresentar;
begin
px:=frente;
repeat
if frente = nil then
writeln('Fila vazia')
else
begin
writeln('Nome: ',px^.nome);
writeln('Idade: ',px^.idade);
writeln('Peso: ',px^.peso);
px:=px^.prox;
end;
until px=nil;
end;
Procedure Remover;
begin
if frente = nil then
writeln('Fila vazia')
else
begin
px:=frente;
frente:=px^.prox;
dispose(px);
writeln('Dado removido');
end;
end;
Begin {Programa principal}
px:=nil;
Repeat
writeln('1- para introduzir dados');
writeln('2- para mostrar dados');
writeln('3- para eliminar');
writeln('Qual a opção?');
read(y);
Case y of
1:Inserir_dados;
2:Apresentar;
3:remover;
end;
writeln('Deseja continuar? (S ou N)');
readln(z);
Until z='N';
End.



Program Pilha ;
Type Dados=record
nome:string;
idade:integer;
prox:^dados;
end;
Var p1, px:^Dados;
y,x:integer;
aux:^Dados;
z:char;
Procedure Inserir_dados;
begin 
new(px);
writeln('nome:');
readln(px^.nome);
writeln('Idade:');
readln(px^.idade);
px^.prox:=p1;
p1:=px;
end;
Procedure Listar;
begin
Repeat
writeln('Nome:',px^.nome);
writeln('Idade:',px^.idade);
px:=px^.prox;
Until px=nil;
end;
Procedure Apagar;
begin
aux:=px^.prox;
dispose(px);
px:=aux;
p1:=aux;
writeln('Dado removido');
end;
Begin
p1:=nil;
Repeat
writeln('1- para introduzir dados');
writeln('2- para mostrar dados');
writeln('3- para eliminar');
writeln('Qual a opção?');
read(y);
Case y of
1:Inserir_dados;
2:Listar;
3:Apagar;
end;
writeln('Deseja continuar? (S ou N)');
readln(z);
Until z='N';
End. 



Reflexão

A pilha, a fila e as listas ordenadas são estruturas de dados dinâmicos. a pilha LIFO, First In Last Out, a fila FIFO, First In First Out e na lista ordenada pode ser removido qualquer campo

Sem comentários:

Enviar um comentário