sexta-feira, 6 de maio de 2016

Funções em C : Como, Porquê e usos.


A Função em C,  - e em praticamente todas as outras linguagens de programação-, pode ser definida como um trecho de código, responsáveis por executar determinada função. A função pode ou não receber e devolver parâmetros de entrada e saída.

Por que utilizar? 

Reutilização de código - Vamos supor que hoje eu desenvolva um projeto em C de uma calculadora científica. E neste projeto separei em funções todos os cálculos necessários para o funcionamento da calculadora. Posteriormente, desenvolvo outro projeto para cálculo de impostos de determinada empresa. Em vista que já possuo métodos de cálculos que podem calcular alíquotas, taxas, percentuais e etc, é visível o ganho de tempo que posso ter aproveitando o código de um projeto em outro. Utilizando o conceito de funções, esse ganho é muito facilitado.

Manutenção mais fácil -  Colocando o código dentro de uma função, em caso de necessidade de alteração deste código, somente se altera uma vez. No caso de não utilização de função, em todos os lugares onde o código é repetido, teria que ser alterado ( o que é um prato cheio para se esquecer algo e ter um trabalhão para se achar depois.

Modularização do programa - Em programas de grande porte, as funções podem ser utilizadas somente para melhorar a leitura e compreensão do código. Da maneira que desenvolvemos até agora, ao desenvolver grandes programas, dar manutenção aos mesmos pode ser complicado, principalmente se o código inicial for de outra pessoa. Pode ser mais fácil, criar uma função para leitura de dados, outra para o processamento e outra para exibição do resultado final.

Depois de toda essa teoria, vamos a prática - e para exemplificar, faremos o seguinte exercício :

O usuário digitará quantos números quiser, e o programa retornará se o número digitado é primo ou não.

Segue o código comentado:



#include <stdio.h> 
#include <stdbool.h> /*Esta biblioteca nos permite usar os parâmetros TRUE e FALSE 

Criação da função - com o parâmetro de entrada V_NUMERO
O tipo da função BOOL determina que a função retorne um valor VERDADEIRO ou FALSO.
*/
bool verifica_numero_primo(int v_numero)
{
int v_cont;     /*Contador 1 até v_numero*/
int v_resto_div;
int v_cont_primo;

v_cont = 1;
v_cont_primo = 0;

 while( v_numero >= v_cont )
  {
 
   v_resto_div = v_numero % v_cont ; /* operador % pega o resto da divisão, de 1 até o numero digitado*/

   if(v_resto_div == 0)  /* conta a quantidade de divisões que tiverem 0 como resto*/
   {
    v_cont_primo = v_cont_primo + 1;
   }
 
   v_cont++ ; /*O comando ++ soma 1 a variável atual */
  }

  if(v_cont_primo <= 2) /*Se for menor ou igual a 2, o numero é primo( divisível por 1 e por ele mesmo
Retorno da função: verdadeiro ou falso
*/
  {
  return (true);
  }else{
  return (false);
  }
}

 /*Código principal */
int main() {

 int v_numero; /*Numero que sera verificado - digitado pelo usuário em tela */
 bool v_primo; /* tipo bool - armazena true ou false*/
 int tecla;

 do {

 /*Lê numero que sera verificado */
 printf("Digite um numero \n");
 scanf("%d", &v_numero);

 /*Chama a função e armazena o retorno dela na variável v_primo
    Para funções sem retorno, pode-se utilizar o tipo void
 */
 v_primo = verifica_numero_primo(v_numero);

 if (v_primo == true) {
  printf("\nO numero %d e primo", v_numero);
 }else{
  printf("\nO numero %d nao e primo", v_numero);
 }
 printf("\n Digite ENTER para sair ou qualquer outra tecla para processar outro numero\n");

  fflush(stdin); /*Limpa buffer do teclado*/

 tecla = getchar(); /* Lê o carácter digitado em tela, se for igual a 13 ( código do enter na tabela ASCII, sai do programa, caso contrário, executa novamente*/ 

} while(tecla != 13 & tecla != 10);

}

Obs.: Utilizei o código do Enter para encerrar a execução do programa. Por padrão, o código do enter na tabela ASCII é 13, mas no computador que estou por exemplo, este código é igual a 10.

Obrigado e até a próxima.

Nenhum comentário:

Postar um comentário