Sei sulla pagina 1di 9

Sub-rotinas

1– Modularidade
Normalmente problemas complexos exigem algoritmos complexos na busca de suas
soluções. Todo grande problema computacional pode vir a ser dividido em problemas
menores. Desta forma, cada parte menor tem um algoritmo mais simples e de mais fácil
compreensão e administração, e esse trecho menor é chamado de sub-rotina (ou mesmo de
módulo, subprograma, subalgoritmo.
Uma sub-rotina é um programa (trecho de um programa maior), e desta forma pode
efetuar diversas operações computacionais (como: entradas, processamentos e saídas) e
deve ser tratada com o mesmo cuidado, como foram tratados os programas projetados até
este momento.
Ao trabalhar com a técnica de sub-rotinas, às vezes se depara com a necessidade de
dividir uma sub-rotina em outras tantas quantas forem necessárias, buscando uma solução
mais simples de uma parte do problema maior. O processo de dividir sub-rotinas em outras
é denominado Método de Refinamento Sucessivo

2 – Método Top-Down
O processo de programar um computador torna-se bastante simples quando aplicado
o método de utilização de sub-rotinas (módulos de programas). Porém, a utilização dessa
sub-rotinas deve ser feita com aplicação do método top-down.
Um método adequado à programação de um computador é a utilização do conceito
de programação estruturada, pois as linguagens de programação de terceira geração
utilizadas atualmente (como:C, C++, Java, ObjectPascal, Pascal) são baseadas nesta
estrutura, o que facilita a aplicação deste processo de trabalho. O método mais utilizado
para a programação estruturada de computadores é o top-down (de cima para baixo) o qual
se caracteriza basicamente por:

• Antes de iniciar a construção do programa, o programador deve ter em mente as


tarefas principais que este deverá executar. Não é necessário saber como
funcionarão, somente saber quantas são;

• Conhecidas todas as tarefas a serem executadas, tem-se em mente como deve ser o
programa principal, o qual vai controlar todas as outras tarefas distribuídas em suas
sub-rotinas;

• Tendo definido o programa principal, é iniciado o processo de detalhamento para


cada sub-rotina. Desta forma são definidos vários algoritmos, um para cada rotina
em separado, para que se tenha uma visão do que deve ser executado em cada
módulo de programa. Existem programadores que estabelecem o número máximo
de linhas de programa que uma rotina deverá possuir. Se o número de linhas
ultrapassa o limite preestabelecido, a rotina em desenvolvimento é dividida em
outra sub-rotina (é neste ponto que se aplica o método de refinamento sucessivo)

O método top-down conceitualmente dá a idéia de que um programa tem uma estrutura


semelhante à de um organograma. A utilização do método “de cima para baixo” permite
que seja efetuado cada módulo de programa em separado. Assim sendo, cada parte do
programa pode ser testada separadamente, garantindo que o programa completo esteja sem
erro ao seu término.
Outro detalhe a ser considerado é que muitas vezes existem em um programa
trechos de código que podem estar repetidos várias vezes. Esses trechos podem ser
utilizados como sub-rotinas, proporcionando um programa menor e mais fácil de ser
alterado num futuro próximo, quando houver a necessidade de efetuar sua manutenção.

3 – Tipos de Sub-Rotina
A técnica de modularização de código de programa baseado no conceito de sub-
rotinas disponibiliza para o trabalho de um programador dois modos de tratamento do
problema. Um modo denomina-se procedimento e o outro denomina-se função.
Uma sub-rotina (seja ela um procedimento ou uma função) é considerada um bloco
de programa que possui obrigatoriamente início e fim. Uma sub-rotina é identificada por
um nome, por meio do qual serão feitas as devidas referências em qualquer parte do
programa principal ou do programa chamador da rotina. Quando uma sub-rotina é chamada
por um programa, ela é executada, e ao seu término o controle de processamento retorna
automaticamente retorna automaticamente para a primeira linha de instrução após a linha
que efetuou a chamada da sub-rotina. A diferença básica existente entre os dois tipos de
sub-rotina são:

• As sub-rotinas do tipo procedimento são mecanismos que podem ou não retornar


algum tipo de valor ao fim de seu processamento;

• As sub-rotinas do tipo função são mecanismos que sempre retornam algum tipo de
valor ao fim de seu processamento.

As sub-rotinas (tanto do tipo procedimento, quanto do tipo função) para seu trabalho
podem fazer uso de parâmetros (denominados também de argumentos) que serão passados
por intermédio do programa principal ou do programa chamador daquela sub-rotina. Este
conceito em particular será visto mais adiante com detalhes.

4 – Sub-Rotinas do Tipo Procedimento


A seguir, será apresentada a sub-rotina do tipo procedimento em sua forma de
concepção mais simples existente.

OBSERVAÇÃO: Em sua obra “Engenharia de Software”, página 459, Roger Pressman


sugere que o quadro seja desenhado com um círculo no meio para indicar (possível forma)
uma referência a uma sub-rotina. Por se tratar de um diagrama baseado em quadros e não
havendo uma grande conformidade em definir uma estrutura de sub-rotina por vários
autores, esta obra aborda o conceito de desenhar um quadro dentro de outro quadro para
definir uma estrutura de sub-rotina do tipo procedimento, como mostra a figura 8.2.

Português Estruturado

Programa TESTE

( Sub-Rotina)

procedimento ROTINA [ ( < parâmetro > ) ]


[ var ]
[ < variáveis>]
início
<nstruções da sub-rotina>
fim

( Programa Principal )

programa PRINCIPAL
var

<variáveis>
início
rotina [ ( <parâmetros> ) ]
fim

Note que primeiramente é definido no programa em português estruturado o código


da sub-rotina para que depois seja definido o código do programa principal. Esta
característica deve ser mantida, pois existem algumas linguagens de programação que
trabalham desta forma. Observe que a chamada efetuada da sub-rotina definida é feita no
programa principal com seu código sublinhado. Este detalhe é utilizado para diferenciar o
nome da rotina das palavras-chave das linguagens e também das variáveis que venham a ser
utilizadas.
A indicação (<parâmetro>) entre os colchetes é opcional e será utilizada
dependendo apenas da estratégia lógica a ser implementada pelo programador. Quando
utilizada a relação de parâmetros, deve obrigatoriamente estar definida entre os símbolos de
parênteses. Esta característica será apresentada mais adiante.

8.4.1 –Exercícios de Aprendizagem

Elaborar um programa do tipo calculadora simples para operar apenas dois valores
numéricos, que apresente um menu de seleções no programa principal. Esse menu deve dar
ao usuário a possibilidade de escolher uma entre quatro operações aritméticas. Escolhida a
opção desejada, deve ser solicitada a entrada de dois números, e processada a operação,
deve ser exibido o resultado.

Algoritmo
Note que esse programa deve ser um conjunto de cinco rotinas, sendo uma principal
e quatro sub-rotinas. A rotina principal efetuará o controle das quatro sub-rotinas que, por
sua vez, pedirão a leitura de dois valores numéricos, farão a operação e apresentarão o
resultado obtido.

Hierarquia das rotinas do programa calculadora

A partir da idéia da estrutura geral do programa, será escrito em separado cada


algoritmo com os seus detalhes de operação. Primeiro o programa principal e depois as
outras rotinas, de preferência na mesma ordem em que estão mencionadas no organograma.

Programa Principal

1. Apresentar um menu de seleção com cinco opções:

1. Adição

2, Subtração

3. Multiplicação

4. Divisão

5. Fim de Programa

2. Ao ser selecionado um valor, a rotina correspondente deve ser executada;

3. Ao escolher o valor 5, o programa deve ser encerrado.

Rotina 1 – Adição

1. Ler dois valores, no caso variáveis A e B;


2. Efetuar a soma das variáveis A e B, implicando o seu resultado na variável R;

3. Apresentar o valor da variável R

Rotina 2 – Subtração

1. Ler dois valores, no caso variáveis A e B;

2. Efetuar a subtração das variáveis A e B, implicando o seu resultado na variável R;

3. Apresentar o valor da variável R.

Rotina 3 – Multiplicação

1. Ler dois valores, no caso variáveis A e B;

2. Efetuar a multiplicação das variáveis A e B, implicando o seu resultado na


variável R;
3. Apresentar o valor da variável R.

Rotina 4 – Divisão

1. Ler dois valores, no caso variáveis A e B;

2. Efetuar a divisão das variáveis A e B, implicando o seu resultado na variável R;

3. Apresentar o valor da variável R.

Observe que em cada rotina serão utilizadas as mesmas variáveis, mas elas não
serão executadas ao mesmo tempo para todas as operações. Serão utilizadas em separado e
somente para a rotina escolhida.

Português Estruturado

Na definição do código em português estruturado, serão definidas em primeiro lugar


as sub-rotinas e por último, o programa principal. Quando no programa principal ou rotina
chamadora for referenciada a chamada de uma sub-rotina, ela será grafada na forma
sublinhada para facilitar sua visualização e identificação.

Programa CALCULADORA

(Sub-rotinas de cálculos)

procedimento ROTSOMA
var
R, A, B : real
Início
Escreva “Rotina de Soma”
Escreva “Entre um valor para A: “
Leia A
Escreva “Entre um valor para B: “
Leia B
B
R←A+B
Escreva “A soma de A com B é = “ , R
Fim
Procedimento ROTSUBTRAÇÃO
Var
R, A, B : real
Início
Escreva “Rotina de Subtração”
Escreva “Entre um valor para A: “
Leia A
Escreva “Entre um valor para B: “
Leia B
R←A–B
Escreva “A subtração de A com B é = “ , R
Fim

Procedimento ROTMULTIPLICAÇÃO
Var
R, A, B : real
Início
Escreva “Rotina de Multiplicação”
Escreva “Entre um valor A: “
Leia A
Escreva “Entre um valor para B: “
Leia B
R←A*B
Escreva “A multiplicação de A com B é = “ , R
Fim

Procedimento ROTDIVISÃO
Var
R, A, B : real
Início
Escreva “Rotina de Divisão”
Escreva “Entre um valor para A: “
Leia A
Escreva “Entre um valor para B: “
Leia B
Se (B = 0 ) então
Escreva “Impossível dividir”
Senão
R←A/B
Escreva “A divisão de A com B é = “, R
Fim_se
Fim

(Programa Principal)

var
OPÇÃO : inteiro
Início
OPÇÃO ← 0
Enquanto (OPÇÃO < > 5 ) faça
Escreva “1 – Adição”
Escreva “2 – Subtração”
Escreva “3 – Multiplicação”
Escreva “4 – Divisão”
Escreva “5 – Finalização”
Escreva “Escolha uma opção: “
Leia OPÇÃO
Se (OPÇÃO = 1) então
Rotsoma
Fim-se
Se (OPÇÃO = 2) então
Rotsubtração
Fim_se
Se (OPÇÃO = 3) então
Rotmultiplicação
Fim_se
Se (OPÇÃO = 4 ) então
Rotdivisão
Fim_se
Fim_enquanto
fim

4.2 – Estrutura de Controle com Múltipla Escolha

O programa calculadora demonstra a aplicação da técnica de programação


estruturada (tanto no diagrama de quadros como no código em português estruturado),
possibilitando a construção de programas mais elaborados. Porém, no tocante ao
selecionamento das sub-rotinas, foi utilizada a instrução se. Observe que se o programa
possuir um menu com 15 opções, devem ser definidas 15 instruções do tipo se para
verificar a escolha do operador.
Quando houver a necessidade de construir um programa no qual seja necessário
utilizar uma seqüência grande de instruções do tipo se, sejam estas uma após a outra ou
mesmo encadeadas, pode ser simplificada com a utilização da instrução caso...fim_caso,
que possui a seguinte sintaxe:

Português Estruturado
caso <variável>
seja <valor1> faça <operação1>
seja <valor2> faça <operação2>
seja <valorN> faça <operaçãoN>
senão <operação padrão>
fim_caso

Em que <variável> será a variável a ser controlada, valor será o conteúdo de uma variável
sendo verificado e operação pode ser a chamada de uma sub-rotina, a execução de qualquer
operação matemática ou de qualquer outra instrução
Desta forma, a rotina principal do programa calculadora pode ser escrita fazendo
uso da instrução caso...fim_caso no selecionamento de uma opção escolhida pelo
operador.

Português Estruturado
início
OPÇÃO ← 0
enquanto (OPÇÃO < > 5 ) faça
escreva “1 – Adição”
escreva “2 – Subtração”
escreva “3 – Multiplicação”
escreva “4 – Divisão”
escreva “5 – Finalização”
escreva “Escolha uma opção: “
leia OPÇÃO
se (OPÇÃO < > 5 ) então
caso OPÇÃO
seja 1 faça rotsoma
seja 2 faça rotsubtração
seja 3 faça rotmultiplicação
Seja 4 faça rotdivisão
senão escreva “Opção inválida – Tente novamente”
fim_caso
fim_se
fim_enquanto
fim
Antes do uso da instrução caso...fim_caso, está sendo verificado se o valor da opção
informado é realmente diferente de 5. Sendo, será verificado se é 1, 2, 3 ou 4; Não sendo
nenhum dos valores válidos, a instrução senão informa que a tentativa foi inválida. O uso
desta nova instrução agiliza o processamento das instruções, ou seja, é muito mais rápido
utilizar a instrução caso...fim_caso do que aninhar diversas instruções do tipo se.