Buscar

Programação - Modularização I

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Modularização
27. Modularização 1
20141106
Modularização 20141106 1 / 25
Outline
1 Módulo
2 Módulos Portugol: funções e procedimentos
3 Exercícios
Modularização 20141106 2 / 25
1 Módulo
2 Módulos Portugol: funções e procedimentos
3 Exercícios
Modularização 20141106 3 / 25
Definição
Um módulo é uma unidade do software.
É um grupo de comandos com uma funcionalidade ou um objetivo bem
definida.
Esse componente deve ser o mais independente possível das outras partes do
algoritmo.
Ele realiza uma tarefa específica dentro duma solução do problema
Modularização 20141106 4 / 25
Por que modularizar?
Decompor um problema para:
facilitar a implementação, isolando as funcionalidades, e especificando o foco
delas.
facilitar os testes das partes (cada módulo independentemente)
facilitar a manutenção : releituras podem ser separadas
aumentar o nível de abstração
parar de copiar/colar funcionalidades já presentes
estender a linguagem com novas funções
Estrutura de um programa
Geralmente, um algoritmo vai ter um módulo principal e ele vai chamar outros
módulos para compor uma solução algorítmica.
Modularização 20141106 5 / 25
Componentes
Módulo
Um módulo tem:
uma interface: declaração das funcionalidades ofertas, descrição dos dados
de entradas e de saída. É tudo que vocês precisam para utilizar o módulo.
um corpo: implementação das funcionalidades, comandos que compões o
trecho de algoritmo do módulo
Parâmetros duma interface
Um parâmetro é um tipo de variável utilizado pelo módulo para
receber/comunicar valores de dados das outras partes do algoritmo.
Ele pode ser:
I de entrada, para passar valores para um módulo;
I de saída, para receber valores do módulo;
I de entrada e saída, para permitir a passagem de valores tanto para o módulo
quanto dele.
As categorias dos parâmetros serão especificados na criação da interface.
Modularização 20141106 6 / 25
Hierarquia de módulos
Módulo principal
Procedimento 1 Função 1 Procedimento 2 Procedimento 3
Procedimento 4 Função 2 Função 3 Procedimento 5 Função 4
Modularização 20141106 7 / 25
Módulos e acessos
Cada módulo pode:
utilizar os objetos (constantes e variáveis) do módulo principal
definir os seus próprios
utilizar os dois tipos
Escopo de variáveis
Global: variável que só pode ser utilizada em um módulo interno ao módulo
onde foi declarada
Local : variável que só pode ser utilizada no módulo interno onde foi
declarada, e que não possui qualquer significado fora desse módulo
Modularização 20141106 8 / 25
1 Módulo
2 Módulos Portugol: funções e procedimentos
3 Exercícios
Modularização 20141106 9 / 25
Descrição
Procedimento
Módulo que não produz um valor de saída.
Exemplos
I imprimir o maior elemento de três elementos
I ler um elemento
Função
Módulo que produz um (único valor de saída), pode ser visto como uma
função matemática que vai produzir um valor a partir dos argumentos.
Exemplos:
I dar o valor do maior elemento de três elementos
I determinar se um elemento e dentro duma faixa de valores aceitáveis
Tipos de parâmetros
Os parâmetros declarados são chamados de parâmetros formais.
Modularização 20141106 10 / 25
Procedimento
Interface
1 procedimento <nome> (<parametros>)
<nome> : identificador único da função
<parametros> : lista dos parâmetros (<nome> : <tipo>)
I separados por ponto-vírgula
I pode ser vazia.
Não tem tipo de retorno porque não retorna um valor.
1 procedimento imprimir_maior (n1 : inteiro; n2: inteiro ; n3 : inteiro)
Corpo
1 Declaração de variáveis, começada por var
2 Sequência de comandos, começada por inicio, terminado por
fimprocedimento
Modularização 20141106 11 / 25
Exemplo de procedimento
1 procedimento imprimir_maior (n1 : inteiro; n2: inteiro ; n3 : inteiro)
2 var max : inteiro
3 inicio
4 se n1 > n2 entao
5 max <- n1
6 senao
7 max <- n2
8 fimse
9 se n3 > max entao
10 max <- n3
11 fimse
12 escreva(max)
13 fimprocedimento
Modularização 20141106 12 / 25
Funções
Interface
1 funcao <nome> (<parametros>): <tipo>
<nome> : identificador único da função
<parametros> : lista dos parâmetros (<nome> : <tipo>)
I separados por ponto-vírgula
I pode ser vazia.
<tipo>: tipo do valor de retorno da função
Exemplo:
1 funcao maior (n1 : inteiro; n2: inteiro ; n3 : inteiro) : inteiro
Corpo
1 Declaração de variáveis, começada por var
2 Sequência de comandos, começada por inicio, terminado por
fimprocedimento
I A sequência de comandos tem ≥ 1 comando especial de retorno
1 retorne <valor>
Modularização 20141106 13 / 25
Exemplo de função
1 funcao maior (n1 : inteiro; n2: inteiro; n3 : inteiro) : inteiro
2 var max : inteiro
3 inicio
4 se n1 > n2 entao
5 max <- n1
6 senao
7 max <- n2
8 fimse
9 se n3 > max entao
10 max <- n3
11 fimse
12 retorne max
13 fimfuncao
Modularização 20141106 14 / 25
Múltiplos pontos de retorno
Uma função pode ter vários pontos de retorno
Mas um único valor é retornado (de acordo com os parâmetros reais)
1 funcao maior (n1 : inteiro; n2: inteiro; n3 : inteiro) : inteiro
2 inicio
3 se n1 > n2 entao
4 se n2 > n3 entao
5 retorne n1
6 senao
7 se n3 > n1 entao
8 retorne n3
9 senao
10 retorne n1
11 fimse
12 fimse
13 senao
14 se n2 > n3 entao
15 retorne n2
16 senao
17 retorne n3
18 fimse
19 fimse
20 fimfuncao
Modularização 20141106 15 / 25
Exemplo completo
A seção de declaração do módulo principal (algoritmo) precede a lista das
declarações/implementações dos funções/procedimentos.
1 algoritmo "Maior de 3"
2 var ln1, ln2, ln3: inteiro
3 maior_n: inteiro
4
5 funcao maior (n1: inteiro; n2:inteiro; n3: inteiro) : inteiro
6 var max : inteiro
7 inicio
8 se n1 > n2 entao
9 max <- n1
10 senao
11 max <- n2
12 fimse
13 se n3 > max entao
14 max <- n3
15 fimse
16 retorne max
17 fimfuncao
18
19 inicio
20 escreva("Entre com 3 números inteiros: ")
21 leia(ln1, ln2, ln3)
22 maior_n <- maior(ln1, ln2, ln3)
23 escreval("O maior deles é: ", maior_n )
24 fimalgoritmo
Modularização 20141106 16 / 25
Parâmetros
Modificação
Parâmetros de entrada em Portugol não pode ser modificados/reatribuidos
dentro da rotina (salvo casos especiais).
Formais
Os parâmetros na declaração da rotina são chamado de formais
Na função abaixo
1 funcao maior (n1 : inteiro; n2: inteiro; n3 : inteiro) : inteiro
n1, n2, n3 são os parâmetros formais.
Reais
Os parâmetros nos lugares de chamada são chamado de reais
Se chamar
1 maior(1, x, 42)
1, x, 42 são os parâmetros reais
Modularização 20141106 17 / 25
Agrupamento de parâmetros
Parâmetros formais do mesmo tipo podem ser agrupados a fim de
I não repetir declarações de tipos
I facilitar a leitura
Exemplo
1 funcao maior (n1, n2, n3 : inteiro) : inteiro
2 var max : inteiro
3 inicio
4 se n1 > n2 entao
5 max <- n1
6 senao
7 max <- n2
8 fimse
9 se n3 > max entao
10 max <- n3
11 fimse
12 retorne max
13 fimfuncao
Modularização 20141106 18 / 25
Parâmetros de sáida
Sintaxe
Um parâmetro formal pode ser marcado como parâmetro de saída através da
palavra-chave var.
O valor dele pode ser modificado pela rotina
Exemplo
1 procedimento imprimir_maior (inteiro n1, inteiro n2, inteiro n3,
2 var inteiro max)
3 inicio
4 se n1 > n2 entao
5 max <- n1
6 senao
7 max <- n2
8 fimse
9 se n3 > max entao
10 max <- n3
11 fimse
12 fimprocedimento
Modularização 20141106 19 / 25
Passagem de parâmetros
Categorias de parâmetros
Parâmetros de entrada são passados por valor
Parâmetros de saída são passados por referência
Por valor
O valor do parâmetro real é atribuído ao parâmetro formal no lugar da
chamada.
Esse valor e copiado.
Uma alteração do parâmetro formal não impactará o parâmetro real.
Por referência
O parâmetro formal torna-se igual ao parâmetro real.
Eles compartilhama mesma zona de armazenamento.
Todas as alterações de valor do formal no procedimento serão refletidas no
parâmetro real.
Modularização 20141106 20 / 25
Exercício (escopo)
Pergunta
O que é escrito na tela do computador pelo algoritmo abaixo ?
1 algoritmo "passagem"
2 var m, n, r : inteiro
3
4 funcao p4 (n: inteiro, var m : inteiro): inteiro
5 inicio
6 n <- n * n
7 m <- m * m
8 retorne m * n
9 fimfuncao
10
11
12 inicio
13 m <- 2
14 n <- 3
15 r <- p4 (n, m)
16 escreva (r, n, m)
17 fimalgoritmo
Modularização 20141106 21 / 25
Saber identificar os elementos duma rotina
1 funcao verif_int_intervalo (var n: inteiro; limit_inf, limit_sup: inteiro): logico
2 var res: logico
3 inicio
4 se (n < limit_inf) ou (n > limit_sup) entao
5 res <- verdadeiro
6 senao
7 res <- falso
8 fimse
9 retorne res
10 fimfuncao
Nome de função ?
Tipo de retorno ?
Quantos parâmetros formais ela tem ? Quais são os nomes e tipos deles ?
Quais são os parâmetros passados por valor ? Por referência ?
Quantos variáveis locais ela tem ? (nomes/tipos?)
O que será o valor de retorno de:
1 verif_int_intervalo(5, 0, 10)
2 verif_int_intervalo(6, 8, 11)
3 verif_int_intervalo(6, 6, 11)
Modularização 20141106 22 / 25
1 Módulo
2 Módulos Portugol: funções e procedimentos
3 Exercícios
Modularização 20141106 23 / 25
Permutação
Um número a é dito ser uma permutação de um número b se os dígitos e a
formam uma permutação dos dígitos de b. Exemplo:
5412434 é uma permutação de 4321445, mas não é uma permutação de 4312455.
Observação: considere que o dígito 0 (zero) não aparece nos números.
Escreva uma função contadígitos que, dados um inteiro n e um inteiro d ,
0 < d ≤ 9, devolve quantas vezes o dígito d aparece em n;
Utilizando a função do item anterior, faça um algoritmo que leia dois
números a e b e responda se a é permutação de b.
Modularização 20141106 24 / 25
Sufixo
Um número b é dito ser sufixo de um número a se o número formado pelos
últimos dígitos de a são iguais a b. Assim:
a b
567890 890 → sufixo
1234 1234 → sufixo
2457 245 → não é sufixo
457 2457 → não é sufixo
Construa uma função sufixo que dados dois números inteiros a e b verifica se
b é um sufixo de a.
Utilizando a função do item anterior, escreva um algoritmo que leia dois
números inteiros a e b e verifica se o menor deles é subsequência do outro.
Exemplo:
a b
567890 678 → b é subsequência de a
1234 2212345 → a é subsequência de b
235 236 → um não é subsequência do outro
Modularização 20141106 25 / 25
	Módulo
	Módulos Portugol: funções e procedimentos
	Exercícios

Outros materiais