1. 1
ModularizaçãoModularização
Programação I
ALG
2/21
Modularização
A medida que abordamos problemas mais complexos, os
algoritmos também apresentarão uma maior
complexidade.
A complexidade não está relacionada a quantidade de
comandos existentes, e sim às diversas combinações
possíveis dos comandos à disposição.
Os comandos que possuímos são poucos, mas podemos realizar
diversas combinações com os mesmos.
A complexidade de um problema pode dificultar a
construção do algoritmo de sua solução
Devemos tentar dividi-lo em partes menores, resolvendo cada um
dos subproblemas separadamente.
3/21
Modularização de algoritmos
Consiste em dividir um algoritmo em etapas, fazendo
com que cada etapa seja parte da solução de um
problema maior.
Se um subproblema ainda parecer muito complexo, podemos
tentar dividi-lo em partes menores, para facilitar sua solução, e
assim sucessivamente.
“Dividir para conquistar”
Nós temos dificuldade de resolver problemas quando os
mesmos possuem uma grande quantidade de elementos
inseridos.
A modularização é a forma humilde de reconhecermos esta
dificuldade, mas ainda assim resolvermos o problema.
4/21
Modularização: funções e
procedimentos
Realizada através de sub-algoritmos, também
chamados de funções e procedimentos.
Todas as funções precisam ser chamadas para ser
executadas.
Ao encontrar uma chamada para uma função ou
procedimento, o fluxo de execução do programa desvia
para o local onde a função existe, e executa a mesma.
Ao terminar a execução da função, o fluxo de execução
retorna para o local onde a função foi chamada.
A execução do programa é reiniciada na linha seguinte à
linha onde a função foi acionada.
5/21
Modularização: fluxo
6/21
Modularização em VisuAlg
Todas as funções devem indicar um valor para quem
chamou a função. Caso não seja necessário retornar um
valor, deve-se usar um procedimento. Como a função
retorna um valor, devemos usar o comando retorne
seguido de uma variável ou constante para retornar
esse valor para quem chamou a função.
VisuAlg possui uma grande quantidade de funções
disponíveis para uso imediato pelo programador.
2. 2
7/21
Criando Funções
A criação de uma Função deve ser declarada no início
do programa. Este tipo de sub-algoritmo sempre
retornam um e apenas um valor ao algoritmo que lhe
chamou. Cada função tem associada ao seu valor de
retorno um tipo explícito. Da mesma maneira com que
os parâmetros são fixos para todas as chamada o
retorno também é fixo.
Algoritmo "<nome do algoritmo>"
var
<declaração de variáveis globais>
<definição da função>
inicio
< lista de comandos>
fimalgoritmo
8/21
Criando Funções
Identificador: Nome da função.
Passagem de parâmetros por referência: utiliza-se a construção VAR antes dos
identificadores para indicar a passagem por referência. Os identificadores são
separados por vírgula.
Parâmetros: Entre um mesmo tipo de dados são separados por vírgula. Entre
tipos de dados a separação é feita com ponto-e-vírgulas ';'.
Tipo de retorno da função: Real, Inteiro, Lógico ou Caractere.
Declaração de variáveis locais: idêntica a declaração de variáveis globais. As
variáveis declaradas localmente tem validade dentro do escopo da função.
Retorne: local onde é colocado a variável de retorno.
funcao <identificador> ([var]<parâmetros>) <tipo de retorno>
var
<declaração de variáveis locais>
inicio
<lista de comandos>
retorne <variável de retorno>
fimfuncao
9/21
Exemplo
algoritmo "funcao"
var
a , b , s : inteiro
funcao soma (x,y: inteiro): inteiro
inicio
retorne x + y
fimfuncao
inicio
escreva("Dig. o 1º número: ")
leia(a)
escreva("Dig. o 2º número: ")
leia(b)
s <- soma(a,b)
escrevaL("A soma é ", s)
fimalgoritmo
10/21
Criando Procedimentos
Identificador: Nome do procedimento.
Passagem de parâmetros por referência: utiliza-se a
construção VAR antes dos identificadores para indicar a
passagem por referência. Os identificadores são separados
por vírgula.
Parâmetros: Entre um mesmo tipo de dados são separados
por vírgula. Entre tipos de dados a separação é feita com
ponto-e-vírgulas ';'.
procedimento <identificador> ([var]<parâmetros>)
var
<declaração de variáveis locais>
inicio
<lista de comandos>
fimprocedimento
11/21
Exemplo
algoritmo “procedimento"
var
a , b : inteiro
procedimento escreve_soma (x,y: inteiro)
inicio
escrevaL(x + y)
fimprocedimento
inicio
escreva("Dig. o 1º número: ")
leia(a)
escreva("Dig. o 2º número: ")
leia(b)
escreva("A soma é ")
escreve_soma(a,b)
fimalgoritmo
12/21
Compartilhando variáveis entre
funções
Caso seja necessário acessar ou alterar o valor de uma
variável dentro de mais de uma função, devemos
declarar a variável dentro do algoritmo, mas fora de
qualquer função.
As variáveis criadas dentro de funções recebem o nome
de variáveis locais, e só existem dentro das funções
onde foram criadas.
As variáveis criadas dentro de um algoritmo podem ser
utilizadas em qualquer lugar. São chamadas de
variáveis globais.
3. 3
13/21
Exemplo
algoritmo “escopo"
var
a , b , s : inteiro
procedimento altera_s (x,y: inteiro)
inicio
s <- x + y
fimprocedimento
inicio
escreva("Dig. o 1º número: ")
leia(a)
escreva("Dig. o 2º número: ")
leia(b)
altera_s( a , b )
escreva("A soma é ", s)
fimalgoritmo
14/21
Exemplo
Exemplos
Numa loja de materiais de construção, um azulejo estampado
custa R$2,50. Faça um algoritmo para ler o comprimento e a
altura de uma parede (em metros), e depois escrever o valor a
ser gasto com a compra de azulejos. Considere que um metro
quadrado é formado por 9 azulejos.
Solução
A saída é o valor total gasto com azulejos.
O computador precisa saber o comprimento e a altura da
parede.
Quais são os cálculos necessários?
15/21
Exemplo
Solução (cont.)
Multiplicando a altura pelo comprimento, teremos a área da
parede (considerando uma parede retangular);
Multiplicando a área pelo número 9, teremos a quantidade de
azulejos necessários para preencher esta área;
Uma vez que um azulejo custa R$2,50 (um valor constante),
podemos multiplicar a quantidade de azulejos por 2,5 para
chegar ao total gasto.
16/21
Exemplo
Solução sem uso de modularização:
Variáveis
gasto_azulejos, comprimento, altura, area, azulejos: real;
Início
escrever “Digite o comprimento em metros: ”;
ler comprimento;
escrever “Digite a altura em metros”;
ler altura;
area = comprimento * altura;
azulejos = area * 9;
gasto_azulejos = azulejos * 2.5;
escrever “Quantidade de azulejos necessária: “, azulejos;
escrever “Valor gasto com azulejos: R$ “, gasto_azulejos;
Fim
17/21
Exemplo
Solução (cont.)
Pensando em termos de algoritmo, podemos imaginar três
etapas:
Variáveis
? ? ?;
Início
“Obter as dimensões da parede e calcular a área”;
“Calcular o valor gasto com azulejos”;
“Escrever o resultado calculado”;
Fim
18/21
Exemplo
Solução (cont.)
Detalhando o cálculo do valor gasto.
Variáveis
gasto_azulejos, comprimento, altura, area, qtd_azulejos: real;
Início
LER_DIMENSOES_E_OBTER_AREA;
CALCULAR_VALOR_GASTO;
ESCREVER_GASTO;
Fim.
Módulo CALCULAR_VALOR_GASTO;
[[...]];
Módulo LER_DIMENSOES_E_OBTER_AREA;
[[...]];
Módulo ESCREVER_GASTO;
[[...]];
4. 4
19/21
Vantagens do uso de funções
Facilita a resolução de problemas complexos;
Viabiliza a divisão do trabalho entre a equipe de
desenvolvimento (cada programador ou grupo de
programadores pega um pedaço do problema para
resolver e trabalha de forma independente);
Desenvolvimento mais rápido de programas (várias
funções podem ser escritas em paralelo pelos membros
da equipe).
20/21
Vantagens do uso de funções
Incentiva a divisão de responsabilidades;
Reuso de funções desenvolvidas em projetos anteriores
ou obtidas externamente diminui o tempo de
desenvolvimento de novos programas;
Aumento de qualidade pelo uso de funções cujo
funcionamento foi validado em projetos anteriores.
21/21
Exercícios
Escreva uma função que recebe uma quantidade
qualquer de valores e retorna a média desses valores.
Escreva uma função que receba um número inteiro
positivo e retorne o fatorial desse número.
A fábrica de refrigerantes Meia-Cola vende seu produto
em três formatos: lata de 350ml, garrafa de 600ml e
garrafa de 2 litros. Se um comerciante compra uma
determinada quantidade de cada formato, faça um
programa para calcular quantos litros de refrigerante ele
comprou. Resolva o problema utilizando funções.
DÚVIDAS ?DÚVIDAS ?
Programação I
ALG