UNIVERSIDADE FEDERAL DE
UBERLÂNDIA
ENGENHARIA CIVIL
PROGRAMAÇÃO ESTRUTURADA
(MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
Fabíola Gonçalves
ROTEIRO
Introdução;
 Escopo das variáveis;
 Passagem de parâmetro;
 Argumentos;
 Função.

2
MODULARIZAÇÃO
INTRODUÇÃO

fundamental
da
programação
Modular a resolução do problema através da sua
divisão em subproblemas menores e mais simples;
 Neste processo, cada subproblema pode ser analisado de
forma individual e independente dos demais.


Objetivo:


Facilitar o trabalho com problemas complexos;
Permitir a reutilização de módulos.

Com a modularização de um programa, as partes que o
compõem podem ser desenvolvidas por diferentes equipes.
3
Característica
estruturada:
MODULARIZAÇÃO
INTRODUÇÃO
Refinamentos Sucessivos (top-down):

Divisão do problema inicial em subproblemas, e estes
em partes ainda menores, sucessivamente, até que
cada parte seja descrita através de um algoritmo
claro e bem-definido.

Um algoritmo que resolve um determinado subproblema é
denominado subalgoritmo.
4

MODULARIZAÇÃO
SUBALGORITMOS (MÓDULOS)






Favorecendo a estruturação do programa;
Facilitando a correção do programa;
Facilitando a modificação do programa;
Melhorando a legibilidade do programa;
Divisão do problema a ser resolvido em partes
(modularização).
5
A subprogramação é uma ferramenta que contribui
com a tarefa de programar:
MODULARIZAÇÃO
SUBALGORITMOS (MÓDULOS)
Por convenção, um subalgoritmo deve ser declarado
acima dos módulos que o chamam;
 Todo subalgoritmo tem por objetivo a resolução de
um determinado subproblema;
 Portanto, mantém as mesmas características de um
algoritmo comum:

6
Pode ter dados de entrada;
 Dados de saída; e
 Conter qualquer tipo de comando aceito por um algoritmo.

SUBPROGRAMAÇÃO


As linguagens de programação oferecem algum
tipo de suporte à subprogramação.
Exemplos:Algol: bloco;






FORTRAN: subrotina;
Modula: co-rotinas;
ADA: tarefas;
C: funções;
Visualg: procedimentos e funções.
Pascal: procedimentos e funções.
SUBPROGRAMAÇÃO
 Procedimentos
Procedimento é uma forma de criar um sub-programa;
Quando um determinado conjunto de instruções tiver
que ser repetido dentro da solução de um problema, é
conveniente colocá-lo dentro de um procedimento;
 Para se criar um procedimento é necessário: Um
identificador (o nome do procedimento);
 Uma
lista de parâmetros (que possibilitam a
comunicação entre o programa principal e o
procedimento);
 As ações a serem executadas (que formam o corpo do
procedimento).

8

SUBPROGRAMAÇÃO
 Funções
9
Função também é uma forma de criar um subprograma;
 A função deve obrigatoriamente retornar um
valor processado através do seu nome identificador;


Uma função deve ser ativada em um contexto de
expressão.
SUBALGORITMOS (MÓDULOS)
ESCOPO DAS VARIÁVEIS
Por serem tratados de forma independente dos
demais módulos, cada subalgoritmo só pode
manipular variáveis/constantes:

Globais: declaradas no início do algoritmo principal ;
Fora de todas as funções;
 Elas são conhecidas e podem ser alteradas por todas as
funções do programa.


Locais: declaradas no próprio subalgoritmo;

Só têm validade dentro do bloco no qual são declaradas.
10

SUBALGORITMOS (MÓDULOS)
PASSAGEM DE PARÂMETRO




apenas fornecer um valor para que a subrotina
realize um processamento;
apenas retornar um valor processado pela subrotina;
fornecer um valor para processamento pela
subrotina, e também ser responsável pelo retorno de
um valor processado.
11
A passagem de parâmetros é o meio de comunicação
entre as unidades de um programa, pode acontecer com
um dos seguintes propósitos:
SUBALGORITMOS (MÓDULOS)
PASSAGEM DE PARÂMETRO


formas
Explícita: quando
argumentos.

de
interagir
com
12
Existem duas
subalgoritmos:
a
troca
é
feita
através
de
Existem 2 modos de passar argumentos/parâmetros para um
subalgoritmo:
 Por valor: o argumento será uma variável independente,
ou seja, ocupará um espaço na memória durante a
execução do módulo. Qualquer alteração no argumento,
não afeta a variável.
 Por referência: o argumento não ocupará espaço de
memória, pois utilizará o espaço já alocado pela variável.
Qualquer alteração realizada no subalgoritmo afetará a
variável.
SUBALGORITMOS (MÓDULOS)
PASSAGEM DE PARÂMETRO
Existem duas
subalgoritmos:

formas
de
interagir
com
Implícita: quando a troca é feita pela utilização de
variáveis globais.

Esta forma funciona de modo similar à passagem de
argumentos por referência, pois não necessita de nova
alocação de memória e qualquer alteração realizada durante
a execução do módulo afeta o conteúdo da variável para os
demais módulos.
13

PASSAGEM DE PARÂMETROS



Passagem por valor: Apenas o valor é transferido.
Então, as alterações feitas nos parâmetros formais (da
subrotina) não alteram os reais (unidade ativadora).
Por referência: O endereço do parâmetro real é
transferido. Então, as alterações nos parâmetros formais
da subrotina na verdade estão sendo feitas sobre os
parâmetros reais.
Declaração
PASSAGEM DE PARÂMETROS POR VALOR
 Quando




e porque passagem por valor:
apenas fornecer um valor à subrotina para que ela
realize um determinado processamento;
utilizados somente para “valores de entrada”;
protegem automaticamente o parâmetro real;
deve ser explorado sempre que possível.
PASSAGEM DE PARÂMETROS POR
REFERÊNCIA
 Quando

e porque passagem por referência:
Quando e porque passagem por :quando a unidade
ativada (subrotina) necessitar retornar um valor a ser
utilizado pela unidade ativadora;
 seu uso deve ser cuidadoso.
SUBALGORITMOS (MÓDULOS)
ARGUMENTOS

real expoente( real BASE, int FATOR)

resultado ← expoente(NRO, EXP);
17
Na escrita de um subalgoritmo, os dados
necessários para a resolução do subproblema
podem ser informados na declaração do módulo.
 Ex:

SUBALGORITMOS (MÓDULOS)
FUNÇÕES
 Sintaxe:
inicio
var ← nome_funcao(var1, var2, ... , varN);
fim
18
tipo_retornado nome_funcao (tipo arg1, tipo arg2, ... ,
tipo argN)
<declaração de variáveis/constantes locais>
inicio
<bloco de comandos>
fim
fim-funcao
SUBPROGRAMA


Um subprograma pode ser ativado em qualquer
parte do programa (em algumas linguagens
somente depois de definido);
Sua ativação se dá através do uso de seu
identificador como uma instrução;
SUBALGORITMOS (MÓDULOS)
FUNÇÕES

Exemplo:
inicio
int num;
escreva("Entre com um numero: ");
leia (num);
num <- Square(num);
escreva("O seu quadrado vale: ", num);
fim
20
int Square (int a)
inicio
return(a*a);
fim
SUBPROGRAMAÇÃO

Exemplo de aplicação: Fazer um algoritmo para
calcular a combinação (análise combinatória) de N
elementos tomados P a P. Sabe-se que isto é
possível através da seguinte expressão:
SUBPROGRAMAÇÃO


A solução deste problema pelos métodos vistos até agora (sem
o uso da subprogramação) teria N e P como argumentos de
entrada e C como argumento de saída;
Seriam necessários os seguintes passos:
 Calcular o fatorial de N (armazenar numa variável, ex: FatN);
 Calcular o fatorial de P (armazenar numa segunda variável,
ex: FatP);
 Calcular o fatorial de N-P (armazenar numa terceira variável,
ex:FatNP);
 E finalmente calcular a expressão: FatN/(FatP*FatNP).
SUBPROGRAMAÇÃO


Note que nesta solução teríamos que descrever várias
vezes uma mesma sequência de ações que são utilizadas
para o cálculo do fatorial de um número;
Esta sequência tem um comportamento padrão.
Suponha que tivéssemos à disposição um
procedimento genérico, chamado FAT, para
calcular o fatorial de um número qualquer:
 .....

SUBPROGRAMAÇÃO
Uma subrotina é um subprograma com variáveis
e comandos próprios e que, para ser executada,
precisa ser chamada pelo programa principal.
 Existem dois tipos de subrotinas:

Procedimento (procedure)
 Função (function)


Diferença entre elas:
A função retorna um valor
 O procedimento não retorna valor

EXERCÍCIOS
Crie um programa que leia três números. Para
cada número, imprima o dobro. Use uma função
que recebe como parâmetro um número inteiro e
devolve o seu dobro. O valor calculado deve ser
impresso na função principal.
2.
Faça um programa receba dois números e execute
as seguintes funções:

Verificar se o número digitado é positivo ou negativo.
Sendo que o valor de retorno será 1 se positivo, 0 se
negativo ou -1 se for igual a 0.

Receber dois números inteiros positivos por parâmetro e
retorne a soma dos N números inteiros existentes entre
eles.
26
1.
EXERCÍCIOS
Faça uma função que receba por parâmetro dois valores
X e Z. Calcule e retorne o resultado de X^Z para o
programa principal. Atenção não utilize nenhuma
função pronta de exponenciação.
4.
Crie um programa que receba a nota de 10 alunos obtida
ao longo do semestre (foram realizadas quatro
avaliações). Elabore funções para:
Calcular a média aritmética de todos os alunos;
Indicar o aluno que deverá fazer recuperação, ou seja, aqueles
com média inferior a 6.
 Dica:





Opção 1 – ler as 10 notas dentro a função de média (sejam em variáveis
ou vetor);
Opção 2 – criar 10 variáveis no programa principal e passar como
argumento;
Opção 3 – ler um vetor de tamanho 10 e passar o vetor como parâmetro
para a função.
27
3.
REFERÊNCIAS

Martins, L. G. A., Silva, A. J. Introdução à
Algoritmos. Apostila da FACOM-UFU.
28
Download

Modularizção - Facom - Universidade Federal de Uberlândia