Você está na página 1de 24

APC Prof.

Thiago Jabur Bittar

Algoritmos Subprogramas (funes e procedimentos)

Subprogramao

A subprogramao uma ferramenta que contribui com a tarefa de programar:


Favorecendo a estruturao do programa; Facilitando a correo do programa; Facilitando a modificao do programa; Melhorando a legibilidade do programa; Diviso do problema a ser resolvido em partes (modularizao).

Subprogramao

Com a modularizao de um programa, as partes que o compem podem ser desenvolvidas por diferentes equipes; Para isto deve-se estabelecer antes padres de programao; Deve-se definir tambm que dependncia haver entre os vrios subprogramas.

Subprogramao

A dependncia entre os sub-programas deve ser a mnima possvel; Um subprograma um grupo de instrues arranjadas de forma lgica, que executem uma ao bem definida; A subprogramao tende a diminuir a complexidade da resoluo de um problema j que, por um instante, a ateno voltada apenas para uma parte do problema.

Subprogramao

As linguagens de programao oferecem algum tipo de suporte subprogramao. Exemplos:


Algol: bloco; FORTRAN: subrotina; Modula: co-rotinas; ADA: tarefas; C: funes; Visualg: procedimentos e funes. Pascal: procedimentos e funes.

Subprogramao

Procedimentos

Procedimento uma forma de criar um sub-programa; Quando um determinado conjunto de instrues tiver que ser repetido dentro da soluo de um problema, conveniente coloc-lo dentro de um procedimento; Para se criar um procedimento necessrio:

Um identificador (o nome do procedimento); Uma lista de parmetros (que possibilitam a comunicao entre o programa principal e o procedimento); As aes a serem executadas (que formam o corpo do procedimento).

Subprogramao

Funes Funo tambm uma forma de criar um sub-programa; A funo deve obrigatoriamente retornar um valor processado atravs do seu nome identificador; Uma funo deve ser ativada em um contexto de expresso.

Subprogramao

Existem problemas mais adequados ao uso de funes, enquanto outros adequam-se melhor ao uso de procedimentos; Tudo que um procedimento pode fazer, uma funo tambm pode; Dicas para escolha do tipo de subprograma:

Quando usar funes, evite ao mximo a passagem de parmetros por referncia; Se o valor que processado na unidade ser reutilizado em uma expresso, existem grandes possibilidades de que uma funo seja mais adequada; Se o objetivo da unidade apenas fazer uma mudana de estado (valor) em um ou mais objetos, adote um procedimento.

Subprogramao

Um subprograma pode ser ativado em qualquer parte do programa (em algumas linguagens somente depois de definido); Sua ativao se d atravs do uso de seu identificador como uma instruo;

Subprogramao

Exemplo de aplicao: Fazer um algoritmo para calcular a combinao (anlise combinatria) de N elementos tomados P a P. Sabe-se que isto possvel atravs da seguinte expresso:

n Cp=

n! p! (n-p)!

com n p

10

Subprogramao

A soluo deste problema pelos mtodos vistos at agora (sem o uso da subprogramao) teria N e P como argumentos de entrada e C como argumento de sada; Seriam necessrios os seguintes passos:

Calcular o fatorial de N (armazenar numa varivel, ex: FatN); Calcular o fatorial de P (armazenar numa segunda varivel, ex: FatP); Calcular o fatorial de N-P (armazenar numa terceira varivel, ex:FatNP); E finalmente calcular a expresso: FatN/(FatP*FatNP).

11

Subprogramao

Note que nesta soluo teramos que descrever vrias vezes uma mesma seqncia de aes que so utilizadas para o clculo do fatorial de um nmero; Esta seqncia tem um comportamento padro.

12

Subprogramao

Suponha que tivssemos disposio um procedimento genrico, chamado FAT, para calcular o fatorial de um nmero qualquer:

Como poderamos fazer isto?

13

Subprogramao
Identificador

Procedimento FAT (x: inteiro, ResFat: inteiro); Declare I:inteiro; Inicio Lista de Parmetros ResFat 1; Para I 1 at x Faa ResFat ResFat * I; Fim-Para; Fim;
14

Subprogramao

Uma subrotina um subprograma com variveis e comandos prprios e que, para ser executada, precisa ser chamada pelo programa principal. Existem dois tipos de subrotinas:

Procedimento (procedure) Funo (function) A funo retorna um valor O procedimento no retorna valor

Diferena entre elas:


15

Procedimento

Sintaxe
procedimento nome (lista-de-parmetros); declarao de variveis locais; begin comandos; end;

Exemplo:
procedure Troca (var A,B: real); var aux: real; begin aux:=A; A:=B; B:=aux; end;

16

Funo

Sintaxe
function nome (lista-de-parmetros): tipo; declarao de variveis locais; begin comandos; nome:=<valor a ser retornado>; end;

Exemplo:
funcao Hipotenusa (A,B: real): real; begin Hipotenusa:= sqrt( sqr(A) + sqr(B) ); end;

17

Nomenclatura dos parmetros

Existem dois tipos de parmetros:


reais: presentes na unidade ativadora formais: presentes na subrotina

procedure Troca (var A,B: real); Troca ( x,y );

18

Passagem de parmetros

Passagem

por valor: Apenas o valor transferido. Ento, as alteraes feitas nos parmetros formais (da subrotina) no alteram os reais (unidade ativadora). por referncia: O endereo do parmetro real transferido. Ento, as alteraes nos parmetros formais da subrotina na verdade esto sendo feitas sobre os parmetros reais.

Declarao:
por referncia procedure inicializa ( var A,B: real; C: real; var D: integer ); por valor

19

Passagem de parmetros

A passagem de parmetros o meio de comunicao entre as unidades de um programa, pode acontecer com um dos seguintes propsitos:

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 tambm ser responsvel pelo retorno de um valor processado.

20

Passagem de parmetros 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 parmetro real; deve ser explorado sempre que possvel.

21

Passagem de parmetros por referncia

Quando e porque passagem por referncia:


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 referncia Unidade Ativadora Unidade Ativadora

Unidade Ativada Linguagem PASCAL Unidade Ativada

Declarao de variveis

Variveis Locais X Variveis Globais

Uma varivel dita local quando sua declarao estiver dentro de um subprograma, ou quando for declarado como parmetro formal do subprograma; Uma varivel local s visvel dentro do bloco onde foi declarada; Variveis globais so aquelas declaradas em blocos mais externos, podendo ser referenciadas nas unidades mais internas.

23

Declarao de variveis

O conceito de varivel global e local muito relativo


Subprograma A Subprograma B Subprograma D Subprograma E Subprograma C

24

Você também pode gostar