SlideShare ist ein Scribd-Unternehmen logo
1 von 7
Downloaden Sie, um offline zu lesen
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.
• O conjunto de todos os valores de entrada de uma função é chamado de DOMÍNIO
da função. O conjunto de todos os resultados é chamado de IMAGEM da função.
Normalmente a IMAGEM é um subconjunto de um conjunto de resultados
possí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 conjunto
dos números reais.
x = 2
y = 2
 z = 8z = f(x,y) = x2+y2
f(x) = x2
x = 2  f(x) = 4
x
y
f: R  R f: R  R  R
z
y x
Fig I
Fig II
Domínio Contradomíniof
Funções e Procedimentos
• Uma função matemática lembra uma máquina que recebe valores para os seus
argumentos 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ções
matemáticas (i.e. deixam de ser FUNCIONAIS) e passam a ser PROCEDIMENTAIS,
no sentido de que seguem um procedimento, claro, sequencial e com possíveis
efeitos colaterais que afetam o ambiente.
Fig A Fig B Fig C Fig D
Funções e Procedimentos
• Em C, um procedimento (retornando ou não valores) continua sendo chamado de
função (function).
• “Funções” que não retornam valor não podem ser usadas em expressões ou como
argumentos 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
}
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 primeiro
argumento igual a 1.0 e o
segundo argumento igual a 2.0
Numa área local e isolada de
memória, 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 memória local
é totalmente apagada !
1
2
3
4
Usando Funções
• Como são valores que são passados para a função, ela desconhece as variáveis que
continham 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ável
que pertence ao código que a chamou. Este “efeito colateral” a torna um
PROCEDIMENTO. 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 distintas
o valor de x permanece
inalterado !!
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 avaliar
funçõ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 sendo
simplesmente expressões dentro de expressões que sempre retornam valor. Em
oposição, temos linguagens de programação denominadas de Linguagens
Procedimentais (tais como C, C++ e Java), que definem PROCEDIMENTOS, isto é:
comandos imperativos em uma ordem específica que podem alterar o estado do
mundo (e.g. mudanças de valores de variáveis ou efeitos colaterais de uma
maneira geral). Porém, todas as linguagens permitem uma fuga para o estilo que
lhe é oposto por natureza. Por exemplo, podemos escrever procedimentos em Lisp
e 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 erros
catastróficos podem passar desapercebidos.
• ... Programar é uma arte poderosa e iniciantes são “aprendizes de feiticeiro” que
devem treinar bastante todas as técnicas !

Weitere ähnliche Inhalte

Was ist angesagt? (16)

Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem c
 
Semana 14
Semana 14Semana 14
Semana 14
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorial
 
Funções - Revisão
Funções - RevisãoFunções - Revisão
Funções - Revisão
 
F sharp e o paradigma funcional
F sharp e o paradigma funcionalF sharp e o paradigma funcional
F sharp e o paradigma funcional
 
Modularização
ModularizaçãoModularização
Modularização
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Função exponencial
Função exponencialFunção exponencial
Função exponencial
 
Aula14
Aula14Aula14
Aula14
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivas
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Java 05
Java 05Java 05
Java 05
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Resumo de Função exponencial
Resumo de Função exponencialResumo de Função exponencial
Resumo de Função exponencial
 

Ähnlich wie Intro funcoes(2)

Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoes
samuelthiago
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
Sérgio Souza Costa
 

Ähnlich wie Intro funcoes(2) (20)

Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Aula 7 aed - sub algoritmos
Aula 7   aed - sub algoritmosAula 7   aed - sub algoritmos
Aula 7 aed - sub algoritmos
 
Aula01
Aula01Aula01
Aula01
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoes
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Programando em Python - Funções
Programando em Python -  FunçõesProgramando em Python -  Funções
Programando em Python - Funções
 
Funções em C
Funções em CFunções em C
Funções em C
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10
 
aula intro de Python sobre Funcoes.pdf
aula intro de  Python sobre  Funcoes.pdfaula intro de  Python sobre  Funcoes.pdf
aula intro de Python sobre Funcoes.pdf
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Utilizandoo winplot
Utilizandoo winplotUtilizandoo winplot
Utilizandoo winplot
 
07-lambda.pdf
07-lambda.pdf07-lambda.pdf
07-lambda.pdf
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Aula 4 | Funções
Aula 4 | Funções Aula 4 | Funções
Aula 4 | Funções
 

Intro funcoes(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ÍNIO da função. O conjunto de todos os resultados é chamado de IMAGEM da função. Normalmente a IMAGEM é um subconjunto de um conjunto de resultados possí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 conjunto dos números reais. x = 2 y = 2  z = 8z = f(x,y) = x2+y2 f(x) = x2 x = 2  f(x) = 4 x y f: R  R f: R  R  R z y x Fig I Fig II Domínio Contradomíniof
  • 3. Funções e Procedimentos • Uma função matemática lembra uma máquina que recebe valores para os seus argumentos 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ções matemáticas (i.e. deixam de ser FUNCIONAIS) e passam a ser PROCEDIMENTAIS, no sentido de que seguem um procedimento, claro, sequencial e com possíveis efeitos colaterais que afetam o ambiente. Fig A Fig B Fig C Fig D
  • 4. Funções e Procedimentos • Em C, um procedimento (retornando ou não valores) continua sendo chamado de função (function). • “Funções” que não retornam valor não podem ser usadas em expressões ou como argumentos 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. 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 primeiro argumento igual a 1.0 e o segundo argumento igual a 2.0 Numa área local e isolada de memória, 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 memória local é totalmente apagada ! 1 2 3 4
  • 6. Usando Funções • Como são valores que são passados para a função, ela desconhece as variáveis que continham 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ável que pertence ao código que a chamou. Este “efeito colateral” a torna um PROCEDIMENTO. 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 distintas o valor de x permanece inalterado !!
  • 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 avaliar funçõ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 sendo simplesmente expressões dentro de expressões que sempre retornam valor. Em oposição, temos linguagens de programação denominadas de Linguagens Procedimentais (tais como C, C++ e Java), que definem PROCEDIMENTOS, isto é: comandos imperativos em uma ordem específica que podem alterar o estado do mundo (e.g. mudanças de valores de variáveis ou efeitos colaterais de uma maneira geral). Porém, todas as linguagens permitem uma fuga para o estilo que lhe é oposto por natureza. Por exemplo, podemos escrever procedimentos em Lisp e 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 erros catastróficos podem passar desapercebidos. • ... Programar é uma arte poderosa e iniciantes são “aprendizes de feiticeiro” que devem treinar bastante todas as técnicas !