quinta-feira, 5 de fevereiro de 2015

Função rand e srand

Na biblioteca stdilb.h que é uma das bibliotecas padrão do C, encontramos a função
rand(); para aplicações onde um valor randômico é exigido, e isto é um procedimento
muito normal em programação.
Esta função geralmente trabalha com valores pré-definidos limitados por uma constante
que se encontra também na mesma biblioteca.
Más o que ocorreu, foi que os valores declarados nas matrizes de string sempre se repetiam,
eram sempre iguais.Notei então depois de algumas pesquisa que a função rand(); assume um valor
real, forçando sempre a mesma sequência serem apresentadas.
Com muita paciência recorri a função srand(); que trabalha dando um ponta-pé na função rand();
injetando um determinado valor diferente a cada execução do programa.
Este valor foi obtido usando o comando time da biblioteca time.h.
Para usar a função srand(); a seguinte declaração se fez necessária: srand ( time ( NULL ) );
Este programa forma nomes com sobrenomes, em um giro automático comandado por um do while,
com os tempos determinados pela função Sleep();
Quando o nome "Sandro" é encontrado, a função strcmp(); barra a execução e imprime a mensagem
"fim do programa!!".
Neste código passei os valores das matrizes de string como parâmetros na função
Nome_sobrenome ( char *No_me, char *Sobre_Nomes ); e esta por sua vez retorna os endereços
para a função main();

Veja abaixo imagens do programa em execução:






Veja abaixo o código do programa:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
void Janela5 ( ) {
     int lin, col;
     col = 0;
     for ( lin = 2; lin <= 24 ; lin++ )
         for ( col = 2; col <= 78 ; col++ ) {
              gotoxy ( col , lin );
              textbackground ( LIGHTGRAY );
              printf ( " " );
         }
}
int continuando ( ) {
     system ( "title FUNÇÃO RAND E SRAND" );
     int nr;
     do {
         system ( "cls" );
         system ( "Color 20" );
         Janela5 ( );
         textcolor ( LIGHTRED );
         gotoxy ( 32 , 5 );
         printf ( "FUNÇÃO RAND E SRAND" );
         textcolor ( BROWN );
         gotoxy ( 25 , 7 );
         printf ( "Programa desenvolvido por:" );
         textcolor ( WHITE );
         gotoxy ( 52 , 7 );
         printf ( "Samuel Lima" );
         textcolor ( BLACK );
         gotoxy ( 34 , 9 );
         printf ( "sa_sp10@hotmail.com" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 23 , 11 );
         printf ( "Digite " );
         textcolor ( LIGHTRED );
         printf ( " 0 " );
         textcolor ( LIGHTBLUE );
         printf ( " para sair ou " );
         textcolor ( LIGHTRED );
         printf ( " 1 " );
         textcolor ( LIGHTBLUE );
         printf ( " para continuar " );
         textcolor ( LIGHTRED );
         gotoxy ( 24 , 13 );
         scanf ( "%d" , &nr );
         fflush ( stdin );
         if ( nr == 0 ) {
              textcolor ( LIGHTRED );
              gotoxy ( 36 , 18 );
              printf ( "MUITO OBRIGADO" );
              getche ( );
              exit ( 0 );
         } else if ( nr == 1 ) {
              return 1;
         }
         textcolor ( YELLOW );
         gotoxy ( 36 , 16 );
         printf ( "\aopcão errada!" );
         getche ( );
     } while ( 1 );
     return 1;
}
int Nome_sobrenome ( char *No_me , char *Sobre_Nomes ) {
     srand ( time ( NULL ) );
     int b, c;
     return b = rand ( ) % 12;
     return c = rand ( ) % 12;
     return 0;
}
int main ( ) {
     int b, c = 0;
     continuando ( );
     char nomes [ 12 ] [ 10 ] = { { "Mara" }, { "João" }, { "Sílvia" }, {
              "Cláudio" }, { "Lucas" }, { "Stefani" }, { "Sandro" }, { "Suelen" },
              { "Henrike" }, { "Claudete" }, { "Cícero" }, { "Júlia" } };
     char sobre_nomes [ 12 ] [ 10 ] = { { "Mendonça" }, { "Soares" },
              { "Santana" }, { "Lima" }, { "Alves" }, { "Neto" }, { "Costa" }, {
                        "Dutra" }, { "Gomes" }, { "Ferreira" }, { "Amorin" }, {
                        "Lemos" } };
     char *nome;
     nome = ( char* ) malloc ( 50 );
     do {
         system ( "cls" );
         system ( "Color 20" );
         Janela5 ( );
         b = Nome_sobrenome ( &nomes [ 12 ] [ 10 ] ,
                   &sobre_nomes [ 12 ] [ 10 ] );
         c = Nome_sobrenome ( &nomes [ 12 ] [ 10 ] ,
                   &sobre_nomes [ 12 ] [ 10 ] );
         textcolor ( LIGHTRED );
         gotoxy ( 32 , 3 );
         printf ( "FUNÇÃO RAND E SRAND" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 25 , 5 );
         printf ( "Abaixo Nomes com sobrenomes" );
         gotoxy ( 25 , 7 );
         textcolor ( LIGHTRED );
         printf ( "%s %s" , nomes [ b ] , sobre_nomes [ c ] );
         strcpy ( nome , nomes [ b ] );
         if ( strcmp ( nomes [ b ] , "Sandro" ) == 0 ) {
              textcolor ( BLACK );
              gotoxy ( 35 , 18 );
              printf ( "Fim do programa!!" );
              Sleep ( 1800 );
              textcolor ( LIGHTRED );
              gotoxy ( 36 , 21 );
              printf ( "MUITO OBRIGADO" );
              getche ( );
              exit ( 0 );
         }
         Sleep ( 800 );
     } while ( 1 );
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.