Você está na página 1de 11

7.

Modularizao de Algoritmos

No momento do desenvolvimento de um programa de computador, o


programador ter de planejar a modularizao de seu programa para que este
fique mais transparente em suas estrutura facilitando a sua compreenso,
tornar mais fcil para document-lo e depois no momento de uma eventual
manuteno ser entendvel por qualquer outro programador. Neste captulo
sero discutidos passo a passo como realizar esta modularizao.

Fig. 1: Ilustrao de um exemplo de Modularizao de um guindaste em suas partes


Fonte: Internet

Modularizar
Quebrar um problema em pequenas partes, sendo que cada uma dessas partes ser responsvel
pela realizao de uma etapa do problema.

7.1 Para que serve a Modularizao ou Sub-Rotinas?


medida que uma tarefa se torna mais complexa, v-se a necessidade de
usar algum mtodo de anlise e desenvolvimento para que no se perca a
dirigibilidade de uma soluo mais adequada e limpa possvel. Quando se tem
um grande problema com certeza ela composta de diversos problemas
menores. Por exemplo, se um carro no d a partida, que grandes problemas
este, no? Ela pode ser sido causada por:
falta de gasolina;
falta de energia na bateria;
problemas nas velas e etc.
Semelhantemente ao exemplo acima, no momento de se pensar em gerar
algoritmos, providencial o programador avaliar a grande quantidade de
pequenos problemas que afeta a legibilidade, clareza, do fluxo de execuo do
programa, fazendo com que uma consulta ou manuteno futura desta lgica
seja uma tarefa difcil de ser realizada. Esta "confuso da lgica" pode ser
evitada pela quebra em partes de um todo ou em outras palavras a
modularizao.

1
Os muitos problemas complexos podem ser resolvidos dividindo-os em
pequenas partes e solucionando tais partes em separado. Este procedimento
importante para:
Subdividir algoritmos complexos, simplificando o seu entendimento;
Estruturar algoritmos, tornando fcil principalmente a localizao de erros e
a documentao de cdigos;
Criar diviso em sistemas que facilita a manuteno do programa e a
reutilizao de algoritmos j implementados.

Sub-rotina
Um pedao do cdigo computacional que executa uma funo bem definida, sendo que esta
sub-rotina pode ser utilizada vrias vezes no programa.

A criao de divises, sub-rotinas, em algoritmos podem ser feitas de dois


modos de implementao, so elas:
Procedimentos: nesta forma a sub-rotina ou sub-algoritmo, no retorna
valores ao algoritmo chamador;
Funes: nesta forma a sub-rotina, retorna valor ao algoritmo chamador.

7.2 O que um Procedimento?


uma sub-rotina, uma estrutura menor de programa para resolver uma
tarefa bem especifica que no final ele no retornar um valor ao programa que
o chamou, um programa chamador. O Procedimento ativado atravs da
colocao de seu nome em alguma parte do programa ou de outra sub-rotina,
a sua chamada feita em comandos isolados dentro do programa atravs do
seu nome e dos respectivos parmetros. Assim que o nome de um
Procedimento encontrado, a execuo do programa desviada para a sub-
rotina para que seus comandos sejam executados. Ao final da execuo da
sub-rotina a execuo retornar ao programa chamador no ponto subseqente
em que ocorreu a chamada do Procedimento.

Sintaxe:

procedimento <nome-de-procedimento>
// Seo de Declaraes de Variaes Locais
Inicio
// Seo de Comandos
fimprocedimento

7.3 O que so as Variveis Globais e Locais?


Recebem o nome de variveis globais, as variveis que so definidas
na posio posterior o comando VAR no programa principal, assim estas
variveis sero visveis em qualquer parte na execuo do programa.

Exemplo 1: VarGlobal1

2
Algoritmo VarGlobal1
VAR
Nome : caractere // Declarao da Varivel Global
procedimento
Inicio
LEIA (Nome)
fimprocedimento //procedimento
INICIO
Setname
ESCREVA (Nome)
FIMALGORITMO // Algoritmo

No exemplo anterior, a varivel Nome, como foi definida como global,


pode ser utilizada dentro de qualquer ponto do programa, caso haja alterao
em seu contedo, isto ser visvel nas demais partes do programa.

Exemplo 2: VarGlobal2

Algoritmo Global2
VAR
N, I : inteiro // Declarao da Varivel Global
Procedimento EscreveNoVideo
Inicio
PARA I DE 1 ATE N FAA
ESCREVA (I)
FIMPARA
fimprocedimento //procedimento EscreveNoVideo
INICIO
LEIA (N)
EscreveNoVideo
ESCREVA (Fim)
FIMALGORITMO // Algoritmo

Recebem o nome de Variveis Locais as variveis que so definidas


dentro de uma sub-Rotina, sendo que elas s podem ser utilizadas dentro da
sub-Rotina na qual foi definida e no ser vista em outras partes do programa.

3
Exemplo 1: VarLocal1

Algoritmo VarLocal1
Procedimento EscreveNoVideo
VAR
Numero, N : inteiro // Declarao das Variveis Locais
Inicio
LEIA (N)
PARA I DE 1 ATE N FAA
ESCREVA (Numero)
FIMPARA
fimprocedimento //procedimento EscreveNoVideo
INICIO
EscreveNoVideo
FIMALGORITMO // Algoritmo

ATENO
possvel definir variveis globais e locais com o mesmo nome, sendo que qualquer mudana
no contedo da varivel local no afetar o contedo da varivel global.

Exemplo 2: VarLocal2
Algoritmo VarLocal2
VAR Nome : literal // Declarao da Varivel Global
procedimento Setanome
Inicio
LEIA (N) // Se digitar Joo carrega a global
fimprocedimento //procedimento Setanome
procedimento Mudana
VAR Nome : Literal // Varivel Local
Inicio
LEIA (N) // Se digitar Maria carrega a local
fimprocedimento //procedimento Mudana
INICIO
Setanome
ESCREVA (Nome) // Escrever Joo
Mudana
ESCREVA (Nome) // Tambm escrever Joo
FIMALGORITMO // Algoritmo

No Exemplo anterior, a varivel global Nome e a varivel local


Nome esto em posies de memria totalmente diferentes, assim, quaisquer
mudanas no contedo da varivel local, no afetar o contedo da varivel
global.

Nota Importante: Deve-se tomar um cuidado especial neste detalhe de variveis global e
local, pois muitos programas no rodam ou rodam no da maneira que foi projetada, devido
m interpretao delas.

4
Variveis Locais
So as variveis declaradas dentro de uma sub-rotina, sendo que as mesmas s podem ser
manipuladas dentro da sub-rotina que as declarou, no sendo visveis em nenhuma outra parte
do programa.

Variveis Globais
So as variveis definidas logo aps o comando VAR do algoritmo principal, sendo desta forma
visvel em qualquer parte do programa.

7.4 O que um Parmetro?


So mecanismos pelos quais se estabelece uma comunicao bidirecional
entre uma sub-rotina e o programa chamador (programa principal ou outro
subprograma). Os dados so passados pelo programa chamador atravs de
argumentos, e as sub-rotinas retornam dados por meio de parmetros.
Aplicao
Como faramos para ler 5 vetores, todos com tamanho diferentes?
Poderamos, por exemplo, criar 5 sub-rotinas, uma para cada vetor a ser lido. Isto sem dvida resolveria
esta situao, mas, e se fossem 100 vetores? Ou 1000 vetores?
Seria realmente uma tarefa muito trabalhosa ter de escrever 100 ou 1000 sub-rotinas, isto s para ler os
vetores, imagine se tivssemos que orden-los ou realizar outro processo qualquer.
Com toda esta dificuldade, o uso das sub-rotinas deveria ser considerado. Como j foi dito, as sub-
rotinas foram criadas para serem genricas o bastante para se adaptarem a qualquer situao, visando
justamente a possibilidade de reutilizao do cdigo.
Para realizar esta "mgica", foi criado o conceito de passagem de parmetros, ou seja, passar
informaes para serem tratadas dentro da sub-rotina.

Sintaxe:

procedimento <nome-de-procedimento> [(<seqncia-de-declaraes-de-


parmetros>)]
// Seo de Declarao de Variveis Locais
Inicio
// Seo de Comandos
fimprocedimento

// Chamada no Algoritmo Principal

<nome do procedimento> (<argumento>)

ATENO: Os argumentos e parmetros de chamada devem corresponder-se em nmero, tipo e


na mesma ordem.

5
7.4.1 Passagem de Parmetros
7.4.1.1 Passagem de Parmetros por Valor

A sub-rotina recebe um valor do programa chamador no momento de


sua solicitao para que ela possa executar a tarefa especificada. Se o
programa que est chamando for um procedimento, a sub-rotina no retorna
nenhum valor ao termino de sua tarefa, porm caso esteja se tratando de uma
funo, ento a sub-rotina retornar obrigatoriamente um valor ao fim da sua
tarefa.

Exemplo : PassVal
Algoritmo PassVal
VAR
X : Inteiro
procedimento PorValor (A : Inteiro)
inicio
A <- 5
fimprocedimento //procedimento
INICIO
X <- 10
PorValor(X) //chamada do procedimento
ESCREVA (X)
FIMALGORITMO //Algoritmo

No exemplo anterior, o contedo da varivel em questo no sofrer


alteraes aps o retorno para o programa principal.

Fig. 2: Representao da passagem de Parmetros por Valor


Fonte: Internet
7.4.1.2 Passagem de Parmetros por Referncia

A sub-rotina no recebe apenas um valor, mas tambm o endereo de


uma varivel global. Caso haja mudanas no contedo de um parmetro na
sub-rotina, isto refletir no programa chamador. Os parmetros a serem
passados por referncia devero estar declaradas na sub-Rotina na posio de
anterior ao Nome do parmetro e depois da palavra VAR;

Exemplo: PassRef

6
Algoritmo PassRef
VAR
X : Inteiro
procedimento PorReferncia (VAR A : Inteiro)
inicio
A <- 5
fimprocedimento //procedimento
INICIO
X <- 10
PorReferncia(X) //chamada do procedimento
ESCREVA (X)
FIMALGORITMO //Algoritmo

No Exemplo anterior, o contedo da varivel X sofrer mudana ao


retorno ao programa principal.

Fig.3: Representao da passagem de Parmetros por Referncia


Fonte: Internet

7.5 O que uma Funo?


Uma sub-rotina do tipo Funo possui caractersticas semelhantes de
um Procedimento ao que se refere passagem de parmetros, variveis
globais e locais, porm possui uma diferena significativa no retorno de um
valor ao trmino de sua execuo. Uma Funo sempre retornar um valor ao
programa chamador. No momento da definio da Funo ser declarado o
tipo do valor a ser retornado.

Origem de Funo
O conceito de Funo originrio da idia de funo matemtica (por exemplo, raiz quadrada, seno,
logaritmo, entre outras), onde um valor calculado a partir de outro(s) fornecido(s) funo.

Passagem de Parmetros por Valor


Na passagem por valor (como foi visto at agora), os parmetros de uma funo funcionam como
variveis suas, ou seja NADA tem a ver com as variveis da funo que a chamou. Desta forma
alteraes nos valores desses parmetros no7 interferem nos valores das variveis da funo
chamadora.
Passagem de Parmetros por Referncia
No entanto pode ser interessante que uma varivel na funo chamadora possa ser alterada (ex:
funo que troque o valor de duas variveis). Ou mesmo haja a necessidade de se retornar mais de um
valor da funo (pois com o return s possvel retornar um nico valor), por exemplo funo que
retorne as horas e minutos dados apenas os minutos.

Para esses casos, algumas linguagens permitem a passagem de parmetros por referncia, onde uma
varivel passada como parmetro ao ser alterada dentro da funo tem seu valor alterado tambm na
funo chamadora ( na verdade uma nica varivel usada por ambas as fues).

Sintaxe:

funcao <nome-de-funo> [(<seqncia-de-declaraes-de-parmetros>)] :


<tipo-de-dado-de-retorno>
//Seo de Declaraes de Variveis Locais
inicio
// Seo de Comandos
fimfuncao

// Chamada no Algoritmo Principal

<varivel> <- <nome da funo> (<argumento>)

Exemplo 1: Neste exemplo o algoritmo FuncSoma1 realizar a operao de


soma de dois nmeros inteiros atravs da funo soma que receber dois
parmetros, retornando o resultado da operao a varivel global K.

Algoritmo FuncSoma1
//Funo para somar 2 nmeros.
VAR
K : Inteiro // Variveis Globais

funcao soma (V1, V2 : inteiro) : Inteiro


VAR
S : Inteiro // Varivel Local
Inicio
S <- V1+V2
Retorne S // Valor Retornado pela Funo
fimfuncao

INICIO
K <- Soma (2,3) //Chamada da Funo
ESCREVA (RES)
FIMALGORITMO //Algoritmo

8
Exemplo2: Neste exemplo o algoritmo FuncSoma2 realizar a operao de
soma de dois nmeros inteiros contidos nas variveis globais N e M, assim
sem passagem de parmetros, retornando o resultado da operao para a
varivel global RES.

Algoritmo FuncSoma2
VAR N, M, RES : Inteiro // Variveis Globais

funcao soma : inteiro


VAR AUX : Inteiro
Inicio
AUX <- N+M
Retorne AUX // Valor Retornado pela Funo
fimfuncao

INICIO
N <- 4
M <- -9
RES <- soma // Chamada de Funo
ESCREVA (RES)
FIMALGORITMO //Algoritmo

Exemplo3: Neste exemplo o algoritmo CalcQaud realizar a operao de


quadrado de um nmero real atravs da funo quadrado que receber um
parmetro, retornando o resultado da operao a varivel global Y.

Algoritmo CalcQuad
//Funo para calcular o quadrado de um
nmero qualquer.
VAR
X, Y : Real // Variveis Globais

funcao quadrado (W : Real) : REAL


VAR
Z : REAL // Varivel Local
Inicio
Z <- W * W
Retorne Z // Valor Retornado pela Funo
fimfuncao

INICIO
ESCREVA (Digite um nmero: )
LEIA (X)
Y <- Quadrado (X) //Chamada da Funo
ESCREVA (O Valor de Y : , Y))
FIMALGORITMO //Algoritmo

9
7.6 Exerccios de Fixao
1) Faa uma funo que receba um parmetro (inteiro por valor) com o total de
minutos passados ao longo do dia e receba tambm dois parmetros (inteiros
por referncia) no qual deve preencher com o valor da hora e do minuto
corrente. Faa um programa que leia do teclado quantos minutos se passaram
desde meia-noite e imprima a hora corrente (use a sua funo).

2) Faa uma funo que receba um valor inteiro como referncia e retorne o
resto da diviso deste nmero por 10. Altere tambm o valor da varivel
passada por referncia, dividindo-a por 10.

3) Faa um programa que imprima invertidos os nomes dos algarismos de um


nmero inteiro. Ex: 234 sada: quatro trs dois

10
Bibliografia

Forbellone, Andr L. V.; Eberspcher, Henri Frederico, Lgica de Programao,


2 Edio. Editora Pearson Education, So Paulo, 2001

Berg, Alexandre; Figueir, Joice Pavek, Lgica de Programao, 3 Edio,


Editora Ulbra,Canoas, 2000

Moraes, Paulo Srgio de, Lgica de Programao, Unicamp - Centro de


Computao DSC, Ultima Atualizao: 04 de Abril de 2000

11

Você também pode gostar