![Page 1: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/1.jpg)
Linguagem PASCAL 1
UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à ComputaçãoProf.: Paulemir G. Campos
Linguagem PASCALLinguagem PASCAL
Subprogramas
Material elaborado pela Profª Alzennyr Cléa da UFRPE/DFM.
![Page 2: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/2.jpg)
Linguagem PASCAL 2
SubprogramaçãoSubprogramação
A subprogramação é uma ferramenta que contribui com a tarefa de programar:– Favorecendo a estruturação do programa;– Facilitando a correção do programa;– Facilitando a modificação do programa;– Melhorando a legibilidade do programa;– Divisão do problema a ser resolvido em
partes (modularização).
![Page 3: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/3.jpg)
Linguagem PASCAL 3
SubprogramaçãoSubprogramação
Com a modularização de um programa, as partes que o compõem podem ser desenvolvidas por diferentes equipes;
Para isto deve-se estabelecer antes padrões de programação;
Deve-se definir também que dependência haverá entre os vários subprogramas.
![Page 4: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/4.jpg)
Linguagem PASCAL 4
SubprogramaçãoSubprogramação A dependência entre os sub-programas deve
ser a mínima possível; Um subprograma é um grupo de instruções
arranjadas de forma lógica, que executem uma ação bem definida;
A subprogramação tende a diminuir a complexidade da resolução de um problema já que, por um instante, a atenção é voltada apenas para uma parte do problema.
![Page 5: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/5.jpg)
Linguagem PASCAL 5
SubprogramaçãoSubprogramação
As linguagens de programação oferecem algum tipo de suporte à subprogramação. Exemplos:– Algol: bloco;– FORTRAN: subrotina;– Modula: co-rotinas;– ADA: tarefas;– C: funções;– Pascal: procedimentos e funções.
![Page 6: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/6.jpg)
Linguagem PASCAL 6
SubprogramaçãoSubprogramação Procedimentos
– Procedimento é uma forma de criar um sub-programa;
– Quando um determinado conjunto de instruções tiver que ser repetido dentro da solução de um problema, é conveniente colocá-lo dentro de um procedimento;
– Para se criar um procedimento é necessário:• Um identificador (o nome do procedimento);• Uma lista de parâmetros (que possibilitam a
comunicação entre o programa principal e o procedimento);
• As ações a serem executadas (que formam o corpo do procedimento).
![Page 7: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/7.jpg)
Linguagem PASCAL 7
Funções– Função também é uma forma de criar um sub-
programa;– Procedimento e Função podem ambos retornar
valores através de seus parâmetros;– Entretanto, a função deve obrigatoriamente
retornar um valor processado através do seu nome identificador;
– Uma função deve ser ativada em um contexto de expressão.
SubprogramaçãoSubprogramação
![Page 8: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/8.jpg)
Linguagem PASCAL 8
Existem problemas mais adequados ao uso de funções, enquanto outros adequam-se melhor ao uso de procedimentos;
Tudo que um procedimento pode fazer, uma função também pode;
Dicas para escolha do tipo de subprograma:– Quando usar funções, evite ao máximo a passagem de
parâmetros por referência;– Se o valor que é processado na unidade será reutilizado em
uma expressão, existem grandes possibilidades de que uma função seja mais adequada;
– Se o objetivo da unidade é apenas fazer uma mudança de estado (valor) em um ou mais objetos, adote um procedimento.
SubprogramaçãoSubprogramação
![Page 9: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/9.jpg)
Linguagem PASCAL 9
SubprogramaçãoSubprogramação
Um subprograma pode ser ativado em qualquer parte do programa (em algumas linguagens somente depois de definido);
Sua ativação se dá através do uso de seu identificador como uma instrução;
![Page 10: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/10.jpg)
Linguagem PASCAL 10
SubprogramaçãoSubprogramação
Exemplo de aplicação: Fazer um algoritmo para calcular a combinação (análise combinatória) de N elementos tomados P a P. Sabe-se que isto é possível através da seguinte expressão:
Cp=nn!
p! (n-p)!
com n p
![Page 11: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/11.jpg)
Linguagem PASCAL 11
SubprogramaçãoSubprogramação A solução deste problema pelos métodos vistos
até agora (sem o uso da subprogramação) teria N e P como argumentos de entrada e C como argumento de saída;
Seriam necessários os seguintes passos:– Calcular o fatorial de N (armazenar numa Calcular o fatorial de N (armazenar numa
variável, ex: FatN);variável, ex: FatN);– Calcular o fatorial de P (armazenar numa Calcular o fatorial de P (armazenar numa
segunda variável, ex: FatP);segunda variável, ex: FatP);– Calcular o fatorial de N-P (armazenar numa Calcular o fatorial de N-P (armazenar numa
terceira variável, ex:FatNP);terceira variável, ex:FatNP);– E finalmente calcular a expressão: E finalmente calcular a expressão:
FatN/(FatP*FatNP).FatN/(FatP*FatNP).
![Page 12: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/12.jpg)
Linguagem PASCAL 12
Subprogramação
Note que nesta solução teríamos que descrever várias vezes uma mesma seqüência de ações que são utilizadas para o cálculo do fatorial de um número;
Esta seqüência tem um comportamento padrão.
![Page 13: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/13.jpg)
Linguagem PASCAL 13
Suponha que tivéssemos à disposição um procedimento genérico, chamado FAT, para calcular o fatorial de um número qualquer:
Como poderíamos fazer istoComo poderíamos fazer isto??
Subprogramação
![Page 14: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/14.jpg)
Linguagem PASCAL 14
Procedimento FAT (x: inteiro, ResFat: inteiro); Declare
I:inteiro; Inicio
ResFat 1; Para I 1 até x Faça ResFat ResFat * I; Fim-Para;Fim;
Cor
poIdentificado
r
Lista de Parâmetros
Subprogramação
![Page 15: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/15.jpg)
Linguagem PASCAL 15
SubprogramaçãoSubprogramação em PASCAL
Uma subrotina é um subprograma com variáveis e comandos próprios e que, para ser executada, precisa ser chamada pelo programa principal.
Na linguagem PASCAL existem dois tipos de subrotinas:– Procedimento (procedure)– Função (function)
Diferença entre elas:– A função retorna um valor– O procedimento não retorna valor
![Page 16: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/16.jpg)
Linguagem PASCAL 16
Procedimento em PASCAL Sintaxe
procedure nome (lista-de-parâmetros);
declaração de variáveis locais;begin
comandos;end;
Exemplo:procedure Troca (var A,B: real);var aux: real;begin
aux:=A;A:=B;B:=aux;
end;
![Page 17: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/17.jpg)
Linguagem PASCAL 17
Função em PASCAL Sintaxe
function nome (lista-de-parâmetros): tipo;
declaração de variáveis locais;
begin
comandos;
nome:=<valor a ser retornado>;
end;
Exemplo:function Hipotenusa (A,B: real): real;
begin
Hipotenusa:= sqrt( sqr(A) + sqr(B) );
end;
![Page 18: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/18.jpg)
Linguagem PASCAL 18
Nomenclatura dos parâmetros
Existem dois tipos de parâmetros:– reais: presentes na unidade ativadora– formais: presentes na subrotina
procedure Troca (var A,B: real);…Troca ( x,y );…
![Page 19: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/19.jpg)
Linguagem PASCAL 19
Passagem de parâmetros
Passagem– por valor: Apenas o valor é transferido. Então, as
alterações feitas nos parâmetros formais (da subrotina) não alteram os reais (unidade ativadora).
– por referência: O endereço do parâmetro real é transferido. Então, as alterações nos parâmetros formais da subrotina na verdade estão sendo feitas sobre os parâmetros reais.
Declaração:
procedure inicializa ( var A,B: real; C: real; var D: integer );
por referência
por valor
![Page 20: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/20.jpg)
Linguagem PASCAL 20
A passagem de parâmetros é o meio de comunicação entre as unidades de um programa, pode acontecer com um dos seguintes propósitos: – apenas fornecer um valor para que a subrotina
realize um processamento;– apenas retornar um valor processado pela
subrotina;– fornecer um valor para processamento pela
subrotina, e também ser responsável pelo retorno de um valor processado.
Passagem de parâmetros
![Page 21: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/21.jpg)
Linguagem PASCAL 21
Quando e porque passagem por valor:– apenas fornecer um valor à subrotina
para que ela realize um determinado processamento;
– utilizados somente para “valores de entrada”;
– protegem automaticamente o parâmetro real;
– deve ser explorado sempre que possível.
Passagem de parâmetros por valor
![Page 22: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/22.jpg)
Linguagem PASCAL 22
Quando e porque passagem por referência:– quando a unidade ativada (subrotina)
necessitar retornar um valor a ser utilizado pela unidade ativadora;
– seu uso deve ser cuidadoso.
Unidade Ativada
Unidade Ativadora
Unidade Ativada
Unidade Ativadora
Passagem por referência
Unidade Ativadora
Unidade Ativada
Passagem por valor
Passagem de parâmetros por referência
![Page 23: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/23.jpg)
Linguagem PASCAL 23
Declaração de variáveisDeclaração de variáveis
Variáveis Locais X Variáveis Globais– Uma variável é dita local quando sua declaração
estiver dentro de um subprograma, ou quando for declarado como parâmetro formal do subprograma;
– Uma variável local só é visível dentro do bloco onde foi declarada;
– Variáveis globais são aquelas declaradas em blocos mais externos, podendo ser referenciadas nas unidades mais internas.
![Page 24: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/24.jpg)
Linguagem PASCAL 24
O conceito de variável global e local é muito relativo
Subprograma A
Subprograma B
Subprograma D
Subprograma E
Subprograma C
Declaração de variáveisDeclaração de variáveis
![Page 25: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/25.jpg)
Linguagem PASCAL 25
Exemplos práticos
Nos próximos slides existem exemplos que mostram o uso prático de procedimentos e funções, bem como a passagem de parâmetros por valor e por referência.
![Page 26: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/26.jpg)
Linguagem PASCAL 26
program Parametros;
procedure inicializa ( var A,B: real; C: real; var D: integer );begin
writeln ('Passo 1:', A:4:1, B:4:1, C:4:1, D:2);A:=1; B:=1; C:=1; D:=1;writeln ('Passo 2:', A:4:1, B:4:1, C:4:1, D:2);
end;
var X,Y,Z: real;W: integer;
beginX:=0; Y:=0; Z:=0; W:=0;inicializa (X, Y, Z, W);writeln ('Passo 3:', X:4:1, Y:4:1, Z:4:1, W:2);
end;
![Page 27: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/27.jpg)
Linguagem PASCAL 27
program OrdemCrescente;
{ ------- SUBROTINA TROCA ------- }procedure Troca (var A,B: integer);var aux: integer;begin
aux:=A;A:=B;B:=aux;
end;{ ------- FIM TROCA ------- }
var L,M,N: integer;begin
{ ------- PROGRAMA PRINCIPAL ------- }
readln (L, M, N);if (L>M) then Troca(L,M);if (M>N) then Troca(M,N);
if (L>M) then Troca(L,M);writeln(L, M, N);
{ ------- FIM PRINCIPAL ------- } end.
![Page 28: Linguagem PASCAL1 UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos Linguagem PASCAL Subprogramas](https://reader036.vdocuments.pub/reader036/viewer/2022070310/552fc0f9497959413d8b6941/html5/thumbnails/28.jpg)
Linguagem PASCAL 28
program Diagonal;
{Diagonal de um paralelepípedo }
{ Funcao Hipotenusa }function Hipotenusa (A,B: real): real;begin
Hipotenusa:= sqrt ( sqr(A) + sqr(B) );end;{ Fim Funcao Hipotenusa }
var A, B, C, D: real;begin
{ Programa Principal }
readln (A, B, C); { dimensoes }D := Hipotenusa ( Hipotenusa (A, B), C );writeln (D);
{ Fim Programa Principal }
end.
BCD
A