Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Variable Length Array elements random generator

simple task, to generate arrays with length I want to.

I don’t also know how to get array I’ve created, except my own weird method. Does the first part of my code work alright and I should reconsider the way I want to get them (optional)?

although, I do understand why do I get the same values each time, but I don’t think, it’s related to my problem somehow.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I’m writing down this:

  cin >> x;
  int array1[x];
  int array2[x]; 
  for (int i = 0; i <= x; i++) {
    array1[i] = rand() % 10 + 1;
    array2[i] = rand() % 10 + 1;
  }
  

  cout << "[" << array1[a];
  for (int a = 0; a <= x; a++) {
    a += 1; 
    cout << ", " <<array1[a];
  }


  cout << "] [" << array2[b];
  for (int b = 0; b <= x; b++) {
    b += 1; 
    cout << ", " << array2[b];
  }
  cout << "]";

why do i get some abnormal answer for x = 6, 5, 15 cases like this:

[2, 5, 9, 6, 0] [8, 1, 9, 6, 32759]
[2, 5, 9, 6, 2, 8, 3, 2, 8] [8, 1, 9, 6, 2, 7, 4, 7, 7]

>Solution :

Or using header and std::vector, std::generate (no raw loop).
Also when you write code, write small readable functions.
And to get unique random numbers random generators need to be seeded.

#include <algorithm>
#include <iostream>
#include <random>
#include <vector>

int generate_random_number()
{
    // only initialize the generator and distribution once (static)
    // and initialize the generator from a random source (device)
    static std::mt19937 generator(std::random_device{}());
    static std::uniform_int_distribution<int> distribution{ 1,10 };
    return distribution(generator);
}

// overload stream output for vector, so we can use vectors in std::cout
std::ostream& operator<<(std::ostream& os, const std::vector<int>& values)
{
    bool comma{ false };
    
    os << "[";
    for (const int value : values)
    {
        if (comma) os << ", ";
        os << value;
        comma = true;
    }
    os << "]";

    return os;
}

// helper function to create an array of given size
std::vector<int> create_random_array(const std::size_t size)
{
    std::vector<int> values(size); // create and allocate memory for an array of size ints
    std::generate(values.begin(), values.end(), generate_random_number); // fill each value in the array with a value from the function call to generate_random_number
    return values;
}

int main()
{
    std::size_t count;
    std::cout << "how many random numbers ? : ";
    std::cin >> count;

    auto array1 = create_random_array(count);
    std::cout << array1 << "\n";

    auto array2 = create_random_array(count);
    std::cout << array2 << "\n";

    return 0;
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading