Você está na página 1de 6

15/02/2012

1
Subrotinas
(Procedimentos e Funes)
ALGORITMOS
Definio
Um conceito simples seria:
Subrotina um parcela de cdigo
computacional que executa uma tarefa
bem definida, sendo que essa tarefa pode
ser executada (chamada) diversas vezes num
mesmo programa.
Motivao para criao
A aplicao das subrotinas surgiu da necessidade de
dividir um problema computacional em pequenas
partes.
Os programadores verificaram que muitas destas
pequenas partes se repetiam. Assim pensaram em
implement-las apenas uma vez e fazer vrias
chamadas ao cdigo.
Ex.: Impresso de mensagens, zerar um vetor, fazer
uma operao matricial, etc.
Utilizao de subrotinas
Deve-se usar subrotinas sempre que objetiva-se:
Utilizar uma parte do cdigo em vrias partes do
programa;
Vrios programas iro utilizar os mesmos cdigos
(bibliotecas);
Abstrair a complexidade e facilitar o
entendimento do programa.
Utilizao de subrotinas
Facilita a programao estruturada:
dada as fases previstas nos refinamentos
sucessivos decompe-se o programa em mdulos
funcionais
tais mdulos podem ser organizados/
programados como subrotinas
Ou seja: viabiliza a modularizao

Caractersticas das subrotinas
Executam uma tarefa bem definida
No funcionam sozinhas: devem ser chamadas por um
programa principal ou por outra subrotina
Facilita a legibilidade do cdigo atravs da:
estruturao (subrotinas so agrupadas fora do
programa principal)
enxugamento (atravs de diversas chamadas da mesma
subrotina)
Permite a criao de variveis prprias e a manipulao de
variveis externas (devidamente parametrizadas)
15/02/2012
2
Refinamentos e modularizao

Ex: Determine o maior nmero de diversos nmeros
inteiros positivos lidos (FLAG = -1).
incio
declarar variveis;
leia e classifique o primeiro nmero;
leia os outros nmeros e verifique seu status at
FLAG;
imprima o maior;
fim

Refinamentos e modularizao

refinamento de leia os outros nmeros e verifique seu status
at FLAG;
enquanto NUM -1 faa
verifique se o nmero o maior;
leia (NUM);
fim enquanto ;
fim refinamento ;



Refinamentos e modularizao
No refinamento de:
verifique se o nmero o maior;
Pode-se optar por substituir o refinamento do
pseudocomando por uma subrotina equivalente
define-se as variveis de entrada e sada da subrotina que
permitam obter o resultado esperado
programa-se a subrotina (definindo inclusive variveis
prprias)


Refinamentos e modularizao

Desta forma deve-se:
identificar os mdulos;
verificar a possibilidade/utilidade de program-los
como subrotinas;
definir parmetros que devem ser enviados e
recebidos pelas subrotinas;
construir as subrotinas; (COMO??)
acoplar ao programa principal. (COMO??)



Tipos de subrotinas
Existem dois tipos de subrotinas:

Procedimentos: no retornam nenhum valor. So
usadas para realizar alguma operao que no gera
dados.
Funes: retornam valor. So utilizadas para realizar
uma operao e retornam alguma resposta relativa
operao realizada.

Procedimento - forma geral
A sintaxe de declarao de um procedimento
:

<nome do procedimento>(<lista de parmetros>)
incio
<declarao de variveis locais>
C1;
C2;
.
.
Cm;
fim;
15/02/2012
3
Procedimento - forma geral

<nome do procedimento>(<lista de parmetros>)
incio
<declarao de variveis locais>
corpo do procedimento;
fim;
o corpo do procedimento contm os
comandos necessrios para realizar o
processamento proposto.

Variveis locais
Toda varivel pertencente ao procedimento chamada
de varivel local, pois ela s pode ser utilizada
dentro do escopo do procedimento.

Fazem parte das variveis locais de um procedimento:
- as variveis declaradas no procedimento;
- todos os parmetros recebidos pelo procedimento.
Procedimento - forma geral


O nome do procedimento deve deixar explicito a
sua funcionalidade. Ex.: Soma, Imprime, Mdia, ...

A lista de parmetros indica quais informaes
(parmetros), quais so seus tipos e em que ordem
so fornecidas ao procedimento.
Procedimento - forma geral
Exemplo de Procedimento para imprimir a MDIA de duas notas
inteiro TESTE(inteiro A, inteiro B,inteiro C)
incio
inteiro: RES;
se (A>B) e (B > C)
ento RES A + B;
fim se;
se (A<B) e (B < C)
ento RES A - B;
seno RES A + B + C;
fim se;
retorne RES;
fim;
Praticando
1)Passar o algoritmo abaixo para o Visualg
15/02/2012
4
II) Fazer um procedimento para calcular o fatorial de um
nmero
Procedimento
Parmetros formais

ABS(real X, ref real Y)
incio
se X 0
ento Y X;
seno Y - X;
fim se;
fim;

So os parmetro recebidos pela subrotina. Neste exemplo: o
parmetro formal X um parmetro de entrada e Y parmetro de
sada
Parmetros de uma subrotina
Chamada por valor: quando passado uma cpia da
varivel para a subrotina, ou seja, feito uma cpia do
argumento para o parmetro. Qualquer alterao feita
no parmetro no reflete em alterao no argumento.

Chamada por referncia: quando todas as alteraes
realizadas no parmetro, refletem em alteraes no
argumento, ou seja, ambas as variveis apontam para o
mesmo endereo de memria. Para isso, necessrio
utilizar o modificar ref, indicando que ser uma
referncia a uma varivel.
Procedimento parmetros efetivos

incio
real: A,B;
chama procedimento ABS
leitura das variveis;
ABS(A,B); {parmetros efetivos}
fim.
Neste exemplo: A, B so parmetros efetivos reais ( ) aparecem na
chamada do procedimento.
Parmetros efetivos de entrada: podem ser identificador, constante ou
expresso aritmtica
Parmetros efetivos de sada: s identificador
EX:
ABS(-5,A);
ABS( A**3,B);
Procedimento parmetros

ABS(ref real X, ref real Y)
incio
se X 0
ento Y X;
seno Y - X;
fim se;
fim;

incio
real: A,B,C:
A 5;
B -2;
ABS(A,C);
imprima ( C );
ABS(B,C);
imprima ( C );
ABS(C*A,B);
imprima ( B ):
fim.
O que ser impresso
neste cdigo?
15/02/2012
5
Exerccio:
1) Seja o procedimento:
PROC(ref inteiro A)
incio
inteiro : N;
N 2;
N N + A;
A N -1;
fim;
O que ser impresso pelo algoritmo?
incio
inteiro: X,Y;
X 3;
Y -5;
PROC(X);
PROC(Y);
imprima (X,Y);
fim.
Exerccio:
2) O que ser impresso no algoritmo abaixo?
EXE(ref inteiro X, ref inteiro Y, ref inteiro Z)
incio
inteiro: I;
X 1;
para I de 1 at Y faa
X X + I*(Z mod I);
Z Z -1;
fim para;
fim;

incio
inteiro: N1,N2,N3;
leia(N1,N2);
EXE(N3,N1,N2);
imprima(N3);
leia(N3,N2);
EXE(N1,N2,N3);
imprima(N1);
fim. Dados de entrada:
3, 10, 7, 2
Funes - forma geral
A sintaxe de declarao de uma funo :

<tipo bsico> <nome da funo> (<lista de parmetros
formais>)
incio
<declarao de variveis locais>
C1;
C2;
.
.
Cn;
retorne <valor de retorno>;
fim;
Funes - forma geral

um tipo especial de procedimento

Retorna como resultado o valor calculado
pela funo, que deve ser do tipo bsico
definido

Os parmetros formais, efetivos e as
variveis locais funcionam da mesma forma
dos procedimentos

Funes exemplo


Transformao do procedimento ABS em funo ABS

real ABS ( real X )
incio
real: Y;
se X 0
ento Y X;
seno Y - X;
fim se ;
retorne Y;
fim;


Funes - chamada
real ABS(real X)
incio
real: Y;
se X 0
ento Y X;
seno Y -X;
fim se ;
retorne Y;
fim;

incio
real: A,B,C,D;
leia (A,B,C);
imprima ( ABS(A));
D ABS(ABS(B) + C);
imprima (D):
fim.
O que ser impresso
para os seguintes
dados de entrada:

-7 5 -9
15/02/2012
6
Exerccio:
1) Seja a funo:

inteiro TESTE(inteiro A, inteiro B,inteiro C)
incio
inteiro: RES;
se (A>B) e (B > C)
ento RES A + B;
fim se;
se (A<B) e (B < C)
ento RES A - B;
seno RES A + B + C;
fim se;
retorne RES;
fim;
Calcule:
i) TESTE(4,2,-1)
Exerccio:
2) O que ser impresso no programa abaixo?
inteiro CONTA(real M, real N)
incio
inteiro: I, RES;
real: K;
K 0.0;
I 10;
RES 2;
enquanto K M faa
K K + N*2;
I I div RES ;
RES RES +I;
fim enquanto;
retorne RES;
fim;

incio
real: Y,Z;
inteiro: VAL;
Y 16.5; Z 2.1;
VAL CONTA(Y, Z) + 5;
imprima(VAL);
fim.