LP1 - Unidade 5

  • View
    221

  • Download
    0

Embed Size (px)

DESCRIPTION

Condicionais, case, while

Text of LP1 - Unidade 5

  • Prof. Anderson Fernandes

    Unidade 4 Sub-rotinas (Procedures e Functions)

  • Prof. Anderson Fernandes

    Unidade 4.1 Regras Gerais para Criao de Sub-

    rotinas

  • Prof. Anderson Fernandes

    Modularizao

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

    A soluo o chamado Mtodo de Renamentos sucessivos: dividir o problema em vrios sub-problemas, evitando assim abordar todos os detalhes do problema simultneamente.

    Nesse contexto, para cada sub-problema ser criado uma subroLna, ou seja, um mdulo.

    Vamos Modularizar o problema !

  • Prof. Anderson Fernandes

    Modularizao

    Programao Top-Down (ou de cima para baixo): 1 - Inicialmente o programador deve saber as tarefas principais do programa, no como faz-las, apenas quanLc-las;

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

    3 - Ento, cada tarefa detalhada.

  • Prof. Anderson Fernandes

    Modularizao

    Vantagens da Programao Top-Down: reuLlizao de cdigo fonte; facilitar a compreenso de como o problema foi modelado;

    a manuteno feita por mdulo; alteraes no mdulo valem para todos os lugares onde o mdulo usado;

    o nmero de linhas de um cdigo fonte de um mdulo relaLvamente menor, e mais fcil para se entender;

    etc.

  • Prof. Anderson Fernandes

    Modularizao em PASCAL

    Uma subroLna um sub-programa com variveis e comandos prprios e que, para ser executada, precisa ser chamada pelo programa principal.

    Na linguagem PASCAL temos dois Lpos de subroLnas: Procedimentos (procedures); Funes (func+ons).

    A funo retorna um valor, o procedimento no.

  • Prof. Anderson Fernandes

    Unidade 4.2 Passagem de parmetro por valor e por

    referncias

  • Prof. Anderson Fernandes

    Nomenclatura dos parmetros

    Parmetros reais: chamadora; formais: subroLna.

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

  • Prof. Anderson Fernandes

    Passagem de parmetros

    Passagem por valor: Apenas o valor transferido. Ento, as alteraes feitas nos parmetros formais (da subroLna) no alteram os reais (chamadora).

    por referncia: O endereo do parmetro real transferido. Ento, as alteraes nos parmetros formais da subroLna na verdade esto sendo feitas sobre os parmetros reais.

    Declarao

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

    por referncia

    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

    Declarao procedure nome (lista-de-parmetros); declarao de variveis 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 (MN) then Troca (M, N);writeln(L, M, N);{ ------- FIM PRINCIPAL ------- }

    end.

  • Prof. Anderson Fernandes

    Unidade 4.4 Estrutura e Emprego das Funes

    (Functions)

  • Prof. Anderson Fernandes

    Funes

    Declarao func3on nome (lista-de-parmetros): Lpo; declarao de variveis 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

    So estruturas de dados armazenadas fora da memria principal do computador => memria secundria (HD, disquete, CD-ROM, etc.)

    Principais vantagens: quando a quanLdade de informao muito grande para car em memria; armazenar para uso futuro.

    Tipos de arquivos: Binrios: usam cdigos binrios para gravar os caracteres

    Ex: nmero 64 => grava o nmero 64 (aparece como @) Ex: letra A => grava o nmero 65

    Texto: armazena o cdigo ASCII (arquivo ca maior!) Ex: nmero 64 => grava o 6 (cd. 54) e o 4 (cd. 53) => (aparece como 64 mesmo) Ex: letra A => grava o cd.65 (aparece o A mesmo)

  • Prof. Anderson Fernandes

    Arquivo binrio

    Organizao sequncial em registros (compostos de campos), mas o acesso pode ser direto atravs do nmero do registro.

    NOME ENDEREO UF0

    NOME ENDEREO UF1

    NOME ENDEREO UF2

    NOME ENDEREO UF3

    NOME ENDEREO UFN

    ...

  • Prof. Anderson Fernandes

    Arquivo binrio

    Declarao: var idenLcador: le 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: le of Pessoa;

  • Prof. Anderson Fernandes

    Arquivo binrio

    Associao do idenLcador (nome interno) ao nome do arquivo (nome externo): assign (iden1cador, arquivo.ext);

    Cada arquivo possui um ponteiro para a posio do registro. Para abrir o arquivo e apontar para o incio use:

    reset (iden1cador); Para criar um arquivo novo (ou apagar um j existente),

    abrir e apontar para o incio use:

    rewrite (iden1cador); E para fechar aps o uso: close (iden1cador);

  • Prof. Anderson Fernandes

    Arquivo binrio

    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 binrio

    Leitura de arquivo: read (iden1cador, lista-de-registros);

    Escrita em arquivo: write (iden1cador, lista-de-registros);

    Fim de arquivo EOF (iden1cador); EOF - End of File = Fim de arquivo

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

  • Prof. Anderson Fernandes Linguagem PASCAL 125

    Arquivo binrio 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 binrio

    Acesso direto a um registro, sem a procura sequencial: seek (iden1cador, numero-do-registro);

    obs: o primeiro registro o 0 (zero).

    Funo que retorna o nmero total de registros em um arquivo:

    FileSize (iden1cador);

    obs: seek (iden1cador, FileSize(iden1cador); posiciona o arquivo logo aps o lLmo registro gravado, corresponde ao comando append.

  • Prof. Anderson Fernandes

    Arquivo binrio

    Exr1: Faa um programa que crie uma base de dados com 10 alunos. O arquivo em disco deve conter: matrcula do aluno; nome do aluno; nota VEsp; nota VC.

    Exr2: Faa um programa que, dado a matrcula do aluno, retorne seu nome e mdia.

    Exr3: Faa um programa que, dado a matrcula 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 matrcula: ); 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 matrcula: ); 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 mdia igual a , (Aluno.vesp+Aluno.vc)/2:5:2)

    else writeln (Aluno no encontrado !);end