Introdução a Funções
Funções Matemáticas• função é uma relação de um ou vários valores de argumentos de entrada em umÚNICO resultado de saída.•...
Funções e Procedimentos• Uma função matemática lembra uma máquina que recebe valores para os seusargumentos de entrada, pr...
Funções e Procedimentos• Em C, um procedimento (retornando ou não valores) continua sendo chamado defunção (function).• “F...
Usando Funções• Funções em C recebem VALORES (e não nomes de variáveis) e retornam VALORES.float g(float x, float y){float...
Usando Funções• Como são valores que são passados para a função, ela desconhece as variáveis quecontinham estes valores. O...
Considerações Importantes• Algumas linguagens de programação, chamadas LINGUAGENS FUNCIONAIS,como Lisp e Haskell, consider...
Próximos SlideShares
Carregando em…5
×

Intro funcoes(2)

213 visualizações

Publicada em

  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Intro funcoes(2)

  1. 1. Introdução a Funções
  2. 2. Funções Matemáticas• função é uma relação de um ou vários valores de argumentos de entrada em umÚNICO resultado de saída.• O conjunto de todos os valores de entrada de uma função é chamado de DOMÍNIOda função. O conjunto de todos os resultados é chamado de IMAGEM da função.Normalmente a IMAGEM é um subconjunto de um conjunto de resultadospossíveis chamado de CONTRADOMÍNIO. A notação é: f: DomínioContradomínio.Para Fig I temos e para Fig II temos , onde R é o conjuntodos números reais.x = 2y = 2 z = 8z = f(x,y) = x2+y2f(x) = x2x = 2  f(x) = 4xyf: R  R f: R  R  Rzy xFig IFig IIDomínio Contradomíniof
  3. 3. Funções e Procedimentos• Uma função matemática lembra uma máquina que recebe valores para os seusargumentos de entrada, processa-os e retorna um valor como saída (Figs A e B).• Em computação nós estendemos este conceito permitindo que estas “máquinas”produzam “efeitos colaterais” (como escrever uma mensagem no papel) (Fig. C).Eventualmente, até admitimos que a “máquina” não retorna valor (Fig. D)• Neste caso, podemos dizer que as máquinas deixam de ser equivalentes a funçõesmatemáticas (i.e. deixam de ser FUNCIONAIS) e passam a ser PROCEDIMENTAIS,no sentido de que seguem um procedimento, claro, sequencial e com possíveisefeitos colaterais que afetam o ambiente.Fig A Fig B Fig C Fig D
  4. 4. Funções e Procedimentos• Em C, um procedimento (retornando ou não valores) continua sendo chamado defunção (function).• “Funções” que não retornam valor não podem ser usadas em expressões ou comoargumentos de outra função.– Por exemplo, é possível termos e– mas, não é possível , pois h não retorna valor !!!• Em C, o comando return define o que retorna• A sintaxe é:g(f(1,2), 2)g(h(1,2), 2)10+f(1,2)float g(float x, float y){float z = x*x + y*y;printf(“%f^2 + %f^2 igual a %fn“,x,y,z);return z;}void h(float x, float y){float z = x*x + y*y;printf(“%f^2 + %f^2 igual a %fn“,x,y,z);}tipo_de_retorno nomeFuncao(lista_de_argumentos){corpo da função}
  5. 5. Usando Funções• Funções em C recebem VALORES (e não nomes de variáveis) e retornam VALORES.float g(float x, float y){float z = x*x + y*y;printf("%f^2 + %f^2 igual a %fn",x,y,z);return z;}int main(void){float z = 1.0;float w = 2.0;printf("%fn",10+g(z,w)); /* imprime 15 */return 0;}g é chamada com o primeiroargumento igual a 1.0 e osegundo argumento igual a 2.0Numa área local e isolada dememória, x recebe o valor de 1.0 ey recebe o valor de 2.0 e g retornao valor calculado de 5.0. Aoterminar, esta memória localé totalmente apagada !1234
  6. 6. Usando Funções• Como são valores que são passados para a função, ela desconhece as variáveis quecontinham estes valores. Os nomes podem coincidir, mas são variáveis distintas.• Há uma maneira de fazer com que uma função em C altere o valor de uma variávelque pertence ao código que a chamou. Este “efeito colateral” a torna umPROCEDIMENTO. Isto será visto mais adiante.• A possibilidade de alterar valores de variáveis que pertencem a outras funções,torna as funções em C muito poderosas, mas também requerem atenção redobrada(pois alteram o ambiente).float dobra(float x){x = 2 * x;return x;}int main(void){float x = 5.0;printf("%fn", dobra(x)); /* imprime 10.0 */printf("%fn", x); /* imprime 5.0 */return 0;}são variáveis distintaso valor de x permaneceinalterado !!
  7. 7. Considerações Importantes• Algumas linguagens de programação, chamadas LINGUAGENS FUNCIONAIS,como Lisp e Haskell, consideram o ato de computar como sendo o ato de avaliarfunções matemáticas, sem que o estado do mundo (e.g. variáveis) seja alterado.Lisp, por exemplo, é uma linguagem que pode ser entendida como sendosimplesmente expressões dentro de expressões que sempre retornam valor. Emoposição, temos linguagens de programação denominadas de LinguagensProcedimentais (tais como C, C++ e Java), que definem PROCEDIMENTOS, isto é:comandos imperativos em uma ordem específica que podem alterar o estado domundo (e.g. mudanças de valores de variáveis ou efeitos colaterais de umamaneira geral). Porém, todas as linguagens permitem uma fuga para o estilo quelhe é oposto por natureza. Por exemplo, podemos escrever procedimentos em Lispe funções matemáticas em C.• Procedimentos são instrumentos poderosos, mas devem ser usados com cautela,porque as mudanças do estado do mundo podem ser sutis, silenciosas, e erroscatastróficos podem passar desapercebidos.• ... Programar é uma arte poderosa e iniciantes são “aprendizes de feiticeiro” quedevem treinar bastante todas as técnicas !

×