Download pdf - LP1 - Unidade 5

Transcript
Page 1: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Unidade 4 Sub-rotinas – (‘Procedures’ e ‘Functions’)

Page 2: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Unidade 4.1 Regras Gerais para Criação de Sub-

rotinas

Page 3: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Modularização  

•  Estudos  mostram  que  o  ser  humano  consegue  lidar  bem  com  até  7  problemas  ao  mesmo  tempo.  

•  A  solução  é  o  chamado  “Método  de  Refinamentos  sucessivos”:  dividir  o  problema  em  vários  sub-­‐problemas,  evitando  assim  abordar  todos  os  detalhes  do  problema  simultâneamente.  

•  Nesse  contexto,  para  cada  sub-­‐problema  será  criado  uma  subroLna,  ou  seja,  um  módulo.    

•  Vamos  “Modularizar”  o  problema  !  

Page 4: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Modularização  

•  Programação  Top-­‐Down  (ou  “de  cima  para  baixo”):  1  -­‐  Inicialmente  o  programador  deve  saber  as  tarefas  principais  do  programa,  não  como  fazê-­‐las,  apenas  quanLficá-­‐las;  

2  -­‐  Depois,  modelar  como  o  programa  principal  irá  chamar  (gerenciar)  essas  tarefas;  

3  -­‐  Então,  cada  tarefa  é  detalhada.  

Page 5: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Modularização  

•  Vantagens  da  Programação  Top-­‐Down:  –  reuLlização  de  código  fonte;  –  facilitar  a  compreensão  de  como  o  problema  foi  modelado;  

– a  manutenção  é  feita  por  módulo;  – alterações  no  módulo  valem  para  todos  os  lugares  onde  o  módulo  é  usado;  

– o  número  de  linhas  de  um  código  fonte  de  um  módulo  é  relaLvamente  menor,  e  mais  fácil  para  se  entender;  

– etc.  

Page 6: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Modularização  em  PASCAL  

•  Uma  subroLna  é  um  sub-­‐programa  com  variáveis  e  comandos  próprios  e  que,  para  ser  executada,  precisa  ser  chamada  pelo  programa  principal.  

•  Na  linguagem  PASCAL  temos  dois  Lpos  de  subroLnas:  –  Procedimentos  (procedures);  –  Funções  (func+ons).  

•  A  função  retorna  um  valor,  o  procedimento  não.  

Page 7: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Unidade 4.2 Passagem de parâmetro por valor e por

referências

Page 8: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Nomenclatura  dos  parâmetros  

•  Parâmetros  –  reais:  chamadora;  –  formais:  subroLna.  

Procedure  Troca  (var  A,B:  real);  …                Troca  (  x,y  );  …  

Page 9: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Passagem  de  parâmetros  

•  Passagem  – por  valor:  Apenas  o  valor  é  transferido.  Então,  as  alterações  feitas  nos  parâmetros  formais  (da  subroLna)  não  alteram  os  reais  (chamadora).  

– por  referência:  O  endereço  do  parâmetro  real  é  transferido.  Então,  as  alterações  nos  parâmetros  formais  da  subroLna  na  verdade  estão  sendo  feitas  sobre  os  parâmetros  reais.  

•  Declaração          

 procedure  inicializa  (  var  A,B:  real;  C:  real;  var  D:  integer  );  

por  referência  

por  valor  

Page 10: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

program Parametros;

procedure inicializa ( var A,B: real; C: real; var D: integer );begin

writeln ('Passo 1:', A, B, C, D);A:=1; B:=1; C:=1; D:=1;writeln ('Passo 2:', A, B, C, D);

end;

var X,Y,Z: real;W: integer;

beginX:=0; Y:=0; Z:=0; W:=0;inicializa (X, Y, Z, W);writeln ('Passo 3:', X, Y, Z, W);

end;

Page 11: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Unidade 4.3 Estruturas e Emprego dos Procedimentos

(‘Procedures’)

Page 12: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Procedimentos  

•  Declaração      procedure  nome  (lista-­‐de-­‐parâmetros);          declaração  de  variáveis  locais;      begin        comandos;      end;  

•  Exemplo:      procedure  Troca  (var  A,B:  real);      var  aux:  real;      begin        aux:=A;        A:=B;        B:=A;      end;  

Page 13: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

program OrdemCrescente;

{ ------- SUBROTINA TROCA ------- }procedure Troca (var A,B: real);var aux: real;begin

aux:=A;A:=B;B:=aux;

end;{ ------- FIM TROCA ------- }

var L,M,N: real;begin

{ ------- PROGRAMA PRINCIPAL ------- }readln (L, M, N);if (L>M) OR (L>N) then

if (M<N) then Troca (L, M)else Troca (L, N);

if (M>N) then Troca (M, N);writeln(L, M, N);{ ------- FIM PRINCIPAL ------- }

end.

Page 14: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Unidade 4.4 Estrutura e Emprego das Funções

(‘Functions’)

Page 15: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Funções  

•  Declaração      func3on  nome  (lista-­‐de-­‐parâmetros):  Lpo;          declaração  de  variáveis  locais;      begin        comandos;      end;  

•  Exemplo:      funcLon  Hipotenusa  (A,B:  real):  real;      begin        Hipotenusa:=  sqrt(  sqr(A)  +  sqr(B)  );      end;  

Page 16: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  Linguagem  PASCAL   118  

program Diagonal;{ Diagonal de um paralelepipedo }

{ Funcao Hipotenusa }function Hipotenusa (A,B: real): real;begin

Hipotenusa:= sqrt ( sqr(A) + sqr(B) );end;{ Fim Funcao Hipotenusa }

var A, B, C, D: real;begin

{ Programa Principal }readln (A, B, C, D); { dimensoes }D: = Hipotenusa ( Hipotenusa (A, B), C );writeln (D);{ Fim Programa Principal }

end.

B  C  D  

A  

Page 17: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivos  

•  São  estruturas  de  dados  armazenadas  fora  da  memória  principal    do  computador  =>  memória  secundária  (HD,  disquete,  CD-­‐ROM,  etc.)  

•  Principais  vantagens:  –  quando  a  quanLdade  de  informação  é  muito  grande  para  ficar  em  memória;  –  armazenar  para  uso  futuro.  

•  Tipos  de  arquivos:  –  Binários:  usam  códigos  binários  para  gravar  os  caracteres    

•  Ex:  número  64  =>  grava  o  número  64  (aparece  como  @)  •  Ex:  letra  A  =>  grava  o  número  65  

–  Texto:  armazena  o  código  ASCII  (arquivo  fica  maior!)  •  Ex:  número  64  =>  grava  o  6  (cód.  54)  e  o  4  (cód.  53)  =>  (aparece  como  64  mesmo)  •  Ex:  letra  A  =>  grava  o  cód.65  (aparece  o  A  mesmo)  

       

Page 18: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  binário  

•  Organização  sequêncial  em  registros  (compostos  de  campos),  mas  o  acesso  pode  ser  direto  através  do  número  do  registro.  

       

   

NOME ENDEREÇO UF0

NOME ENDEREÇO UF1

NOME ENDEREÇO UF2

NOME ENDEREÇO UF3

NOME ENDEREÇO UFN

...

Page 19: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  binário  

•  Declaração:    var  idenLficador:  file  of  Lpo;  

•  Ex1:    var  Notas:  FILE  OF  integer;  

•  Ex2:    type  Pessoa  =  record          nome:  string[40];          telefone:  string[30];          endereco_completo:  string[200];                    end;    var  Agenda:  file  of  Pessoa;      

   

Page 20: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  binário  

•  Associação  do  idenLficador  (nome  interno)  ao  nome  do  arquivo  (nome  externo):      assign  (iden1ficador,  ´arquivo.ext´);    

•  Cada  arquivo  possui  um  ponteiro  para  a  posição  do  registro.  Para  abrir  o  arquivo  e  apontar  para  o  início  use:  

   reset  (iden1ficador);  •  Para  criar  um  arquivo  novo  (ou  apagar  um  já  existente),  

abrir  e  apontar  para  o  início  use:  

   rewrite  (iden1ficador);    •  E  para  fechar  após  o  uso:  

   close  (iden1ficador);  

Page 21: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  binário  

program AbreFecha;type Registro=record

Matricula: real;NomeAluno: string[25];NotaTotal: real;

end; Arquivo = file of Registro;var Notas: Arquivo;begin

assign (Notas, ´NOTAS.DAT´);rewrite (Notas);{

Comandos para gravar no arquivo}close (Notas);

reset (Notas);{

Comandos para ler do arquivo}close (Notas);

end.

Page 22: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  binário  

•  Leitura  de  arquivo:  

   read  (iden1ficador,  lista-­‐de-­‐registros);  •  Escrita  em  arquivo:      write  (iden1ficador,  lista-­‐de-­‐registros);  

•  Fim  de  arquivo      EOF  (iden1ficador);          EOF  -­‐  “End  of  File”  =  “Fim  de  arquivo”  

     Retorna:  true,  se  a+ngiu  o  fim  do  arquivo          false,  cc.  

Page 23: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  Linguagem  PASCAL   125  

Arquivo  binário  program Backup;type Pessoa = record Nome: string[15];

Idade: integer; end;

var A, B: file of Pessoa;T: Pessoa;

beginassign (A, ´dados.dat´);assign (B, ´backup.dat´);reset (A); rewrite (B);while not EOF (A) dobegin

read (A, T);write (B, T);

end;close (A);close (B);

end.

Page 24: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  binário  

•  Acesso  direto  a  um  registro,  sem  a  procura  sequencial:      seek  (iden1ficador,  numero-­‐do-­‐registro);  

     obs:  o  primeiro  registro  é  o  0  (zero).  

 •  Função  que  retorna  o  número  total  de  registros  em  um  arquivo:      FileSize  (iden1ficador);  

     obs:  seek  (iden1ficador,  FileSize(iden1ficador);  posiciona  o  arquivo  logo  após  o  úlLmo  registro  gravado,  corresponde  ao  comando  append.  

           

Page 25: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  binário  

•  Exr1:  Faça  um  programa  que  crie  uma  base  de  dados  com  10  alunos.  O  arquivo  em  disco  deve  conter:  –  matrícula  do  aluno;  –  nome  do  aluno;  –  nota  VEsp;  –  nota  VC.  

•  Exr2:  Faça  um  programa  que,  dado  a  matrícula  do  aluno,  retorne  seu  nome  e  média.  

       •  Exr3:  Faça  um  programa  que,  dado  a  matrícula  do  aluno,  

altere  suas  notas.      

Page 26: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

   

program exr1;type Registro = record matricula: integer;

nome: string[40];vesp: real;vc: real;

end;Arquivo = file of Registro;

const N=10;var Aluno: Registro;

Turma: Arquivo;i: integer;

beginassign (Turma, 'ALUNOS.DAT');rewrite (Turma);for i:=1 to N dobegin

write (´Entre com a matrícula: ´); readln(Aluno.matricula);write (´Entre com o nome: ´); readln(Aluno.nome);write (´Entre com a nota de VEsp: ´); readln(Aluno.vesp);write (´Entre com a nota de VC: ´); readln(Aluno.vc);

write (Turma, Aluno);end;close (Turma);

end.

Page 27: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

   

program exr2;type Registro = record matricula: integer;

nome: string[40];vesp: real;vc: real;

end;Arquivo = file of Registro;

var Aluno: Registro;Turma: Arquivo;N, matricula, i: integer;achei: boolean;

beginassign (Turma, 'ALUNOS.DAT');reset (Turma);write (´Digite a matrícula: ´); readln (matricula);

achei:=false; N:=0;while (not achei) and (not EOF(Turma)) dobegin

seek (Turma, N);read (Turma, Aluno);if (Aluno.matricula = matricula) then achei:=true;N:=N+1;

end;close (Turma);

if achei then writeln (´Aluno ´, Aluno.nome, ´ possui média igual a ´, (Aluno.vesp+Aluno.vc)/2:5:2)

else writeln (´Aluno não encontrado !´);end.

Page 28: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

   

program exr3;...var vesp, vc: real;begin

assign (Turma, 'ALUNOS.DAT');reset (Turma);write (´Digite a matrícula: ´); readln (matricula);write (´Digite a nota de VEsp e VC: ´); readln (vesp, vc);

achei:=false;N:=0;while (not achei) and (not EOF(Turma)) dobegin

seek (Turma, N);read (Turma, Aluno);if (Aluno.matricula = matricula) then begin

achei:=true;Aluno.vesp:= vesp;Aluno.vc:=vc;write (Turma, Aluno);

end;N:=N+1;

end;close (Turma);

if achei then writeln (´Notas alteradas com sucesso !´)else writeln (´Aluno não encontrado !´);

end.

Page 29: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  texto  

•  A  organização  de  um  arquivo  texto  também  é  sequêncial,  mas  não  permite  acesso  direto.  

•  Declaração:      var  iden1ficador:  text;  

•  ex:  var  documento:  text;      

•  Associação  com  o  arquivo:      assign  (iden1ficador,  ‘ARQ.TXT’);  

•  ex:  assign  (documento,  ‘docs.txt’);  

Page 30: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  texto  

•  Abertura  de  um  arquivo  •  Exclusivamente  para  leitura  de  um  arquivo  já  existente  (erro  de  execução  caso  não  exista):        reset  (iden1ficador);  

•  Exclusivamente  para  escrita.  Cria  um  novo.  Se  já  existe  apaga  e  cria  de  novo:        rewrite  (iden1ficador);  

•  Exclusivamente  para  escrita  em  um  arquivo  já  existente.  Grava  a  parLr  do  úlLmo  registro  (erro  de  execução  caso  não  exista):        append  (iden1ficador);  

 

Page 31: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  texto  

•  Fechamento  do  arquivo      close  (iden1ficador);  

•  Comandos  de  leitura      read  (iden1ficador,  variáveis);      readln  (iden1ficador,  variáveis);  

•  Comandos  de  escrita      write  (iden1ficador,  variáveis);      writeln  (iden1ficador,  variáveis);  

•  Fim  de  arquivo      EOLn  (iden1ficador);  

       

Page 32: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  texto  

•  Em  PASCAL,  os  disposiLvos  periféricos  são  tratados  como  arquivos  texto:  CON:  vídeo  (console)  LPT1,  LPT2,  LPT3:  impressoras  PRN:  mesmo  que  LPT1    

program  VideoImpressora;  var  disposiLvo:  text;      k:  char;  begin  

 write  (´Vídeo  ou  impressora  (V  ou  I)  ?  ´);  readln(k);    if  (k=´V´)    then  assign  (disposiLvo,  ´CON´);        else  assign  (disposiLvo,  ´LPT1´);    rewrite  (disposiLvo);    writeln  (´Olá  !!!!´);    close  (disposiLvo);  

end.        

   

       

Page 33: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Arquivo  texto  

•  Exr:  Implemente  um  sistema  criptográfico  que  leia  um  arquivo  texto  escrito  por  você  e  embaralhe  as  letras  de  acordo  com  uma  senha  N.  Essa  senha  irá  deslocar  o  alfabeto  de  N  posições.  Use  A-­‐Z,  a-­‐z  e  0-­‐9.  

A  B  C  D  E  ........................................................Z  

A  B  C  D  E  ...........................................  ...W  X  Y  Z  

N  =  -­‐  4  

Page 34: LP1 - Unidade 5

 Prof.  Anderson  Fernandes  

Trabalho  

•  Implementar  um  “Sistema  de  Agenda”  •  Requisitos  do  sistema:  

– o  sistema  deverá  ter  um  menu  de  inserção,  alteração  e  deleção  de  cadastros;  

– deverá  permiLr  também  consulta  aos  dados  por  nome,  cidade  ou  estado;  

– os  dados  ficarão  gravados  em  disco;  – os  cadastros  deverão  conter:  nome,  endereço,  bairro,  cidade,  estado,  cep,  telefone  e  celular.