3. 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}
...
4. 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)
5. 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.
6. 6
Procedures - PascalProcedures - Pascal
DeclaraçãoDeclaração
Procedure <identificador> [( <lista de parâmetros formais> ) ] ;
[ <declaração de variáveis locais>; ]
begin
< comandos separados por ‘;’ >
end;
Lista de parâmetros formaisLista de parâmetros formais
[ var ] < lista de identificadores > : <tipo>; ...
Procedure Teste ( A, B: integer; var C: real );
begin
C := A / B;
end;
Ex:Ex:
opcionais
Indica passagem de parâmetro
por referência- opcional
7. 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.
8. 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.
10. 10
var X : integer;
Procedure Muda;
begin
X := 1
end; { Muda }
begin {programa principal }
X := 0;
Muda;
write ( X );
end.
Procedure Muda;
var X : integer;
begin
X := 1
end; { Muda }
var X : integer; {programa principal }
begin
X := 0;
Muda;
write ( X );
end.
Procedure Muda (X : integer);
begin
X := 1
end; { Muda }
var X : integer; {programa principal }
begin
X := 0;
Muda (X);
write ( X );
end.
Procedure Muda (var X: integer);
begin
X := 1
end; { Muda }
ar X : integer; {programa principal }
begin
X := 0;
Muda (X);
write ( X );
end.
Variável global
Muda valor da variável
Variável local
Não muda valor da
variável do progr.
principal
Parâmetro por valor
Não muda valor da variável
do progr. principal
Parâmetro por referência
Muda valor da variável do
progr. principal
11. 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.
12. 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.
13. 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.
14. 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.
15. 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.