Ir para conteúdo
Fórum Script Brasil
  • 0

Numeros aleatórios em arquivo


Guest --Thais --

Pergunta

Guest --Thais --

Como poderia gerar n numeros aleatorios utilizando a função rand() sem utilizar a semente com base no tempo, ou seja sem que seja srand(time) ??

n será informado pelo usuário, além do intervalo x_min e x_max, e então a funcão seria algo do tipo:

srand(semente);

int numeroAleatorio = ( x_min + rand() ) % (x_max + 1)

Também não tenho certeza se está certo essa formatação para o intervalo....

E os n numeros gerados devem ser gravados em um arquivo para depois calcular a média e o desvio padrão deles....

Para o procedimento que grava esses numeros aleatórios (void) eu poderia utilizar um loop (com while) alterando a semente... porém não estou conseguindo fazer isso....

Como ficaria essa função e esse procedimento???

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Guest --thais --

Acabei usando srand(time(0)).... pois não encontrei outra solução, porém o programa não está funcionando corretamente, ele executa mas não gera nenhum resultado... o que pode estar de errado??

ME AJUDEMMM!!!

#include <iostream> // cin, cout, >>, <<
#include <fstream> // ifstream, ofstream
#include <string> // string, getline()
#include <cmath> // pow, sqrt

using namespace std;

    //------------------------>> Enunciado <<---------------------//
    //   Calculo  do  desvio  padrão  de  uma série  de  inteiros  
    // residentes no  ficheiro numerosAleatorios.txt e escrita do
    // resultado no ficheiro de saída com o nome mediaEdesvio.txt.
    // -----------------------------------------------------------//

// Cabeçalho dos procedimentos
void grava_Numeros (int n, double x_min, double x_max);
void grava_Resultados (double m, double d);

// Cabeçalho das funções
double numerosAleatorios (double x_min, double x_max);
double media (double x, int n);
double desvioPadrao (double x, int n, double m);


int main ()

{
    // Declaração de variáveis de entrada
    int n; // quantidade de números a serem gerados
    double x_min; // valor mínimo do intervalo
    double x_max; // valor máximo do intervalo
    
   cout << "Digite a quantidade n de numeros aleatorios que deseja do intervalo:"
        << endl;
   cin  >> n;
   cout << endl
        << "Digite o valor mínimo desejado:"
        << endl;
   cin  >> x_min;
   cout << endl
        << "Digite o valor máximo desejado:"
        << endl;
   cin  >> x_max;
   cout << endl;
   
    // Declaração das variáveis de sáida
    double x; // aleatório gerado por rand()
    double m = media(x, n); //media calculada
    double d = desvioPadrao(x, n, m); //desvio calculado
   
   numerosAleatorios (x_min, x_max);
   grava_Numeros (n, x_min, x_max);
   grava_Resultados (m, d);

    // Informação ao usuário
    cout << "Desvio e médias calculados, os resultados foram salvos!"
         << endl << endl;
    
    // Faz uma pausa
    system("PAUSE");
    return 0;
    
    }

        
        
// Procedimento que gera, e armazena em arquivo, n números aleatórios usando a função rand()
void grava_Numeros (int n, double x_min, double x_max)
{
     ofstream arquivo("numerosAleatorios.txt"); 
     
     arquivo << rand() << " ";
       
     int contador = 0;
       
     while (contador < n)
     {
           arquivo << rand() << " ";
           contador = contador + 1;
     }
               
     arquivo.close(); 
}

// Procedimento que grava os resultados em um arquivo
void grava_Resultados (double m, double d)
{
     ofstream arquivo("mediaEdesvio.txt"); 
     arquivo << "A media aritmética é "
             << m
             << " e o desvio padrão é "
             << d
             << endl;
              
     arquivo.close(); 
}  

// Função que retorna um número pseudo-aleatório x dentro de uma faixa x_min <= x <= x_max
double numerosAleatorios (double x_min, double x_max)
{
    srand(time(0)); 
    
    double x;
    assert(x_min <= x && x <= x_max);
    return x;
}

// Função que calcula e retorna a média aritmética de números coletados do arquivo de dados
double media (double x, int n)
{
       double soma = 0.0;
       
       ifstream arquivo("numerosAleatorios.txt");
       
       arquivo >> x; // tenta ler o primeiro número
       
       while (!arquivo.fail())//enquanto não falhar
         { 
             arquivo >> x; // tenta ler o próximo numero
             soma  = soma + x;
         }
         
         arquivo.close();
         arquivo.clear();
         
       double m = soma/n;
       
       return m;
}

// Função que calcula e retorna o desvio-padrão de números coletados do arquivo de dados
double desvioPadrao (double x, int n, double m)
{
       double desvio = 0.0;
       double somatorio=0.0;
        
       ifstream arquivo("numerosAleatorios.txt");
       arquivo >> x; // tenta ler o primeiro número
      
       
       while (!arquivo.fail())//enquanto não falhar
         { 
             arquivo >> x; // tenta ler o próximo numero
             somatorio = somatorio + (x - n*m*m);
         }
         
       double d = sqrt(somatorio/(n-1));
         
       return d;
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...