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
Ex:
Procedure Teste ( A, B: integer; var C: real );
begin
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;
var X : integer;
begin
X := 1
end; { Muda }
10
var X : integer; {programa principal }
begin
X := 0;
Variável local
Muda;
Não muda valor da
write ( X );
variável do progr.
end.
principal
Procedure Muda (var X: integer);
begin
X := 1
end; { Muda }
ar X : integer; {programa principal }
begin
X := 0;
Parâmetro por referência
Muda (X);
write ( X ); Muda valor da variável do progr.
principal
end.
Procedure Muda (X : integer);
begin
X := 1
end; { Muda }
var X : integer; {programa principal }
begin
X := 0;
Parâmetro por valor
Muda (X);
Não muda valor da variável
write ( X );
do progr. principal
end.
var X : integer;
Procedure Muda;
begin
X := 1
end; { Muda }
begin {programa principal }
X := 0;
Muda;
write ( X );
Variável global
end.
Muda valor da variável
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.
Download

Slides