Subprogramas Procedimentos procedures em Pascal Prof Luis Otavio
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}. . .
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 Excom. Fatorial; 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 exemplo. Procedure; type tipo. Vetor = array[1. . 10] of integer; procedure maior. Elemento(V: tipo. Vetor; 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; var vet: tipo. Vetor; I, M, P: integer; begin writeln('informe os 10 valores do vetor: '); for I: =1 to 10 do readln(vet[I]); maior. Elemento(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 5 x 5 e forneça como saída o maior e o menor elemento da matriz.
program procedure. Matriz; type tipo. Matriz = array[1. . 5, 1. . 5] of integer; procedure maior. Menor(M: tipo. Matriz; 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; var Mat: tipo. Matriz; 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; maior. Menor(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 minha. Unit; 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.
Exemplo de uso de unit {calcula o cosseno de um angulo do 1. quadrante dado em radianos} uses minha. Unit; {é uma declaração} function cos 1 quad(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; cos 1 quad: =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 ', cos 1 quad(angulo): 1: 6); readln; end.
- Slides: 15