Mostrando postagens com marcador programação. Mostrar todas as postagens
Mostrando postagens com marcador programação. Mostrar todas as postagens

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.

segunda-feira, 15 de fevereiro de 2016

Algoritmo dos Números Primos resolvido e comentado!



Um dos mais comuns exercícios passados nas faculdades e cursos que ensinam programação é o do número primo. Hoje vamos resolve-lo.

1) Escreva um algoritmo que receba a quantidade de números primos que o usuário deseja visualizar, e os escreva.
Um número primo é aquele que só é divisível por ele e por um, onde o resto da divisão é diferente de 0 para todos os demais números.

Portanto para resolver esse algoritmo, vamos nos utilizar dos contadores e divisões( ou o resto das mesmas).

Vale lembrar que o que for marcado em aspas são comentários para seu melhor entendimento do algoritmo.

INICIO.

VARIAVEIS v_qde, v_contador, v_contador_2, v_cont_primo, v_resto_div;

v_contador = 0;
v_cont_primo = 1;

ESCREVA "Digite a quantidade de números primos que deseja receber";
LEIA v_qtde; " Entrada de dados

ESCREVA "Seguem os números primos :"

ENQUANTO v_qtde <> 0; "A ideia é dimunir a quantidade até 0"
   
      v_contador = v_contador + 1;
      v_contador2 = 0;
      v_cont_primo = 0;

                ENQUANTO v_contador <> v_contador2. "Enquanto os contadores forem diferentes, o contador 2 percorrerá de 1 até contador1 para verificar a quantidade de números divisíveis onde o resto for igual a 0.

v_resto_div = RESTO ( v_contador / v_contador2). " A ideia é pegar o resto da divisão. Corresponde ao comando MOD / % em muitas linguagens de programação.

                 SE v_resto_div = 0;
                           v_cont_primo = v_cont_primo + 1;
                FIMSE;

    v_contador2 = v_contador2 + 1;

FIM ENQUANTO.
     
               SE v_cont_primo = 2. "Quer dizer que ele só foi dividido com resto 0 por 1 e por ele mesmo. Portanto, é número primo
           
               ESCREVA v_contador.
               v_qtde = v_qtde -1. "Diminui a quantidade até que a mesma zere.

                FIMSE.


FIMENQUANTO.

FIM.


       A lógica é um pouco complicada de se entender no inicio, mas a melhor forma de fazer isso é utilizar o teste de mesa. Simule o funcionamento do algoritmo acima, assim fazendo seu passo-a-passo fica mais fácil, entender, seguir e estimular sua lógica.

Obrigado!