Heleno Pontes Bezerra Neto -
helenopontes@lccv.ufal.br
Modularização – Parte 1
INTRODUÇÃO À COMPUTAÇÃO
- EPET006 -
QUAL A MELHOR FORMA DE TRATAR UM PROBLEMA COMPLEXO?
QUAL A MELHOR FORMA DE TRATAR UM PROBLEMA COMPLEXO?
PODEMOS DECOMPÔ-LO EM VÁRIOS SUBPROBLEMAS!
QUAL A MELHOR FORMA DE TRATAR UM PROBLEMA COMPLEXO?
PODEMOS DECOMPÔ-LO EM VÁRIOS SUBPROBLEMAS!
VANTAGENS DA DECOMPOSIÇÃO:
. Dividir a complexidade do problema original, simplificando a sua resolução;
. Direcionar a atenção a problemas menores de cada vez, permitindo uma melhor compreensão do todo.
QUAL A MELHOR FORMA DE TRATAR UM PROBLEMA COMPLEXO?
PODEMOS DECOMPÔ-LO EM VÁRIOS SUBPROBLEMAS!
VANTAGENS DA DECOMPOSIÇÃO:
. Dividir a complexidade do problema original, simplificando a sua resolução;
. Direcionar a atenção a problemas menores de cada vez, permitindo uma melhor compreensão do todo.
A rotina sugerida para modularização de programas é a seguinte: . Dividir o problema em suas partes principais;
. Analisar a divisão;
. Se alguma parte ainda estiver complexa, decompô-la também; . Analisar o resultado, garantindo entendimento e coerência.
6. MODULARIZAÇÃO
Conceito
Exemplo: Gerenciamento Salarial a) Dados Nome Ano Base Salário/mês Salário/ano (incluíndo o 13o) b) Pede-se
Cálculo salário/dia (20 dias/mês) Cálculo salário/hora (8 horas/dia)
Novo salário com aumento baseado no índice da inflação Classificação em classes sociais (A, B, C, D e E)
c) Saída (Resultados) Nome Salário/dia Salário/hora Novo salário Classe Social
6. MODULARIZAÇÃO
Módulos (Funções)
Exemplo: Gerenciamento Salarial a) Dados Nome Ano Base Salário/mês Salário/ano (incluíndo o 13o) b) Pede-se
Cálculo salário/dia (20 dias/mês)
Cálculo salário/hora (8 horas/dia)
Novo salário com aumento baseado no índice da inflação
Classificação em classes sociais (A, B, C, D e E) c) Saída (Resultados) Nome Salário/dia Salário/hora Novo salário Classe Social Problema Cálculos Entrada Saída Sal./Mês
Sal./Dia Novo Sal. Classe Social
Problema
Cálculos
Entrada Saída
Sal./Mês
Sal./Dia Novo Sal. Classe Social
Para representar a decomposição do problema no algoritmo utilizam-se MÓDULOS (SCRIPTS).
Construir um módulo significa construir um algoritmo em instâncias menores.
6. MODULARIZAÇÃO
Módulos (Funções)
Problema
Cálculos
Entrada Saída
Sal./Mês
Sal./Dia Novo Sal. Classe Social
Problema
Cálculos
Entrada Saída
Sal./Mês
Sal./Dia Novo Sal. Classe Social
Para representar a decomposição do problema no algoritmo utilizam-se MÓDULOS (SCRIPTS).
Construir um módulo significa construir um algoritmo em instâncias menores.
O problema do exemplo 01 terá 3 módulos: Exemplo: Gerenciamento Salarial
a) Dados Nome Ano Base Salário/mês Salário/ano (incluíndo o 13o) b) Pede-se
Cálculo salário/dia (20 dias/mês)
Cálculo salário/hora (8 horas/dia)
Novo salário com aumento baseado no índice da inflação
Classificação em classes sociais (A, B, C, D e E) c) Saída (Resultados) Nome Salário/dia Salário/hora Novo salário Classe Social
6. MODULARIZAÇÃO
Módulos (Funções)
Para representar a decomposição do problema no algoritmo utilizam-se MÓDULOS (SCRIPTS).
Construir um módulo significa construir um algoritmo em instâncias menores.
O problema do exemplo 01 terá 3 módulos:
Módulo 1 Entrada dos dados
Módulo 2 a) Cálculo do Novo Sal.; b) Sal./Dia
c) Sal./Mês
d) Classe Social
Módulo 3 saída dos dados
Exemplo: Gerenciamento Salarial a) Dados Nome Ano Base Salário/mês Salário/ano (incluíndo o 13o) b) Pede-se
Cálculo salário/dia (20 dias/mês)
Cálculo salário/hora (8 horas/dia)
Novo salário com aumento baseado no índice da inflação
Classificação em classes sociais (A, B, C, D e E) c) Saída (Resultados) Nome Salário/dia Salário/hora Novo salário Classe Social
6. MODULARIZAÇÃO
Módulos (Funções)
Existe, então, a necessidade de “conectar” os vários scripts do programa, de forma que eles se comuniquem.
6. MODULARIZAÇÃO
Módulos (Funções)
Existe, então, a necessidade de “conectar” os vários scripts do programa, de forma que eles se comuniquem.
6. MODULARIZAÇÃO
Módulos (Funções)
Existe, então, a necessidade de “conectar” os vários scripts do programa, de forma que eles se comuniquem.
Isso pode ser feito no módulo principal do programa.
O programa seria algo do tipo: O fluxo de execução do programa seria: Linha 1 – comentário
Linha 2 – chama (executa) o script entrada Executa todos os comandos desse script Linha 3 – chama (executa) o script calculos
Executa todos os comandos desse script Linha 4 – chama (executa) o script imprime
6. MODULARIZAÇÃO
Módulos (Funções)
PARA FACILITAR A TROCA E EVITAR USO INDEVIDO DE INFORMAÇÃO ENTRE OS MÓDULOS, EM VEZ DE TRABALHAR A CONEXÃO DE SCRIPTS, INTRODUZ-SE O USO DE FUNÇÕES.
COM ISSO, OS MÓDULOS DEIXAM DE SER SIMPLES SCRIPTS, PARA SER FUNÇÕES.
6. MODULARIZAÇÃO
Módulos (Funções)
SCRIPT
x FUNÇÃO
Entrada de dados convencional (script) do ex. 01
func.nome = input(‘Nome: ’, ‘s’); func.ano = input(‘Ano: ’);
func.sal_mes = input(‘Salario Mensal: ’); func.sal_ano = input(‘Salario Anual: ’);
6. MODULARIZAÇÃO
Módulos (Funções)
SCRIPT
x FUNÇÃO
Entrada de dados convencional (script) do ex. 01
func.nome = input(‘Nome: ’, ‘s’); func.ano = input(‘Ano: ’);
func.sal_mes = input(‘Salario Mensal: ’); func.sal_ano = input(‘Salario Anual: ’);
Entrada de dados usando função do ex. 01 function f = entrada
f.nome = input(‘Nome: ’, ‘s’);
f.ano = input(‘Ano: ’);
f.sal_mes = input(‘Salario Mensal: ’); f.sal_ano = input(‘Salario Anual: ’);
6. MODULARIZAÇÃO
Módulos (Funções)
Entrada de dados convencional (script) do ex. 01
func.nome = input(‘Nome: ’, ‘s’); func.ano = input(‘Ano: ’);
func.sal_mes = input(‘Salario Mensal: ’); func.sal_ano = input(‘Salario Anual: ’);
Entrada de dados usando função do ex. 01 function f = entrada
f.nome = input(‘Nome: ’, ‘s’); f.ano = input(‘Ano: ’);
f.sal_mes = input(‘Salario Mensal: ’); f.sal_ano = input(‘Salario Anual: ’);
6. MODULARIZAÇÃO
Módulos (Funções)
Alguns detalhes que devem ser observados no MATLAB: • Uma função é identificada pela palavra-chave function;
6. MODULARIZAÇÃO
Módulos (Funções)
Alguns detalhes que devem ser observados no MATLAB: • Uma função é identificada pela palavra-chave function;
6. MODULARIZAÇÃO
Módulos (Funções)
Alguns detalhes que devem ser observados no MATLAB: • Uma função é identificada pela palavra-chave function;
• Todas funções têm um nome associado. Neste exemplo, o nome é entrada; • Cada função deve ser armazenada em um arquivo .m separado (um arquivo para cada função);
• O nome do arquivo deve ser igual ao nome da função armazenada nele. No exemplo acima, o arquivo deve se chamar entrada.m;
6. MODULARIZAÇÃO
Módulos (Funções)
Alguns detalhes que devem ser observados no MATLAB: • Uma função é identificada pela palavra-chave function;
• Todas funções têm um nome associado. Neste exemplo, o nome é entrada; • Cada função deve ser armazenada em um arquivo .m separado (um arquivo para cada função);
• O nome do arquivo deve ser igual ao nome da função armazenada nele. No exemplo acima, o arquivo deve se chamar entrada.m;
• A variável f, que é um registro, só é válida dentro da função entrada. Dizemos que ela é uma variável local. Ou seja, todas as variáveis criadas dentro de uma função só podem ser usadas na própria função. Elas não existem fora deste contexto.
6. MODULARIZAÇÃO
Módulos (Funções)
Até agora, já usamos diversas funções pré-definidas pelo próprio MATLAB...
plot disp input sqrt mod log sen cos . . .
Módulos (Funções)
Sintaxe no MATLAB
6. MODULARIZAÇÃO
function [lista de variáveis de saída] = nome (lista de variáveis de entrada)
function [lista de variáveis de saída] = nome (lista de variáveis de entrada)
Módulos (Funções)
Sintaxe no MATLAB
valores de retorno (opcionais)
argumentos(opcionais)
palavra-chave (obrigatória)
nome da função (obrigatório)
function [lista de variáveis de saída] = nome (lista de variáveis de entrada)
...instruções para inicialização de variáveis ...instruções de execução
...
Módulos (Funções)
Sintaxe no MATLAB
valores de retorno (opcionais)
argumentos(opcionais)
palavra-chave (obrigatória)
nome da função (obrigatório)
6. MODULARIZAÇÃO
Argumentos são as variáveis de entrada que as
funções vão receber. É por meio delas que as funções
Módulos (Funções)
6. MODULARIZAÇÃO
Exemplo 52 – Implemente uma função para calcular e fornecer a área de um triângulo. Essa função recebe como argumentos a base e a altura do triângulo correspondente.
% arquivo ‘areatri.m’
function a = areatri( b, h ) a = 0.5 * b * h;
%arquivo imprime.m
function imprime disp(c);
6. MODULARIZAÇÃO
Módulos (Funções)
Programas modularizados e uso de Variáveis Locais
Ex: Criar um programa para operar o produto de dois números
%arquivo produto.m
function produto a=3;
b=2; c=a*b;
% modulo principal, arquivo teste.m
produto; imprime;
%arquivo imprime.m
function imprime disp(c);
6. MODULARIZAÇÃO
Módulos (Funções)
%arquivo produto.m
function produto a=3;
b=2; c=a*b;
% modulo principal, arquivo teste.m
produto; imprime;
Erro!!! A variável “c” não existe em imprime, ela está restrita à função
produto, ou seja, é variável local da função produto.
Programas modularizados e uso de Variáveis Locais
%arquivo imprime.m
function imprime(c) disp(c);
6. MODULARIZAÇÃO
Módulos (Funções)
%arquivo produto.m
function c=produto a=3;
b=2; c=a*b;
% modulo principal, arquivo teste.m
c=produto; imprime(c);
A solução para este tipo de problema, que garante a correta
comunicação entre as funções, está no uso de:
. argumentos de uma função
. valores de retorno de uma função
A variável “c” foi retornada pela função produto, recebida pelo módulo principal, depois fornecida para a função imprime
Programas modularizados e uso de Variáveis Locais
Módulos (Funções)
Fazer um programa, usando funções, para ler, calcular e imprimir o
produto de dois números.
a, b e c são variáveis locais da função produto
6. MODULARIZAÇÃO
% arquivo ‘produto.m’ functionproduto(a,b) c = a*b; disp(c);Módulos (Funções)
Fazer um programa, usando funções, para ler, calcular e imprimir o
produto de dois números.
a, b e c são variáveis locais da função produto
nessa chamada da função produto,a assume o valor 3 e b assume o valor 5
as variáveis x e y são válidas apenas dentro do módulo principal teste
obs1: Uma função pode ser chamada indefinidas vezes!
obs2: O número de argumentos de uma função deve ser compatível entre a sua definição e a sua execução.
6. MODULARIZAÇÃO
% arquivo ‘produto.m’
functionproduto(a,b) c = a*b;
disp(c);
% arquivo principal: ‘teste.m’ produto(3,5);
produto(2,3); x = input(‘X: ‘); y = input(‘Y: ‘); produto(x,y);
Módulos (Funções)
É desejável que exista uma função específica para imprimir o valor do
produto:
imprime não conhece a
variável c
O uso de valores de retorno resolve o problema!
6. MODULARIZAÇÃO
% arquivo ‘produto.m’ functionproduto(a,b) c = a*b; disp(c); % arquivo ‘imprime.m’ functionimprime (c) disp(c);% arquivo principal: ‘teste.m’ a = input(‘Numero: ‘);
b = input(‘Numero: ‘); produto(a,b);
Valores de retorno são as variáveis de saída que as
funções vão disponibilizar para outras aplicações.
Módulos (Funções)
6. MODULARIZAÇÃO
% arquivo ‘produto.m’ functionc=produto(a,b) c = a*b; % arquivo ‘imprime.m’functionimprime (a,b,c) disp(a);
disp(b); disp(c);
% arquivo principal: ‘teste.m’ x = input(‘Numero: ‘); y = input(‘Numero: ‘); z=produto(x,y); imprime(x,y,z);
Valores de retorno são as variáveis de saída que as
funções vão disponibilizar para outras aplicações.
Módulos (Funções)
6. MODULARIZAÇÃO
% arquivo ‘produto.m’ functionc=produto(a,b) c = a*b; % arquivo ‘imprime.m’functionimprime (a,b,c) disp(a);
disp(b); disp(c);
% arquivo principal: ‘teste.m’ x = input(‘Numero: ‘);
y = input(‘Numero: ‘); z=produto(x,y);
imprime(x,y,z);
a, b e c são variáveis locais da função produto
a, b e c são variáveis locais da função imprime
essas variáveis podem conter valores
Valores de retorno são as variáveis de saída que as
funções vão disponibilizar para outras aplicações.
Módulos (Funções)
6. MODULARIZAÇÃO
% arquivo ‘produto.m’ functionc=produto(a,b) c = a*b; % arquivo ‘imprime.m’functionimprime (a,b,c) disp(a);
disp(b); disp(c);
% arquivo principal: ‘teste.m’ x = input(‘Numero: ‘);
y = input(‘Numero: ‘); z=produto(x,y);
imprime(x,y,z);
a, b e c são variáveis locais da função produto
a, b e c são variáveis locais da função imprime
essas variáveis podem conter valores
diferentes em ambas as funçoes
x, y e z são variáveis locais do módulo principal teste z armazena uma cópia do valor
Módulos (Funções)
6. MODULARIZAÇÃO
Exercício 53 – Implemente uma função para calcular a área de um triângulo. Essa função recebe como argumentos a base e a altura do triângulo correspondente. Escreva o módulo principal.
Módulos (Funções)
6. MODULARIZAÇÃO
Exercício 53 – Implemente uma função para calcular a área de um triângulo. Essa função recebe como argumentos a base e a altura do triângulo correspondente. Escreva o módulo principal.
% arquivo ‘areatri.m’
function a = areatri( b, h ) a = 0.5 * b * h;
Módulos (Funções)
6. MODULARIZAÇÃO
Exercício 53 – Implemente uma função para calcular a área de um triângulo. Essa função recebe como argumentos a base e a altura do triângulo correspondente. Escreva o módulo principal.
% arquivo ‘areatri.m’
function a = areatri( b, h ) a = 0.5 * b * h;
% modulo principal ‘teste.m’ a1 = areatri(3,4);
Módulos (Funções)
6. MODULARIZAÇÃO
% arquivo ‘entrada.m’ function [a,b] = entrada
a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);
Módulos (Funções)
6. MODULARIZAÇÃO
% arquivo ‘entrada.m’ function [a,b] = entrada
a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);
Módulos (Funções)
6. MODULARIZAÇÃO
% arquivo ‘areatri.m’
function a = areatri( x, y ) a = 0.5 * x * y;
% arquivo ‘entrada.m’ function [a,b] = entrada
a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);
Módulos (Funções)
6. MODULARIZAÇÃO
% arquivo ‘areatri.m’ function a = areatri( x, y ) a = 0.5 * x * y; % arquivo ‘saida.m’ function saida( b, h, ar ) disp( ‘Base: ‘); disp( b ); disp( ‘Altura: ‘); disp( h ); disp( ‘Area: ‘); disp( ar );% arquivo ‘entrada.m’ function [a,b] = entrada
a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);
Módulos (Funções)
6. MODULARIZAÇÃO
% arquivo ‘areatri.m’
function a = areatri( x, y ) a = 0.5 * x * y;
% modulo principal – arquivo ‘teste.m’ [b,h] = entrada; ar = areatri( b, h ); saida(b, h, ar); % arquivo ‘saida.m’ function saida( b, h, ar ) disp( ‘Base: ‘); disp( b ); disp( ‘Altura: ‘); disp( h ); disp( ‘Area: ‘); disp( ar );
% arquivo ‘entrada.m’ function [a,b] = entrada
a = input( ‘Entre com a base: ‘); b = input( ‘Entre com a altura: ‘);
Módulos (Funções)
6. MODULARIZAÇÃO
% arquivo ‘areatri.m’
function a = areatri( x, y ) a = 0.5 * x * y;
% modulo principal – arquivo ‘teste.m’ [b,h] = entrada; ar = areatri( b, h ); saida(b, h, ar); % arquivo ‘saida.m’ function saida( b, h, ar ) disp( ‘Base: ‘); disp( b ); disp( ‘Altura: ‘); disp( h ); disp( ‘Area: ‘); disp( ar );
Exercício 53 modificado: Criando funcoes para entrada e saida de dados
Perceber que os nomes das
variaveis nao precisam ser os
mesmos
nas
diferentes
funcoes.
Basta que elas estejam
corretamente
posicionadas
como argumentos e valores
de retorno
Exercício 54: Fazer um programa que leia 3 números e armazene-os em um vetor. Calcular um novo vetor gerado pelos fatoriais desses números. Imprimir ambos os vetores.
Fazer com um único script e com um programa modularizado