Buscar

Aula20 FuncaoComRetorno2011 1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

SubprogramasSubprogramas
• conceito de subprogramação
• funções void
• funções que retornam valores (tipadas)
Tipos de FunçõesTipos de Funções
• Funções void ou sem retorno: não retornam valor 
i d à f ãassociado à função
– sem parâmetros (parâmetros void*)
– com parâmetros:
• passados por valor
• passados por referência (endereço)
• Funções tipadas ou com retorno: devolvem um único 
valor associado à execução da função, usando o comando 
returnreturn.
– sem parâmetros (parâmetros void*)
– com parâmetros.
Declaração de Funções com RetornoDeclaração de Funções com Retorno
tipo <identificador> [( <lista de parâmetros formais> ) ]
{{
[ <declaração de variáveis locais>; ]
< comandos separados por ‘;’ >< comandos separados por ‘;’ >
return;
}
opcionaisopcionais
float Teste ( int a, int b)
{{
// exemplo da sintaxe de função c/ retorno
float x, res;
scanf(“%f”,&x); void Teste (int a, int b, float *c)
{
( )
res = a + b + x;
return res;
}
{
// exemplo da sintaxe de função s/ retorno
float x;
f(“%f” & )scanf(“%f”,&x);
*c = a + b + x;
}
O comando returnO comando return
• A função termina sua execução quando seu
último comando for executado ou quandoq
o comando return é encontrado.
• O comando return provoca a saída imediata• O comando return provoca a saída imediata
da função que o contém e retorna a 
execução ao código chamador
• O comando return pode ser usado paraO comando return pode ser usado para
devolver um valor
ExemploExemplo
int caract in str (char c, char *s)_ _ ( , )
//recebe uma string e um caractere
//devolve a 1a posicao do caractere c na string s
// 1 t ã f t d// ou -1 se o caractere não for encontrado
{
int i;int i;
for (i=0;i<strlen(s);i++)
if (s[i] == c)( [ ] )
return i;
return -1;
}
1º retorno
2º retorno
}
Apenas 1 valor é retornado.
return em funções voidreturn em funções void
• Não devolve valor, apenas encerra a função
• Ex:Ex:
void resto( int num int den ){void resto( int num, int den ){
if( b == 0 ) return;
if(a%b == 0 ) printf(“sem resto”);
else printf(“com resto”);
}
Chamada da funçãoChamada da função
< d f ã > ( < li t d â t i > )< nome da função > ( < lista de parâmetros reais > )
→ Utilizar diretamente o resultado da chamada da função
// soma os valores de A e B 
float Soma (float a, float b)
{
Ex:Ex: Declaração{
return a + b;
}
da função
int main()
{
float v1 v2 somadois;float v1, v2, somadois;
printf(“valores a serem somados”);
scanf(“%f%f”,&v1,&v2);
somadois = Soma (v1 v2); Chamadassomadois = Soma (v1, v2); 
printf(“Soma= %f\n”,somadois);
printf(“Outra vez: %f\n”, Soma (v1, v2)); 
system(“pause”);
Chamadas
da função
system(“pause”);
}
ExercícioExercício
F bl i () h f ã• Faça um bloco main() que chame a função
abaixo:
//recebe uma string e um caractere
//devolve a 1a posicao do caractere c na string s
// 1 ã f d// ou -1 se o caractere não for encontrado
int caract_in_str (char c, char *s)
{{
int i;
for (i=0;i<strlen(s);i++)
if ( [i] )if (s[i] == c)
return i;
return -1;;
}
Solução do ExercícioSolução do Exercício
int main() {
char palavra[20], letra;
int posicao;
printf("digite a palavra: ");printf( digite a palavra: );
scanf("%s",palavra);
printf("digite a letra: ");
f(“ % " &l t )scanf(“ %c",&letra);
posicao = caract_in_str(letra,palavra);
if (posicao>=0)if (posicao 0)
printf("%c e a %da. letra da palavra.\n",letra,posicao+1);
else 
i tf (" t % t d \ " l t )printf ("caractere %c nao encontrado.\n",letra);
system("pause");
}}
FUNÇÕES void PODEM SER 
CONVERTIDAS EM TIPADAS?
Ex (não):Ex (não):
Função void para trocar o conteúdo de 2 variáveis, inteiras
void troca(int *x, int *y)
{
int temp;
Precisa ser 
int temp;
temp=*x;
Função void
Poderia p*x = *y;
*y = temp;
}
Poderia 
retornar 
um float}
Ex (sim): Ex (sim): Função void que devolve o maior de 3 valores reais
void maior ( float v1 float v2 float v3 float *omaior )
um float
void maior ( float v1, float v2, float v3, float omaior )
// recebe 3 valores reais e devolve o maior dos 3, no terceiro parâmetro}
{
*omaior = v1;
if (v2 > *omaior) *omaior = v2;
If (v3 > *omaior) *omaior = v3;
Escrever função 
com retorno que 
d l i If (v3 > *omaior) *omaior = v3;
} 
devolve o maior 
de 3 valores
SoluçãoSolução
float maior ( float v1, float v2, float v3 )float maior ( float v1, float v2, float v3 )
// recebe 3 valores reais e devolve o maior dos 3
{
fl t ifloat omaior;
omaior = v1;
if (v2 > omaior) omaior = v2;( ) ;
if (v3 > omaior) omaior = v3;
return omaior;
}} 
int main()
{
float big;
big=maior (2,4,6);
printf("o maior eh % 2f\n " big);printf( o maior eh %.2f\n ,big);
system("pause");
}
Exemplo
char s_n()
Exemplo
()
// devolve um caracter ‘S’ ou ‘N’, lido do teclado 
{
char c;char c;
do{
c=toupper(getchar());
int main()
{
char lido;
if ((c != 'N') && (c != 'S'))
printf("\a"); // BEEP
}while ((c != 'N') && (c != 'S'));
char lido;
printf ("Resposta? (S/N) ");
lido = s_n();
f ( S )}while ((c ! N ) && (c ! S ));
return c;
}
if (lido == 'S')
printf ("Respondeu Sim\n");
elseelse 
printf ("Respondeu Nao\n");
t (" ")system("pause");
}
Exercícios:Exercícios:Exercícios:Exercícios:
1 1 Função que devolve a posição de um determinado valor 1. 1. Função que devolve a posição de um determinado valor 
dentro de um arranjo (1 dimensão). A função recebe o nome 
e a dimensão do arranjo, e o valor a ser procurado. Caso o j p
valor não seja encontrado no arranjo, a função devolve valor 
‘zero’. 
Exercícios:Exercícios:
2. 2. Programa para calcular ex através da seguinte série:
x0 x1 x2
ex = — + — + — + ...e ...
0! 1! 2!
x: positivo ou nulo, lido do teclado
Precisão da resposta: 0,0001
Implementar as seguintes funções (não usar pow):
float potencia (float x, int n )
float fatorial (int n N)
float EnaX (float x) 
Resposta 2Resposta 2
float Potencia (float x, int n)
{
float p;
float EnaX (float x)
{
int i=0;float p;
int i;
if (n == 0)
return 1;
int i 0;
float total=0, parcela=0; 
do {
parcela= Potencia(x i) / Fatorial(i);return 1;
else 
{
1
parcela= Potencia(x,i) / Fatorial(i);
total = total + parcela;
i++;
} hil ( l > 0 0001)p=1;
for (i=0;i<n;i++)
p = p*x;
}while (parcela > 0.0001);
return total;
}
return p
}
}}
Exercícios:Exercícios:ExercíciosExercícios
3. 3. Fazer um programa completo que leia dois valores, N e P,3. 3. Fazer um programa completo que le a do s valores, N e P,
e calcule a combinação de N elementos, P a P.
Fórmula: n!/(p! * (n p)!)Fórmula: n!/(p! (n-p)!)
• Função void para calcular a fatorialç p
• Função com retorno para calcular a combinação
Resposta 3Resposta 3
int main()
{
i tint n, p;
char resp;
do{{
printf("digite n e p: ");
scanf("%d%d",&n,&p);
printf("combinacoes de %d elementos %d a %d % 2f"printf("combinacoes de %d elementos %d a %d = %.2f", 
n,p,p,combinacoes (n,p)); 
printf("\nOutra? (s/n)");p ( ( ) )
fflush(stdin);
resp=getchar();
}while (resp!='n');}while (resp!= n );
system("pause");
}
segue
void fatorial (int n , float *fat){
// Procedimento que devolve a fatorial de N
((cont.):cont.): Fatorial calculada através de função void:
// Procedimento que devolve a fatorial de N 
// Caso N seja menor que zero, devolve o valor zero como sinal 
if (n < 0 )
*fat=0;fat=0;
else
{
*fat = 1;fat = 1;
for (;n>=1;n--)
*fat = *fat * n;
}}
} float combinacoes (int n, int p){
// Função que devolve as combinações de N elementos, P a P 
//fórmula: n!/(p! * (n-p)!
// Utiliza o procedimento Fatorial 
float fn, fp, fnp;p p
fatorial (n,&fn);
fatorial (p,&fp);
fatorial (n-p,&fnp);fatorial(n p,&fnp); 
return fn / ( fp * fnp );
}
segue
float fatorial (int n){
Fatorial calculada através de função c/ retorno:((cont.):cont.):
float fatorial (int n){
// Funcao que devolve a fatorial de N 
// Caso N seja menor que zero, devolve o valor zero como sinal 
float fat;float fat;
if (n < 0 )
fat=0;
elseelse
{
fat = 1;
for (;n>=1;n--)(; ; )
fat = fat * n;
}
return fat;
float combinacoes (int n, int p){
// Função que devolve as combinações de N elementos P a P
}
// Função que devolve as combinações de N elementos, P a P 
//fórmula: n!/(p! * (n-p)!
// Utiliza a função Fatorial 
t f t i l( ) / ( f t i l( ) * f t i l( ) )return fatorial(n) / ( fatorial(p) * fatorial(n-p) );
}

Continue navegando