You are on page 1of 5

Sub-rotinas

• Você está escrevendo um algoritmo e percebe


que parte da lógica necessária a ele já foi
desenvolvida em outro algoritmo, o que você
faria?
Sub-Rotinas

1. Escreve toda a lógica do algoritmo


novamente
2. Copia o código do primeiro algoritmo
dentro do segundo algoritmo
1
3. Não sei 2

Sub-rotinas Sub-rotinas
• Sub-rotinas ficam dentro de um programa principal
• Elas são utilizadas para dividir uma tarefa maior em
• As sub-rotinas são blocos de instruções várias sub-tarefas
que possibilitam o desenvolvimento de • O processo é feito com o auxilio de refinamentos
sucessivos. A idéia principal é o de dividir para
programas modularizados. conquistar
• O algoritmo se torna mais eficiente, uma vez que:
– Possibilita o entendimento do código pelo programador e pela
equipe do projeto
– Possibilita a reutilização de código
– Facilita a manutenção

3 4

Sub-rotinas Procedimentos

• Cada parte (sub-programa) chama-se • Sub-Rotinas


módulo • São semelhantes a programas comuns
(Técnica utilizada para desenvolver algoritmo por meio de
refinamentos sucessivos – Top-Down)
• Conjunto de instrução que realiza determinada
tarefa dentro de um contexto maior
• O módulo principal gerencia os demais
• Exemplo: Elaborar algoritmo que efetue
módulos operações aritméticas escolhidas pelo usuário
• Módulos são escritos por meios de (adição, subtração, multiplicação ou divisão)
funções e procedimentos Deverá ser criado menu de opções para usuário

5 6
Representação para subrotinas- Exemplo Procedimento
refazer a figura
Algoritmo menu Procedimento ModAdic
Declare opcao : inteiro Declare v1, v2, res : real Procedimento ModMult
Calculo() Inicio Inicio Declare v1, v2, res : real
Main() { leia(opcao) leia( v1, v2) Inicio
1a. instrução escolha (opcao) res ← v1 + v2 leia( v1, v2)
{ caso 1 : ModAdic escreva(res) res ← v1 * v2
....... 2a. instrução 1 caso 2 : ModSubtr Fim. escreva(res)
....... caso 3 : ModMult Fim.
última instrução caso 4 : Moddiv
A = Calculo() caso 5 : Fim Procedimento ModSubtr
A= A+1; } Fim_escolha Declare v1, v2, res : real Procedimento ModDiv
última
....... Fim. Inicio Declare v1, v2, res : real
leia( v1, v2) Inicio
res ← v1 - v2 leia( v1, v2)
} escreva(res) res ← v1 / v2
Múltipla Escolha
Fim. escreva(res)
Fim.
7 8

Funções Exemplo Função


• Ler número do usuário e calcular fatorial
• São semelhantes a procedimentos
• Diferenças: Função Fatorial (n : inteiro) : inteiro
Declare i, fat : inteiro; Condicional
– Podem ser utilizadas em expressões Inicio composta
leia (n)
– Retornam um valor Se (n = 0) então
Fatorial ← 1
• Tanto os dados passados como senão
Para i de 1 até n-1 passo 1 faça
parâmetro como o valor de retorno devem fat ← fat * i Estrutura de
Fim-para repetição Para
ser declarados Fatorial ← fat
Fim-se
Fim.

9 10

Parâmetros Parâmetro
• São variáveis e valores que são transferidos do • Passagem por valor
algoritmo principal para um módulo chamado
• Ex.: Calcula Multiplicação de 2 números – O valor é copiado para função ou
procedimento
Procedimento Multiplica (a, b : reais) • Passagem por referência
Declare res : real
Inicio – É passado o endereço da variável
res ← (a * b) – Qualquer alteração na variável do módulo
escreva (res) refletirá na variável do programa principal.
Fim.

11 12
Funções em C Exemplo em C
• Tem estrutura semelhante a função ...
Ch = minusculo(car);
main(); ...
• São chamadas (usadas) da mesma forma
que usamos funções de C (printf(), scaf(), minusculo(ch)
gets(), getche(), etc) char ch;
{
• Retorna valor através do comando if (ch >= `A` && ch <= `Z`)
return(); ch += `a` - `A`;
return(ch);
• Termina função com comando return;
}

13 14

Cabeçalho de Função Módulos


• Declaração
abs(x) módulo <identificador> //inicio do bloco lógico
float abs (int x) //declarações das variáveis internas
int x; { ... } //seqüência de ações
{ ... } Fimmodulo; //fim do bloco lógico
PROBLEMA

Entrada Cálculo Impressão

Manhã Tarde
abs(int x) void abs (int x) Minutos entrada Minutos entrada
{ ... }
{ ... } Minutos saída Minutos saída

atraso atraso

15 16

Problema
Módulo Entrada
Impressão
1) Módulo Entrada
1) Cont<-0
Entrada Cálculo 2) leia(dia)
3) Enquanto (dia < 0) e (dia < 32) faça
1) leia(a, b, c,d)
2) cartão[dia].em<-a;
3) cartão[dia].sm<-b;
4) cartão[dia].et<-c;
Manhã Tarde
5) cartão[dia].st<-d;
6) cont<-cont +1;
7) leia(dia)
4) FimEnquanto
2) fimModulo
Minutos entrada Minutos saída Atraso Minutos entrada Minutos saída Atraso

17 18
Algoritmo atrasos
Cartão, totalDias, cont, i toht, totatr
Escopo de Variáveis Entrada
Dia, a, b, c, d
Calculo
• Variáveis Globais Tm, tt, atrm, atrt

– Declaradas no módulo principal Manhã


Me, ms
• Variável local
MinutoEntrada
– Declarada em algum internamente a MinutoSaida
Atraso
algum módulo dentro do módulo principal
Tarde
• O escopo ou abrangência está Me, ms
relacionado a visibilidade(conhecimento MinutoEntrada
e aplicação) perante os diversos MinutoSaida
Atraso
módulos integrantes do algoritmo
19 20
Impressão

Passagem de parâmetros Contexto de Módulos


• Aprendemos a decompor um problema por • Contexto de Ação
refinamento sucessivos e a representar essa
decomposição através dos módulos ou subalgoritmos. – Quando ele se preocupa com um
– Assim cada subparte do problema interage processo em particular, quando seu
apenas com algumas das demais partes, conjunto de ações for o que perfaz sua
conforme divisão que foi concebida. essência Como exemplo, podemos criar
• Funciona como um quebra-cabeça em os módulos Entrada e Impressão,
que cada peça possui apenas uma desenvolvidos no algoritmo do cartão de
possibilidade de encaixe com algumas ponto, ambos procurando resolve uma
outras peças.
pequena parte do algoritmo.

21 22

Módulo Inverter Contexto de Resultado


• Modulo inverter(VET: VI) • Quando este se preocupa com um valor
– Inteiro: i. Aux; especial, quando sua característica for a
– Para i de 1 até 10 faça de calcular um resultado. Para
• Aux<- VI[i]; exemplificar podemos lembrar as
• VI[i]<- VI[11 -i] funções matemáticas sobre as quais é
• VI[11 -i] ← aux; possível desenvolver alguns módulos
– FimPara com esse contexto: calcular uma raiz,
• FimModulo um valor absoluto, uma fatorial ou
mesmo verificar se um número é par,
23 primo, etc. 24
Modulo Sinal
• Modulo sinal (inteiro; X)
– Se x > 0
• Então retorne (1)
• Senão se X = 0
– Então retorne(0)
– Senão retorne(-1)
• FimSe
– FimSe
• FimMódulo
25

You might also like