• Nenhum resultado encontrado

exatasfepi.com.br CAII Modularização André Luís Duarte "E quem não toma a sua cruz, e não segue após mim, não é digno de mim.

N/A
N/A
Protected

Academic year: 2021

Share "exatasfepi.com.br CAII Modularização André Luís Duarte "E quem não toma a sua cruz, e não segue após mim, não é digno de mim."

Copied!
69
0
0

Texto

(1)

CAII

Modularização

André Luís Duarte

"E quem não toma a sua cruz, e não segue após mim, não é digno de mim." Mateus 10:38

(2)

Modularizando Algoritmos

 Decomposição de problemas

 Módulos ou subalgoritmos

 Parametrização

(3)

Decomposição de Problemas

 Visa reduzir a complexidade de um

problema

 Complexidade é sinônimo de variedade,

ou a quantidade de situações que um problema pode apresentar

 Permite focar a atenção em problemas

(4)

Decomposição de Problemas

 Ações:

Dividir o problema em suas partes principais Analisar a divisão para garantir a coerência Se alguma parte permanece complexa,

decompô-la também

Analisar o resultado novamente

 Outros nomes: refinamento sucessivo ou

(5)

Representação Hierárquica

Problema

Entrada Processamento

Cálculo 1 ... Cálculo n

(6)

Módulos ou Subprogramas

 Declaração

Para modularizar nossos algoritmos temos que definir uma sintaxe para isso

módulo <Identificador>

<declaração de variáveis internas>; <comandos internos>;

(7)

Módulos ou Subprogramas

 Ativação

Um módulo é ativado, quando seu

identificador é usado em um ponto do algoritmo

módulo fSoma

inteiro : n1,n2,soma; soma <- n1 + n2

(8)

Exemplo 1

inicio inteiro : n1, n2, soma; módulo fSoma soma <- n1 + n2; fimmódulo; escreva("Digite n1:"); leia(n1); escreva("Digite n2"); leia(n2); fSoma escreva("soma = ", soma);

(9)

Cuidado

inicio Inteiro : n1, n2, soma; módulo soma soma <- n1 + n2; fimmódulo; escreva("Digite n1:"); leia(n1); escreva("Digite n2"); leia(n2); soma; escreva("soma = ", soma); fim;;

(10)

Exemplo 2

inicio real : a,b,c,delta,x1,x2; ... módulo CalculaDelta delta <- b^2 – 4*a*c; fimmódulo; ... CalculaDelta; ...

(11)

Escopo de Variáveis

 Variáveis globais

Variáveis declaradas no inicio do algoritmo principal são visíveis por todos os módulos Podem ser manipuladas (leitura e escrita)

pelos módulos declarados no algoritmo São sobrepostas pelas variáveis locais

(12)

Escopo de Variáveis

 Variáveis locais

Variáveis declaradas internamente dentro do módulo

Podem ser manipuladas (leitura e escrita) somente pelo módulo que a declarou ou por eventuais módulos internos à este

Sobrepõem as variáveis globais quando possuírem o mesmo nome

(13)

Visibilidade da Variável

 É o seu escopo ou abrangência

 Denota o conhecimento e acesso por

parte dos módulos integrantes

 É relativa à hierarquia

Variável global: visível a todos os módulos hierarquicamente inferiores

Variável local: não é visível aos módulos hierarquicamente superiores

(14)

Exemplo 3

Algoritmo a,b,c,x1,x2,delta Entrada Cálculo Delta Raízes Saída

(15)

Variáveis Globais

 Vantagem

 Todos os módulos compartilham as mesmas variáveis, logo, o mesmo espaço de memória  Desvantagem

 As variáveis só serão desalocadas após o término do algoritmo principal

 Módulos podem manipular (leitura e escrita ) de

forma errada uma variável que será usada por outro módulo

(16)

Exemplo 4

Algoritmo Entrada a,b,c Cálculo Delta delta Raízes x1,x2 Saída

(17)

Variáveis locais

 Vantagem

 As variáveis são desalocadas no final do módulo que as usou liberando memória

 Posso decidir a forma de manipulação (leitura e escrita) de cada módulo

 Código fica muito fácil de ler, corrigir ou alterar porque o significado semântico da variável esta encapsulado no bloco

 Desvantagem

(18)

Exercícios de Fixação

 Crie um algoritmo modularizado que calcule o fatorial de um número qualquer

 Crie um algoritmo modularizado, e sua representação hierárquica, que permita a entrada do total de vendas de cinco

empregados e calcule seus salários. No final

exiba também o total gasto pela empresa com a folha de pagamento.

(19)

Exercícios de Fixação

 Crie um algoritmo modularizado, e sua

representação hierárquica, que calcule as raízes de uma equação do 2º grau qualquer

 Crie um algoritmo modularizado, e sua representação hierárquica, que permita a entrada dos dados de um aluno (chamada, matricula, nome, 4 notas) e indique quais

bimestres ele perdeu média e o seu resultado final (aprovado, reprovado)

(20)

Parametrização

 Algoritmos específicos podem resolver

bastante problemas, porém, problemas específicos

módulo quadrado

resultado <- n1 * n1;

(21)

Parametrização

 Algoritmos genéricos podem resolver

muito mais problemas do que algoritmos específicos, pois se adaptam a um

contexto

módulo potencia(inteiro : x, y)

resultado <- x ^ y;

fimmódulo;

 Módulo é considerado generalizado se for

(22)

Parametrização

 A utilização de parâmetros é similar ao uso em funções matemáticas

 𝑓 𝑥, 𝑦 = 𝑥𝑦, onde x e y são os parâmetros da função

f

 A função f foi definida em função de x e y, logo para calcular a função para um valor particular de x e y, devemos substituí-los pelo argumento

(23)

Parametrização

 Observações:

Uma correspondência é estabelecida entre os parâmetros da função e os argumentos

utilizados

 No exemplo o parâmetro x foi substituído pelo

argumento 3 e o parâmetro y foi substituído pelo argumento 2

A ordem da correspondência é importante pois 𝑓(3,2) ≠ 𝑓(2,3)

(24)

Parametrização

 Declaração

módulo <Identificador>(tipo : <lista_1

variáveis,...,tipo : <lista_n de variáveis) <declaração de variáveis internas>;

<comandos internos>; fimmódulo;

(25)

Parametrização

 Exemplo

módulo delta(inteiro : a,b,c) delta <- b^2-4*a*c;

fimmódulo;

 Obs.: a linha "delta(inteiro : a,b,c)" também é conhecida como assinatura do módulo ou interface do módulo

(26)

Interface

 Interface: in·ter·fa·ce substantivo feminino

1. [Informática] Dispositivo (material e lógico) graças ao qual se .efetuam as trocas de

informações entre dois sistemas.

2. [Didático] Limite comum a dois sistemas ou duas unidades que permite troca de

informações.

"interface", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2013, http://www.priberam.pt/DLPO/interface [consultado em 08-09-2014].

(27)

Parametrização

 Ativação

 Um módulo é ativado, quando seu identificador é usado em um ponto do algoritmo juntamente com os argumentos a serem passados para ele

 Os argumentos podem ser constantes ou variáveis do mesmo tipo dos parâmetros

 A correspondência ocorre na mesma ordem em que se encontram os parâmetros do módulo

(28)

Exemplo 5

inicio inteiro : n1,n2,soma; módulo fSoma(a,b:inteiro) soma <- a + b; fimmódulo; fSoma(10,-5); escreva("soma = ", soma); fim; Ativação do módulo soma com argumentos

constantes

A ordem de passagem segue a ordem dos parâmetros: 1º argumento 10 é copiado para

(29)

Exemplo 6

inicio

inteiro : n1,n2,soma;

módulo fsoma(inteiro : a,b)

soma <- a + b; fimmódulo; escreva("Digite n1:"); leia(n1); escreva("Digite n2"); leia(n2); fSoma(n1,n2); escreva("soma = ", soma); fim;; Ativação do módulo soma com argumentos

variáveis

Ordem de passagem:

Valor de n1 é copiado para a Valor de n2 é copiado para b

(30)

Exercícios de Fixação

 Construa um algoritmo modularizado que

permita ao usuário digitar dois valores e a operação desejada (soma, subtração,

multiplicação, divisão, raiz e exponencial) e exiba o resultado baseado nas escolhas e valores digitados.

(31)

Tipos de Módulos

 Um módulo é um subalgoritmo que deve

ser bem simples por natureza

 Usado normalmente para solucionar um

problema específico de modo geral

 Obedece a mesma estruturação do

conjunto total

(32)

Exemplo 7

Algoritmo Entrada a,b,c verEqGrau2 a delta a,b,c,delta raízes a,b,delta,x1,x2 Saída x1,x2

(33)

Descrição dos Módulos

 Algoritmo: módulo principal

 Entrada: obtém a entrada manual do usuário armazenando os valores a, b e c

 verEqGrau2: verifica se a equação é uma equação do segundo grau realmente

 delta: calcula o delta para a equação

 raízes: calcula as raízes da equação

(34)

Exemplo 8

Algoritmo Entrada a,b,c verEqGrau2 a delta a,b,c,delta raízes a,b,delta,x1,x2 Saída x1,x2

Pode ativar todos os módulos inferiores

Não possui cálculo ou verificação importante

para outros módulos

Possui cálculo

Possui verificação importante para a ativação do módulo

saída

Sua ativação pelo módulo "principal" depende de outros

(35)

Exemplo 9

Algoritmo Entrada a,b,c verEqGrau2 a delta a,b,c,delta raízes a,b,delta,x1,x2 Saída x1,x2

(36)

Tipos de Parametrização

 Nos exemplos até agora, usamos

variáveis globais mescladas com variáveis locais

 Para melhorar o código devemos evitar,

sempre que possível, o uso de variáveis globais

Obs.: pense no encapsulamento da segurança para as variáveis no caso da equação do 2º grau

(37)

Tipos de Parametrização

 Para podermos transferir valores para

serem manipulados em módulos,

podemos usar dois tipos de passagens de parâmetros:

Passagem por valor (por cópia)

(38)

Passagem por valor

 Na passagem por valor, o valor passado

como argumento para função é copiado para os parâmetros da função

 No caso de variáveis como argumento, o

valor delas é copiado para os parâmetros

 Alterações feitas nas variáveis parâmetros

não refletem alterações nas variáveis argumento

(39)

Exemplo 10

inicio Inteiro : n1,n2; módulo fTroca(inteiro:a,b) aux: inteiro; aux  a; a  b; b  aux; fimmódulo; n1  2; n2  3; escreva(n1,n2); fTroca(n1,n2); escreva(n1,n2);  Execute o teste de mesa no algoritmo e mostre qual será o estado final das variáveis e as

(40)

Passagem por referência

 Na passagem por referência, uma

referência para a variável argumento é passada para os parâmetros da função

 Qualquer alteração feita nas variáveis que

são parâmetros reflete na variável que foi passado como argumento

(41)

Passagem por referência

 Como em algoritmo não existe uma

representação formal para indicar

passagem de parâmetro por referência, usaremos a representação do Pascal que é inserir a palavra "var" antes da

(42)

Exemplo 11

inicio

inteiro : n1,n2;

módulo fTroca(var inteiro:a,b)

aux: inteiro; aux  a; a  b; b  aux; fimmódulo; n1  2; n2  3; escreva(n1,n2); fTroca(n1,n2);  Execute o teste de mesa no algoritmo e mostre qual será o estado final das variáveis e as

(43)

Passagem de vetores

 Vetores são passados essencialmente por

referência para serem manipulados por módulos

 Para realizar esta passagem, devemos

criar um tipo vetor e usá-lo na declaração do parâmetro

(44)

Exemplo 12

inicio

tipo TVetor = vetor [0..9] de inteiro;

TVetor : vet1;

módulo fPreenche(var Tvetor:vet2, inteiro:i)

enquanto(i >= 0)faça; vet2[i]  i; i  i – 1; fim;enquanto; fimmódulo; fPreenche(vet1,9); fim;;

(45)

Tipos de Módulos

 Os módulos podem ser de dois tipos

baseados principalmente na sua essência ou objetivo para o qual será usado e que norteia seu conjunto de ações

 Os tipos são denominados contexto

Contexto de Ação

(46)

Contexto de Ação

Se preocupa com um processo em

particular

 Seu conjunto de ações ditam a sua

semântica dentro do algoritmo

 Sua essência visa executar uma ação

completa internamente ao módulo

(47)

Exemplo 13

módulo entrada(var Tvetor:vet, inteiro:tam)

inteiro : i, aux;

para i de 0 até tam faça

escreva("vet[",i, "]="); leia(vet[i]);

fim;para; fimmódulo;

(48)

Exemplo 14

módulo desloca(var Tvetor:vet, inteiro:tam)

inteiro : i, aux;

para i de 0 até tam faça

aux <- vet[i];

vet[i] <- vet[i + 1]; vet[i + 1] <- aux;

fim;para; fimmódulo;

(49)

Exemplo 15

módulo inverte(var Tvetor:vet, inteiro:tam)

inteiro : i, aux; i  0; enquanto(tam-i > i)faça aux <- vet[tam-i]; vet[tam-i] <- vet[i]; vet[i] <- aux; i  i + 1; fim;enquanto; fimmódulo;

(50)

Exemplo 17

módulo saida(var Tvetor:vet, inteiro:tam)

inteiro : i, aux;

para i de 0 até tam faça

escreva("vet[",i, "]=",vet[i]);

fim;para; fimmódulo;

(51)

Exemplo 18

inicio

tipo TVetor = vetor [0..9] de inteiro

LVet:TVetor

+ módulo entrada(var TVetor:vet, inteiro:tam); + módulo inverte(var TVetor:vet, inteiro:tam); + módulo saída(var TVetor:vet, inteiro:tam); entrada(LVet);

inverte(LVet); saida(LVet);

(52)

Contexto de Resultado

Se preocupa com um valor em particularSeu conjunto de ações visam calcular um

resultado no algoritmo

Sua essência visa calcular um valor

internamente e "retornar" este valor ao ponto de sua ativação

Para isso usa-se a instrução "retorne"Exemplos: delta e raízes

(53)

Exemplo 19

módulo fModulo(real : num)

valorModulo: real;

valorModulo <- sqrt(num ^ 2);

retorne valorModulo; fimmódulo;

módulo fParImpar(inteiro : num) se num mod 2 = 0 então

retorne 1; senão

retorne 0; fimmódulo;

(54)

Exemplo 20

inicio

real : num,nModulo;

+ módulo fModulo(valor: real); escreva("Digite um número"); leia(num);

nModulo  fModulo(num);

escreva("|",num, "|=",nModulo);

(55)

inicio real:num,nModulo; + módulo fModulo(real:valor); escreva("Digite um número"); leia(num); fModulo(num); escreva("|",num, "|=",nModulo); fim;;

Cuidado

A ativação do módulo resulta em um retorno. Se o valor retornado não for armazenado em uma posição ou

usado em uma expressão aritmética,

(56)

Contexto de Resultado

 Todo módulo nesse contexto deve

retornar uma valor

 O uso do retorno deste módulo deve ser

compatível ao tipo de dado necessário

 A ativação de um módulo nesse contexto

pode substituir o dado de mesmo tipo em qualquer expressão

(57)

Exemplo 21

inicio

real:px,py,qx,qynum,nModulo,distancia; + módulo fModulo(real:valor);

escreva("Digite as coordenadas do ponto p"); leia(px,py);

escreva("Digite as coordenadas do ponto q"); leia(qx,qy);

distancia  fModulo(px-qx)+fModulo(py-qy);

escreva("Distância entre p e q é:",distancia);

(58)

Módulos e memória

 A memória do computador é dividida em

três partes quando um programa é executado:

Espaço estático: contém variáveis globais e o código do programa

Heap: usada para alocação dinâmica

(59)

Módulos e memória

 Quando um módulo é ativado, suas

variáveis locais são armazenadas no topo da pilha

 Após terminar a execução do módulo,

suas variáveis locais são removidas da pilha e o espaço ocupado por elas é

(60)

Exemplo 22

inicio módulo m1(inteiro:a,b) c: inteiro; c  5; retorne (c+a+b); fimmódulo; módulo m2(inteiro:a,b) c: inteiro; c  m1(b,a); retorne c; fimmódulo; m2(2,3); Pilha Topo

(61)

Exemplo 22

inicio módulo m1(inteiro:a,b) c: inteiro; c  5; retorne (c+a+b); fimmódulo; módulo m2(inteiro:a,b) c: inteiro; c  m1(b,a); retorne c; fimmódulo; m2(2,3); fim; Pilha Topo 2 3 a b c m2

(62)

Exemplo 22

inicio módulo m1(inteiro:a,b) c: inteiro; c  5; retorne (c+a+b); fimmódulo; módulo m2(inteiro:a,b) c: inteiro; c  m1(b,a); retorne c; fimmódulo; m2(2,3); Pilha Topo 2 3 a b c m2 3 2 5 a b c m1

(63)

Exemplo 22

inicio módulo m1(inteiro:a,b) c: inteiro; c  5; retorne (c+a+b); fimmódulo; módulo m2(inteiro:a,b) c: inteiro; c  m1(b,a); retorne c; fimmódulo; m2(2,3); fim; Pilha Topo 2 3 a b c m2 3 2 5 a b c m1

(64)

Exemplo 22

inicio módulo m1(inteiro:a,b) c: inteiro; c  5; retorne (c+a+b); fimmódulo; módulo m2(inteiro:a,b) c: inteiro; c  m1(b,a); retorne c; fimmódulo; m2(2,3); Pilha Topo 2 3 10 a b c m2

(65)

Exemplo 22

inicio módulo m1(inteiro:a,b) c: inteiro; c  5; retorne (c+a+b); fimmódulo; módulo m2(inteiro:a,b) c: inteiro; c  m1(b,a); retorne c; fimmódulo; m2(2,3); fim; Pilha Topo 2 3 10 a b c m2

(66)

Exemplo 22

inicio módulo m1(inteiro:a,b) c: inteiro; c  5; retorne (c+a+b); fimmódulo; módulo m2(inteiro:a,b) c: inteiro; c  m1(b,a); retorne c; fimmódulo; m2(2,3); Pilha Topo

(67)

Exercícios de Fixação

 Construa um módulo que conte a quantidade de dígitos de um número inteiro

 Entrada: 123

 Saída: 3

Construa um módulo que retorne o inverso de

um número inteiro

 Entrada: 965

(68)

Exercícios de Fixação

 Construa um algoritmo que dado uma

conta corrente com cinco dígitos, calcule o dígito verificador

Somar nº da conta com seu inverso Multiplicar cada dígito por sua ordem

posicional e somar o resultado Exemplos: conta 25678

(69)

Exercícios de Fixação

 Construa um módulo que calcule o resto

da divisão entre dois números inteiros sem usar o operador mod

 Construa um módulo que verifique se um

número é par ou impar usando o módulo anterior

 Indique o que ocorre na pilha de execução

Referências

Documentos relacionados

Consulta as condições Desde Service Reparação no momento XIAOMI REDMI 6A Smartphone 1226380 Câmara 5 mpx Frontal 13 mpx Traseira Ecrã 5.45&#34; HD+ Memória RAM 2GB Capacidade

Portanto, a menor medida do ângulo possível em que se deve girar a tela para retornar à posição original é de 135º no sentido horário.. QUESTÃO 46:

Cartografia do grafite carioca : transgressão, cooptação e mercado na Zona Sul do Rio de Janeiro / Hely Geraldo Costa Júnior ; orientadora: Denise Berruezo Portinari.. Rio

Sempre que existam vagas, estas serão preenchidas ao longo do ano letivo, mediante inscrição, desde que não haja manifesto inconveniente para o funcionamento normal da sala..

[r]

• Sempre que for utilizar a MUFLA VIPI STG, durante as prensagens, passar uma camada de vaselina em pasta nas bordas da Mufla, evitando que a resina grude no material de

a) em 18 g de água existem 2 átomos de hidrogênio e um átomo de oxigênio. c) em 18 g de água existe um número de átomos igual ao de Avogadro. d) a partir de 18 g de água podem

Cabeça, mesossoma e metassoma de coloração verde metálica escura. As pernas são amareladas. Ocelos laterais distam entre si cerca de 0,5 a 1 vez o diâmetro do