Baixe o app para aproveitar ainda mais
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) ); }
Compartilhar