LP1 - Unidade 5
-
Upload
felipe-fulli -
Category
Documents
-
view
248 -
download
0
description
Transcript of LP1 - Unidade 5
Prof. Anderson Fernandes
Unidade 4 Sub-rotinas – (‘Procedures’ e ‘Functions’)
Prof. Anderson Fernandes
Unidade 4.1 Regras Gerais para Criação de Sub-
rotinas
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 !
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.
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.
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.
Prof. Anderson Fernandes
Unidade 4.2 Passagem de parâmetro por valor e por
referências
Prof. Anderson Fernandes
Nomenclatura dos parâmetros
• Parâmetros – reais: chamadora; – formais: subroLna.
Procedure Troca (var A,B: real); … Troca ( x,y ); …
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
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;
Prof. Anderson Fernandes
Unidade 4.3 Estruturas e Emprego dos Procedimentos
(‘Procedures’)
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;
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.
Prof. Anderson Fernandes
Unidade 4.4 Estrutura e Emprego das Funções
(‘Functions’)
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;
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
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)
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
...
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;
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);
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.
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.
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.
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.
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.
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.
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.
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.
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’);
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);
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);
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.
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
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.