Você está na página 1de 15

Subprogramas :

Procedimentos
(procedures) em Pascal
Prof. Luis Otavio Alvares
Funções/procedimentos
• Funções
• devolvem 1 valor
• o valor calculado é usado diretamente pelo programa

• Procedimentos
• podem devolver zero, um ou mais valores
• valores são passados como parâmetros
Procedures sem parâmetros
Exemplo
Program teste;
Procedure asteriscos;
Var I:integer;
Begin
writeln;
for I:=1 to 80 do write(’*’);
Writeln;
End;
{programa principal}
...
Asteriscos; {chamada da procedure}
...
Asteriscos; {chamada da procedure}
...
Procedures com parâmetros
• Há duas formas de passagem de parâmetros nas procedures
em Pascal:
• Por valor e por referência
• Na passagem por valor, como o próprio nome indica,
somente o valor é passado (é usado para os parâmetros de
entrada da procedure). Análogo aos parâmetros de funções.
• Na passagem por referência, o valor do parâmetro pode ser
alterado e vai ser percebido pelo programa que chamou a
procedure (é usado para os parâmetros de saída da
procedure)
Exemplo
Program ExcomFatorial;
Procedure Fat(A:integer ; Var X:real);
Var I: integer;
begin
X:= 1;
for I:=1 to A do
X:= X * I;
end;
{programa principal}
var Valor : integer;
f : real;
begin
write('digite um numero inteiro: ');
readln(Valor);
If ( Valor >= 1 )
then begin
Fat(Valor, f);
writeln('Fatorial de ',Valor,' = ',f:5:0);
end;
readln;
end.
Procedures - Pascal 6

Declaração
Procedure <identificador> [( <lista de parâmetros formais> ) ] ;
[ <declaração de variáveis locais>; ]
begin
< comandos separados por ‘;’ >
end;

Lista de parâmetros formais opcionais


[ var ] < lista de identificadores > : <tipo>; ...

Indica passagem de parâmetro


por referência- opcional

Procedure Teste ( A, B: integer; var C: real );


begin
Ex: C := A / B;
end;
Exemplo com dois parâmetros de
saída
• Fazer uma procedure que receba como
parâmetro o nome de um vetor e forneça
como saída o maior elemento do vetor e a sua
posição.
program exemploProcedure;
type tipoVetor = array[1..10] of integer;
procedure maiorElemento(V:tipoVetor; var maior,posicao:integer);
var I:integer;
begin
maior:=V[1];
posicao:= 1;
for I:= 1 to 10 do
if V[I] > maior
then begin
maior:=V[I];
posicao:=I;
end;
end;
var vet:tipoVetor;
I,M,P:integer;
begin
writeln('informe os 10 valores do vetor: ');
for I:=1 to 10 do readln(vet[I]);
maiorElemento(vet,M,P);
writeln('o maior elemento do vetor eh: ',M,' na posicao ',P);
readln;
end.
9

Relembrando...
Procedure Muda; Procedure Muda (X : integer);
10
var X : integer; begin
begin X := 1
X := 1 end; { Muda }
end; { Muda }
var X : integer; {programa principal }
var X : integer; {programa principal } begin
begin X := 0; Parâmetro por valor
X := 0; Variável local Muda (X); Não muda valor da variável
Muda; Não muda valor da write ( X ); do progr. principal
write ( X ); variável do progr. end.
end. principal

Procedure Muda (var X: integer); var X : integer;


begin Procedure Muda;
X := 1 begin
end; { Muda } X := 1
end; { Muda }
ar X : integer; {programa principal } begin {programa principal }
begin X := 0;
X := 0; Muda;
Muda (X); Parâmetro por referência
write ( X ); Variável global
write ( X ); Muda valor da variável do end. Muda valor da variável
end. progr. principal
Exercício
• Faça uma procedure que receba como
parâmetro de entrada uma matriz 5x5 e
forneça como saída o maior e o menor
elemento da matriz.
program procedureMatriz;
type tipoMatriz = array[1..5,1..5] of integer;
procedure maiorMenor(M:tipoMatriz; var maior,menor:integer);
var I,K:integer;
begin
maior:=M[1,1];
menor:=M[1,1];
for I:= 1 to 5 do
for K:=1 to 5
do begin
if M[I,K] > maior then maior:=M[I,K];
if M[I,K] < menor then menor:=M[I,K];
end;
end;
var Mat:tipoMatriz;
L,C,M,Menor:integer;
begin
for L:= 1 to 5
do begin
writeln('informe os valores da linha ',L);
for C:=1 to 5 do readln(Mat[L,C]);
end;
maiorMenor(Mat,M,Menor);
writeln('o maior elemento da matriz eh: ',M);
writeln('o menor elemento da matriz eh: ',Menor);
readln;
end.
Units
• Units em Pascal são bibliotecas de funções e
procedures. Algumas já vem com o
compilador, como a unit CRT, que tem
funções para a saída em vídeo.

• As funções e procedures definidas pelo


usuário podem ser salvas em uma unit e desta
forma utilizadas em qualquer programa.
Exemplo de definição de unit
unit minhaUnit;

interface
Function Fat(X:integer): real;
function Pot(base:real;exp:integer):real;

implementation
Function Fat(X:integer): real;
var I:integer;
begin
fat:=1;
for I:= 1 to X do Fat:=Fat*I;
End;

function Pot(base:real;exp:integer):real;
var I:integer;
begin
Pot:=1;
for I:=1 to exp do
Pot:=Pot*base;
end;
end.
Exemplo de uso de unit
{calcula o cosseno de um angulo do 1. quadrante dado em radianos}
uses minhaUnit; {é uma declaração}
function cos1quad(A:real):real;
var
I,sinal:integer;
cos:real;
begin
cos:=1;
sinal:=-1;
I:=2;
while I<= 60 {30 termos da serie}
do begin
cos:=cos+sinal*(Pot(A,I)/fat(I));
sinal:=sinal*-1;
I:=I+2;
end;
cos1quad:=cos;
end;
{--- programa principal ---}
var angulo: real;
begin
write(‘informe o angulo do 1. quadrante em radianos’);
readln(angulo);
writeln('o cosseno de ',angulo,' eh aproximadamente ',
cos1quad(angulo):1:6);
readln;
end.

Você também pode gostar