quinta-feira, 18 de outubro de 2012

Módulo6

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.


Program fila ;
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!





1 comentário: