Mais tópicos sobre funções • Funções com: • Múltiplos parâmetros de saída • Sem parâmetros de saída • Sem parâmetros de entrada • Sub-funções • Passagem por valor • Âmbito de uma variável Instituto Superior Técnico, Dep. de Engenharia Mecânica - ACCAII Mais tópicos sobre funções • O número de parâmetros de entrada e de saída, das funções definidas pelo programador, podem ser: • Zero • Um • Vários Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 2 Mais tópicos sobre funções • Funções que possuem mais do que um parâmetro de saída: • Utiliza-se sempre que se pretenda que a função retorne mais que uma variável; • A ordem de atribuição, dentro do corpo da função, não é importante; • A ordem dos parâmetros ,na definição , é importante quando se faz a chamada à função. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 3 Mais tópicos sobre funções Descrição: Funções que possuem mais do que um parâmetro de saída. Sintaxe do cabeçalho: function [argOut1,argOut2,…] = func(argIn1,argIn2,…) Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 4 Mais tópicos sobre funções Problema: Escreva uma função que receba o raio de uma circunferência e que retorne a sua área e o seu perímetro. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 5 Mais tópicos sobre funções Exemplo de execução: >> [area , perimetro] = areacirc(2.4) area = 18.0956 perimetro = 15.0796 >> Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 6 Mais tópicos sobre funções • Funções que não possuem parâmetros de saídas: • Utiliza-se sempre que se pretenda que a função não retorne nenhuma variável; • São geralmente utilizadas para escrever dados formatados no monitor ou ficheiro. • É boa prática de programação que uma função que calcule e retorne valores, não faça também a escrita desses valores no monitor. Tal operação deve ser efectuada por uma função de “escrita”. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 7 Mais tópicos sobre funções Descrição: Funções que não possuem parâmetros de saídas. Sintaxe do cabeçalho: function func(argIn1,argIn2,…) Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 8 Mais tópicos sobre funções Problema: Escreva uma função que receba o raio de uma circunferência e que escreva no monitor a sua área e o seu perímetro. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 9 Mais tópicos sobre funções Exemplo de execução: >> escreveAreaPerimetro(2.4) A circunferência de raio 2.40, possui: Área = 18.10 Perímetro = 15.08 >> [area,perimetro] = escreveAreaPerimetro(2.4) ??? Error using ==> escreveAreaPerimetro Too many output arguments. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 10 Mais tópicos sobre funções • Funções que não possuem parâmetros de entrada: • São geralmente utilizadas para escrever informações formatadas no monitor (exemplo: um menu); • Podem ou não ter parâmetros de saída. No caso de um menu, o parâmetro de saída poderá ser a opção escolhida! • No caso de, por exemplo, se querer apresentar informações de ajuda, neste caso poderá não existir parâmetros de saída. • Podem também ser utilizadas para retornarem valores de constantes (exemplo: o valor de pi). • Possuem sempre um parâmetro de saída. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 11 Mais tópicos sobre funções Descrição: Funções que não possuem parâmetros de entrada. Sintaxe do cabeçalho: function [argOut1,argOut2,…] = func() Ou function [argOut1,argOut2,…] = func Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 12 Mais tópicos sobre funções Problema: Escreva uma função que retorne o valor da velocidade da luz, em metros/s. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 13 Mais tópicos sobre funções Exemplo de execução: >> velocDaLuz ans = 299792458 >> velocDaLuz() ans = 299792458 >> velocidade = velocDaLuz() velocidade = 299792458 Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 14 Mais tópicos sobre funções • Sub-Funções: • As M-files de funções podem conter mais de uma função. A função primária é a principal, ou seja, a que é invocada pelo nome do ficheiro M-file. • As funções adicionais no ficheiro são sub-funções, e só são visíveis pela função primária, ou por outras sub-funções no mesmo ficheiro. • Cada sub-função começa pela sua linha de definição, e estão definidas sequencialmente. • A ordem de definição das sub-funções é opcional, mas a definição da função primária deve aparecer em primeiro lugar. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 15 Mais tópicos sobre funções • Sub-Funções (exemplo1): Ficheiro estatisticas2.m File mystats.m estatisticas2 mystats Função estatisticas2 é acessível do exterior. Function mystats is accessible from outside the file. media mean Funções media e mediana só são acessíveis dentro do ficheiro. Functions mean and median are only accessible from inside the file. mediana median Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 16 Mais tópicos sobre funções • Sub-Funções (exemplo2): Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 17 Mais tópicos sobre funções • Como funciona a chamada a uma função : • Os argumentos são avaliados; • O valor dos argumentos são copiados para os respectivos parâmetros de entrada; • O âmbito (scope) dos parâmetros é a função que o utiliza; • Uma função pode ter mais do que um parâmetro de entrada. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 18 Mais tópicos sobre funções • Passagem de dados por valor: • Quando um argumento é passado para uma função, o seu valor é copiado para o parâmetro respectivo • Alterações no parâmetro não afectam o valor do argumento Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 19 Mais tópicos sobre funções • Passagem de dados por valor: • Exemplo: val=5; duplica(val); val 5 num 5 parâmetro argumento • duplica pode alterar a variável num, mas não irá afectar a variável val Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 20 Conceito de âmbito (scope) • O âmbito de um identificador é a parte do programa de onde este pode ser acedido. • Regras de âmbito de um identificador: 1. Se um identificador é declarado dentro de um script, o seu âmbito é desde esse ponto até ao fim do programa (e também o espaço de trabalho). 2. Se um identificador é um parâmetro de entrada de uma função, o seu âmbito é o corpo dessa função 3. Se um identificador é declarado dentro do corpo de uma função, seu âmbito é desde esse ponto até ao fim da função. 4. Se um identificador é declarado no espaço de trabalho, o seu âmbito são todos os scripts que forem executados. Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 21 Referências • Capítulo 5 de Stormy Attaway (2009), “Matlab: A Practical Introduction to Programming and Problem Solving”, Elsevier. • Getting started with MATLAB: http://www.mathworks.com/access/helpdesk/help/pdf_doc/ matlab/getstart.pdf Miguel Pedro Silva – José Borges Computação e Programação 2009 / 2010 22