• Nenhum resultado encontrado

Módulos ou Subrotinas: PARTE II. Criando seus próprios módulos

N/A
N/A
Protected

Academic year: 2021

Share "Módulos ou Subrotinas: PARTE II. Criando seus próprios módulos"

Copied!
101
0
0

Texto

(1)

Módulos ou Subrotinas:

PARTE II

(2)

Objetivos da Aula

Compreender a necessidade e a importância de

modularizar

Aprender a criar e utilizar (chamar) seus

próprios módulos

(3)

Refletindo ...

Até o momento temos escrito nossos programas no

PortugolStudio de maneira “sequencial” dentro da

(4)

Refletindo ...

À medida que os problemas vão se tornando mais

complexos,

os programas (solução) tendem a ficar

mais

extensos.

Modularizar

permite “quebrar” o problema em

subproblemas.

Para cada subproblema podemos, por exemplo,

(5)

PROBLEMA

EXEMPLO

(6)

Escreva um programa ler dois vetores (A e B) de

10 elementos cada. Após a entrada de dados, o

programa deve:

Obter e exibir a soma dos elementos do vetor A

Obter e exibir a soma dos elementos do vetor B

Calcular e exibir a média dos elementos dos dois

vetores (uma única média)

Imprimir o vetor A e depois o vetor B

Mostrar os elementos de A e B que são acima da média

de ambos

(7)

Escreva um programa ler dois vetores (A e B) de 10

elementos cada. Após a entrada de dados, o programa

deve:

Obter e exibir a soma dos elementos do vetor A

Obter e exibir a soma dos elementos do vetor B

Calcular e exibir a média dos elementos dos dois vetores (uma única média)

Imprimir o vetor A e depois o vetor B

Mostrar os elementos de A e B que são acima da média de ambos

(8)

 SAÍDA:

soma do vetor A (somaA), soma do vetor B (soma B), media dos dois vetores

(mediaAB), exibir vetor A, exibir vetor B, exibir elementos de A e B acima de mediaAB.

Escreva um programa ler dois vetores (A e B) de 10

elementos cada. Após a entrada de dados, o programa

deve:

Obter e exibir a soma dos elementos do vetor A

Obter e exibir a soma dos elementos do vetor B

Calcular e exibir a média dos elementos dos dois vetores (uma única média)

Imprimir o vetor A e depois o vetor B

(9)

 ENTRADA DE DADOS:

os vetores A e B

Escreva um programa

ler dois vetores

(A e B) de 10

elementos cada. Após a entrada de dados, o programa

deve:

Obter e exibir a soma dos elementos do vetor A

Obter e exibir a soma dos elementos do vetor B

Calcular e exibir a média dos elementos dos dois vetores (uma única média)

Imprimir o vetor A e depois o vetor B

(10)
(11)
(12)

PROCESSAMENTO [1]:

Note que poderíamos usar um ÚNICO laço de repetição para somar os DOIS vetores. Propositalmente, optou-se por tratar cada problema (de somar cada vetor) como um problema específico.

- Obter e exibir a soma dos elementos do vetor A - Obter e exibir a soma dos elementos do vetor B

(13)

PROCESSAMENTO [2]

- Calcular e exibir a média dos elementos dos dois vetores (uma única média)

(14)

PROCESSAMENTO [3]

Mostrar os elementos de A e B que são acima da média de ambos

(15)
(16)
(17)
(18)

O programa completo possui cerca de 53 linhas

Há diversos trechos no programa que são

“repetitivos”

,

ou seja, fazem a “mesma” coisa,

mudando-se apenas a “variável”

Análise da Solução

(19)

Trecho repetitivo:

ENTRADA DE DADOS

O “mesmo trecho” para ENTRADA DE DADOS dos vetores! Muda apenas o nome da variável.

(20)

Trecho repetitivo:

SOMA ELEMENTOS VETOR

O “mesmo trecho” para SOMA DOS ELEMENTOS dos vetores! Muda apenas o nome da variável.

(21)

Trecho repetitivo:

IMPRIME VETOR

O “mesmo trecho” para IMPRIMIR VETOR! Muda apenas o nome da variável.

(22)

Trecho repetitivo:

ELEMENTOS ACIMA MEDIA

O “mesmo trecho” para MOSTRAR ELEMENTOS ACIMA DA MÉDIA! Muda apenas o nome da variável.

(23)

Trechos repetitivos é um convite ao

REUSO!

Cada “parte” do programa tem uma

FINALIDADE

ESPECÍFICA

:

Ler o vetor

(subproblema 1)

Somar os elementos do vetor

(subproblema 2)

Imprimir os elementos do vetor

(subproblema 3)

Exibir os elementos acima da media

(subproblema 4)

Reuso

e

Problemas com finalidade específica é um

convite a

MODULARIZAÇÃO!!!

(24)

SOLUÇÃO

MODULARIZADA

Primeiro vamos ver a solução

modularizada, para entendermos suas

vantagens! Em seguida vamos aprender a

(25)
(26)

Primeiro, vamos pegar cada

trecho específico

, um

a um, e transformá-lo numa

função

Modularizando

(27)

MODULARIZANDO A ROTINA

(28)

O que difere entre os dois trechos é apenas a

variável do

“leia”

(29)

Note que os trechos são IDÊNTICOS!

Apenas “criamos” uma nova função, demos um nome a ela

(Leitura_Vetor)

e agora podemos CHAMÁ-LA

Daqui a pouco entenderemos melhor os detalhes da criação da função: nome, parâmetros, etc.

(30)

Existindo a função podemos CHAMÁ-LA como fazemos

com funções existentes (potencia, raiz, etc)

Note que “Leitura_Vetor” é chamada duas vezes: uma para

A e outra para B

(31)

MODULARIZANDO A ROTINA

(32)

O que difere os dois trechos?

(33)

Note que os trechos são IDÊNTICOS!

Apenas “criamos” uma nova função, demos um nome a ela

(Soma_Vetor)

e agora podemos CHAMÁ-LA

Daqui a pouco entenderemos melhor os detalhes da criação da função : nome, parâmetros, etc.

(34)

Existindo a função podemos CHAMÁ-LA como fazemos

com funções existentes (potencia, raiz, etc)

Note que “Soma_Vetor” é chamada duas vezes: uma para A

e outra para B

(35)

MODULARIZANDO A ROTINA

(36)

O que difere os dois trechos?

(37)

Note que os trechos são IDÊNTICOS!

Apenas “criamos” uma nova função, demos um nome a ela

(Imprime_Vetor)

e agora podemos CHAMÁ-LA

Daqui a pouco entenderemos melhor os detalhes da criação da função : nome, parâmetros, etc.

(38)

Existindo a função podemos CHAMÁ-LA como fazemos

com funções existentes (potencia, raiz, etc)

Note que “Imprime_Vetor” é chamada duas vezes: uma para

A e outra para B

(39)

MODULARIZANDO A ROTINA

(40)

O que difere os dois trechos?

(41)

Note que os trechos são IDÊNTICOS!

Apenas “criamos” uma nova função, demos um nome a ela

(Imprime_Acima_Media)

e agora podemos CHAMÁ-LA

Daqui a pouco entenderemos melhor os detalhes da criação da função : nome, parâmetros, etc.

(42)

Existindo a função podemos CHAMÁ-LA como fazemos

com funções existentes (potencia, raiz, etc)

Note que “Imprime_Acima_Media” é chamada duas vezes:

uma para A e outra para B

(43)
(44)

FUNÇÃO INÍCIO

Note como o

programa está mais

ENXUTO

(código

mais limpo)

(45)

FUNÇÕES DE USUÁRIO (CRIADAS)

AS FUNÇÕES

CRIADAS E QUE

FORAM CHAMADAS

(46)

VANTAGENS DA

MODULARIZAÇÃO

(47)

Modularização - Vantagens

Reaproveitamento de código

(reuso)

Organização

Legibilidade

(48)

COMO ESCREVER E ATIVAR

(49)

Módulos – Estrutura e Sintaxe

Um programa modularizado tem:

um

módulo principal

(função início) e

outros módulos que vamos chamar de

funções de usuário

(50)
(51)

Módulos - Sintaxe

Sintaxe parecida com O módulo principal

1- Palavra funcao (obrigatório)

2- Valor de retorno (caso exista)

3- Identificador (obrigatório) 4- Parênteses com parâmetros (caso exista)

(52)

PARÂMETROS

São os valores ou variáveis

enviadas ao

módulo

, para que ele possa realizar o seu

processamento

Podemos passar

nenhum

ou

vários

parâmetros

para o módulo

Tudo depende da finalidade do módulo (e de

como ele foi construído)

(53)

RETORNO

O Retorno de um módulo é o valor (ou valores) que o

módulo retorna para o local em que ele foi chamado

(54)

Módulos – Sintaxe - Portugol

palavra

funcao

valor de retorno (caso exista) Identificador (nome da função) Parâmetros da função) tipo do retorno da função

(55)

Módulos – Sintaxe - Portugol

palavra funcao

NOTE QUE ESSA FUNÇÃO NÃO TEM RETORNO Identificador (nome da função)

(56)

Módulos – Sintaxe - Portugol

Sempre dentro das chaves, para Delimitar o BLOCO do módulo

(57)

EXECUÇÃO E CHAMADA

DOS MÓDULOS

(58)

Módulos – Execução de um Módulo

A

chamada

(ou ativação) de um módulo, representa a

execução das ações contidas nele, em seguida a

execução

retorna

para a instrução seguindo ao ponto

da sua chamada (que poderá ser o módulo principal ou

noutros módulos)

Não existe ordem

para a

definição

dos módulos

Quem determina a execução de um MÓDULO (ou

função) é a sua chamada.

(59)

Módulos – Execução (chamada)

O módulo principal

(função início)

É o primeiro a ser chamado quando um

programa é executado

Os outros módulos são ativados (executados)

toda vez que forem chamados (pelo nome)

A chamada de um módulo deve respeitar sua

definição (nome, parâmetros, etc)

(60)

Note as chamadas à função

SOMA_VETOR

: passando dois

parâmetros e atribuindo o valor do

retorno

para somaA e somaB

(61)

Note as chamadas à função

IMPRIME_VETOR

: passando dois

parâmetros. Não há atribuição pois a função

não retorna

nada!

(62)

Módulos – Execução de um Módulo

Qualquer função pode chamar outra função.

Um módulo pode chamar ele próprio?

(63)
(64)

Escreva um programa para exibir o peso ideal de uma

pessoa utilizando a fórmula a seguir:

Problema

 Masculino: 72.7 x altura – 58

 Feminino: 62.1 x altura – 44.7

A entrada e saída de dados poderá ser feito no módulo

principal (função início). No entanto, o cálculo do peso

ideal deve ser feito em uma função específica.

(65)

Escreva um programa para exibir o peso ideal de uma

pessoa utilizando a fórmula a seguir:

Problema

 SAÍDA:

peso ideal

 Masculino: 72.7 x altura – 58

 Feminino: 62.1 x altura – 44.7

A entrada e saída de dados poderá ser feito no módulo

principal (função início). No entanto, o cálculo do peso

ideal deve ser feito em uma função específica.

(66)

Escreva um programa para exibir o peso ideal de uma

pessoa utilizando a fórmula a seguir:

Problema

 SAÍDA:

peso ideal

 Masculino: 72.7 x altura – 58

 Feminino: 62.1 x altura – 44.7

A entrada e saída de dados poderá ser feito no módulo

principal (função início). No entanto, o cálculo do peso

ideal deve ser feito em uma função específica.

(67)

Solução

A entrada e saída de dados poderá ser feito no módulo

principal (função início). No entanto, o cálculo do peso

ideal deve ser feito em uma função específica.

(68)

Construção da Função

A entrada e saída de dados poderá ser feito no módulo

principal (função início). No entanto, o cálculo do peso

ideal deve ser feito em uma função específica.

 Masculino: 72.7 x altura – 58

 Feminino: 62.1 x altura – 44.7

Para construir o módulo (função) precisamos:

1.

Definir

identificador

(nome da função)

2.

Definir os

parâmetros

(tipo e nome), se necessário

(69)

Construção da Função

 Masculino: 72.7 x altura – 58

 Feminino: 62.1 x altura – 44.7

1.

Definir identificador (nome da função)

Calcula_Peso_Ideal

2.

Definir os parâmetros (tipo e nome), se necessário

A função precisa receber o SEXO e ALTURA por parâmetro (já que eles foram lidos fora da função)

3.

Definir tipo do retorno, se necessário

(70)

Construção da Função

 Masculino: 72.7 x altura – 58

 Feminino: 62.1 x altura – 44.7

(71)

Construção da Função

 Masculino: 72.7 x altura – 58

 Feminino: 62.1 x altura – 44.7

(72)

Solução Completa

(73)
(74)
(75)

O que será impresso pelo trecho de programa abaixo?

Modularização

a

b

c

10

20

0

100H 200H 300H

a

b

y

10

20

?

600H 650H 700H

(76)

ESCOPO DE

VARIÁVEIS

(77)

Blocos

Um BLOCO é delimitado por um par de chaves

{ }

Um BLOCO define o

ESCOPO

das variáveis.

A variável só existe dentro do “bloco” em que

ela foi declarada.

(78)

Módulos – Escopo

LOCAL

Escopo local – VARIÁVEL existe somente no

módulo (bloco) em que foi declarada.

Quando a execução do módulo (função) é

finalizada a variável é

“liberada

” (da memória)

e os

valores perdidos.

Caso os valores devam

“sair

” da função (antes

de serem perdidos) eles precisam ser

(79)

Escopo Global

Escopo global

– são variáveis que podem ser utilizadas

nos módulos em que foram declaradas e também nos

módulos internos aos módulos que foram declarados

Evitem utilizar variáveis globais!

Ocupam mais espaço de memória, pois ocupam a

memória enquanto o programa estiver sendo

executado

(80)
(81)

PASSAGEM DE PARÂMETRO POR VALOR

Ocorre a

passagem do VALOR

(conteúdo) para a variável correspondente

na função, por correspondência de posição:

o primeiro valor é passado para a

primeira variável,

o segundo valor é passado para a

(82)

NA CHAMADA

Parâmetros por Valor

a

b

c

10

20

0

100H 200H 300H

a

b

y

10

20

?

600H 650H 700H

(83)

NO RETORNO

Parâmetros por Valor

a

b

c

10

20

0

10

100H 200H 300H

a

b

y

10

20

20

10

?

10

600H 650H 700H

(84)

PASSAGEM DE PARÂMETRO POR VALOR

Caso haja alterações no parâmetro

correspondente (dentro da função) essas

mudanças são perdidas

(a não ser que

os valores sejam retornados).

ESSA É A PASSAGEM DE PARÂMETRO

(85)

PASSAGEM DE PARÂMETRO POR REFERÊNCIA

Ocorre a passagem do

ENDEREÇO

da variável (e

não apenas o conteúdo). É criado uma CONEXÃO

entre as variáveis correspondentes.

Caso haja alterações no parâmetro

correspondente (dentro da função)

essas

mudanças alteram a variável passada por

parâmetro

(similar a um “retorno”)

(86)

Parâmetros por Referência

a

b

10

20

20

10

100H 200H

a

b

aux

10

20

20

10

?

10

600H 650H 700H

(87)

NO PORTUGOL STUDIO a passagem de

parâmetros por REFERÊNCIA é feita

colocando-se um

&

antes do nome da variável

(88)

PASSAGEM DE PARÂMETRO POR REFERÊNCIA

Note que na função

Leitura_Vetor

o primeiro

parâmetro usa o & pois o VETOR é modificado

dentro da função e essa modificação precisa ser

(89)

PASSAGEM DE PARÂMETRO POR VALOR

Note que na função

Imprime_Vetor

a

passagem é feita por VALOR (sem o &) pois a

função NÃO modifica o conteúdo do vetor

(90)

Coisas para recordar

Obrigatório existir um módulo principal

O módulo principal é criado automaticamente

Para criar seus módulos você precisa pensar:

No objetivo do módulo

Identificador

Número e tipo de parâmetros

(91)

Coisas para não esquecer

Um bloco é delimitado pelos CHAVES { e }.

Uma variável que é declarada dentro de um módulo é

chamada de

variável local

e existe apenas dentro do

módulo.

O módulo fica na memória durante a sua execução sendo

destruido quando última instrução é executada (ou após

um retorne).

Uma variável criada fora de qualquer módulo é chamada

de

variável global

.

A variável global existe dentro de qualquer módulo criado

dentro do programa.

(92)

AGORA É

PRATICAR!!!

(93)
(94)

Escreva a função

Valida_Inteiro

para solicitar um

número inteiro e validá-lo de forma que o mesmo

esteja dentro de um intervalo. Os limites do intervalo

serão passados por parâmetro. Escreva também a

função principal (início) para fazer a chamada da

função com os seguintes valores:

Valida_Inteiro (0, 100) // aceitar valores entre 0 e 100

Valida_Inteiro (-50, 50) // aceitar valores entre -50 e 50

Atenção: A comunicação dos valores entre a função

e o meio externo dever ser feita por

passagem de

parâmetros

(e não por variáveis globais)

(95)
(96)
(97)

Construa uma função que receba por

parâmetro um vetor e seu tamanho.

Retorne a posição do maior valor

(98)
(99)
(100)

Construa uma função que receba por

parâmetro, uma matriz A e suas dimensões.

Retorne V (true) se existir alguma linha com

todos os elementos zerados e F (false) caso

contrário.

(101)

Referências

Documentos relacionados

Quando o prêmio sorteado, ganho em concurso ou conferido mediante vale-brinde, não for reclamado no prazo de cento e oitenta (180) dias, contados, respectivamente, da data do

A chamada questão feminina, o casamento e as propostas teóricas do lugar da sociologia que foram surgindo ao longo do século XX para explicar essas questões, bem como

Pedimos a sua compreensão nesta situação para nós muito sensível, e aguardo uma decisão da sua parte o mais tardar ao dia de amanhã (26/03/2014), para que rapidamente consigamos

É necessário acentuar o conteúdo da idéia de acesso à Justiça que não há de significar simplesmente o acesso ao Poder Judiciário; não só porque também existe o

O tratamento 3, composto do substrato comercial TN Gold, esterco bovino e areia lavada, foi o que proporcionou os maiores valores para o desenvolvimento inicial das mudas de tomate,

•  Como calcular os dois valores numa função. •  Como fazer essa função devolver

Assim sendo, foi possível normalizar, em função de valores regulares, os valores discrepantes de RCC per capita, que variaram entre 0 e 953 kg/hab.ano (sendo o 0 não um

A presente pesquisa buscou analisar de forma profunda, através de estudos realizados, a influência da temperatura e irradiância na eficiência de um módulo fotovoltaico, para que