Вы находитесь на странице: 1из 22

Módulos

Abordagem top-down
Modularizando algoritmos
Retorno de valores
Escopo de variáveis
Passagem de parâmetros
Introduziremos programação modular
(programação estruturada)

Vantagens e funcionamento dos módulos

Retorno de valores
Passagens de parâmetros
5.1 Abordagem top-down
Conforme avançamos, aparecem problemas mais
complexos e longos. Isto faz com que a resolução destes
se torne cada vez mais difícil.

Abordagem com eficiência comprovada é a divisão de


tarefas complexas e longas em atividades mais simples e
curtas.

Essa abordagem é chamada top-down, pois se parte do


topo, divide-se em vários componentes menores e repete-
se esse processo até o menor componente.
Uma das vantagens da divisão das atividades é que muitas
vezes a solução para um problema menor pode ser
reaproveitada na resolução de diversos problemas maiores.

Um exemplo: Cálculo da média aritmética de todas as


turmas do ensino médio de uma cidade.
1. Cálculo da média aritmética de uma turma.
2. Cálculo da média aritmética de uma escola
3. Cálculo da média aritmética de todas as escolas da
cidade.
5.2 Modularizando Algoritmos

A modularização de um algoritmo/programa é uma forma


de dividir as tarefas em subalgorimos/subprogramas. E
cada um desses módulos cuida de uma parte separada do
problema.

Cada módulo funciona semelhante a um programa, tendo,


em geral, entrada, processamento e saída.

As entradas e saídas dos módulos são os meios pelos


quais os módulos interagem entre si.
No exemplo modulos1.c a entrada é salarioBruto e a
Saída é salarioLiquido.
Para que um módulo possa ser executado, precisa ser ativado
ou chamado por um outro módulo.

Isso ocorre com todos os módulos do programa, com exceção


do programa principal.É sempre por esse módulo que o
algoritmo inicia sua execução.
O fluxo de execução de um algoritmo modularizado começa
pelo módulo principal e é desviado para qualquer outro
módulo que seja ativado pelo módulo principal.

Dentro desse módulo, pode haver chamada para outros


módulos.Cada módulo que é chamado é executado do inicio
ao fim.
Após seu término, o algoritmo prossegue do ponto em que o
módulo foi chamado, ou seja, do ponto da ativação.
Os módulos ativados geralmente são escritos antes dos
módulos ativadores.

Na linguagem C, é necessário a declaração das


interfaces, chamadas de protótipos dos módulos no inicio
do programa.

Modulo1.c
#include <stdio.h>
#include <stdlib.h>

float calcularSalario (float salarioBruto);


int main(void)
{
float salarioLiquido;
float salarioBruto;

int i,n;
i=0;
printf("\n Fazer cálculo do salário de quantos funcionários ? \n");
scanf("%d",&n);
while ( i < n) {

printf("\nInforme o valor do salario bruto R$: \n");


scanf("%f",&salarioBruto);

salarioLiquido = calcularSalario (salarioBruto);

printf("\nO valor do salario liquido = R$ %f \n", salarioLiquido);

i++;
}
getch();
return 0;
}
float calcularSalario (float salarioBruto)
{
float total;
if (salarioBruto < 900) {
float total = salarioBruto - salarioBruto*5/100;
return total;}

if (salarioBruto >= 900 && salarioBruto <= 1800) {


float total = salarioBruto - salarioBruto*10/100;
return total;}

if (salarioBruto > 1800 && salarioBruto <= 2800) {


float total = salarioBruto - salarioBruto*15/100;
return total;}

if (salarioBruto >2800) {
float total = salarioBruto - salarioBruto*20/100;
return total;}
}
5.3 Retorno de valores

Os módulos podem retornar(ou não) valores.


modulo2.c exemplo que não retorna valores

Esta característica pode ser extremamente útil e amplia


bastante as possibilidades de utilização dos módulos.

O módulo principal, o primeiro a ser executado, nunca


retorna valores.

Em C, independentemente do retorno ou não de valores,


todos os módulos são chamados de funções.
O retorno de valores é a saída do módulo.
As respostas são valores pertencentes aos tipos existentes
na linguagem de programação.

O retorno do valor do módulo ativado precisa ser


recebido e tratado dentro do módulo ativador.

Normalmente, esse valor é armazenado em uma variável,


mas também pode ser usado em comparações, escritas,
etc...

A rigor, o valor retornado por um módulo pode ser


tratado como uma variável no módulo ativador.

O retorno do valor é feito pelo comando: return valor;


A execução do comando de retorno muda o fluxo do
algoritmo, direcionando-o para o fim do módulo.

Ou seja, após a execução do retorno, o módulo é encerrado


e o fluxo do algoritmo volta para o módulo ativador.

Veja um exemplo, a seguir. (modulo1.c)


Escreva uma função na linguagem C que calcule o salário
líquido de um funcionário. O programa recebe através
do teclado o salário bruto de um determinado
funcionário, caso este seja inferior a R$ 900,00 é
descontado 5% em impostos, se o salário variar de R$
900,00 até R$1.800,00 é descontado 10% em impostos,
se esse variar de R$1.800,00 a R$2.800,00 é
descontado 15%, e se for superior a R$2.800,00 é
descontado 20% em impostos. Ao final a função deve
exibir o salário líquido do funcionário. Teste essa função
em uma função main(), que ler o salário de N
funcionários.
Faça um programa, na linguagem C, que terá quatro
funções: uma para calcular o fatorial de um número
fornecido pelo usuário. Outro para escrever a tabuada
de multiplicação, sendo que o número da tabuada será
fornecida pelo usuário. Outra para imprimir os
valores do código ASCII e a última para calcular a
média das notas dos alunos de uma turma, onde o
número de alunos e as notas são fornecidas pelo
usuário.
A função main possui um menu que fica lendo
caracteres e se o caractere for F chama a função do
fatorial, se for T chama a função da tabuada, se for A
chama a função do código ASCII, se for M chama a
função da média e se for qualquer outro caractere o
programa é encerrado. (modulo3.c)
5.4 Escopo de variáveis

Módulos podem ser considerados subprogramas. A ideia é


que eles sejam o mais independente entre si.
Nesse sentido, é interessante que cada módulo possua
suas próprias variáveis, ficando a dependência dos
módulos restrita basicamente à interface (cabeçalho) do
módulo.

Poderemos ter duas situações:

Variáveis globais.
Variáveis locas.
5.4.1 Variáveis globais
São declaradas antes de todos os módulos e podem ser
manipuladas em qualquer outro módulo.

O inconveniente do uso de variáveis globais é a


dependência que causa entre os módulos.
Como a variável pode ser acessada em qualquer módulo,
uma alteração no valor dela será vista em todos os outros
módulos.

Na manutenção de programas uma alteração em uma


variável global pode ter efeitos colaterais não previstos
pelo programador, causando resultados indesejáveis
Usar variáveis globais não é boa prática de
programação.
5.4.2 Variáveis locais

As variáveis locais são definidas no início do módulo ao


qual pertencem.
Só podem ser acessadas dentro do módulo em que foram
declaradas.

O escopo da variável local prevalece sobre o escopo da


variável global.

O tempo de vida da variável local começa no início do


módulo em que são definidas e terminam no final do
módulo. Assim, podemos ter variáveis locais com o mesmo
nome em módulos diferentes.
5.5 Passagem de parâmetros

Um módulo pode receber valores que utilizará.


Esses valores são parâmetros passados pelo módulo
ativador e são também chamados de argumentos.

Podem ser: constantes, números, letras ou variáveis.

Podem ser de dois tipos: por valor ou por referência.


5.5.1 Passagem de parâmetro por valor

Uma cópia da variável é feita durante a ativação do


módulo.

Possíveis alterações na variável que sejam feitas no


módulo chamado não serão refletidas no módulo ativador.

Na ativação do módulo, os argumentos devem ser


passados conforme os parâmetros foram declarados no
cabeçalho do módulo, na mesma ordem e obedecendo o
mesmo tipo.
Exemplo de passagem por valor: modulo4.c, que possui duas
funções:
1. float somatoria(int n), que retorna resultado do somatório a
seguir, sendo n o parâmetro de entrada do módulo:5*i*i+ 2*i
+8, com i variando de 1 a n.
2. float pi (int n)
5.5.2 Passagem de parâmetros por referência

O endereço da variável e não uma cópia do valor é passado


durante a ativação do módulo.

Possíveis alterações na variável que sejam feitas no


módulo chamado serão refletidas no módulo ativador.

Deve ser usado quando mais de um valor deve ser


retornado pelo módulo.

Exemplo: modulo5.c e modulo6.c


Lista de exercícios

Exercício 4.12, Exercício 4.13 e Exercício 4.14, pagina,


pagina 39 do livro: linguagem C do Silvio do Lago
Pereira

Вам также может понравиться