150 likes | 261 Views
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.
E N D
Subprogramas :Procedimentos (procedures) em Pascal Prof. Luis OtavioAlvares
Funções/procedimentos • Funções • devolvem 1 valor • o valor calculado é usado diretamente pelo programa • Procedimentos • podem devolver zero, um ou mais valores • valoressãopassadoscomoparâ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; {chamadada procedure} ... Asteriscos; {chamadada procedure} ...
Procedures com parâmetros • Háduasformas de passagem de parâmetrosnas procedures em Pascal: • Porvalor e porreferência • Na passagempor valor, como o próprionomeindica, somente o valor é passado (é usadoparaosparâmetros de entradada procedure). Análogoaosparâmetros de funções. • Na passagemporreferência, o valor do parâmetropode ser alterado e vai ser percebidopeloprogramaquechamou a procedure (é usadoparaosparâmetros de saídada 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 Declaração Procedure <identificador> [( <lista de parâmetros formais> ) ] ; [ <declaração de variáveis locais>; ] begin < comandos separados por ‘;’ > end; opcionais Lista de parâmetros formais [ var ] < lista de identificadores > : <tipo>; ... Indica passagem de parâmetro por referência- opcional Procedure Teste ( A, B: integer; var C: real ); begin C := A / B; end; Ex:
Exemplo com doisparâ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.
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. Parâmetro por valor Não muda valor da variável do progr. principal Variável local Não muda valor da variável do progr. principal Procedure Muda (var X: integer); begin X := 1 end; { Muda } ar X : integer; {programa principal } begin X := 0; Muda (X); write ( X ); end. var X : integer; Procedure Muda; begin X := 1 end; { Muda } begin {programa principal } X := 0; Muda; write ( X ); end. Parâmetro por referência Muda valor da variável do progr. principal Variável global 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.