You are on page 1of 24

APC Prof.

Thiago Jabur Bittar

Algoritmos Subprogramas (funções e procedimentos)

1

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).

2

Para isto deve-se estabelecer antes padrões de programação. as partes que o compõem podem ser desenvolvidas por diferentes equipes.Subprogramação    Com a modularização de um programa. Deve-se definir também que dependência haverá entre os vários subprogramas. 3 .

Subprogramação    A dependência entre os sub-programas deve ser a mínima possível. que executem uma ação bem definida. a atenção é voltada apenas para uma parte do problema. por um instante. Um subprograma é um grupo de instruções arranjadas de forma lógica. A subprogramação tende a diminuir a complexidade da resolução de um problema já que. 4 .

ADA: tarefas. Exemplos:        Algol: bloco.Subprogramação  As linguagens de programação oferecem algum tipo de suporte à subprogramação. Visualg: procedimentos e funções. Pascal: procedimentos e funções. Modula: co-rotinas. 5 . FORTRAN: subrotina. C: funções.

Subprogramação  Procedimentos    Procedimento é uma forma de criar um sub-programa. é conveniente colocá-lo dentro de um procedimento. Para se criar um procedimento é necessário:    Um identificador (o nome do procedimento). Quando um determinado conjunto de instruções tiver que ser repetido dentro da solução de um problema. As ações a serem executadas (que formam o corpo do procedimento). Uma lista de parâmetros (que possibilitam a comunicação entre o programa principal e o procedimento). 6 .

 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. 7 .Subprogramação  Funções  Função também é uma forma de criar um sub-programa.

Se o objetivo da unidade é apenas fazer uma mudança de estado (valor) em um ou mais objetos. enquanto outros adequam-se melhor ao uso de procedimentos. evite ao máximo a passagem de parâmetros por referência. uma função também pode.Subprogramação    Existem problemas mais adequados ao uso de funções. existem grandes possibilidades de que uma função seja mais adequada. 8 . adote um procedimento. Se o valor que é processado na unidade será reutilizado em uma expressão. Tudo que um procedimento pode fazer. Dicas para escolha do tipo de subprograma:    Quando usar funções.

9 . Sua ativação se dá através do uso de seu identificador como uma instrução.Subprogramação   Um subprograma pode ser ativado em qualquer parte do programa (em algumas linguagens somente depois de definido).

Sabe-se que isto é possível através da seguinte expressão: n Cp= n! p! (n-p)! com n ≥ p 10 .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.

ex:FatNP). ex: FatN). Calcular o fatorial de P (armazenar numa segunda variável. ex: FatP).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. 11 . Calcular o fatorial de N-P (armazenar numa terceira variável. E finalmente calcular a expressão: FatN/(FatP*FatNP). Seriam necessários os seguintes passos:     Calcular o fatorial de N (armazenar numa variável.

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. 12 .

para calcular o fatorial de um número qualquer: Como poderíamos fazer isto? 13 . chamado FAT.Subprogramação  Suponha que tivéssemos à disposição um procedimento genérico.

Para I ← 1 até x Faça ResFat ← ResFat * I.Subprogramação Identificador Procedimento FAT (x: inteiro. Inicio Lista de Parâmetros ResFat ← 1. Fim. Declare I:inteiro. ResFat: inteiro). Fim-Para. 14 .

precisa ser chamada pelo programa principal.Subprogramação   Uma subrotina é um subprograma com variáveis e comandos próprios e que. Existem dois tipos de subrotinas:   Procedimento (procedure) Função (function) A função retorna um valor O procedimento não retorna valor  Diferença entre elas:   15 . para ser executada.

16 . end. declaração de variáveis locais.B: real). B:=aux. A:=B.  Exemplo: procedure Troca (var A. var aux: real. end.Procedimento  Sintaxe procedimento nome (lista-de-parâmetros). begin comandos. begin aux:=A.

end. begin Hipotenusa:= sqrt( sqr(A) + sqr(B) ). nome:=<valor a ser retornado>. begin comandos. 17 .  Exemplo: funcao Hipotenusa (A. declaração de variáveis locais. end.Função  Sintaxe function nome (lista-de-parâmetros): tipo.B: real): real.

… 18 .B: real). … Troca ( x.Nomenclatura dos parâmetros  Existem dois tipos de parâmetros:   reais: presentes na unidade ativadora formais: presentes na subrotina procedure Troca (var A.y ).

C: real. var D: integer ).B: real.Passagem de parâmetros  Passagem   por valor: Apenas o valor é transferido.  Declaração: por referência procedure inicializa ( var A. por valor 19 . por referência: O endereço do parâmetro real é transferido. as alterações nos parâmetros formais da subrotina na verdade estão sendo feitas sobre os parâmetros reais. as alterações feitas nos parâmetros formais (da subrotina) não alteram os reais (unidade ativadora). Então. Então.

20 . e também ser responsável pelo retorno de um valor processado.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. fornecer um valor para processamento pela subrotina. apenas retornar um valor processado pela subrotina.

Passagem de parâmetros por valor  Quando e porque passagem por valor:     apenas fornecer um valor à subrotina para que ela realize um determinado processamento. 21 . deve ser explorado sempre que possível. protegem automaticamente o parâmetro real. utilizados somente para “valores de entrada”.

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 Unidade Ativadora Unidade Ativada 22 Passagem por referência Unidade Ativadora Unidade Ativadora Unidade Ativada Linguagem PASCAL Unidade Ativada .

ou quando for declarado como parâmetro formal do subprograma. Uma variável local só é visível dentro do bloco onde foi declarada. podendo ser referenciadas nas unidades mais internas. 23 . Variáveis globais são aquelas declaradas em blocos mais externos.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.

Declaração de variáveis  O conceito de variável global e local é muito relativo Subprograma A Subprograma B Subprograma D Subprograma E Subprograma C 24 .