computação e programação - fenix.tecnico.ulisboa.pt 21.pdf · aula teórica 21 computação e...
Post on 02-Dec-2018
219 Views
Preview:
TRANSCRIPT
1
Instituto Superior Técnico,
Dep. de Engenharia Mecânica - ACCAII
Aula Teórica 21
Computação e ProgramaçãoMEMec - LEAN
1º Semestre 2010-2011
Miguel Silva, José Borges Computação e Programação 2010/2011 3
• Tópicos Avançados sobre Funções
• Utilização de function handles
• como funções anónimas
• como argumentos de funções
• Funções encadeadas (nested functions)
• Funções recursivas
Alinhamento da AT 21
2
Miguel Silva, José Borges Computação e Programação 2010/2011 4
• Tópicos Avançados sobre Funções
• Utilização de function handles
• como funções anónimas
• como argumentos de funções
• Funções encadeadas (nested functions)
• Funções recursivas
Alinhamento da AT 21
Miguel Silva, José Borges Computação e Programação 2010/2011
Template de uma callback para GUIs
5
HANDLES STRUCTURE (handles): apontador para
uma estrutura com atributos e propriedades (osmesmos visualizáveis no Property Inspector) de todasas componentes existentes na GUI, bem como dadosespecíficos da aplicação.
OBJECT HANDLE (hObject): estrutura com atributose propriedades (os mesmos visualizáveis noProperty Inspector) da componente que disparou acallback
3
Miguel Silva, José Borges Computação e Programação 2010/2011 6
• Tópicos Avançados sobre Funções
• Utilização de function handles
• como funções anónimas
• como argumentos de funções
• Funções encadeadas (nested functions)
• Funções recursivas
Alinhamento da AT 21
Miguel Silva, José Borges Computação e Programação 2010/2011
Definição de function handle
7
• O function handle é um tipo de dados do MATLAB,que cria uma apontador para uma função, ouconjunto de instruções, e permite fazer a chamada aessa função de um modo indirecto.
• É possível utilizar um function handle comoargumento de funções.
• No momento em que se cria o function handle énecessário que a função associada esteja definida nopath (caminho) e/ou no âmbito actual.
4
Miguel Silva, José Borges Computação e Programação 2010/2011 8
Descrição: Um function handle retorna um handle (apontador) para a função especificada
Sintaxe:
handle = @(arglist)conjuntoDeInstrucoes
ou
handle = @functionname
ou
handle = str2func(functionname)
Function handle genérico
Miguel Silva, José Borges Computação e Programação 2010/2011
Definição de function handle
9
• Quando são criadas, as function handle guardam todaa informação necessária para a função ser executada.
• Na chamada à função, utilizando o seu functionhandle, as condições anteriores não têm que severificar, e portanto a função pode ser executadaposteriormente.
• Por exemplo, pode-se executar uma sub-função forado seu âmbito (.m file onde está definida) utilizandoum function handle, desde que o handle tenha sidocriado no âmbito da sub-função (.m file onde estádefinida).
5
Miguel Silva, José Borges Computação e Programação 2010/2011
Funções anónimas
10
Descrição: Uma função anónima é uma função muito simples que não necessita de ser guardada num ficheiro.m. Utiliza-se para simplificar programas ,quando os cálculos são muito simples. Podem ser criadas na linha de comandos, ou num script.
Sintaxe: fnhandle = @(arglist)codigoDaFuncao
Miguel Silva, José Borges Computação e Programação 2010/2011
Exemplos
11
>> h_areaRect = @(larg,alt)larg*alt;
>> area=h_areaRect(2,4)
area =
8
>> myFun1 = @(x) x.^2 - 2*x + 1;
>> myFun1(4)
ans =
9
6
Miguel Silva, José Borges Computação e Programação 2010/2011
Exemplos
12
>> printAnonim=@()fprintf('%.2f\n',rand);
>> printAnonim()
0.81
>> printAnonim
printAnonim =
@()fprintf('%.2f\n',rand)
Miguel Silva, José Borges Computação e Programação 2010/2011
Exemplos
13
>> driverMyfun2
>> Introduza uma expressão em ordem a x: x^2 + 2
Introduza um valor para x: 2
O valor de myFun2(2.00): 6.00
7
Miguel Silva, José Borges Computação e Programação 2010/2011
Bibliotecas de funções anónimas
14
• É possível guardar num ficheiro .mat, funções anónimaslogicamente relacionadas, de modo a ser possível reutilizá-las.
>> areaRect = @(larg,alt) larg*alt;
>> areaCirc = @(raio) pi*raio^2;
>> save funcAnonimAreas areaRect areaCirc
>> clear
>> whos
Miguel Silva, José Borges Computação e Programação 2010/2011
Bibliotecas de funções anónimas
15
>> load funcAnonimAreas
>> whos
Name Size Bytes Class Attributes
areaCirc 1x1 16 function_handle
areaRect 1x1 16 function_handle
8
Miguel Silva, José Borges Computação e Programação 2010/2011
Function handles usados com funções
16
• Os function handles podem ser criadas para funções builtin(pré-definidas) ou para funções definidas pelo programador
>> h_fact = @factorial;
>> h_fact(5)
ans =
120
Miguel Silva, José Borges Computação e Programação 2010/2011
Exemplos de utilização
17
>> hndl = @myFun3
hndl =
@myFun3
>> hndl = str2func('myFun3')
hndl =
@myFun3
>> myFun3(5)
ans =
16
>> hndl(5)
ans =
16
9
Miguel Silva, José Borges Computação e Programação 2010/2011
Function handle como argumento
18
>> hndl = @myFun3;
>> fnfnexamp(myFun3)
??? Input argument "x" is undefined.
Error in ==> myFun3 at 3
res = x.^2 - 2*x + 1;
>> fnfnexamp(hndl)
Miguel Silva, José Borges Computação e Programação 2010/2011 19
• Tópicos Avançados sobre Funções
• Utilização de function handles
• como funções anónimas
• como argumentos de funções
• Funções encadeadas (nested functions)
• Funções recursivas
Alinhamento da AT 21
10
Miguel Silva, José Borges Computação e Programação 2010/2011
Function handle criado na função
20
>> fnstrfn2('sin')
Miguel Silva, José Borges Computação e Programação 2010/2011
A função feval
21
Descrição: Avalia a função especificada por um function handleou pelo nome da função, nos argumentos fornecidos.
Sintaxe: [y1,..,yn] = feval(F,x1,...,xn)
>> z = feval('sin',[0,pi/2,pi,3*pi/2])
z =
0 1.0000 0.0000 -1.0000
>> q = feval(@cos,[0,pi/2,pi,3*pi/2])
q =
1.0000 0.0000 -1.0000 -0.0000
11
Miguel Silva, José Borges Computação e Programação 2010/2011
Utilização da função eval
22
>> fnstrfn('cos')
Miguel Silva, José Borges Computação e Programação 2010/2011
Vantagens dos function handles
23
• Os function handle podem ser passadas como argumentos defunções.
• Desempenho melhora quando as funções são executadasvárias vezes.
• As funções privadas, encadeadas e as sub-funções podem seracessíveis em qualquer parte se forem criadas as respectivasfunction handle.
• Logo, uma função (implementada numa m-file) pode ter váriasfunções acessíveis fora do contexto dessa m-file.
12
Miguel Silva, José Borges Computação e Programação 2010/2011 24
• Tópicos Avançados sobre Funções
• Utilização de function handles
• como funções anónimas
• como argumentos de funções
• Funções encadeadas (nested functions)
• Funções recursivas
Alinhamento da AT 21
Miguel Silva, José Borges Computação e Programação 2010/2011 25
Descrição: Funções encadeadas significa que uma função está definida dentro do corpo de outra função. Neste caso todas as funções devem terminar com a palavra chave end.
Formato geral:
Cabeçalho da função exterior
Corpo da função exterior
Cabeçalho da função interior
Corpo da função interior
end % da função interior
Continuação do corpo da função exterior
end % da função exterior
Funções encadeadas (nested functions)
13
Miguel Silva, José Borges Computação e Programação 2010/2011
Funções encadeadas (nested functions)
26
Regras de âmbito:
As variáveis definidas na função principal são visíveis em todas as funções internas.
As variáveis definidas nas funções internas não são visíveis na função principal.
func_interna_1 pode ser chamada por funcao_principal e por func_interna_2
func_interna_2 pode ser chamada por funcao_principal e por func_interna_1
Miguel Silva, José Borges Computação e Programação 2010/2011
Funções encadeadas (nested functions)
27
>> outvol=nestedvolume(1,2,2)
outvol =
4
14
Miguel Silva, José Borges Computação e Programação 2010/2011 28
• Tópicos Avançados sobre Funções
• Utilização de function handles
• como funções anónimas
• como argumentos de funções
• Funções encadeadas (nested functions)
• Funções recursivas
Alinhamento da AT 21
Miguel Silva, José Borges Computação e Programação 2010/2011
Funções recursivas
29
• Considere-se a função para calcular o factorial
• Pode ser definida de forma recursiva,
15
Miguel Silva, José Borges Computação e Programação 2010/2011
Funções recursivas
30
• Uma definição recursiva tem duas partes:
1. Âncora ou caso base
O valor é especificado para um ou mais valores dos parâmetro(s).
2. Um passo inductivo ou recursivo.
O valor do parâmetro é especificado em função dos valores ou parâmetros mais simples.
Miguel Silva, José Borges Computação e Programação 2010/2011
Funções recursivas
31
• Para calcular 5! seguem-se os seguintes passos:
16
Miguel Silva, José Borges Computação e Programação 2010/2011
Exemplo: cálculo do factorial
32
Miguel Silva, José Borges Computação e Programação 2010/2011
Exemplo: cálculo do factorial
33
• Sequência de passos recursivos quando é feita a chamada àfunção recursiva myFact.m
res =
4 *
myFact(3)
n: 4
myFact(4)
res =
3 *
myFact(2)
n: 3
myFact(3)
res =
2 *
myFact(1)
n: 2
myFact(2)
res =
1 *
myFact(0)
n: 1
myFact(1)
res =
1
n: 0
myFact(0)
numero = 24
numero = myFact(4)
top related