Buscar

Aula13_Modularidade_2

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 77 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 77 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 77 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

Universidade Federal da Grande Dourados
Faculdade de Ciências Exatas e de Tecnologias
Curso de Bacharelado em Sistemas de Informação
Algoritmos
Modularidade (2)
Profª Janne Oeiras Lachi
1
Plano de aula
` Variáveis globais e locais
` Passagem de parâmetro: por valor e por referência
` Parâmetros formais e reais
Exemplo 1: Quais são as variáveis usadas 
neste algoritmo?
programa EXEMPLO2
função DOBRO (v: real): real
início
DOBRO Å v*2
fim
var
i: inteiro
n, res: real
início
para i de 1 ate 3 passo 1 faça
escreva “Informe um numero”
leia n
res Å DOBRO(n)
escreva “O dobro eh: ”, res
fim_para
fim
Exemplo 1: Quais são as variáveis usadas 
neste algoritmo?
programa EXEMPLO2
função DOBRO (v: real): real
início
DOBRO Å v*2
fim
var
i: inteiro
n, res: real
início
para i de 1 ate 3 passo 1 faça
escreva “Informe um numero”
leia n
res Å DOBRO(n)
escreva “O dobro eh: ”, res
fim_para
fim
Escopo de variáveis
` O escopo de uma variável, ou sua abrangência 
operacional, está vinculado à forma de sua visibilidade
no algoritmo em relação aos subprogramas que o 
compõem.
` Visibilidade neste contexto quer dizer quais partes de 
seu algoritmo podem ver ou usar uma variável
` Normalmente, toda variável tem um alcance global: uma 
vez definida, cada parte do seu algoritmo pode acessá-la. 
Exemplo 1: Quais são as variáveis usadas 
neste algoritmo?
programa EXEMPLO2
função DOBRO (v: real): real
início
DOBRO Å v*2
fim
var
i: inteiro
n, res: real
início
para i de 1 ate 3 passo 1 faça
escreva “Informe um numero”
leia n
res Å DOBRO(n)
escreva “O dobro eh: ”, res
fim_para
fim
Entenderemos que v
somente é vista dentro da 
função DOBRO
Entenderemos que i, n e 
res somente são vistas 
dentro do algoritmo 
principal
Escopo de variáveis
` Agora estamos estudando modularização. Nesse 
contexto é muito útil ser capaz de limitar o escopo de 
uma variável de modo que ela seja visível somente 
DENTRO de um subprograma
` Dessa forma, as mudanças dentro do subprograma não 
podem afetar o algoritmo principal de forma inesperada.
Escopo de variáveis
` O escopo de uma variável, ou sua abrangência 
operacional, está vinculado à forma de sua visibilidade no 
algoritmo em relação aos subprogramas que o compõem.
` Variáveis Locais: quando são declaradas dentro de um 
subprograma e, portanto, são válidas somente dentro dele. O 
algoritmo principal e outros subprogramas não conseguem 
“enxergá-la” ou saber da sua existência.
` Variáveis Globais: quando são declaradas no início de um 
algoritmo antes de um conjunto de subprogramas. Têm o 
escopo visível por todos os subprogramas subordinados à
rotina chamadora.
Exemplo 1: escopo de variáveis locais
programa EXEMPLO2
função DOBRO (v: real): real
início
DOBRO Å v*2
fim
var
i: inteiro
n, res: real
início
para i de 1 ate 3 passo 1 faça
escreva “Informe um numero”
leia n
res Å DOBRO(n)
escreva “O dobro eh: ”, res
fim_para
fim
v somente é vista dentro 
da função DOBRO. 
Portanto é uma variável 
local
É como se v fosse 
declarada dentro da 
função. Por isso somente 
é vista SOMENTE dentro 
dela. 
Exemplo 1: escopo de variáveis locais
programa EXEMPLO2
função DOBRO (v: real): real
início
DOBRO Å v*2
fim
var
i: inteiro
n, res: real
início
para i de 1 ate 3 passo 1 faça
escreva “Informe um numero”
leia n
res Å DOBRO(n)
escreva “O dobro eh: ”, res
fim_para
fim
i, n e res estão 
declaradas após a função 
DOBRO. Por isso que são 
vistas somente dentro do 
algoritmo principal.
A função DOBRO não tem 
acesso a elas. E elas são 
locais ao algoritmo 
principal
Exemplo em Português estruturado
programa CALCULADORA()
procedimento ROTSOMA
var
R1, A1, B1 : real
início
escreva “Rotina de Adição”
escreva “Entre o 1º. Valor:”
leia A1
escreva “Entre o 2º. Valor:”
leia B1
R1 Å A1 + B1
escreva “O resultado da adição é:”, R1
fim
procedimento ROTSUBTRACAO()
var
R2, A2, B2 : real
início
escreva “Rotina de Subtração”
escreva “Entre o 1º. Valor:”
leia A2
escreva “Entre o 2º. Valor:”
leia B2
R2 Å A2 - B2
escreva “O resultado da subtração é:”, R2
fim
Variáveis locais, pois 
foram declaradas 
DENTRO dos 
procedimentos
Exemplo em Português estruturado
procedimento ROTMULTIPLICACAO()
var
R3, A3, B3 : real
início
escreva “Rotina de Multiplicação”
escreva “Entre o 1º. Valor:”
leia A3
escreva “Entre o 2º. Valor:”
leia B3
R3 Å A3 * B3
escreva “O resultado da multiplicação é:”, R3
fim
procedimento ROTDIVISAO()
var
R4, A4, B4 : real
início
escreva “Rotina de Divisão”
escreva “Entre o 1º. Valor:”
leia A4
escreva “Entre o 2º. Valor:”
leia B4
se (B4 = 0) então
escreva “Erro: divisão por zero!”
senão
R4 Å A4 / B4
escreva “O resultado da divisão é:”, R4
fim_se
fim
Variáveis locais, pois 
foram declaradas 
DENTRO dos 
procedimentos
Exemplo em Português estruturado
programa CALCULADORA
procedimento ROTSOMA
...
fim
procedimento ROTSUBTRACAO
...
fim
procedimento ROTMULTIPLICACAO
...
fim
procedimento ROTDIVISAO
...
fim
var
OPCAO: inteiro
início
OPCAO Å 0
enquanto (OPCAO <> 5) faça
escreva “1. Adição”
escreva “2. Subtração”
escreva “3. Multiplicação”
escreva “4. Divisão”
escreva “5. Sair do algoritmo”
escreva “Escolha uma opção:”
leia OPCAO
Variável local, pois foi 
declarada DEPOIS dos 
procedimentos.
Os procedimentos 
ROTSOMA. 
ROTSUBTRACAO,
ROTMULTIPLICACAO 
e ROTDIVISAO não tem 
acesso ao seu 
conteúdo.
Exemplo em Português estruturado
programa CALCULADORA
var
OPCAO: inteiro
procedimento ROTSOMA()
...
fim
procedimento ROTSUBTRACAO()
...
fim
procedimento ROTMULTIPLICACAO()
...
fim
procedimento ROTDIVISAO()
...
fim
início
OPCAO Å 0
enquanto (OPCAO <> 5) faça
escreva “1. Adição”
escreva “2. Subtração”
escreva “3. Multiplicação”
escreva “4. Divisão”
escreva “5. Sair do algoritmo”
escreva “Escolha uma opção:”
leia OPCAO
Se fosse declarada 
aqui, ANTES dos 
procedimentos, a 
variável OPCAO seria 
uma variável do tipo 
GLOBAL, isto é, seu 
conteúdo poderia ser 
acessado por todos os 
procedimentos definidos 
no algoritmo.
Escopo de variáveis
` Quando utilizamos módulos, as variáveis no nosso 
algoritmo como um todo (algoritmo principal + módulos) 
podem ser de dois tipos:
` Locais ou Privadas
` Exemplo: nas sub-rotinas temos as variáveis R1, R2, R3, R4, A1, A2, 
A3, A4, B1, B2, B3, B4 e OPCAO
` Globais ou Públicas
` No exemplo dado não há variáveis globais.
Escopo de variáveis: exemplo
` Desenvolver um algoritmo que leia dois valores do tipo 
inteiro para armazenamento nas variáveis A e B. Efetuar a 
troca dos valores de forma que a variável A passe a 
possuir o valor da variável B e vice-versa. Apresentar os 
valores das variáveis A e B após a troca.
programa TROCA
var
A, B, T : inteiro
início
leia A, B
T Å A
A Å B
B Å T
escreva A, B
fim
Espaços ocupados por variáveis
` As três variáveis (A, B e T) são criadas com escopo global 
no exemplo, pois podem ser acessadas de qualquer parte 
do algoritmo.
` Variáveis globais permanecem “vivas” até o final da 
execução do algoritmo.
` As variáveis A e B são usadas na fase de entrada e saída.
` Note que a variável T é usada apenas na operação de 
processamento. O espaço de memória reservado para T 
poderia, portanto, ficar parcialmente livre.
Repensando o uso de memória
programa TROCA_2
var
A, B : inteiro
procedimento TROCA_VARS( )
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
Variáveis globais
Variável local
O espaço de memória alocado para A 
e B ficam ocupados enquanto o 
algoritmo é executado.
Já o espaço de memória paraa 
variável T é alocado quando a sub-
rotina é chamada e desalocado
quando a sub-rotina acaba.
Repensando o uso de memória
programa TROCA_2
var
A, B : inteiro
procedimento TROCA_VARS( )
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
Memória
A 1
B 2
T
e
m
p
o
 
d
e
 
e
x
e
c
u
ç
ã
o
Memória
A 1 2
B 2 1
T 1
Memória
A 1
B 2
T
Memória
A 2
B 1
T 1
Memória
A 2
B 1
T 1
Memória
A 1
B 2
T 1
Economia de memória do computador
` As variáveis existem apenas enquanto o seu 
subprograma existir.
` Variáveis globais devem ser criadas somente quando 
devem ser acessadas por mais de um subprograma.
Escopo de variáveis: exemplo
W
Y
X
Rotina principal
A,B
Rotina 1
Rotina 2
Rotina 1.1
Rotina 1.2
Rotina 2.1
A,X
M
Variáveis globais, visíveis para todas 
as sub-rotinas
Variável A aqui é diferente da 
declarada anteriormente.
W e Y são variáveis locais
Variável local para a Rotina 2, mas 
global em relação à Rotina 2.1
Variável local para a Rotina 2.1. Esta sub-
rotina tem acesso às variáveis A, B e M.
Escopo de variáveis: exemplo
W
Y
X
Rotina principal
A,B
Rotina 1
Rotina 2
Rotina 1.1
Rotina 1.2
Rotina 2.1
A,X
M
Memória
A
B
Memória
A
B
A
X
Memória
A
B
A
X
W
Memória
A
B
A
X
W
Memória
A
B
A
X
W
Y
Memória
A
B
A
X
W
Y
Escopo de variáveis: exemplo
W
Y
X
Rotina principal
A,B
Rotina 1
Rotina 2
Rotina 1.1
Rotina 1.2
Rotina 2.1
A,X
M
Memória
A
B
A
X
W
Y
Memória
A
B
A
M
W
Y
Memória
A
B
A
M
W
X
Escopo de variáveis: exemplo
W
Y
X
Rotina principal
A,B
Rotina 1
Rotina 2
Rotina 1.1
Rotina 1.2
Rotina 2.1
A,X
M
Memória
A
B
A
M
W
X
Memória
A
B
A
M
W
X
Memória
A
B
A
M
W
X
Declaração de variáveis e escopo
programa TROCA_2
var
A, B : inteiro
procedimento TROCA_VARS( )
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
programa TROCA_3
procedimento TROCA_VARS( )
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
A, B são globais, acessíveis por TROCA A, B são locais, NÃO acessíveis por TROCA
Declaração de variáveis e escopo (cont.)
programa TROCA_4
procedimento TROCA_VARS( )
var
T, A, B: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
Declaração de A e B em duas rotinas.
NÃO SÃO AS MESMAS VARIÁVEIS.
Quando TROCA_VARS for chamada, 
novas variáveis A e B serão criadas e 
não serão usados os valores das 
variáveis A e B declaradas na rotina 
principal.
ERRADO!!!
Exemplo 1
programa TROCA_4
procedimento TROCA_VARS( )
var
T, A, B: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
O problema neste exemplo é que 
a pessoa sabe que precisa dos 
valores de A e B dentro do 
procedimento para efetuar a 
troca de valores.
A tentativa que ocorreu é incluir 
essas variáveis dentro do 
procedimento, mas ao declarar 
as variáveis A e B, houve um 
engano porque elas são 
OUTRAS variáveis, diferentes de 
A e B.
Exemplo 1
Memória
A 0
B 3
programa TROCA_4
procedimento TROCA_VARS( )
var
T, A, B: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
Lixo de 
memória
Momento em que as variáveis A e B, são 
alocadas.
Usuário digitou os valores 
1 e 2. E as variáveis T, A e 
B foram alocadas.Exemplo 1
programa TROCA_4
procedimento TROCA_VARS( )
var
T, A, B: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
Memória
A 0
B 3
Memória
A 1
B 2
T 3
A 5
B 6
Lixo de 
memória
Exemplo 1
Memória
A 0
B 3
programa TROCA_4
procedimento TROCA_VARS( )
var
T, A, B: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
Memória
A 1
B 2
T 3
A 5
B 6
Memória
A 1
B 2
T 5
A 6
B 5
Memória
A 1
B 2
T 5
A 6
B 5
Lixo de 
memória
Procedimento faz a troca de valores das variáveis 
com base no lixo de memória.
Exemplo 1
Memória
A 1
B 2
programa TROCA_4
procedimento TROCA_VARS( )
var
T, A, B: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
Memória
A 1
B 2
T 3
A 5
B 6
Memória
A 1
B 2
T 5
A 6
B 5
Memória
A 1
B 2
T 5
A 6
B 5
Lixo de 
memória
No momento de escrever o resultado, estarão 
“vivas” as variáveis A e B, ou seja, o resultado 
na tela não é o esperado.
Retomando o problema...
programa TROCA_4
procedimento TROCA_VARS( )
var
T, A, B: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
Podemos ajeitar este código 
para que ele funcione utilizando 
passagem de parâmetros.
Passagens de parâmetros
` É um processo que permite estabelecer uma linha de 
comunicação entre os conteúdos dos trechos de 
subprogramas e dos trechos de algoritmo que chamam 
esses subprogramas, principalmente se usam variáveis com 
escopo local.
` Dois tipos:
` Passagem de parâmetro por valor
` Passagem de parâmetro por referência
Passagem de parâmetro por valor
` Ocorre a CÓPIA do conteúdo enviado para uma variável 
do mesmo tipo daquela que foi enviada, que existirá apenas 
no procedimento/função.
` Com isso, podem ser feitos processamentos, avaliações e 
atribuições sem que haja qualquer tipo de alteração na 
variável que se encontra no algoritmo chamador.
Exemplo 1: incluindo parâmetros
programa TROCA_4
procedimento TROCA_VARS( )
var
T, A, B: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
escreva A, B
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
fim
Note em vermelho 
a inclusão de 
parâmetros
Versão sem 
parâmetros
Exemplo 1: incluindo parâmetros
programa TROCA_4
procedimento TROCA_VARS( )
var
T, A, B: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS( )
escreva A, B
fim
programa TROCA_4
procedimento TROCA_VARS (C, D: inteiro)
var
T: inteiro 
início
T Å C
C Å D
D Å T
escreva C, D
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
fim
Note que poderiam 
ter outro nome, no 
caso C e D, já que 
recebem uma 
CÓPIA do valor de 
A e B
Sintaxe incluindo parâmetros
programa <nome_do_seu_programa>
procedimento <nome_do_procedimento> (<lista de parâmetros>)
var
<variáveis do procedimento>
início
<instruções do procedimento>
fim
var
<variáveis do seu programa>
início
<instruções>
<sub-rotina>
<instruções>
fim
Nesta lista, defina os parâmetros e o tipo deles.
Ex.: 
(a: logico, b,c: real)
(x, y: inteiro, w: real, z: caractere)
Tipos de parâmetros
` Temos dois tipos:
` Formal: são aqueles utilizados na criação do procedimento para 
definir a sua lista de parâmetros
` Real: são aqueles que aparecem na chamada do procedimento
` Servem para fazer passar dados entre a sub-rotina e a 
rotina principal
Exemplo 1: incluindoparâmetros
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
escreva A, B
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
fim
Parâmetros formais
Parâmetros reais
Exemplo 1: passagem por valor
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
escreva A, B
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
fim
Recebem uma cópia de A e B Memória
A 1
B 2
A 1
B 2
T 4
Após ler os valores de A e B, 
chamamos o procedimento 
TROCA_VARS passando os 
valores de A e B
Exemplo 1: passagem por valor
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
escreva A, B 
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
fim
Memória 
A 1
B 2
A 1
B 2
T 4
Memória
A 1
B 2
A 1 2
B 2 1
T 1
Memória após a troca
Exemplo 1: passagem por valor
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
escreva A, B
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
fim
Note que a 
escrita dos 
valores é feita 
dentro do 
procedimento.
Memória
A 1
B 2
A 2
B 1
T 1
Exemplo 1: observação
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
escreva A, B
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
fim
Precisa escrever aqui dentro porque 
estamos trabalhando com um 
procedimento e não temos como 
mandar de volta os valores para o 
algoritmo principal escrevê-los. 
Memória
A 1
B 2
A 2
B 1
T 1
Exemplo 1: observação
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
escreva A, B
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
fim
Precisa escrever aqui dentro porque 
estamos trabalhando com um 
procedimento e não temos como 
mandar de volta os valores para o 
algoritmo principal. 
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Como é feita a cópia, se você 
escrever dentro da rotina principal, 
serão impressos os valores originais.
Memória
A 1
B 2
A 2
B 1
T 1
Exemplo 1: passagem por valor
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Memória 
A 1
B 2
A 1
B 2
T 4
Se você deixar para escrever dentro do 
algoritmo principal neste exemplo, após 
a chamada do procedimento, as 
variáveis A e B do algoritmo principal 
não mudaram de valor e são esses 
valores que o algoritmo principal tem 
acesso para imprimir.
Memória
A 1
B 2
A 1 2
B 2 1
T 1
Memória
A 1
B 2
A 2
B 1
T 1
Exemplo 1: observação
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
TROCA_VARS Å A, B
fim
var
A, B : inteiro
início
leia A, B
escreva TROCA_VARS(A,B)
fim
ERRADO!!!
1) Procedimento NÃO retorna valor.
2) Se fosse uma função estaria 
errado do mesmo jeito porque está
tentando retornar 2 valores!
Exercício 1
` O procedimento abaixo está escrito corretamente?
procedimento imprimeMenor (x,y: inteiro) 
início 
se (a < b) então
escreva a
senão 
escreva b
fim_se
fim
Os parâmetros são x e y. 
Aqui deveria ser usado x 
e y em todo o 
procedimento.
Exercício 1
` O procedimento abaixo está escrito corretamente?
procedimento imprimeMenor (a, b)
início 
se (a < b) então
escreva a
senão 
escreva b
fim_se
fim
Faltam os tipos dos 
parâmetros. O correto 
seria (a, b: inteiro)
Exercício 1
` O procedimento abaixo está escrito corretamente?
procedimento imprimeMenor (a,b: inteiro) 
início 
se (a < b) então
imprimeMenor Å a
senão 
imprimeMenor Å b
fim_se
fim
Procedimento não retorna valor!
Exercício 1
` O procedimento abaixo está escrito corretamente?
procedimento imprimeMenor (a,b: inteiro) 
var
a, b: inteiro
início
se (a < b) então
escreva a
senão 
escreva b
fim_se
fim
Redeclarou as variáveis a e b aqui 
que foram declaradas previamente 
como parâmetros.
Exercício 1
` O procedimento abaixo está escrito corretamente?
procedimento imprimeMenor (a,b: inteiro) 
início 
se (a < b) então
escreva a
senão 
escreva b
fim_se
fim
Exercício 2
a, b: inteiro 
leia (a, b) 
imprimeMenor (inteiro a, inteiro b)
` Qual fragmento de código chama o procedimento do 
exercício anterior corretamente? 
a, b: inteiro 
leia (a, b) 
imprimeMenor (a, b)
a, b: inteiro 
imprimeMenor (leia (a), leia(b))
imprimeMenor (inteiro x, inteiro y)
a, b, menor: inteiro 
leia (a, b) 
menor Å imprimeMenor (a, b)
Exercício 3
` Considere o algoritmo a seguir e marque qual será sua 
saída se as entradas forem 3.14 e 1.54, respectivamente. 
programa exercício3
procedimento lerDados (x, y: real) 
início 
leia x
leia y
fim
var
x, y: real
início
x Å 0.00
y Å 2.34
lerDados (x, y) 
escreva (“x é: ”, x, “e y é: ”,y)
fim
a) x é -3.14 e y é 3.88 
b) x é 3.14 e y é 2.34 
c) x é 3.14 e y é 1.54 
d) x é 0.00 e y é 2.34 
e) x é 3.14 e y é -1.54 
Exemplo 2: passagem por valor
programa EXEMPLO2
função FATORIAL (v: inteiro): inteiro
var
FAT, I: inteiro
inicio
FAT Å1
se (v > 0) então
para I de 1 até v passo 1 faça
FAT Å FAT * I
fim_para
fim_se
FATORIAL Å FAT
fim
var
n: inteiro
início
escreva “Informe um número n>=0:”
leia n
se (n < 0) então
escreva “Numero invalido!”
senão
escreva “O fatorial de”,n, “eh:”, FATORIAL(n)
fim-se
fim
v recebe uma cópia do valor de 
n.
RESOLUÇÃO COM FUNÇÃO
programa EXEMPLO2
procedimento FATORIAL (v: inteiro)
var
FAT, I: inteiro
inicio
FAT Å1
se (v > 0) então
para I de 1 até v passo 1 faça
FAT Å FAT * I
fim_para
fim_se
escreva “O fatorial de”,v, “eh:”, FAT
fim
var
n: inteiro
início
escreva “Informe um número n>=0:”
leia n
se (n < 0) então
escreva “Numero invalido!”
senão
FATORIAL(n)
fim-se
fim
v recebe uma cópia do valor de 
n.
RESOLUÇÃO COM 
PROCEDIMENTO
Exemplo 2: passagem por valor
programa EXEMPLO2
procedimento FATORIAL (v: inteiro)
var
FAT, I: inteiro
inicio
FAT Å1
se (v > 0) então
para I de 1 até v passo 1 faça
FAT Å FAT * I
fim_para
fim_se
escreva “O fatorial de”,v, “eh:”, FAT
fim
var
n: inteiro
início
escreva “Informe um número n>=0:”
leia n
se (n < 0) então
escreva “Numero invalido!”
senão
FATORIAL(n)
fim-se
fim
Precisa imprimir aqui dentro porque 
FAT é local e não é acessível pelo 
algoritmo principal para ser impressa 
nele.
Não é uma boa prática. Melhor a 
resolução com função.
Exemplo 2: passagem por valor
Passagem de parâmetro por referência
` Não existe cópia do conteúdo. É enviada a referência de 
onde a variável da rotina chamadora se encontra.
` Com isso, qualquer alteração na variável na sub-rotina 
refletirá em alterações na variável da rotina chamadora.
Exemplo 1: vamos usar passagem por 
referência para resolver este problema
programa TROCA_4
procedimento TROCA_VARS (A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
escreva A, B
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
fim
Precisa escrever aqui dentro porque 
estamos trabalhando com um 
procedimento e não temos como 
mandar de volta os valores para o 
algoritmo principal. 
programa TROCA_4
procedimento TROCA_VARS(A, B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Como é feita a cópia, se você 
escrever dentro da rotina principal, 
serão impressos os valores originais.
Memória
A 1
B 2
A 2
B 1
T 1
ERRADO
Exemplo 1: vamos usar passagem por 
referência para resolver este problema
programa TROCA_4
procedimento TROCA_VARS (var A, var B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Em Português estruturado um 
parâmetro passado por referência 
será identificado pelo uso da palavra 
var antes de seu nome
Exemplo 1: entendendo o que ocorre na 
memória
programa TROCA_4
procedimento TROCA_VARS (var A, var B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Memória
Endere
ço
Nome 
da 
variável
Valor
100 A 1
110 B 2
120 A 100
130 B 110
140 T 1
Cada variável possui um 
endereço de memória.
Quando passamos um 
parâmetro por referência, 
estamos passando o 
ENDEREÇO da variável e não 
o seu valor.
Exemplo 1: entendendo o que ocorre na 
memória
programa TROCA_4
procedimento TROCA_VARS (var A, var B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Memória
Endere
ço
Nome 
da 
variável
Valor
100 A 1
110 B 2
120 A 100
130 B 110
140 T 1
Quando o procedimento for 
executado neste trecho, a 
troca de valores ocorrerá no 
endereço indicado pelos 
parâmetros 
Exemplo 1: entendendo o que ocorre na 
memória
programa TROCA_4
procedimento TROCA_VARS (var A, var B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Memória
Endere
ço
Nome 
da 
variável
Valor
100 A 1
110 B 2
120 A 100
130 B 110
140 T 1
Primeiro, T recebe o valor que 
consta no endereço contido 
na variável A. Ou seja, A
contém o endereço 100, e 
nesse endereço consta o valor 
1. então T, recebe o valor 1. 
Exemplo 1: entendendo o que ocorre na 
memória
programa TROCA_4
procedimento TROCA_VARS (var A, var B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Memória
Endere
ço
Nome 
da 
variável
Valor
100 A 1 2
110 B 2
120 A 100
130 B 110
140 T 1
Depois, o endereço indicado 
na variável A deve receber o 
valor contido no endereço 
indicado pela variável B. Ou 
seja, A contém o endereço 
100 e esse endereço deve 
receber o valor que está
contido no endereço 110 
indicado em B, isto é, o valor 
2. 
Exemplo 1: entendendo o que ocorre na 
memória
programa TROCA_4
procedimento TROCA_VARS (var A, var B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Memória
Endere
ço
Nome 
da 
variável
Valor
100 A 1 2
110 B 2 1
120 A 100
130 B 110
140 T 1
Por fim, o endereço indicado 
na variável B deve receber o 
valor contido na variável T. 
Ou seja,o endereço indicado 
por B (110) deve receber o 
valor que está contido em T, 
isto é, o valor 1. 
Exemplo 1: entendendo o que ocorre na 
memória
programa TROCA_4
procedimento TROCA_VARS (var A, var B: inteiro)
var
T: inteiro 
início
T Å A
A Å B
B Å T
fim
var
A, B : inteiro
início
leia A, B
TROCA_VARS(A,B)
escreva A, B
fim
Memória
Endere
ço
Nome 
da 
variável
Valor
100 A 1 2
110 B 2 1
120 A 100
130 B 110
140 T 1
Agora sim, podemos escrever 
os valores de A e B aqui no 
final do algoritmo principal.
Exemplo 2: passagem de parâmetro por 
referência
` Escreva um procedimento chamado media que receba 
como parâmetros a média final de 5 alunos e calcule a 
maior e a menor média. Atenção: esse resultado não 
deve ser escrito dentro do procedimento. Use 
passagem de parâmetros por referência para que o seu 
programa principal possa escrever a maior e a menor 
nota. 
Solução sem procedimento
programa EXEMPLO1
var
media, maior, menor: real
i: inteiro
início
escreva “Informe a 1ª media:”
leia media
maior Å media
menor Å media
para i de 2 ate 5 passo 1 faça
escreva “Informe a”, i, “ª media:”
leia media
se (media < menor) então
menor Å media
fim_se
se (media > maior) então
maior Å media
fim_se
fim_para
escreva “A maior media eh:”, maior
escreva “A menor media eh:”, menor
fim
Solução COM procedimento
programa EXEMPLO2
procedimento maior_menor ()
inicio
fim
var
media, maior, menor: real
i: inteiro
início
escreva “Informe a 1ª media:”
leia media
maior Å media
menor Å media
para i de 2 ate 5 passo 1 faça
escreva “Informe a”, i, “ª media:”
leia media
se (media < menor) então
menor Å media
fim_se
se (media > maior) então
maior Å media
fim_se
fim_para
escreva “A maior media eh:”, maior
escreva “A menor media eh:”, menor
fim
Vamos criar o corpo principal 
do procedimento.
Solução COM procedimento
` Escreva um procedimento chamado media que receba 
como parâmetros a média final de 5 alunos e calcule a 
maior e a menor média. Atenção: esse resultado não 
deve ser escrito dentro do procedimento. Use 
passagem de parâmetros por referência para que o seu 
programa principal possa escrever a maior e a menor 
nota. 
Note que o enunciado do problema diz que é para calcular a maior e a menor média 
e que elas devem ser escritas dentro do ALGORITMO PRINCIPAL. Ou seja, já
sabemos que vamos ter que usar passagem de PARÂMETROS POR REFERÊNCIA 
porque não é possível usar uma função para retornar os 2 valores solicitados.
Solução COM procedimento
programa EXEMPLO2
procedimento maior_menor ()
inicio
escreva “Informe a 1ª media:”
leia media
maior Å nota
menor Å nota
para i de 2 ate 5 passo 1 faça
escreva “Informe a”, i, “ª media:”
leia media
se (media < menor) então
menor Å media
fim_se
se (media > maior) então
maior Å media
fim_se
fim_para
fim
var
media, maior, menor: real
i: inteiro
início
escreva “A maior media eh:”, maior
escreva “A menor media eh:”, menor
fim
Copiamos para o corpo 
principal do procedimento o 
trecho que estava no 
algoritmo principal.
Solução COM procedimento
programa EXEMPLO2
procedimento maior_menor ()
var 
media: real
i: inteiro
inicio
escreva “Informe a 1ª media:”
leia media
maior Å media
menor Å media
para i de 2 ate 5 passo 1 faça
escreva “Informe a”, i, “ª media:”
leia media
se (media < menor) então
menor Å media
fim_se
se (media > maior) então
maior Å media
fim_se
fim_para
fim
var
media, maior, menor: real
i: inteiro
início
escreva “A maior media eh:”, maior
escreva “A menor media eh:”, menor
fim
Vamos declarar a variável 
média dentro do 
procedimento. 
Também vamos declarar a 
variável i que está sendo 
usada somente dentro do 
procedimento
Solução COM procedimento
programa EXEMPLO2
procedimento maior_menor (var maior, var menor: 
real)
var 
media: real
i: inteiro
inicio
.
.
.
fim
var
maior, menor: real
início
maior_menor(maior, menor)
escreva “A maior media eh:”, maior
escreva “A menor media eh:”, menor
fim
Vamos chamar dentro do 
algoritmo principal o 
procedimento media e passar 
por referência as variáveis 
menor e maior.
Vamos também definir os 
parâmetros formais do 
procedimento.
Exercício 4
programa EXEMPLO2
procedimento maior_menor (var maior, var menor: 
real)
var 
media:real
i: inteiro
inicio
escreva “Informe a 1ª media:”
leia media
maior Å media
menor Å media
para i de 2 ate 5 passo 1 faça
escreva “Informe a”, i, “ª media:”
leia media
se (media < menor) então
menor Å media
fim_se
se (media > maior) então
maior Å media
fim_se
fim_para
fim
var
maior, menor: real
início
maior_menor(maior, menor)
escreva “A maior media eh:”, maior
escreva “A menor media eh:”, menor
fim
Execute o algoritmo 
mostrando a alocação e 
desalocação de variáveis na 
memória. Suponha que os 
valores lidos sejam 4.0, 7.0, 
5.0, 8.0, 2.0. Suponha que as 
variáveis maior e menor no 
algoritmo principal tenham o 
endereço 100 e 110 
respectivamente.
Exercício 5
programa EXEMPLO2
procedimento maior_menor (var maior, var menor: 
real)
var 
media: real
i: inteiro
inicio
escreva “Informe a 1ª media:”
leia media
maior Å media
menor Å media
para i de 2 ate 5 passo 1 faça
escreva “Informe a”, i, “ª media:”
leia media
se (media < menor) então
menor Å media
fim_se
se (media > maior) então
maior Å media
fim_se
fim_para
fim
var
maior, menor: real
início
maior_menor(maior, menor)
escreva “A maior media eh:”, maior
escreva “A menor media eh:”, menor
fim
Modifique este algoritmo e 
utilize uma função no lugar do 
procedimento. O que deve 
mudar? Como ficaria a 
passagem de parâmetros?
Exercício 5: possível solução
programa EXEMPLO2
função maior_menor (var menor: real):real
var 
maior, media: real
i: inteiro
inicio
escreva “Informe a 1ª media:”
leia media
maior Å media
menor Å media
para i de 2 ate 5 passo 1 faça
escreva “Informe a”, i, “ª media:”
leia media
se (media < menor) então
menor Å media
fim_se
se (media > maior) então
maior Å media
fim_se
fim_para
maior_menor Å maior
fim
var
menor: real
início
escreva “A maior media eh:”, maior_menor(menor)
escreva “A menor media eh:”, menor
fim
Vantagens da modularização
` Evitar que blocos de programa fiquem grande demais e, 
consequentemente, mais difíceis de entender;
` Separar o programa em partes logicamente compreendidas 
de forma isolada;
` Permitir reaproveitamento de código, evitando “copy / paste”
de trechos bem similares;
` Evitar que trechos idênticos sejam repetidos inúmeras vezes, 
minimizando os erros e facilitando futuras alterações.
Referências
` Algoritmos – Fundamento e Prática. Everton Coimbra de 
Araújo. Florianópolis: Visual Book, 2007.
` Algoritmos - Lógica para desenvolvimento de programação de 
computadores. José Augusto N. G. Manzano, Jayr Figueiredo 
de Oliveira. São Paulo: Érica, 2006.
77
	Algoritmos
	Plano de aula
	Exemplo 1: Quais são as variáveis usadas neste algoritmo?
	Exemplo 1: Quais são as variáveis usadas neste algoritmo?
	Escopo de variáveis
	Exemplo 1: Quais são as variáveis usadas neste algoritmo?
	Escopo de variáveis
	Escopo de variáveis
	Exemplo 1: escopo de variáveis locais
	Exemplo 1: escopo de variáveis locais
	Exemplo em Português estruturado
	Exemplo em Português estruturado
	Exemplo em Português estruturado
	Exemplo em Português estruturado
	Escopo de variáveis
	Escopo de variáveis: exemplo
	Espaços ocupados por variáveis
	Repensando o uso de memória
	Repensando o uso de memória
	Economia de memória do computador
	Escopo de variáveis: exemplo
	Escopo de variáveis: exemplo
	Escopo de variáveis: exemplo
	Escopo de variáveis: exemplo
	Declaração de variáveis e escopo
	Declaração de variáveis e escopo (cont.)
	Exemplo 1
	Exemplo 1
	Exemplo 1
	Exemplo 1
	Exemplo 1
	Retomando o problema...
	Passagens de parâmetros
	Passagem de parâmetro por valor
	Exemplo 1: incluindo parâmetros
	Exemplo 1: incluindo parâmetros
	Sintaxe incluindo parâmetros
	Tipos de parâmetros
	Exemplo 1: incluindo parâmetros
	Exemplo 1: passagem por valor
	Exemplo 1: passagem por valor
	Exemplo 1: passagem por valor
	Exemplo 1: observação
	Exemplo 1: observação
	Exemplo 1: passagem por valor
	Exemplo 1: observação
	Exercício 1
	Exercício 1
	Exercício 1
	Exercício 1
	Exercício 1
	Exercício 2
	Exercício 3
	Exemplo 2: passagem por valor
	Passagem de parâmetro por referência
	Exemplo 1: vamos usar passagem por referência para resolver este problema
	Exemplo 1: vamos usar passagem por referência para resolver este problema
	Exemplo 1: entendendo o que ocorre na memória
	Exemplo 1: entendendo o que ocorre na memória
	Exemplo 1: entendendo o que ocorre na memória
	Exemplo 1: entendendo o que ocorre na memória
	Exemplo 1: entendendo o que ocorre na memória
	Exemplo 1: entendendo o que ocorre na memória
	Exemplo 2: passagem de parâmetro por referência
	Solução sem procedimento
	Solução COM procedimento
	Solução COM procedimento
	Solução COM procedimento
	Solução COM procedimento
	Solução COM procedimento
	Exercício 4
	Exercício 5
	Exercício 5: possível solução
	Vantagens da modularização
	Referências

Outros materiais