280 likes | 419 Views
UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à Computação Prof.: Paulemir G. Campos. Linguagem PASCAL Subprogramas. Material elaborado pela Profª Alzennyr Cléa da UFRPE/DFM. Subprogramação. A subprogramação é uma ferramenta que contribui com a tarefa de programar:
E N D
UFRPE – Deptº de Estatística e Informática Disciplina: Introdução à ComputaçãoProf.: Paulemir G. Campos Linguagem PASCAL Subprogramas Material elaborado pela Profª Alzennyr Cléa da UFRPE/DFM. Linguagem PASCAL
Subprogramaçã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). Linguagem PASCAL
Subprogramaçã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. Linguagem PASCAL
Subprogramaçã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. Linguagem PASCAL
Subprogramaçã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. Linguagem PASCAL
Subprogramaçã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). Linguagem PASCAL
Subprogramação • 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. Linguagem PASCAL
Subprogramação • 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. Linguagem PASCAL
Subprogramaçã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; Linguagem PASCAL
n! p! (n-p)! Cp= n com n p Subprogramaçã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: Linguagem PASCAL
Subprogramaçã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 variável, ex: FatN); • Calcular o fatorial de P (armazenar numa segunda variável, ex: FatP); • Calcular o fatorial de N-P (armazenar numa terceira variável, ex:FatNP); • E finalmente calcular a expressão: FatN/(FatP*FatNP). Linguagem PASCAL
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. Linguagem PASCAL
Subprogramação • 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 isto? Linguagem PASCAL
Subprogramação Identificador 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; Lista de Parâmetros Corpo Linguagem PASCAL
Subprogramaçã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 Linguagem PASCAL
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; Linguagem PASCAL
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; Linguagem PASCAL
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 ); … Linguagem PASCAL
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: por referência procedure inicializa ( var A,B: real; C: real; var D: integer ); por valor Linguagem PASCAL
Passagem de parâmetros • 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. Linguagem PASCAL
Passagem de parâmetros por valor • 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. Linguagem PASCAL
Unidade Ativadora Unidade Ativadora Unidade Ativadora Unidade Ativada Unidade Ativada Unidade Ativada Passagem de parâmetros por referência • 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. Passagem por valor Passagem por referência Linguagem PASCAL
Declaraçã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. Linguagem PASCAL
Subprograma A Subprograma B Subprograma D Subprograma E Subprograma C Declaração de variáveis • O conceito de variável global e local é muito relativo Linguagem PASCAL
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. Linguagem PASCAL
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; begin X:=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; Linguagem PASCAL
program OrdemCrescente; { ------- SUBROTINA TROCA ------- } procedure Troca (var A,B: integer); var aux: integer; begin aux:=A; A:=B; B:=aux; end; { ------- FIM TROCA ------- } { ------- PROGRAMA PRINCIPAL ------- } var L,M,N: integer; begin 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); end. { ------- FIM PRINCIPAL ------- } Linguagem PASCAL
D B C A 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 } { Programa Principal } var A, B, C, D: real; begin readln (A, B, C); { dimensoes } D := Hipotenusa ( Hipotenusa (A, B), C ); writeln (D); end. { Fim Programa Principal } Linguagem PASCAL