quinta-feira, 21 de abril de 2016

Números aleatórios em C


Demorou mais saiu ! Mais um exercício de C, nos voltando agora para a escolha randômica de números .

Para demonstrar a utilização dos números randômicos em C, faremos um pequeno programa que nos dara 6 números de 1 a 60 ( Dai jogar na mega-sena é com você).

Segue o código explicado:


 #include <stdio.h>
#include <time.h> 

/*Por que incluir a biblioteca TIME.H ? Basicamente por que nosso computador não gera 
números aleatórios, alias a função do computador é executar comandos de maneira exata.
Portanto, utilizaremos funções da biblioteca TIME.H que, utilizando o tempo (milesimos, etc)
nos gerará números pseudo-aleatórios */

#define MAX 60
#define QTDE 6

int main() {
  int i;
  int num[QTDE];

  srand(time(NULL));
  
  /*A função SRAND inicializa os valores de calculo da funcao RAND com o tempo atual
  isso evita que todas as vezes que exercutarmos o programa, exibirmos os mesmos valores*/
 
   for(i=0; i< QTDE; i++)
  {
  num[i] =  (rand() % MAX );
  /* O complemento do comando rand, %MAX, limita o número máximo que será gerado 
 pela função. O mesmo é definido pela constante MAX(60) */
  }
 
  /*Exibição dos valores*/
  printf("Numeros sorteados: \n");
  for(i=0; i< QTDE; i++)
  {
   printf(" %d ", num[i]) ;
  }
 
  return 0;
}

Execução:

Por que números aleatórios?

Em grandes sistemas comerciais, realmente a utilização deste recurso é muito pouca, ou quase nenhuma. Mas imagine um jogo de luta, onde o adversário sempre te ataca da mesma forma repetidamente. Meio chato né? Um comportamento "aleatório" é necessário neste caso. Principalmente no ramo de jogos, e quaisquer outros desenvolvimentos onde esta interação com o usuário é necessária, existe a necessidade de se utilizar deste recurso.

Sugestões de melhoria no algoritmo !

Vamos supor que eu queira utilizar o programa acima para jogar na loteria. Para isso, precisamos garantir que o programa não calcule aleatoriamente o mesmo número( isso é possível). Para facilitar para o usuário também seria bom exibir o resultado de forma crescente. Que tal implementar essas modificações?

Nenhum comentário:

Postar um comentário