Subprogramas em Pascal com Procedure e Function–Parte I

Muitos alunos tem dificuldade em desenvolver alguns programas.

A explicação que vou colocar aqui se aplica a resolver muitos os problemas cotidianos de várias áreas:

“Um problema grande pode ser dividido em partes menores e resolvendo todas as partes menores é possível resolver o problema maior.”

Como exemplo clássico: como vamos contruir uma casa?

A casa completa é um problema grande, se você dividir em:

- projeto

- preparação de área

- materiais

- alicerce

- paredes

- laje ou telhado

- encanamento

- eletricidade

Se mesmo assim os problemas continuam grandes você poderá subdivídi-lo novamente:

- projeto:

- garagem

- piscina

- primeiro pavimento

- segundo pavimento

- jardim

Você percebeu que assim fica mais fácil?

Alguns ainda podem perguntar, mas professor isso não dá muito trabalho?

Concordo, mas há uma change de você desenvolver um programa complexo direto e depois descobrir no meio do programa que não vai dar certo e você ter que começar tudo novamente?

Já conheci muitos programadores profissionais que passaram por isso e por esse motivo que a minha instrução é projetar e depois sair programando.

No exemplo da casa, você iria demolir a casa e começar novamente?

PASCAL

Os dois comandos utilizados para “dividir” o programa são: PROCEDURE e FUNCTION.

PROCEDURE é usado quando se quer criar um subprograma, já FUNCTION é aplicado quando se quer obter um resultado como resposta.

Dentro de cada subprograma é possível criar novas variáveis para serem usadas no subprograma e são automaticamente liberadas após o uso do subprograma. O nome dado a esse tipo de variável é local.

Variáveis globais são aquelas que podem ser usadas em todo o programa e ocupam a memória o tempo todo enquanto o programa está em execução.

Variáveis locais são aquelas que podem ser usadas dentro apenas de subprogramas e após a execução do subprograma a memória é liberada.

ESTRUTURA

As estruturas de subprograma ficam antes do programa principal (BEGIN) e tem os seus próprios BEGIN e END. Preste atenção que o END de um subprograma termina com ponto e vírgula e não apenas ponto do programa principal.

PROCEDURE

Procedure <nome do subprograma> (<variáveis>);

<variáveis locais>

Begin

  <comandos>;

End;

 

FUNCTION

Function <nome da função> (<variáveis>): <variável resultante>;

<variáveis locais>

Begin

  <comandos>;

  Result := <resultado>;

End;

 

Exemplos

PROCEDURE

O exemplo abaixo vai criar um cabeçalho para o programa, onde terá uma linha tracejada, uma mensagem centralizada e mais uma linha tracejada.

Procedure cabecalho ( s : String);

Var

  i,j : Integer;

Begin

  // Desenha uma linha tracejada

  for i := 1 to 80 do Write (‘-‘);

  // Calcula a centralizacao

  j := (80 – Length(s)) DIV 2;

  // Centraliza o cabecalho

  for i := 1 to j do Write (‘ ‘);

  WriteLn (s);

  // Desenha uma linha tracejada

  for i := 1 to 80 do Write (‘-‘);

End;

 

Como usar no programa principal:

Begin

  ClrScr;

  cabecalho (‘Meu Programa’);

  WriteLn;

  cabecalho (‘Menu’);

  WriteLn;

  WriteLn (‘1 . Abrir’);

  WriteLn (‘2 . Fechar’);

  WriteLn (‘3 . Sair’);

End.

 

FUNCTION

O Exemplo abaixo é um clássico para calcular um número inteiro elevado a outro número inteiro. Cuidado ao testar os número, pois no resultado inteiro o valor limite é 32767.

Function Elevado (x,y : Integer): Integer;

Var

  i : Integer;

  r : Integer;

Begin

  r := 1;

  for i := 1 to y do

    r := r * x;

  Result := r;

End;

 

Como usar no programa principal:

Begin

  ClrScr;

  WriteLn (‘ A elevado a B’);

  Write (‘Valor de A: ’); ReadLn (A);

  Write (‘Valor de B: ’); ReadLn (B);

  C := Elevado (A,B);

  WriteLn (‘Resultado : ’,C);

End.

4 comentários:

  1. Gostei muito desse material, mas gostaria de saber qual o valor que a function retorna e a procedure não retorna. Grata.

    ResponderExcluir
  2. A procedure não retorna valor:

    Procedure cabecalho ( s : String);

    A function sim:

    Function Elevado (x,y : Integer): Integer; (nesse exemplo inteiro)

    Há ainda a possibilidade de retornar valores nas variáveis de envio, seja para Function ou Procedure.

    Se quiser mais detalhes entre em contato.

    ResponderExcluir
  3. Esse programa foi compilado em que programa ?

    ResponderExcluir
  4. Em Free Pascal que dentre os grátis eu acho o melhor.

    ResponderExcluir