Buscar

Algoritmos I Unidade 4

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

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

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ê viu 3, do total de 17 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

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

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ê viu 6, do total de 17 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

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

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ê viu 9, do total de 17 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

Prévia do material em texto

1
UNIDADE 4: 
SUBROTINAS
4.1 Conceitos de 
Modularização
2
Modularização de Algoritmos
• Para o ser humano é difícil descrever, em um processo 
completo, todas as instruções mais detalhadas, de 
forma que se consiga memorizar várias instruções 
complexas ao mesmo tempo
• De outro lado, para o computador, as instruções de um 
programa (processo completo) devem ser detalhadas a 
um nível tal que o computador seja capaz de interpretá-
las e resolvê-las de maneira adequada
Modularização de Algoritmos
• A solução para o homem resolver esse tipo de 
problema é dividir um problema complexo em vários 
outros subproblemas elementares, de tal forma que o 
homem consiga assimilá-los com maior facilidade
• Procedimentos e Funções são módulos, 
subprogramas com estrutura própria e com destinação 
específica
3
4.2, 4.3 Procedimentos, 
Funções
Procedimento
• O procedimento (procedure) apenas executa uma ação, 
sem devolver um valor
• Declaração:
Procedimento <NOME>(<LISTA_DE_PARÂMETROS>)
//declaração dos objetos locais
//conjunto de ações
Fimprocedimento;
4
Função
• A função (function) é semelhante ao procedimento, no entanto 
se diferencia pela característica de retornar um valor com um
tipo associado
‒Uma função deve ser ativada em um contexto de expressão
• Declaração:
Função <NOME>(<LISTA_DE_PARÂMETROS>): <TIPO>
//declaração dos objetos locais
//conjunto de ações
retorna (<VALOR>|<VARIÁVEL>)
Fimfunção;
Escopo das Variáveis
• Variável global: Todas as variáveis usadas no 
algoritmo encontram-se declaradas em seu início, o que 
as torna passíveis de aplicação por qualquer 
procedimento ou função integrante
• Variável local: Em alguns casos, uma variável é usada 
apenas por um procedimento/função específico, o que 
não justifica uma definição global
5
Parâmetros
• A passagem de parâmetros é o meio de comunicação entre 
as unidades de um programa
• Ela pode acontecer com um dos seguintes propósitos:
�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
Passagem de Parâmetro
• As variáveis de um programa podem ser transferidas a 
um subprograma por duas maneiras:
‒Passagem de Parâmetro Explícita
‒Passagem de Parâmetro Implícita
6
Passagem de Parâmetro Explícita
• Explícita é quando a troca é realizada por meio de 
argumentos
‒Passagem de Parâmetro Por Valor
* Variáveis independentes (passadas por cópia), ocupam uma 
posição de memória diferente durante a execução do módulo
* As alterações nos conteúdos dessas variáveis NÃO REFLETEM 
fora do módulo
Passagem de Parâmetro Explícita
‒Passagem de Parâmetro por Referência
* Essas variáveis ocupam a mesma posição alocada na memória, 
ou seja, passam do programa ao subprograma na mesma posição
* As alterações nos conteúdos dessas variáveis REFLETEM fora do 
módulo
* É usado o termo Var na passagem dessas variáveis
* É necessário cuidado ao usar esse tipo de passagem de parâmetro
7
Passagem de Parâmetro Explícita
Passagem de Parâmetro Implícita
• 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
–Não há passagem de argumentos
8
Passagem de Parâmetros
Procedimento inicializa (var A,B: real; C: real; var D: inteiro);
explícita
por referência
explícita por valor
Procedimento 1
algoritmo "p1"
var
a,b,c: inteiro
procedimento um(var x: inteiro)
inicio
a:=x
x:=x+1
fimprocedimento
inicio
a:=1
b:=2
c:=5
um(c)
escreval(a,b,c)
um(b)
escreval(a,b,c)
um(a)
escreval(a,b,c)
fimalgoritmo
9
Procedimento 1
algoritmo "p1"
var
a,b,c: inteiro
procedimento um(var x: inteiro)
inicio
a:=x
x:=x+1
fimprocedimento
inicio
a:=1
b:=2
c:=5
um(c)
escreval(a,b,c)
um(b)
escreval(a,b,c)
um(a)
escreval(a,b,c)
fimalgoritmo
Chamada do procedimento “um” passando como 
argumento o conteúdo da variável “c”
Procedimento 1
algoritmo "p1"
var
a,b,c: inteiro
procedimento um(var x: inteiro)
inicio
a:=x
x:=x+1
fimprocedimento
inicio
a:=1
b:=2
c:=5
um(c)
escreval(a,b,c)
um(b)
escreval(a,b,c)
um(a)
escreval(a,b,c)
fimalgoritmo
A primeira posição do parâmetro receberá a 
passagem explícita por referência (devido à 
cláusula “Var”), ou seja, as alterações nos 
conteúdos dessas variáveis refletem fora do 
procedimento
10
Procedimento 1
algoritmo "p1"
var
a,b,c: inteiro
procedimento um(var x: inteiro)
inicio
a:=x
x:=x+1
fimprocedimento
inicio
a:=1
b:=2
c:=5
um(c)
escreval(a,b,c)
um(b)
escreval(a,b,c)
um(a)
escreval(a,b,c)
fimalgoritmo
Passagem de parâmetro implícita: A variável “a”, que 
já foi declarada no escopo global, receberá tanto o
valor quanto a referência AO MESMO ESPAÇO na 
memória, logo essa variável terá seu valor alterado 
fora do módulo
Procedimento 1
algoritmo "p1"
var
a,b,c: inteiro
procedimento um(var x: inteiro)
inicio
a:=x
x:=x+1
fimprocedimento
inicio
a:=1
b:=2
c:=5
um(c)
escreval(a,b,c)
um(b)
escreval(a,b,c)
um(a)
escreval(a,b,c)
fimalgoritmo
De volta ao bloco principal, a variável “a”, 
que recebeu a mesma referência e valor “5” 
da variável “x” (do parâmetro), terá como 
saída na tela o valor “5”
11
Procedimento 1
algoritmo "p1"
var
a,b,c: inteiro
procedimento um(var x: inteiro)
inicio
a:=x
x:=x+1
fimprocedimento
inicio
a:=1
b:=2
c:=5
um(c)
escreval(a,b,c)
um(b)
escreval(a,b,c)
um(a)
escreval(a,b,c)
fimalgoritmo
Como a variável “x” do procedimento 
recebeu o valor e a referência ao mesmo 
espaço de memória da variável “c”, a sua 
modificação na operação x:=x+1 também se 
refletiu na variável “c”, que terá como saída 
o valor “6”
Procedimento 1
algoritmo "p1"
var
a,b,c: inteiro
procedimento um(var x: inteiro)
inicio
a:=x
x:=x+1
fimprocedimento
inicio
a:=1
b:=2
c:=5
um(c)
escreval(a,b,c)
um(b)
escreval(a,b,c)
um(a)
escreval(a,b,c)
fimalgoritmo
Saída do algoritmo:
5 2 6
2 3 6
3 3 6
12
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro; p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro; p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
Passará os argumentos 
ao procedimento “a1”
13
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro; p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
Receberá a passagem por referência, a variável 
global “b” passará o valor e a referência ao 
mesmo espaço na memória. Todas as 
alterações em “c” irão refletir em “b”
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro;p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
Receberão a passagem por valor,
as alterações nessas variáveis 
não refletem fora do módulo
14
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro; p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
20 10 10 20
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro; p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
10
20 10 10 20
15
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro; p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
10
20 10 10 20
30
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro; p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
10
20 10 10 20
30
110
16
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro; p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
10
20 10 10 20
30
110
Saída: 
10 20 110 30
Procedimento 2
algoritmo "p2"
var
a,b: real
procedimento a1(a:inteiro; var c:inteiro; p,b:inteiro)
inicio
a:=c
p:=b+c
c:=c+100
escreval(a,b,c,p)
fimprocedimento
procedimento a2(var a:inteiro)
inicio
a:=30
escreval(a,b)
fimprocedimento
inicio
a:=20
b:=10
a1(a,b,b,a)
escreval(a,b)
a2(b)
escreval(a,b)
a1(a,a,b,b)
escreval(a,b)
fimalgoritmo
10
20 10 10 20
30
110
Saída: 20 110
� Como a variável “a” do procedimento foi explicitamente 
declarada para receber passagem de parâmetro por 
valor, a atribuição “a:=c” não se refletiu fora do módulo
� Obs.: A saída de “b” foi 110 pois ela foi passada duas 
vezes na linha “a1(a,b,b,a)”, sendo que a variável “c” 
que a recebeu foi por referência
Saída: 
10 20 110 30
17
Função
Algoritmo "f1"
Var
A,B,C: Real
Funcao Exemplo(var X:Real; Y:Real): Real
Var
C: Real
Inicio
C:=X+Y
C:=C+X
retorne C
escreval(X,Y,C)
Fimfuncao
Inicio
A:=5
B:=6
C:=Exemplo(B,A)+Exemplo(A,B)+B
escreval(A,B,C)
Fimalgoritmo
Função
Algoritmo "f1"
Var
A,B,C: Real
Funcao Exemplo(var X:Real; Y:Real): Real
Var
C: Real
Inicio
C:=X+Y
C:=C+X
retorne C
escreval(X,Y,C)
Fimfuncao
Inicio
A:=5
B:=6
C:=Exemplo(B,A)+Exemplo(A,B)+B
escreval(A,B,C)
Fimalgoritmo
Comando que retornará o 
valor ao chamador da 
função
Tipo de dado associado à função a 
ser retornado
Variável declarada do tipo do 
retorno da função Saída do algoritmo:
6 5 17
5 6 16
5 6 39
Ativação em contexto de 
expressão

Outros materiais