Buscar

conteudo de função


Prévia do material em texto

Funções e Operações
Exercícios
Contato
Curso de C para Engenharias
Aula 5
Cristiano Dalbem Dennis Balreira Gabriel Moreira
Miller Biazus Raphael Lupchinski
Universidade Federal do Rio Grande do Sul
Instituto de Informática
Grupo PET Computação
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Funções e Operações
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
De�nição Matemática
Idéia
Mapeamento entre conjuntos
Transformação de um domínio para outro
Termos importantes
Domínio, Entrada, Origem
Imagem, Resultado
Destino, Codomínio
Parâmetros
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
De�nição Matemática
Figura: Representação funcional matemática
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Figura: Composição
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Figura: Circuitos
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Programação
Idéia
Trecho de código (uma operação, por exemplo) que pode ser
chamado várias vezes
Cada uma das vezes pode ser com entradas (parâmetros)
diferentes
Cada uma das execuções pode prover resultados (retornos)
para uso posterior
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Qual é o sentido de usar funções?
Benefícios
Desenvolver código genérico apenas uma vez
Reaproveitamento de código
Facilitar nosso entendimento/abstração do problema
Dividir para conquistar
Facilita o trabalho no caso de precisar mudar o código depois
Modularidade, manutenibilidade, praticidade.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Sintaxe
Declaração
tipo_retorno nome_função (parâmetro1, parâmetro2, ...)
1 {
2 //Aqui escrevemos o que vamos fazer na função
3
4 return ( r e t o r n o ) //Caso a função não seja void!
5 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Sintaxe
Chamada
variável = nome_função (parâmetro1, parâmetro2, ...)
variável contém o retorno de nome_função
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Já usamos funções em C antes!
Entrada e Saída
printf()
scanf()
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Poderíamos já ter criado funções?
Exercícios
O uso de funções nos exercícios certamente facilitaria a nossa
compreensão e a clareza do nosso código
Mesmo que os exercícios até agora tenham sido simples
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
1 i n t quadrado ( i n t x )
2 {
3 i n t quad = x ∗ x ;
4 return ( quad ) ;
5 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Algumas considerações
As variáveis x e quad são acessíveis apenas dentro da função
ou em qualquer parte de nosso programa?
O cálculo do quadrado poderia ter sido feito junto com o
retorno? (return x ∗ x)
Sim!
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Algumas considerações
As variáveis x e quad são acessíveis apenas dentro da função
ou em qualquer parte de nosso programa?
O cálculo do quadrado poderia ter sido feito junto com o
retorno? (return x ∗ x)
Sim!
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Escopo
Pense em camadas
As variáveis de uma função são �vistas� apenas pela própria
função e pelos outros escopos criados dentro da função.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Passagem por valor
Na passagem de parâmetros por valor, que é o que vimos até
agora, é passado o nome da variável para função, que faz uma
cópia da mesma para uso dentro de seu escopo (variável local).
Neste caso não é possível alterar o valor do parâmetro.
Se quisermos alterar a variável original de dentro da função
chamada?
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Passagem por referência
Consiste em passar o endereço da variável como parâmetro.
Dessa forma, qualquer alteração que acontecer na função com
a variável repercutirá também no escopo em que foi passada
como parâmetro.
Muito utilizado para diminuir a prática não recomendada de
variáveis globais (visíveis em todo o programa).
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
1 #inc lude <s t d i o . h>
2 void t r o c a_ f a l s a ( i n t v1 , i n t v2 ) {
3 i n t aux ;
4 aux = v1 ;
5 v1 = v2 ;
6 v2 = aux ;
7 p r i n t f ( " 2) v1 = %d , v2 = %d\n" , v1 , v2 ) ;
8 }
9 i n t main ( ) {
10 i n t a = 5 , b = 7 ;
11 p r i n t f ( " 1) a = %d , b = %d\n" , a , b ) ;
12 t r o c a_ f a l s a ( a , b ) ;
13 p r i n t f ( " 3) a = %d , b = %d\n" , a , b ) ;
14 return ( 0 ) ;
15 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Função Troca - Errada!
Quando passamos os valores v1 e v2, estamos apenas
utilizando-os dentro da função.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Função Troca - Errada!
Quando passamos os valores v1 e v2, estamos apenas
utilizando-os dentro da função.
Não há qualquer tipo de retorno da função, nem modi�cação
do valor diretamente no seu endereço de memória.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Função Troca - Errada!
Quando passamos os valores v1 e v2, estamos apenas
utilizando-os dentro da função.
Não há qualquer tipo de retorno da função, nem modi�cação
do valor diretamente no seu endereço de memória.
Como reti�car o código deforma a alterar os valores também
fora do escopo da função?
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
1 #inc lude <s t d i o . h>
2 void t r o c a ( i n t ∗v1 , i n t ∗v2 ) {
3 i n t aux ;
4 aux = ∗v1 ;
5 ∗v1 = ∗v2 ;
6 ∗v2 = aux ;
7 }
8 i n t main ( ) {
9 i n t a = 5 , b = 7 ;
10 p r i n t f ( "a = %d , b = %d\n" , a , b ) ;
11 t r o c a (&a ,&b ) ;
12 p r i n t f ( "a = %d , b = %d\n" , a , b ) ;
13 return ( 0 ) ;
14 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Calcula XY
Escrever um programa que lê dois números inteiros e chama uma
função que retorna o resultado do 1o número elevado ao 2o
número. O programa principal deve chamar essa função e imprimir
o retorno. Por exemplo, se forem informados os valores 2 e 3 a
função deverá retornar o valor 8.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Resposta
1 #inc lude <s t d i o . h>
2 i n t expon ( i n t n1 , i n t n2 )
3 {
4 i n t i , aux = n1 ;
5 i f ( n2 == 0)
6 return ( 1 ) ;
7 f o r ( i =1; i<n2 ; i++)
8 aux = aux ∗ n1 ;
9 return ( aux ) ;
10 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo
Resposta
1 i n t main ( )
2 {
3 i n t a , b , r e s u l ;
4 p r i n t f ( " I n t e i r o 1 : " ) ;
5 s c a n f ( "%d" ,&a ) ;
6 p r i n t f ( " I n t e i r o 2 : " ) ;
7 s c a n f ( "%d" ,&b ) ;
8 r e s u l = expon ( a , b ) ;
9 p r i n t f ( " Resu l t ado : %d" , r e s u l ) ;
10 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
De�nição
De�nição de Recursão em C
A recursão ocorre em C quando uma função chama ela mesma.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
De�nição
De�nição de Recursão em C
A recursão ocorre em C quando uma função chama ela mesma.
Basta alterar a variável quando novamente ela é passada para
a função.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
De�nição
De�nição de Recursão em C
A recursão ocorre em C quando uma função chama ela mesma.
Basta alterar a variável a cada vez que é passada para a
função.
Precisa existir um ponto de parada (valor de retorno).
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo - Fatorial Recursivo
1 i n t f a t o r i a l ( i n t num)
2 {
3 i f (num < 1) //caso de parada
4 return 1 ;
5 e l s e
6 return num ∗ f a t o r i a l (num−1);
7 }
8
9 i n t main ( )
10 {
11 i n t f a t = f a t o r i a l ( 4 ) ;
12 p r i n t f ( " F a t o r i a l de 4 : %d" , f a t ) ;
13 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
De�nição
Exemplos
Motivações
Funções em C
Passagem de parâmetros
Recursão
Exemplo - Máximo Divisor Comum Recursivo (MDC)
1 i n t mdc( i n t x , i n t y ){
2 i f ( x == y )
3 return x ;
4 e l s e
5 i f ( x > y )
6 return mdc( x−y , y ) ;
7 e l s e
8 return mdc( x , y−x ) ;
9 }
10 i n t main ( ){
11 i n t resu l t_mdc = mdc(8 , 4 ) ;
12 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
Exercícios
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
Exercícios
Média harmônica
Faça uma função que retorne a média harmônica de três
numeros passados como parâmetro.
Fórmula: H = N / (1/A1 + 1/A2 + ... + 1/AN), onde N é a
quantidade de números e Ai é o valor de cada número.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
Resposta
1 #inc lude <s t d i o . h>
2 f l o a t media_harmonica ( f l o a t v1 , f l o a t v2 , f l o a t v3 ){
3 f l o a t media ;
4 media = 3 / (1/ v1 + 1/v2 + 1/v3 ) ;
5 return ( media ) ;
6 }
7 i n t main ( ) {
8 f l o a t a , b , c ;
9 p r i n t f ( " D i g i t e t r e s i n t e i r o s : " ) ;
10 s c a n f ( "%f " ,&a ) ;
11 s c a n f ( "%f " ,&b ) ;
12 s c a n f ( "%f " ,&c ) ;
13 p r i n t f ( "MH: %f " , media_harmonica ( a , b , c ) ) ;
14 return ( 0 ) ;
15 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
Exercícios
Incremento duplo
Faça uma função que incremente dois inteiros passados como
parâmetro.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
Resposta
1 #inc lude <s t d i o . h>
2 void i n c r ementa_do i s ( i n t ∗v1 , i n t ∗v2 ) {
3 ∗v1 = ∗v1 + 1 ;
4 ∗v2 = ∗v2 + 1 ;
5 }
6 i n t main ( ) {
7 i n t a , b ;
8 p r i n t f ( " D i g i t e d o i s i n t e i r o s : " ) ;
9 s c a n f ( "%d" ,&a ) ;
10 s c a n f ( "%d" ,&b ) ;
11 i n c r ementa_do i s (&a ,&b ) ;
12 p r i n t f ( "a = %d , b = %d" , a , b ) ;
13 return ( 0 ) ;
14 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
Exercícios
Potência
Faça uma função que, dada uma base e um expoente, devolva
a potência usando recursividade.
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
Resposta
1 #inc lude <s t d i o . h>
2 i n t potenc i a_rec ( i n t v1 , i n t v2 ) {
3 i f ( v2 == 0)
4 return 1 ;
5 e l s e i f ( v2 == 1)
6 return v1 ;
7 e l s e return v1 ∗ potenc i a_rec ( v1 , v2−1);
8 }
9 i n t main ( ) {
10 i n t a , b ;
11 p r i n t f ( " D i g i t e d o i s i n t e i r o s : " ) ;
12 s c a n f ( "%d" ,&a ) ; s c a n f ( "%d" ,&b ) ;
13 p r i n t f ( "%d\n" , po t enc i a_rec ( a , b ) ) ;
14 return ( 0 ) ;
15 }
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
Funções e Operações
Exercícios
Contato
Dúvidas, Sugestões, Críticas
www.inf.ufrgs.br/pet
pet@inf.ufrgs.br
Cristiano, Dennis, Gabriel, Miller, Raphael Curso de C para Engenharias
	Funções e Operações
	Definição
	Exemplos
	Motivações
	Funções em C
	Passagem de parâmetros
	Recursão
	Exercícios
	Contato

Mais conteúdos dessa disciplina