Baixe o app para aproveitar ainda mais
Prévia do material em texto
Relembrando o que é uma função Uma função é uma instrução que realiza um trabalho importante (como solicitar informações ao usuário ou calcular uma equação ou realizar um procedimento específico) e, então, retorna um resultado ao programa. O valor retornado por uma função pode ser atribuído a uma variável. As funções costumam utilizar um ou mais parâmetros, que são colocados entre parênteses e separados por vírgulas(quando for o caso), para definir suas atividades. Para gerar números pseudo-aleatórios em C podemos utilizar a função rand() da biblioteca stdlib.h. rand() usa o relógio do sistema para criar um ponto inicial realmente aleatório, ou semente. Cada chamada da função produz um número aleatório no intervalo fechado 0..RAND_MAX. A constante RAND_MAX está definida no arquivo-interface stdlib.h. Esta função utiliza uma “semente” para gerar sua sequência aleatória, portanto, se chamada sem a criação de uma semente diferente a cada execução, seu resultado será sempre o mesmo. Para gerar esta semente chamamos a função srand() passando como parâmetro um valor de base. Este valor pode ser o resultado obtido da função time() que retorna o valor de milissegundos ocorridos no dia. Algoritmo com exemplos: #include <stdio.h> #include <stdlib.h> int main ( ) { int inteiro, x; printf("*** EXEMPLOS PARA USO DA FUCAO RAND ***\n\n"); inteiro=rand(); printf("inteiro aleatorio sem geracao de semente: %d\n",inteiro); srand(25); inteiro=rand(); printf("inteiro aleatorio com semente fixa: %d\n\n",inteiro); srand(time(0)); inteiro=rand(); printf("inteiro aleatorio com semente baseada no time: %d\n\n",inteiro); printf("note que a partir deste ponto, depois que a funcao srand gerou a semente, \n as execucoes mostrarao numeros diferentes\n\n"); inteiro = rand()%51; printf ( "inteiro de 0 a 50: %d\n\n" , inteiro) ; // utilizar o operador de modulo nos garante que o // resultado do resto de rand pelo divisor 51 eh um numero de // 0 a 50 // simular o rolar de um dado de 6 faces printf ( "Simulacao de 3 jogadas para um dado de 6 faces\n\n") ; for (x=1; x<=3; x++) { inteiro = (rand()%6)+1; // como o numero gerado por rand vai de 0 a RAND_MAX, // geramos o resultado de 0 a 5 e somamos 1 para garantir o intervalo de 1 a 6 printf ("Dado rolado com resultado %d\n", inteiro); } // simular tres jogadas de cara ou coroa com moeda printf ( "Simulacao de cara ou coroa\n\n") ; for (x=1; x<=3; x++) { inteiro = (rand()%2); if (inteiro == 0) { printf ("Cara\n"); } else { printf ("Coroa\n"); } } getchar() ; } [ 31/05/09 ] �10 � Rand, gerando números randômicos em C / C++ Rand, gerando números randômicos em C / C++ A maioria dos programadores que usam a função rand() não inicializam a semente da aleatoriedade, como consequência disso toda vez que o programa é executado são geradas as mesmas entradas. Isto ocorre porque é usado um gerador de números pseudo aleatórios que basicamente é uma conta que é feita sobre o número atual para obter o seguinte. Se você parte do mesmo número, você sempre obtém a mesma sequência. Em alguns casos isso é bom, principalmente quando não se tem certeza da corretude do programa; então, é necessário saber quais foram os dados de entrada para conseguir debugar melhor o código, mas na maioria das vezes isto não é desejado. Então a solução para inicializar a função rand é usar a srand. Como usá-la? Segue abaixo um código que gera um vetor aleatório e usa srand: view plain�� HYPERLINK "http://www.allgoritmos.com/2009/05/rand-gerando-numeros-randomicos-em-c-c.html" \l "#" copy to clipboard�� HYPERLINK "http://www.allgoritmos.com/2009/05/rand-gerando-numeros-randomicos-em-c-c.html" \l "#" print�� HYPERLINK "http://www.allgoritmos.com/2009/05/rand-gerando-numeros-randomicos-em-c-c.html" \l "#" ? //Autor: Filipe Areias Névola //Ano: 2009 //Programa: Usando rand com inicilização de semente //Licença: Você pode usar e alterar, mas deve manter o Autor #include <stdio.h> #include <stdlib.h> //contém a rand e srand #include <time.h> //necessária para usar o time(NULL) #define MAX 100 //quero gerar elementos entre 1 e 100 void entradaAleatoria(int tamanho){ //vetor que conterá os números gerados aleatoriamente int v[tamanho]; //iterador int i; //inicializando a semente do rand srand(time(NULL)); //faço uma rand para cada elemento for(i=0;i<tamanho;++i){ //rand() gerará vários números positivos //como quero somente entre 1 e 100 faço //mod MAX, logo terei elementos entre //0 e 99 então somo 1 sempre e terei elementos //entre 1 e 100 e vou guardando no vetor v[i]=(rand()%MAX)+1; } }
Compartilhar