• Nenhum resultado encontrado

Escopo de Vari´aveis e Fun¸c˜oes Recursivas

N/A
N/A
Protected

Academic year: 2022

Share "Escopo de Vari´aveis e Fun¸c˜oes Recursivas"

Copied!
29
0
0

Texto

(1)

Escopo de Vari´ aveis e Fun¸ c˜ oes Recursivas

Introdu¸ c˜ ao a Programa¸ c˜ ao de Computadores

Noemi Rodriguez

[email protected]

Departamento de Inform´atica, PUC-Rio

14 de Setembro de 2020

(2)

Recurs˜ ao

Exemplo: potencia¸c˜ ao I defini¸c˜ ao recursiva

pot(x , k) =

( 1 se k = 0

x ∗ pot(x, k − 1) se k>0

(3)

Potencia¸c˜ ao

f u n c t i o n p o t ( x , k )

- - s u p o n d o q u e k ´e i n t e i r o > 0 i f k = = 0 t h e n

r e t u r n 1 e l s e

r e t u r n x * p o t ( x , k - 1 ) e n d

e n d

p r i n t (" e s c r e v a d o i s n ´u m e r o s i n t e i r o s : ") n u m , e x p = i o.r e a d(" * n ", " * n ")

m e u r e s u l t a d o = p o t ( n u m , e x p ) r e s u l t a d o c e r t o = n u m ^ e x p - - t e s t a n d o r e s u l t a d o :

i f m e u r e s u l t a d o = = r e s u l t a d o c e r t o t h e n

p r i n t(" A c e r t e i . O r e s u l t a d o ´e : ", m e u r e s u l t a d o ) e l s e

p r i n t( s t r i n g . f o r m a t

(" E r r e i : - ( O r e s u l t a d o c e r t o ´e % d e c a l c u l e i % d ", r e s u l t a d o c e r t o , m e u r e s u l t a d o ) )

e n d

(4)

Potencia¸c˜ ao

f u n c t i o n p o t ( x , k )

- - s u p o n d o q u e k ´e i n t e i r o > 0 i f k = = 0 t h e n

r e t u r n 1 e l s e

r e t u r n x * p o t ( x , k - 1 ) e n d

e n d

p r i n t (" e s c r e v a d o i s n ´u m e r o s i n t e i r o s : ") n u m , e x p = i o.r e a d(" * n ", " * n ")

m e u r e s u l t a d o = p o t ( n u m , e x p ) r e s u l t a d o c e r t o = n u m ^ e x p

- - t e s t a n d o r e s u l t a d o :

i f m e u r e s u l t a d o = = r e s u l t a d o c e r t o t h e n

p r i n t(" A c e r t e i . O r e s u l t a d o ´e : ", m e u r e s u l t a d o ) e l s e

p r i n t( s t r i n g . f o r m a t

(" E r r e i : - ( O r e s u l t a d o c e r t o ´e % d e c a l c u l e i % d ", r e s u l t a d o c e r t o , m e u r e s u l t a d o ) )

e n d

(5)

Potencia¸c˜ ao

f u n c t i o n p o t ( x , k )

- - s u p o n d o q u e k ´e i n t e i r o > 0 i f k = = 0 t h e n

r e t u r n 1 e l s e

r e t u r n x * p o t ( x , k - 1 ) e n d

e n d

p r i n t (" e s c r e v a d o i s n ´u m e r o s i n t e i r o s : ") n u m , e x p = i o.r e a d(" * n ", " * n ")

m e u r e s u l t a d o = p o t ( n u m , e x p ) r e s u l t a d o c e r t o = n u m ^ e x p - - t e s t a n d o r e s u l t a d o :

i f m e u r e s u l t a d o = = r e s u l t a d o c e r t o t h e n

p r i n t(" A c e r t e i . O r e s u l t a d o ´e : ", m e u r e s u l t a d o ) e l s e

p r i n t( s t r i n g . f o r m a t

(" E r r e i : - ( O r e s u l t a d o c e r t o ´e % d e c a l c u l e i % d ", r e s u l t a d o c e r t o , m e u r e s u l t a d o ) )

e n d

(6)

Recurs˜ ao — funcionamento

Exemplo: potencia¸c˜ ao

I usando a defini¸c˜ ao recursiva

f u n c t i o n p o t ( x , k )

- - s u p o n d o q u e k ´e i n t e i r o > 0 i f k = = 0 t h e n

r e t u r n 1 e l s e

r e t u r n x * p o t ( x , k - 1 ) e n d

e n d

(x, k) express˜ ao avaliada pot(x , k)

pot(x, 0) return 1 1

pot(x, 1) return x * pot(x, 0) x

pot(x, 2) return x * pot(x, 1) x

2

pot(x, 3) return x * pot(x, 2) x

3

pot(x, 4) return x * pot(x, 3) x

4

(7)

Recurs˜ ao — funcionamento

Exemplo: potencia¸c˜ ao

I usando a defini¸c˜ ao recursiva

f u n c t i o n p o t ( x , k )

- - s u p o n d o q u e k ´e i n t e i r o > 0 i f k = = 0 t h e n

r e t u r n 1 e l s e

r e t u r n x * p o t ( x , k - 1 ) e n d

e n d

(x, k) express˜ ao avaliada pot(x, k)

pot(x, 0) return 1 1

pot(x, 1) return x * pot(x, 0) x

pot(x, 2) return x * pot(x, 1) x

2

pot(x, 3) return x * pot(x, 2) x

3

pot(x, 4) return x * pot(x, 3) x

4

(8)

Recurs˜ ao — funcionamento

Exemplo: potencia¸c˜ ao

I usando a defini¸c˜ ao recursiva

f u n c t i o n p o t ( x , k )

- - s u p o n d o q u e k ´e i n t e i r o > 0 i f k = = 0 t h e n

r e t u r n 1 e l s e

r e t u r n x * p o t ( x , k - 1 ) e n d

e n d

(x, k) express˜ ao avaliada pot(x, k)

pot(x, 0) return 1 1

pot(x, 1) return x * pot(x, 0) x

pot(x, 2) return x * pot(x, 1) x

2

pot(x, 3) return x * pot(x, 2) x

3

pot(x, 4) return x * pot(x, 3) x

4

(9)

Recurs˜ ao — funcionamento

Exemplo: potencia¸c˜ ao

I usando a defini¸c˜ ao recursiva

f u n c t i o n p o t ( x , k )

- - s u p o n d o q u e k ´e i n t e i r o > 0 i f k = = 0 t h e n

r e t u r n 1 e l s e

r e t u r n x * p o t ( x , k - 1 ) e n d

e n d

(x, k) express˜ ao avaliada pot(x, k)

pot(x, 0) return 1 1

pot(x, 1) return x * pot(x, 0) x pot(x, 2) return x * pot(x, 1) x

2

pot(x, 3) return x * pot(x, 2) x

3

pot(x, 4) return x * pot(x, 3) x

4

(10)

Recurs˜ ao — funcionamento

Exemplo: potencia¸c˜ ao

I usando a defini¸c˜ ao recursiva

f u n c t i o n p o t ( x , k )

- - s u p o n d o q u e k ´e i n t e i r o > 0 i f k = = 0 t h e n

r e t u r n 1 e l s e

r e t u r n x * p o t ( x , k - 1 ) e n d

e n d

(x, k) express˜ ao avaliada pot(x, k)

pot(x, 0) return 1 1

pot(x, 1) return x * pot(x, 0) x pot(x, 2) return x * pot(x, 1) x

2

pot(x, 3) return x * pot(x, 2) x

3

pot(x, 4) return x * pot(x, 3) x

4

(11)

Recurs˜ ao — funcionamento

Exemplo: potencia¸c˜ ao

I usando a defini¸c˜ ao recursiva

f u n c t i o n p o t ( x , k )

- - s u p o n d o q u e k ´e i n t e i r o > 0 i f k = = 0 t h e n

r e t u r n 1 e l s e

r e t u r n x * p o t ( x , k - 1 ) e n d

e n d

(x, k) express˜ ao avaliada pot(x, k)

pot(x, 0) return 1 1

pot(x, 1) return x * pot(x, 0) x

pot(x, 2) return x * pot(x, 1) x

2

pot(x, 3) return x * pot(x, 2) x

3

pot(x, 4) return x * pot(x, 3) x

4

(12)

Potencia¸c˜ ao - e expoentes negativos?

I o que acontece com programa anterior nesse caso?

I verificar!

I programa em www.inf.puc-rio.br/~noemi/inf1031/

code/aula05/potencia.lua

(13)

Potencia¸c˜ ao - e expoentes negativos?

I o que acontece com programa anterior nesse caso?

I verificar!

I programa em www.inf.puc-rio.br/~noemi/inf1031/

code/aula05/potencia.lua

(14)

Potencia¸c˜ ao - e expoentes negativos?

f u n c t i o n p o t ( x , k ) i f k = = 0 t h e n

r e t u r n 1

e l s e i f k > 0 t h e n r e t u r n x * p o t ( x , k - 1 ) e l s e

r e t u r n 1 / p o t ( x , - k ) e n d

e n d

I cuidado! agora o resultado n˜ ao ´ e inteiro!

p r i n t (" e s c r e v a d o i s n ´u m e r o s i n t e i r o s : ") n u m , e x p = i o.r e a d(" * n ", " * n ")

m e u r e s u l t a d o = p o t ( n u m , e x p )

i f ( m e u r e s u l t a d o - r e s u l t a d o c e r t o ) < t o l e r a n c i a t h e n

(15)

Potencia¸c˜ ao - e expoentes negativos?

f u n c t i o n p o t ( x , k ) i f k = = 0 t h e n

r e t u r n 1

e l s e i f k > 0 t h e n r e t u r n x * p o t ( x , k - 1 ) e l s e

r e t u r n 1 / p o t ( x , - k ) e n d

e n d

I cuidado! agora o resultado n˜ ao ´ e inteiro!

p r i n t (" e s c r e v a d o i s n ´u m e r o s i n t e i r o s : ") n u m , e x p = i o.r e a d(" * n ", " * n ")

m e u r e s u l t a d o = p o t ( n u m , e x p )

i f ( m e u r e s u l t a d o - r e s u l t a d o c e r t o ) <

t o l e r a n c i a t h e n

(16)

Escopo de vari´ aveis

I Vari´ aveis globais (usadas at´ e agora!) I Declara¸ c˜ ao impl´ıcita

I Vis´ıvel em todo o ambiente subsequente

I Vari´ aveis locais

I Declara¸ c˜ ao expl´ıcita

I Vis´ıvel apenas dentro do ambiente que a declara

I

Parˆ ametros s˜ ao vari´ aveis locais ` a fun¸ c˜ ao I Tende a ter acesso mais eficiente

I Protegem o mal uso do ambiente global

I Boa pr´atica de programa¸c˜ao

a = 2 b = 3 c = 4

f = f u n c t i o n ( b ) l o c a l a = 4

p r i n t( a , b ) - - v a r i ´a v e i s l o c a i s p r i n t( c , d ) - - v a r i ´a v e i s g l o b a i s e n d

f ( 7 ) f ( 9 )

p r i n t( a , b ) - - v a r i ´a v e i s g l o b a i s

Sa´ıda:

4 , 7 4 , n i l 4 , 9 4 , n i l 2 , 3

(17)

Escopo de vari´ aveis

I Vari´ aveis globais (usadas at´ e agora!) I Declara¸ c˜ ao impl´ıcita

I Vis´ıvel em todo o ambiente subsequente I Vari´ aveis locais

I Declara¸ c˜ ao expl´ıcita

I Vis´ıvel apenas dentro do ambiente que a declara

I

Parˆ ametros s˜ ao vari´ aveis locais ` a fun¸ c˜ ao I Tende a ter acesso mais eficiente

I Protegem o mal uso do ambiente global

I Boa pr´atica de programa¸c˜ao

a = 2 b = 3 c = 4

f = f u n c t i o n ( b ) l o c a l a = 4

p r i n t( a , b ) - - v a r i ´a v e i s l o c a i s p r i n t( c , d ) - - v a r i ´a v e i s g l o b a i s e n d

f ( 7 ) f ( 9 )

p r i n t( a , b ) - - v a r i ´a v e i s g l o b a i s

Sa´ıda:

4 , 7 4 , n i l 4 , 9 4 , n i l 2 , 3

(18)

Escopo de vari´ aveis

I Vari´ aveis globais (usadas at´ e agora!) I Declara¸ c˜ ao impl´ıcita

I Vis´ıvel em todo o ambiente subsequente I Vari´ aveis locais

I Declara¸ c˜ ao expl´ıcita

I Vis´ıvel apenas dentro do ambiente que a declara

I

Parˆ ametros s˜ ao vari´ aveis locais ` a fun¸ c˜ ao I Tende a ter acesso mais eficiente

I Protegem o mal uso do ambiente global

I Boa pr´atica de programa¸c˜ao

a = 2 b = 3 c = 4

f = f u n c t i o n ( b ) l o c a l a = 4

p r i n t( a , b ) - - v a r i ´a v e i s l o c a i s p r i n t( c , d ) - - v a r i ´a v e i s g l o b a i s e n d

f ( 7 ) f ( 9 )

Sa´ıda:

4 , 7 4 , n i l 4 , 9 4 , n i l 2 , 3

(19)

Escopo de vari´ aveis

I Vari´ aveis globais (usadas at´ e agora!) I Declara¸ c˜ ao impl´ıcita

I Vis´ıvel em todo o ambiente subsequente I Vari´ aveis locais

I Declara¸ c˜ ao expl´ıcita

I Vis´ıvel apenas dentro do ambiente que a declara

I

Parˆ ametros s˜ ao vari´ aveis locais ` a fun¸ c˜ ao I Tende a ter acesso mais eficiente

I Protegem o mal uso do ambiente global

I Boa pr´atica de programa¸c˜ao

a = 2 b = 3 c = 4

f = f u n c t i o n ( b ) l o c a l a = 4

p r i n t( a , b ) - - v a r i ´a v e i s l o c a i s p r i n t( c , d ) - - v a r i ´a v e i s g l o b a i s e n d

f ( 7 ) f ( 9 )

p r i n t( a , b ) - - v a r i ´a v e i s g l o b a i s

Sa´ıda:

4 , 7 4 , n i l 4 , 9 4 , n i l 2 , 3

(20)

Fun¸c˜ oes: escopo

Passagem de parˆ ametros para fun¸ c˜ oes I Na chamada, s˜ ao passados valores

I Valores inicializam parˆ ametros (vari´ aveis locais)

f u n c t i o n t e s t e ( a , b , c ) a = a + 1

b = b + 1 c = c + 1 e n d

a = 1 0 b = 1 1 c = 1 2 t e s t e ( a , b , c ) p r i n t( a , b , c )

I

Sa´ıda:

1 0 1 1 1 2 - - p a r ^a m e t r o s s ~a o v a r i ´a v e i s l o c a i s

(21)

Fun¸c˜ oes: escopo

Passagem de parˆ ametros para fun¸ c˜ oes I Na chamada, s˜ ao passados valores

I Valores inicializam parˆ ametros (vari´ aveis locais)

f u n c t i o n t e s t e ( a , b , c ) a = a + 1

b = b + 1 c = c + 1 e n d

a = 1 0 b = 1 1 c = 1 2 t e s t e ( a , b , c ) p r i n t( a , b , c ) I

Sa´ıda:

1 0 1 1 1 2 - - p a r ^a m e t r o s s ~a o v a r i ´a v e i s l o c a i s

(22)

Fun¸c˜ oes

Passagem de parˆ ametros para fun¸ c˜ oes I Nomes podem ser quaisquer

f u n c t i o n t e s t e ( pa , pb , p c ) p a = p a + 1

p b = p b + 1 p c = p c + 1

r e t u r n ( p a + p b + p c ) e n d

a = 1 0 b = 1 1 c = 1 2

p r i n t( t e s t e ( a , b , c ) ) p r i n t( a , b , c )

I Sa´ıda:

3 6

1 0 1 1 1 2 - - p a r ^a m e t r o s s ~a o v a r i ´a v e i s l o c a i s

(23)

Fun¸c˜ oes

Passagem de parˆ ametros para fun¸ c˜ oes I Nomes podem ser quaisquer

f u n c t i o n t e s t e ( pa , pb , p c ) p a = p a + 1

p b = p b + 1 p c = p c + 1

r e t u r n ( p a + p b + p c ) e n d

a = 1 0 b = 1 1 c = 1 2

p r i n t( t e s t e ( a , b , c ) ) p r i n t( a , b , c )

I Sa´ıda:

3 6

1 0 1 1 1 2 - - p a r ^a m e t r o s s ~a o v a r i ´a v e i s l o c a i s

(24)

Recurs˜ ao

Exemplo: m´ aximo divisor comum I Algoritmo de Euclides

MDC(x, y) =

( y se x%y = 0 MDC(y, x%y) caso contr´ ario

f u n c t i o n m d c ( n1 , n 2 ) l o c a l r e s t o = n 1 % n 2 i f r e s t o = = 0 t h e n

r e t u r n n 2 e l s e

r e t u r n m d c ( n2 , r e s t o ) e n d

e n d

p r i n t( m d c ( 4 2 , 2 4 ) ) - - > 6

(25)

Recurs˜ ao

Exemplo: m´ aximo divisor comum I Algoritmo de Euclides

MDC(x, y) =

( y se x%y = 0 MDC(y, x%y) caso contr´ ario

f u n c t i o n m d c ( n1 , n 2 ) l o c a l r e s t o = n 1 % n 2 i f r e s t o = = 0 t h e n

r e t u r n n 2 e l s e

r e t u r n m d c ( n2 , r e s t o ) e n d

e n d

p r i n t( m d c ( 4 2 , 2 4 ) ) - - > 6

(26)

ainda escopo...

I e se mudarmos o programa para:

f u n c t i o n m d c ( n1 , n 2 ) l o c a l r e s t o = n 1 % n 2 i f r e s t o = = 0 t h e n

r e t u r n n 2 e l s e

l o c a l d i v = m d c ( n2 , r e s t o )

p r i n t (" r e s t o a q u i e r a : ". . r e s t o ) r e t u r n d i v

e n d e n d

p r i n t( 8 5 , 2 0 )

I o que ser´ a impresso?

I e se tirarmos a declara¸ c˜ ao de local de resto? experimente! I www.inf.puc-rio.br/~noemi/inf1031/code/aula05/mdc.

lua

(27)

ainda escopo...

I e se mudarmos o programa para:

f u n c t i o n m d c ( n1 , n 2 ) l o c a l r e s t o = n 1 % n 2 i f r e s t o = = 0 t h e n

r e t u r n n 2 e l s e

l o c a l d i v = m d c ( n2 , r e s t o )

p r i n t (" r e s t o a q u i e r a : ". . r e s t o ) r e t u r n d i v

e n d e n d

p r i n t( 8 5 , 2 0 )

I o que ser´ a impresso?

I e se tirarmos a declara¸ c˜ ao de local de resto? experimente! I www.inf.puc-rio.br/~noemi/inf1031/code/aula05/mdc.

lua

(28)

ainda escopo...

I e se mudarmos o programa para:

f u n c t i o n m d c ( n1 , n 2 ) l o c a l r e s t o = n 1 % n 2 i f r e s t o = = 0 t h e n

r e t u r n n 2 e l s e

l o c a l d i v = m d c ( n2 , r e s t o )

p r i n t (" r e s t o a q u i e r a : ". . r e s t o ) r e t u r n d i v

e n d e n d

p r i n t( 8 5 , 2 0 )

I o que ser´ a impresso?

I e se tirarmos a declara¸ c˜ ao de local de resto? experimente!

I www.inf.puc-rio.br/~noemi/inf1031/code/aula05/mdc.

lua

(29)

Exerc´ıcios Propostos

I em www.inf.puc-rio.br/~noemi/inf1031/

05exercicios.pdf

Referências

Documentos relacionados

Consiste em entrevistar pai, mãe ou responsável para extrair o máximo de informações possíveis sobre o sujeito, realizando uma posterior Análise e levantamento do

“Quando tratamos da pesquisa qualitativa, freqüentemente as atividades que compõem a fase exploratória, além de antecederem à construção do projeto, também a

Nas Se¸c˜oes 3, 4 e 5 apresentamos exemplos importantes de fun¸c˜oes complexas de uma vari´avel complexa, a saber: as fun¸c˜oes racionais, as fun¸c˜oes polinomiais, a

Em uma s´ erie de tentativas independentes, com probabilidade constante p de um sucesso, fa¸ca a vari´ avel aleat´ oria X denotar o n´ umero de tentativas at´ e que o primeiro

A Sizmek MDX Analytics é projetada para fornecer acesso fácil aos dados de campanha, necessários para o monitoramento, otimização e análise de métricas para ajudar os

Sugere-se alteração da resposta para positiva, pois o proponente poderia ser elegível, sim, à Leniência Plus se trouxesse ao conhecimento do CADE uma terceira infração, da qual

Tipo de aquisição referente a compra de passagem para embarque em meios de transportes diversos (passagens áereas, rodoviárias ou hidroviárias, em âmbito municipal, estadual,

Promover oficinas para confecção de bonecos gigantes e restauro dos já existentes, proporcionando ao cidadão a aprendizagem da técnica de papietagem, modelagem