Você está na página 1de 7

Introduo a Funes

Funes Matemticas
funo uma relao de um ou vrios valores de argumentos de entrada em um
NICO resultado de sada.










O conjunto de todos os valores de entrada de uma funo chamado de DOMNIO
da funo. O conjunto de todos os resultados chamado de IMAGEM da funo.
Normalmente a IMAGEM um subconjunto de um conjunto de resultados
possveis chamado de CONTRADOMNIO. A notao : f: DomnioContradomnio.
Para Fig I temos e para Fig II temos , onde R o conjunto
dos nmeros reais.
x = 2
y = 2
z = 8
z = f(x,y) = x
2
+y
2
f(x) = x
2
x = 2 f(x) = 4
x
y
f: R R

f: R R R

z
y x
Fig I
Fig II
Domnio Contradomnio
f

Funes e Procedimentos
Uma funo matemtica lembra uma mquina que recebe valores para os seus
argumentos de entrada, processa-os e retorna um valor como sada (Figs A e B).
Em computao ns estendemos este conceito permitindo que estas mquinas
produzam efeitos colaterais (como escrever uma mensagem no papel) (Fig. C).
Eventualmente, at admitimos que a mquina no retorna valor (Fig. D)










Neste caso, podemos dizer que as mquinas deixam de ser equivalentes a funes
matemticas (i.e. deixam de ser FUNCIONAIS) e passam a ser PROCEDIMENTAIS,
no sentido de que seguem um procedimento, claro, sequencial e com possveis
efeitos colaterais que afetam o ambiente.
Fig A
Fig B Fig C Fig D
Funes e Procedimentos
Em C, um procedimento (retornando ou no valores) continua sendo chamado de
funo (function).
Funes que no retornam valor no podem ser usadas em expresses ou como
argumentos de outra funo.
Por exemplo, possvel termos e
mas, no possvel , pois h no 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 %f\n,x,y,z);
return z;
}
void h(float x, float y)
{
float z = x*x + y*y;
printf(%f^2 + %f^2 igual a %f\n,x,y,z);
}
tipo_de_retorno nomeFuncao(lista_de_argumentos)
{
corpo da funo
}
Usando Funes
Funes em C recebem VALORES (e no nomes de variveis) e retornam VALORES.




float g(float x, float y)
{
float z = x*x + y*y;
printf("%f^2 + %f^2 igual a %f\n",x,y,z);
return z;
}

int main(void)
{
float z = 1.0;
float w = 2.0;
printf("%f\n",10+g(z,w)); /* imprime 15 */
return 0;
}
g chamada com o primeiro
argumento igual a 1.0 e o
segundo argumento igual a 2.0
Numa rea local e isolada de
memria, x recebe o valor de 1.0 e
y recebe o valor de 2.0 e g retorna
o valor calculado de 5.0. Ao
terminar, esta memria local
totalmente apagada !
1
2
3
4
Usando Funes
Como so valores que so passados para a funo, ela desconhece as variveis que
continham estes valores. Os nomes podem coincidir, mas so variveis distintas.










H uma maneira de fazer com que uma funo em C altere o valor de uma varivel
que pertence ao cdigo que a chamou. Este efeito colateral a torna um
PROCEDIMENTO. Isto ser visto mais adiante.
A possibilidade de alterar valores de variveis que pertencem a outras funes,
torna as funes em C muito poderosas, mas tambm requerem ateno redobrada
(pois alteram o ambiente).
float dobra(float x)
{
x = 2 * x;
return x;
}

int main(void)
{
float x = 5.0;
printf("%f\n", dobra(x)); /* imprime 10.0 */
printf("%f\n", x); /* imprime 5.0 */
return 0;
}
so variveis distintas
o valor de x permanece
inalterado !!
Consideraes Importantes
Algumas linguagens de programao, chamadas LINGUAGENS FUNCIONAIS,
como Lisp e Haskell, consideram o ato de computar como sendo o ato de avaliar
funes matemticas, sem que o estado do mundo (e.g. variveis) seja alterado.
Lisp, por exemplo, uma linguagem que pode ser entendida como sendo
simplesmente expresses dentro de expresses que sempre retornam valor. Em
oposio, temos linguagens de programao denominadas de Linguagens
Procedimentais (tais como C, C++ e Java), que definem PROCEDIMENTOS, isto :
comandos imperativos em uma ordem especfica que podem alterar o estado do
mundo (e.g. mudanas de valores de variveis ou efeitos colaterais de uma
maneira geral). Porm, todas as linguagens permitem uma fuga para o estilo que
lhe oposto por natureza. Por exemplo, podemos escrever procedimentos em Lisp
e funes matemticas em C.
Procedimentos so instrumentos poderosos, mas devem ser usados com cautela,
porque as mudanas do estado do mundo podem ser sutis, silenciosas, e erros
catastrficos podem passar desapercebidos.
... Programar uma arte poderosa e iniciantes so aprendizes de feiticeiro que
devem treinar bastante todas as tcnicas !

Você também pode gostar