Módulos ou Subrotinas:
PARTE II
Objetivos da Aula
Compreender a necessidade e a importância de
modularizar
Aprender a criar e utilizar (chamar) seus
próprios módulos
Refletindo ...
Até o momento temos escrito nossos programas no
PortugolStudio de maneira “sequencial” dentro da
Refletindo ...
À medida que os problemas vão se tornando mais
complexos,
os programas (solução) tendem a ficar
mais
extensos.
Modularizar
permite “quebrar” o problema em
subproblemas.
Para cada subproblema podemos, por exemplo,
PROBLEMA
EXEMPLO
Escreva um programa ler dois vetores (A e B) de
10 elementos cada. Após a entrada de dados, o
programa deve:
Obter e exibir a soma dos elementos do vetor A
Obter e exibir a soma dos elementos do vetor B
Calcular e exibir a média dos elementos dos dois
vetores (uma única média)
Imprimir o vetor A e depois o vetor B
Mostrar os elementos de A e B que são acima da média
de ambos
Escreva um programa ler dois vetores (A e B) de 10
elementos cada. Após a entrada de dados, o programa
deve:
Obter e exibir a soma dos elementos do vetor A
Obter e exibir a soma dos elementos do vetor B
Calcular e exibir a média dos elementos dos dois vetores (uma única média)
Imprimir o vetor A e depois o vetor B
Mostrar os elementos de A e B que são acima da média de ambos
SAÍDA:
soma do vetor A (somaA), soma do vetor B (soma B), media dos dois vetores
(mediaAB), exibir vetor A, exibir vetor B, exibir elementos de A e B acima de mediaAB.
Escreva um programa ler dois vetores (A e B) de 10
elementos cada. Após a entrada de dados, o programa
deve:
Obter e exibir a soma dos elementos do vetor A
Obter e exibir a soma dos elementos do vetor B
Calcular e exibir a média dos elementos dos dois vetores (uma única média)
Imprimir o vetor A e depois o vetor B
ENTRADA DE DADOS:
os vetores A e B
Escreva um programa
ler dois vetores
(A e B) de 10
elementos cada. Após a entrada de dados, o programa
deve:
Obter e exibir a soma dos elementos do vetor A
Obter e exibir a soma dos elementos do vetor B
Calcular e exibir a média dos elementos dos dois vetores (uma única média)
Imprimir o vetor A e depois o vetor B
PROCESSAMENTO [1]:
Note que poderíamos usar um ÚNICO laço de repetição para somar os DOIS vetores. Propositalmente, optou-se por tratar cada problema (de somar cada vetor) como um problema específico.
- Obter e exibir a soma dos elementos do vetor A - Obter e exibir a soma dos elementos do vetor B
PROCESSAMENTO [2]
- Calcular e exibir a média dos elementos dos dois vetores (uma única média)PROCESSAMENTO [3]
Mostrar os elementos de A e B que são acima da média de ambos
O programa completo possui cerca de 53 linhas
Há diversos trechos no programa que são
“repetitivos”
,
ou seja, fazem a “mesma” coisa,
mudando-se apenas a “variável”
Análise da Solução
Trecho repetitivo:
ENTRADA DE DADOS
O “mesmo trecho” para ENTRADA DE DADOS dos vetores! Muda apenas o nome da variável.
Trecho repetitivo:
SOMA ELEMENTOS VETOR
O “mesmo trecho” para SOMA DOS ELEMENTOS dos vetores! Muda apenas o nome da variável.
Trecho repetitivo:
IMPRIME VETOR
O “mesmo trecho” para IMPRIMIR VETOR! Muda apenas o nome da variável.
Trecho repetitivo:
ELEMENTOS ACIMA MEDIA
O “mesmo trecho” para MOSTRAR ELEMENTOS ACIMA DA MÉDIA! Muda apenas o nome da variável.
Trechos repetitivos é um convite ao
REUSO!
Cada “parte” do programa tem uma
FINALIDADE
ESPECÍFICA
:
Ler o vetor
(subproblema 1)
Somar os elementos do vetor
(subproblema 2)
Imprimir os elementos do vetor
(subproblema 3)
Exibir os elementos acima da media
(subproblema 4)
Reuso
e
Problemas com finalidade específica é um
convite a
MODULARIZAÇÃO!!!
SOLUÇÃO
MODULARIZADA
Primeiro vamos ver a solução
modularizada, para entendermos suas
vantagens! Em seguida vamos aprender a
Primeiro, vamos pegar cada
trecho específico
, um
a um, e transformá-lo numa
função
Modularizando
MODULARIZANDO A ROTINA
O que difere entre os dois trechos é apenas a
variável do
“leia”
Note que os trechos são IDÊNTICOS!
Apenas “criamos” uma nova função, demos um nome a ela
(Leitura_Vetor)
e agora podemos CHAMÁ-LA
Daqui a pouco entenderemos melhor os detalhes da criação da função: nome, parâmetros, etc.
Existindo a função podemos CHAMÁ-LA como fazemos
com funções existentes (potencia, raiz, etc)
Note que “Leitura_Vetor” é chamada duas vezes: uma para
A e outra para B
MODULARIZANDO A ROTINA
O que difere os dois trechos?
Note que os trechos são IDÊNTICOS!
Apenas “criamos” uma nova função, demos um nome a ela
(Soma_Vetor)
e agora podemos CHAMÁ-LA
Daqui a pouco entenderemos melhor os detalhes da criação da função : nome, parâmetros, etc.
Existindo a função podemos CHAMÁ-LA como fazemos
com funções existentes (potencia, raiz, etc)
Note que “Soma_Vetor” é chamada duas vezes: uma para A
e outra para B
MODULARIZANDO A ROTINA
O que difere os dois trechos?
Note que os trechos são IDÊNTICOS!
Apenas “criamos” uma nova função, demos um nome a ela
(Imprime_Vetor)
e agora podemos CHAMÁ-LA
Daqui a pouco entenderemos melhor os detalhes da criação da função : nome, parâmetros, etc.
Existindo a função podemos CHAMÁ-LA como fazemos
com funções existentes (potencia, raiz, etc)
Note que “Imprime_Vetor” é chamada duas vezes: uma para
A e outra para B
MODULARIZANDO A ROTINA
O que difere os dois trechos?
Note que os trechos são IDÊNTICOS!
Apenas “criamos” uma nova função, demos um nome a ela
(Imprime_Acima_Media)
e agora podemos CHAMÁ-LA
Daqui a pouco entenderemos melhor os detalhes da criação da função : nome, parâmetros, etc.
Existindo a função podemos CHAMÁ-LA como fazemos
com funções existentes (potencia, raiz, etc)
Note que “Imprime_Acima_Media” é chamada duas vezes:
uma para A e outra para B
FUNÇÃO INÍCIO
Note como o
programa está mais
ENXUTO
(código
mais limpo)
FUNÇÕES DE USUÁRIO (CRIADAS)
AS FUNÇÕES
CRIADAS E QUE
FORAM CHAMADAS
VANTAGENS DA
MODULARIZAÇÃO
Modularização - Vantagens
Reaproveitamento de código
(reuso)
Organização
Legibilidade
COMO ESCREVER E ATIVAR
Módulos – Estrutura e Sintaxe
Um programa modularizado tem:
um
módulo principal
(função início) e
outros módulos que vamos chamar de
funções de usuário
Módulos - Sintaxe
Sintaxe parecida com O módulo principal
1- Palavra funcao (obrigatório)
2- Valor de retorno (caso exista)
3- Identificador (obrigatório) 4- Parênteses com parâmetros (caso exista)
PARÂMETROS
São os valores ou variáveis
enviadas ao
módulo
, para que ele possa realizar o seu
processamento
Podemos passar
nenhum
ou
vários
parâmetros
para o módulo
Tudo depende da finalidade do módulo (e de
como ele foi construído)
RETORNO
O Retorno de um módulo é o valor (ou valores) que o
módulo retorna para o local em que ele foi chamado
Módulos – Sintaxe - Portugol
palavrafuncao
valor de retorno (caso exista) Identificador (nome da função) Parâmetros da função) tipo do retorno da função
Módulos – Sintaxe - Portugol
palavra funcaoNOTE QUE ESSA FUNÇÃO NÃO TEM RETORNO Identificador (nome da função)
Módulos – Sintaxe - Portugol
Sempre dentro das chaves, para Delimitar o BLOCO do módulo
EXECUÇÃO E CHAMADA
DOS MÓDULOS
Módulos – Execução de um Módulo
A
chamada
(ou ativação) de um módulo, representa a
execução das ações contidas nele, em seguida a
execução
retorna
para a instrução seguindo ao ponto
da sua chamada (que poderá ser o módulo principal ou
noutros módulos)
Não existe ordem
para a
definição
dos módulos
Quem determina a execução de um MÓDULO (ou
função) é a sua chamada.
Módulos – Execução (chamada)
O módulo principal
(função início)
É o primeiro a ser chamado quando um
programa é executado
Os outros módulos são ativados (executados)
toda vez que forem chamados (pelo nome)
A chamada de um módulo deve respeitar sua
definição (nome, parâmetros, etc)
Note as chamadas à função
SOMA_VETOR
: passando dois
parâmetros e atribuindo o valor do
retorno
para somaA e somaB
Note as chamadas à função
IMPRIME_VETOR
: passando dois
parâmetros. Não há atribuição pois a função
não retorna
nada!
Módulos – Execução de um Módulo
Qualquer função pode chamar outra função.
Um módulo pode chamar ele próprio?
Escreva um programa para exibir o peso ideal de uma
pessoa utilizando a fórmula a seguir:
Problema
Masculino: 72.7 x altura – 58
Feminino: 62.1 x altura – 44.7
A entrada e saída de dados poderá ser feito no módulo
principal (função início). No entanto, o cálculo do peso
ideal deve ser feito em uma função específica.
Escreva um programa para exibir o peso ideal de uma
pessoa utilizando a fórmula a seguir:
Problema
SAÍDA:
peso ideal
Masculino: 72.7 x altura – 58
Feminino: 62.1 x altura – 44.7
A entrada e saída de dados poderá ser feito no módulo
principal (função início). No entanto, o cálculo do peso
ideal deve ser feito em uma função específica.
Escreva um programa para exibir o peso ideal de uma
pessoa utilizando a fórmula a seguir:
Problema
SAÍDA:
peso ideal
Masculino: 72.7 x altura – 58
Feminino: 62.1 x altura – 44.7
A entrada e saída de dados poderá ser feito no módulo
principal (função início). No entanto, o cálculo do peso
ideal deve ser feito em uma função específica.
Solução
A entrada e saída de dados poderá ser feito no módulo
principal (função início). No entanto, o cálculo do peso
ideal deve ser feito em uma função específica.
Construção da Função
A entrada e saída de dados poderá ser feito no módulo
principal (função início). No entanto, o cálculo do peso
ideal deve ser feito em uma função específica.
Masculino: 72.7 x altura – 58
Feminino: 62.1 x altura – 44.7
Para construir o módulo (função) precisamos:
1.
Definir
identificador
(nome da função)
2.
Definir os
parâmetros
(tipo e nome), se necessário
Construção da Função
Masculino: 72.7 x altura – 58
Feminino: 62.1 x altura – 44.7
1.
Definir identificador (nome da função)
Calcula_Peso_Ideal
2.
Definir os parâmetros (tipo e nome), se necessário
A função precisa receber o SEXO e ALTURA por parâmetro (já que eles foram lidos fora da função)