Você está na página 1de 29

Procedimentos

e Funções
Procedimentos e Funções

Esta técnica de programação é das mais


utilizadas, considerando-se vantajosa no
desenvolvimento de grandes programas.
Procedimentos e Funções
Problemas complexos exigem algoritmos complexos, mas é
sempre possível dividir um problema grande em problemas
menores.

Cada parte menor tem um algoritmo mais simples, e é este bloco


menor que é chamado de sub-rotina.

Quando uma sub-rotina é chamada por um programa principal, é


executada e no fim o controlo do processamento retorna
automaticamente para a primeira linha de instrução após a linha
que efectuou a sua chamada.
Procedimentos e Funções

Ao se trabalhar com esta técnica, podemos ter


necessidade de dividir uma sub-rotina em outras tantas
quantas forem necessárias, procurando uma solução
mais simples de uma parte do problema maior.

O processo de dividir sub­rotinas em outras é denominado:


Método de Refinamento Sucessivo
Procedimentos e Funções

Tipos de Sub-Rotinas

A linguagem Pascal permite a utilização de


dois tipos de rotinas definidas pelo
programador:
PROCEDURE (procedimento)
FUNCTION (função)
Procedimentos e Funções

Um Procedure ou Function é, na verdade, um


bloco de programa, a diferença entre os dois tipos
de sub-rotina está no facto de:

Procedure - poder ou não retornar um valor


após o seu processamento;
Function - irá retornar sempre um valor após o
seu processamento;
Procedimentos e Funções
Para além das rotinas definidas pelo programador,
existe na linguagem Pascal um conjunto de rotinas
embutidas, ou seja, internas. Este tipo de rotinas
embutida é conhecido pelo nome de UNIDADE, em
inglês UNIT.

Uma Unit é na realidade uma biblioteca de


funções e procedimentos, as quais também
podem ser criadas pelo próprio programador.
Unidades do Turbo Pascal
Unidade Descrição
CRT Esta unidade é a mais utilizada na programação do
Turbo Pascal. Por esta razão, possui a maior parte
das rotinas e variáveis de geração de som controle de
video e teclado.
DOS Esta unidade possui as rotinas que envolvem a
utilização do sistema operacional, na maior parte das
vezes permitindo controles de baixo nivel
GRAPH Esta unidade possui rotinas destinadas à manipulação
da capacidade grafica de um PC.
OVERLAY Esta unidade possibilita gerir as actividades de um
programa, desta forma é possivel aproveitar uma
mesma área de memória para rodar várias rotinas
diferentes, economizando memória.
PRINTER Esta unidade permite declarar um arquivo tipo texto
com o nome LST e associá-lo à impressora.
SYSTEM Esta unidade possui a maior parte das rotinas padrão
da linguagem Pascal, não necessitando ser citada
para ser usada, pois o Turbo Pascal já a executa de
forma automática.
Unidades do Turbo Pascal

Para se fazer uso das UNIDADES é


necessário o uso da instrução uses
situada antes da declaração da
instrução var.
Sintaxe:
Sintaxe
uses <unidade>
Unidade – é uma das unidades citadas anteriormente na tabela.
Unidades do Turbo Pascal
program unidade_crt; Repeat
gotoXY (10,10);
uses crt; write ('Digite outro caractere');
Until keypressed;
var k : char;
gotoXY (10,15);
Begin write ('O primeiro caractere foi:', k);
gotoXY (10,5);
write ('Carregue numa tecla'); Repeat
k:=readkey; gotoXY (10,10);
write ('Carregue em S para sair');
k:=readkey;
Until k='S';

End.
Unidades do Turbo Pascal
Criar e guardar uma unidade idêntica em Pascal

Unit Unit_02; Procedure BarraVertical (x,y,n : Integer);


Interface var i: integer;
uses crt; begin
Procedure BarraHorizontal (x,y,n : Integer); FOR i:=0 TO n-1 DO
Procedure BarraVertical (x,y,n : Integer); begin
Implementation gotoXY (x,y+i);
Procedure BarraHorizontal (x,y,n : Integer); write('X');
var i: integer; end
begin end;
FOR i:=0 TO n-1 DO End.
begin
gotoXY (x+i,y);
write('X'); Aceder ao Menu Compile  Destination File
end
end; Copiar o ficheiro *.TPU para a pasta Units
Unidades do Turbo Pascal
Criar e guardar um programa, em Pascal, idêntico ao que se segue:
Program Barra;
Uses crt,unit_02;

Begin
BarraHorizontal (10,2,20);
BarraVertical (10,2,5);
BarraHorizontal (10,6,20);
BarraVertical (30,2,5);
End.

Compilar o programa e aceder ao menu File  DOS shell


Procedimentos e Funções

A sub-rotina do tipo Procedure,


Procedure apresenta a seguinte SINTAXE em
Pascal :
 procedure <nome> [(parâmetros)]
 var
<variáveis>
 begin
<instruções>
end;
 onde:
<nome> - o nome atribuído ao procedimento;
<parâmetro> - uma informação opcional;
Procedimentos e Funções
Aplicação prática de PROCEDURES num programa
Desenvolver um programa calculadora que apresente
um menu de selecções no programa principal.
Este menu deverá dar ao utilizador a possibilidade de
escolher uma de entre quatro operações aritméticas.
Escolhida a opção desejada, deverá ser solicitada a
entrada de dois números, e processada a operação,
deverá ser exibido o resultado.
Procedimentos e Funções

Programa Principal
1 - Apresentar um menu de selecção com cinco opções:
  1 – Adição
2 – Subtracção
3 – Multiplicação
4 – Divisão
5 – Fim de Programa
2 - Ao ser seleccionado um valor, a rotina correspondente
deverá ser executada;
3 - Ao se escolher o valor 5, o programa deverá ser encerrado.
Procedimentos e Funções

UTILIZAÇÃO DE FUNCTIONS

Uma Function, tal como um Procedure, é um


bloco de programa, no qual são válidas todas
as regras já estudadas tanto de programação
como de definição de uma sub-rotina, seus
parâmetros e também da utilização de variáveis
globais e locais.  
Procedimentos e Funções
UTILIZAÇÃO DE FUNCTIONS

A diferença em relação a uma Procedure, está


no facto de retornar sempre um valor.
valor O valor
de uma função é retornado no próprio nome da
função. Quando se diz valor, devem ser levados
em consideração os valores numéricos, lógicos
ou literais (string ou caracteres).
Procedimentos e Funções
UTILIZAÇÃO DE FUNCTIONS

Sintaxe:
Sintaxe
function <nome> [(parâmetros)] : <tipo>;

var <variáveis>
begin
<instruções>
end;

Nome - o nome atribuído ao procedimento;


Parâmetro - uma informação opcional;
Tipo - o tipo de dado a ser retornado pela função;
Procedimentos e Funções

Temos dois tipos de variáveis utilizadas em


programação:

Variáveis Globais
E
Variáveis Locais
Procedimentos e Funções

Variáveis Globais
Uma variável é considerada global se é
declarada no início dum programa escrito em
Pascal. Pode ser utilizada por qualquer sub-
rotina subordinada. Este tipo de variável passa
a ser visível em todas as sub-rotinas.
Procedimentos e Funções
Variáveis Locais
Uma variável é considerada local se é
declarada dentro de uma sub­rotina sendo
somente válida dentro da rotina à qual está
declarada. As restantes sub-rotinas e o
programa principal não podem fazer uso
daquelas variáveis porque não visualizam a
sua existência.
Procedimentos e Funções
Consideremos os seguintes exemplos,
1º exemplo 1 - sem uso de sub-rotina 2º exemplo
program TROCA1;   2 - com sub-rotina, fazendo uso do program TROCA2;
var   conceito de variável global e local: var
X : integer;   A, B : integer;
A : integer;   Apesar de o 2º exemplo ser maior que o procedure TROCA;
B : integer;   1º em número de linhas, possibilita var
begin   economia de espaço em memória, pois X : integer;
readln(A); o espaço a ser utilizado pela variável X begin
  readln(B);   é somente solicitado quando a sub- X := A;
X := A;   rotina TROCA é executada. A := B;
A := B;   Terminada a execução, a variável X é B := X;
B := X;   liberta, ficando em uso somente os end;
writeln(A); espaços reservados para as variáveis begin
 writeln(B);   globais A e B. readln(A); readln(B);
end.   Troca;
writeln(A); writeln(B);
end.
Neste Caso:
Dependendo da forma como se trabalha com as variáveis, é possível
economizar espaço em memória, tornando o programa mais eficiente.
Procedimentos e Funções

PASSAGEM DE PARÂMETROS
A passagem de parâmetros ocorre quando é feita
uma substituição dos parâmetros formais pelos
reais no momento da execução da sub-rotina.

Estes parâmetros serão passados por variáveis


de duas formas:

Por Valor
Por Referência
Procedimentos e Funções
PASSAGEM DE PARAMETROS POR VALOR  
Caracteriza-se pela não-alteração do valor do
parâmetro real quando o parâmetro formal é
manipulado dentro da sub-rotina.
O valor passado pelo parâmetro real é copiado
para o parâmetro formal, que no caso assume o
papel de variável local da sub-rotina.
Qualquer modificação que ocorra na variável local
da sub-rotina não afectará o valor do parâmetro
real correspondente, ou seja, o processamento é
executado somente dentro da sub-rotina, ficando
o resultado obtido "preso" dentro da sub-rotina.
Procedimentos e Funções
PASSAGEM DE PARAMETROS POR REFERÊNCIA
Caracteriza-se pela ocorrência da alteração do
valor do parâmetro real quando o parâmetro
formal é manipulado dentro da sub-rotina.
Desta forma, qualquer modificação feita no
parâmetro formal implica em alteração no
parâmetro real correspondente.
A alteração efectuada é devolvida para a rotina
“chamadora”.
Procedimentos e Funções
COMPARAÇÃO ENTRE PROCEDURES E FUNCTIONS

procedure FACTORIAL (N: integer; var FACT: integer);


var
i: integer;
begin
FACT:=1;
for i:=1 to N do
FACT:=FACT* i;
end;

Na Procedure, é necessário fornecer dois valores para os


parâmetros N e FACT, sendo N a entrada do valor a ser
calculado (passagem de parâmetro por valor) e FACT o
valor resultado obtido como retorno (passagem de
parâmetro por referência).
Procedimentos e Funções
COMPARAÇÃO ENTRE PROCEDURES E FUNCTIONS
function FACTORIAL (N: integer) : integer;
var
i,FACT: inteiro ;
begin
FACT:=1;
for i:=1 to N do
FACT:=FACT*i;
FACTORIAL:= FACT;
end;
Se a sub-rotina for escrita como uma função, será
necessária apenas a informação de um parâmetro, no caso o
valor do parâmetro N do qual deverá ser calculado o
factorial, pois o resultado do cálculo será atribuído ao
próprio nome da função.
Procedimentos e Funções
RECURSIVIDADE

Um subprograma é recursivo quando se chama a si mesmo.

Function Fi (t:integer):integer; 
Begin 
    If t<=2 then Fi:=1 
            else Fi := Fi(t-2)+Fi(t-1); 
end;

Se o valor do parâmetro inteiro t for maior que 2, a função Fi é chamada,


durante a própria execução, com outros valores. A função definida serve
para determinar o n-ésimo termo da sequência de Fibonacci
(1,1,2,3,5,8..). Por exemplo, se t inicialmente vale 10, a função Fi deve
retornar o valor 55, que é o décimo termo da sequência.
   
Procedimentos e Funções
RECURSIVIDADE

O processo recursivo é baseado na recorrência válida para essa


sequência: todo termo é igual à soma dos dois termos anteriores. É
importante que um programa recursivo deve ter obrigatoriamente uma
condição que controla a sua execução ou fim, sob pena de produzir uma
computação interminável. No exemplo, o fim da execução da função
ocorre quando o parâmetro t é menor ou igual a 2, como cada chamada
de Fi diminui o valor de t, o fim está garantido.
    Um programa recursivo é mais elegante e menor que a sua versão
iterativa, além de exibir com maior clareza o processo utilizado, desde
que o problema ou dados sejam naturalmente definidos através da
recorrência. Por outro lado, um programa recursivo exige mais espaço de
memória e é mais lento do que a versão iterativa.      

Você também pode gostar