Anda di halaman 1dari 8

Decomposição de Problemas

Algoritmo e Programação
Matemática  Complexidade = VARIEDADE:
 Um problema matemático é tão mais complexo quanto
maior for a quantidade de variáveis a serem tratadas.
Modularização de Algoritmos  Um problema algorítmico é tão mais complexo quanto
Renato Dourado Maia maior for a quantidade de situações diferentes que
precisam ser tratadas.
Instituto de Ciências Agrárias
Universidade Federal de Minas Gerais  Como reduzir a complexidade?
 Reduzindo-se a variedade!
 Como reduzir a variedade?

26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 2/32

Decomposição de Problemas Modularização de Algoritmos


 A variedade pode ser reduzida por meio da divisão de  A resolução de problemas complexos em computação
problemas maiores em problemas menores. geralmente leva a algoritmos longos, que são difíceis de
analisar, verificar e alterar.
 A divisão precisa acontecer de forma metódica e
sistemática:  Tal como acabamos de ver, uma abordagem eficiente para
auxiliar na resolução de problemas complexos é a
1. Divida o problema em suas partes principais.
decomposição: dividir para conquistar!
2. Analise a divisão obtida para garantir coerência.
 Essa abordagem é denominada top-down (ou refinamentos
3. Se alguma parte ainda estiver complexa, voltar para 1. sucessivos): parte-se do todo, dividindo-o em partes
4. Analise o resultado para garantir entendimento e menores.
coerência.  Várias áreas utilizam essa abordagem: um exemplo é a
fabricação de um carro numa indústria automobilística.
26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 3/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 4/32
Modularização de Algoritmos Módulos
 Vantagens da modularização:  Módulos são semelhantes a um programa, possuindo, em
geral, entrada, processamento e saída. As entradas e
 Clareza e legibilidade do algoritmo.
saídas são os meios pelos quais os módulos interagem entre
 Construção independente. si.
 Testes individualizados.  Para que um módulo possa ser executado, ele precisa ser
 Simplificação da manutenção. ativado ou chamado por outro módulo – o módulo
ativador. Isso ocorre com todos os módulos pertencentes a
 Reaproveitamento de algoritmos.
um algoritmo, exceto com o módulo principal.
 A abordagem top-down aplicada em algoritmos consiste em
dividir um algoritmo em subalgoritmos/subprogramas
 O módulo principal é um módulo que todos os algoritmos
menores que executam partes da resolução do problema. contêm e sempre é executado no início da execução do
algoritmo.
 Essa técnica é chamada de modularização de algoritmos.
26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 5/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 6/32

Fluxo de Execução Fluxo de Execução


Algoritmo chamada
 O fluxo de execução de um algoritmo modularizado módulo Primeiro
início
começa pelo módulo principal e é desviado para qualquer
outro módulo que seja ativado pelo módulo principal.
 Dentro de cada módulo podem ocorrer chamadas a outros Primeiro retorno fimmódulo
módulos do mesmo algoritmo, e cada módulo chamado é
executado do início ao fim.
chamada
 Após o término da execução do módulo, a execução do Segundo módulo Segundo
algoritmo continua a partir do ponto em que o módulo foi
chamado – o ponto de ativação. Esse processo é chamado
de retorno. retorno
fim fimmódulo

26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 7/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 8/32
Tipos de Módulos Módulos
 Os módulos podem ser classificados quanto ao seu objetivo  Todo módulo possui um cabeçalho, que corresponde à sua
principal em dois contextos: declaração.
 Contexto de Ação: quando o módulo simplesmente  O cabeçalho também é denominado de protótipo ou
executa coisas. No caso do VisuAlg, esse tipo de módulo interface do módulo.
é um procedimento.  Sintaxe do cabeçalho para um procedimento:
● Contexto de Resultado: quando o módulo calcula coisas
Procedimento <nome-de-procedimento> (<lista de
e retorna um resultado. No caso do VisuAlg, esse tipo de
parâmetros>)
módulo é uma função.
Inicio

FimProcedimento
26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 9/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 10/32

Módulos Procedimento
 Sintaxe do cabeçalho para uma função:  Exemplo (simples) de utilização de procedimento:
Funcao <nome-de-função> (<lista de parâmetros>) :  Arquivo: ExemploProcedimento_1.alg
<tipo do retorno>  Vamos analisar alguns detalhes e verificar o fluxo de
Inicio execução por meio da execução passo a passo...

FimFuncao

É provável que as coisas estejam confusas por ora...


Isso é natural neste momento! Calma! :)

26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 11/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 12/32
Função Função
 Vimos que uma função é um módulo que retorna um  Exemplo de utilização de função:
resultado. Esse retorno é feito por meio do comando ● Arquivo: ExemploFuncao_1.alg
retorne, cuja sintaxe é:
● Vamos analisar alguns detalhes e verificar o fluxo de
retorne <valor> execução por meio da execução passo a passo... O programa
 O valor retornado pela função deve ser recebido e tratado permite identificar se um número é par ou ímpar, ou se
dentro do módulo ativador, podendo ser armazenado em representa um ano bissexto (a escolha é feita pelo usuário).
uma variável e utilizado normalmente. Caso a opção seja inválida, é apresentada uma mensagem.

26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 13/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 14/32

Escopo de Variáveis Escopo de Variáveis


 Quando se utiliza a modularização de algoritmos, o ideal é  A principal vantagem das variáveis globais é a sua fácil
que os módulos sejam tão independentes quanto possível. utilização, e a principal desvantagem é a forte
 Para isso, cada módulo deve possuir as suas próprias dependência causada entre os módulos:
variáveis, de modo que a dependência entre os módulos  A alteração de uma variável global será enxergada por
fique restrita à interface (cabeçalho). todos os módulos, o que pode causar efeitos colaterais
não previstos pelo programador em outros módulos.
 Ao contexto em que as variáveis são definidas dá-se o nome
de escopo, que pode ser local ou global. ● Esses efeitos colaterais tornam mais difícil a alteração
(manutenção) do algoritmo/programa, uma vez que exige
 Variáveis globais são variáveis declaradas antes de todos os uma análise detalhada de todas as ocorrências de
módulos (início do algoritmo) e que podem ser manipuladas variáveis globais para que se verifique se uma alteração
por qualquer módulo. não causará nenhum efeito indesejado.

26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 15/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 16/32
Escopo de Variáveis Escopo de Variáveis
 Variáveis locais são declaradas no início do módulo ao qual  Exemplo de utilização de variáveis locais e globais:
pertencem, e somente podem ser acessadas dentro desse  Arquivo: ExemploEscopo_1.alg
módulo.
 Vamos utilizar a execução passo a passo para analisar os
 A principal vantagem das variáveis locais é a obtenção de valores das variáveis durante a execução do algoritmo...
uma maior independência entre os módulos:
 A alteração de uma variável local afetará de forma direta O VisuAlg não implementa variáveis locais no
apenas o módulo ao qual ela pertence, facilitando a a módulo principal!
manutenção ao algoritmo/programa.
 O tempo de vida das variáveis locais é limitado ao
tempo de execução do módulo ao qual elas pertencem,
pois elas são excluídas ao fim de sua execução.
26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 17/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 18/32

Para Brincar em Casa... Passagem de Parâmetros


 Algoritmo que lê um número inteiro e determina se ele é Procedimento <nome-de-procedimento> (<lista de
primo (uma função é responsável por determinar se o parâmetros>)
número inteiro é primo): Inicio
 Arquivo: ExemploPrimo_1.alg
FimProcedimento
 Esse fica para vocês analisarem em casa! :)
Funcao <nome-de-função> (<lista de parâmetros>) :
<tipo do retorno>
Inicio

FimFuncao
Lista de parâmetros?
26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 19/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 20/32
Passagem de Parâmetros Passagem de Parâmetros
 Na função matemática f(x, y) = xy, x e y são parâmetros de  Dentro do módulo ativado, os parâmetros funcionam como
entrada. Quando se escreve f(3, 2), indica-se que o variáveis locais.
parâmetro de entrada x será substituído pelo argumento 3, e  A grande vantagem da passagem de parâmetros é a
o parâmetro de entrada y pelo argumento 9:
generalização dos módulos.
 f(3, 2) = 32 = 9 ≠ f(2, 3) = 23  Existem duas formas de passagem de parâmetros:
 Um módulo pode receber parâmetros de entrada! Esses  Passagem por valor.
parâmetros formam a lista de parâmetros mencionada nas
sintaxes de funções e procedimentos.  Passagem por referência.
 Esses parâmetros, passados pelo módulo ativador, são as
entradas do módulo chamado, e são também chamados de
argumentos.
26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 21/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 22/32

Passagem de Parâmetros por Valor Passagem de Parâmetros por Valor


 Na passagem de parâmetros por valor, uma cópia de cada  Sintaxe da passagem de parâmetros por valor:
variável é feita na ativação do módulo.
Procedimento <nome-de-procedimento> (<lista de
 Nesse processo, os valores dos argumentos são atribuídos identificadores> : tipo; <lista de identificadores> : tipo;
aos parâmetros de entrada do módulo ativado. …; <lista de identificadores> : tipo)
 Tanto as variáveis do módulo ativado (parâmetros) quanto Funcao <nome-de-funcao> (<lista de identificadores> :
as variáveis do módulo ativador (argumentos) permanecem tipo; <lista de identificadores> : tipo; …; <lista de
armazenadas na memória. identificadores> : tipo) : <tipo do retorno>
 As alterações feitas nas variáveis do módulo ativado não  Exemplos de cabeçalho:
refletem nas variáveis do módulo ativador.  Media(n_1: Inteiro; n_2: Inteiro; n_3 : Inteiro) : Real
 Media(n_1, n_2, n_3 : Inteiro) : Real
26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 23/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 24/32
Passagem de Parâmetros por Valor Passagem de Parâmetros
 Exemplos de ativação:  A passagem de parâmetros (por valor ou por referência)
deve respeitar os tipos da declaração do módulo, e a ordem
Media(6, 8, 10)
dos argumentos passados, tal como na função matemática
v_1 <- 6 f(x, y), é importante:
v_2 <- 8 Media(n_1, n_2, n_3 : Inteiro) : Real
v_3 <- 10 // n_1 ← v_1, n_2 ← v_2, n_3 ← v_3
Media(v_1, v_2, v_3) Media(v_1, v_2, v_3)
// n_1 ← v_3, n_2 ← v_2, n_3 ← v_1
Media(v_3, v_2, v_1)

26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 25/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 26/32

Passagem de Parâmetros por Valor Passagem de Parâmetros por Referência


 Exemplo de passagem de parâmetros por valor:  Na passagem de parâmetros por referência, o endereço da
variável, e não uma cópia do seu valor, é passado na
 Arquivo: ExemploParamValor.alg
ativação do módulo.
 Vamos analisar alguns detalhes e verificar o fluxo de
execução por meio da execução passo a passo (de novo)... O
 Assim, os valores manipulados no módulo ativado
programa calcula a média das notas de quatro avaliações de (parâmetros) estarão no mesmo espaço de memória dos
um aluno e determina se ele está aprovado (média maior ou valores manipulados pelo módulo ativador (argumentos).
igual a sete) ou reprovado (média menor do que sete),  As alterações feitas na variáveis do módulo ativado
utilizando um módulo (função) que recebe parâmetros por refletem nas variáveis do módulo ativador, de modo que a
valor. passagem de parâmetros por referência pode ser um
mecanismo de entrada ou de saída. Vocês conseguem
enxergar isso?

26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 27/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 28/32
Passagem de Parâmetros por Referência Passagem de Parâmetros por Referência
 Sintaxe da passagem de parâmetros por referência:  Exemplos de ativação:
Procedimento <nome-de-procedimento> (<Var lista de Media(6, 8, 10) // Ôpa! Não pode! Por quê?
identificadores> : tipo; <Var lista de identificadores> : v_1 <- 6
tipo; …; < Var lista de identificadores> : tipo)
v_2 <- 8
Funcao <nome-de-funcao> (<Var lista de
identificadores> : tipo; <Var lista de identificadores> : v_3 <- 10
tipo; …; <Var lista de identificadores> : tipo) : <tipo do Media(v_1, v_2, v_3)
retorno>
 Exemplo de cabeçalho: A passagem de parâmetros por referência
implica na utilização de variáveis. Por quê?
 Media(Var n_1, n_2, n_3 : Inteiro) : Real

26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 29/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 30/32

Passagem de Parâmetros por Referência Passagem de Parâmetros


 Exemplo de passagem de parâmetros por referência:  Vamos brincar com os exemplos, para verificarmos algumas
diferenças entre as passagens de parâmetros por valor e por
 Arquivo: ExemploParamValor.alg
referência...
 Vamos analisar alguns detalhes e verificar o fluxo de
execução por meio da execução passo a passo (de novo)... O
 Importante: encerramos o conteúdo da primeira avaliação!
programa calcula a média das notas de quatro avaliações de
um aluno e determina se ele está aprovado (média maior ou
igual a sete) ou reprovado (média menor do que sete),
utilizando um módulo (função) que recebe parâmetros por
referência.
 Reflitam sobre as diferenças em relação à versão que
recebe parâmetros por valor!
26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 31/32 26/03/11 Algoritmo e Programação Matemática – Renato Dourado Maia 32/32

Anda mungkin juga menyukai