Vous êtes sur la page 1sur 3

10/12/13 Funes e Procedimentos

www.inf.pucrs.br/~fldotti/lapro1/prfun.htm 1/3
Linguagem Pascal
Funes e Prodedimentos
Subprogramas
Em PASCAL podemos definir blocos de execuo internos a um programa, chamados
subprogramas. Cada bloco executa uma tarefa deternimada. Isto favorece a legibilidade e
manuteno do programa, alm de auxiliar no domnio da complexidade quando definimos
o programa, j que podemos tratar partes do problema de forma isolada. Subprogramas
tm parmetros que podem ser de entrada, sada, ou ambos.
H dois tipos de subprogramas em Pascal: os procedimentos (PROCEDURES) e as
funes (FUNCTIONS).
Diferenas entre Funes e Procedimentos
1. As funes so avaliadas e retornam um valor ao programa que as chama, alm dos
possveis parmetros de sada.
2. Um procedimento no retorna valor nenhum, a funo obrigatoriamente retorna um
valor a uma determinada varivel.
3. Uma funo ativada quando avaliada uma expresso que a contm, isto , as
funes so utilizadas da mesma forma que as funes predefinidas, como SQR, ORD,
LN etc.
4. Um procedimento ativado atravs de um comando de chamada do procedimento.
Escopo
Variveis Globais: So as variveis declaradas no programa que so conhecidas em
todo programa e inclusive nos subprogramas contidos nele.
Variveis Locais: So as variveis declaradas em um subprograma, que so
conhecidas em todo o subprograma, mas no no programa que contm o
subprograma. Caso um subprograma contenha a definio de um outro subprograma
(chamemos de "subsubprograma), as variveis declaradas no programa e no
subprobrama sero visveis no subsubprograma, mas o contrrio no verdadeiro.
No escopo do programa nao podemos chamar o subsubprograma, assim como no
podemos acessar as variveis do subprograma.
Uso de mesmos nomes: se um subprograma definir nomes de variveis iguais ao do
programa principal, ao referenciar uma varivel vale a do escopo local.
Parmetros
No cabealho de um subprograma (Funes ou procedimentos) definimos que tipo de
dados que sero passados como parmetros. H duas formas de passagem de parmetros
de um programa para um subprograma: passagem por valor ou passagem por referncia.
- Passagem por valor: o parmetro formal comporta-se como uma varivel local do
subprograma, de maneira que as alteraes feitas nessa varivel dentro do subprograma
no tenham efeito sobre o parmetro real, que pertence ao programa que fez a chamada.
Assim, o subprograma s utiliza o valor da varivel para um determindao fim, tendo o
poder de alter-la s dentro do subprograma, depois da execuo desse subprograma, a
varivel volta a ter o valor que tinha antes da execuo do subprograma.
10/12/13 Funes e Procedimentos
www.inf.pucrs.br/~fldotti/lapro1/prfun.htm 2/3
- Passagem por referncia: o parmetro formal comporta-se como se fosse uma varivel
global, e todas as alteraes feitas nesta varivel so feitas efetivamente no parmetro real.
Assim, a varivel pode ser alterada pelo subprograma e continuar com o valor alterado.
Sintaxe:
Na lista de parmetros podemos usar as seguintes formas para passagem por
valor:
<nome da funcao ou procedimento> ( i,j,k: integer; y: real; z: boolean);
<nome da funcao ou procedimento> ( i: integer; j: integer; k: integer; y:
real; z: boolean);
Para parmetros por referncia deve-se utilizar "var" no cabealho. Por exemplo
para passagem de j.k e z por referncia:
<nome da funcao ou procedimento> ( i:integer; VAR j,k: integer; y: real;
VAR z: boolean);
<nome da funcao ou procedimento> ( i: integer; VAR j: integer; VAR k:
integer; y: real; VAR z: boolean);

FUNCTIONS
Cabealho:
FUNCTION <nome da funo> (<lista de parmetros>): <tipo da funo>;
Exemplo:
FUNCTION Maximo(a,b:integer):integer;
"a" e "b" so parmetros que serao passados "por valor" funo Maximo. Aps o
trmino de da funo e os valores destes parmetros no estaro alterados.
Mximo o identificador da funo e da varivel que deve conter o valor
fornecido pela funo. Mximo tambm do tipo inteiro.
Essa funo ativada atravs de uma expresso. Por exemplo:
K:=Maximo(P1,P2) + Maximo (P3,P4);
onde P1, P2, P3, P4 so variveis globais do tipo inteiro. E "K" uma varivel do
tipo inteiro que recebe a soma das duas funes.
PROCEDURES
Cabealho:
PROCEDURE <nome do procedimento>(<lista de parmetros>);
Exemplo:
PROCEDURE Estatistica (VAR media: real; VAR s,m: real; ka: integer);
Os parmetros formais so media, s, m e ka. O parmetro media e as variveis s e m
so do tipo real, e ka do tipo inteiro. O parmetro ka o nico parmetro com
passagem por valor.
Esse procedimento pode ser chamados por comandos como:
Estatistica(lista,desvio,sol,n); ou
Estatistica(aula,numero1,numero2,denominador);
Exerccios
Tente fazer os exerccios, depois veja uma das solues mais abaixo na pgina.
1) Faa um subprograma para verificar se um ano bissexto ou no. Utilize a regra: Um ano bissexto
divisvel por 4, mas no por 100, ou ento se divisvel por 400.
Exemplo: 1988 bissexto pois divisvel por 4 e no por 100; 2000 bissexto porque divisvel por
10/12/13 Funes e Procedimentos
www.inf.pucrs.br/~fldotti/lapro1/prfun.htm 3/3
400.
2) Faa uma funo que recebe um nmero inteiro por parmetro e retorna verdadeiro se ele for par e falso
se for mpar.
3) Faa um programa que tem duas variveis globais inicializadas com 0: nmero e seu precentual (21% do
valor do nmero). Faa um programa que l este nmero, envia como parmetros o nmero e seu
percentual, e atravs de um procedimento calcula este novo percentual, e retorna alterado este percentual ao
programa principal para depois imprim-lo.
Resoluo
1)
FUNCTION bissexto (a:integer) : boolean;
Begin
if ((a mod 4 = 0) and (a mod 100<>0)) or (a mod 400 = 0)
then bissexto:= TRUE
else bissexto:= FALSE;
End;
2)
FUNCTION par (numero:integer):boolean;
Begin
if (numero mod 2)=0
then par:= TRUE
else par:= FALSE;
End;
3)
PROGRAM TERCEIRO;
Var
numero,percentual:real;
PROCEDURE calcula_percentual (n1:real; VAR per1:real);
Begin
per1:=n1*(21/100);
end;
Begin
numero:=0;
percentual:=0;
writeln('Digite o nmero');
readln(numero);
calcula_percentual(numero,percentual);
writeln(percentual);
end.
A bibliografia utilizada nas definies de funes e procedimento so do
Livro Pascal II de Lisbete Madsen Barbosa. Ed. McGraw-Hill

Vous aimerez peut-être aussi