Класс - матрица со случайными значениями

143
18 апреля 2019, 19:20

Цель - создать класс матрица, который бы умел создавать двумерные массивы заданных размеров, но со случайными значениями. Массив создаётся, но значения я получаю каждый раз одинаковые. Пожалуйста, подскажите, в чём проблема?

#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
class Matrix
{
private:
int str;
int col;
int **mat;
public:
Matrix(int str, int col)      //конструктор класса
{
    this -> str = str;
    this -> col = col;
    mat = new int*[str];
    for (int i = 0; i < str; i++)
    {
        mat[i] = new int[col];
    }
    cout << "Конструктор " << this << endl;
}   
void FillMatrix()     //метод заполнения
{
    srand(time(NULL));
    for (int i = 0; i < str; i++)
    {
        for (int j = 0; j < col; j++)
        {
            mat[i][j] = rand() %10;
        }
    }
}
void PrintMatrix()       //вывод
{
    for (int i = 0; i < str; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cout << setw(4) << mat[i][j];
        }
        cout << endl;
    }
    cout << endl;
}
~Matrix()        //деструктор, я его должен дописать. 
{
delete[]mat;
        cout << "Destruct" << this << endl << endl;
}

};
int main()
{
setlocale(LC_ALL, "ru");
Matrix a(3, 3);
Matrix b(3, 3);

b.FillMatrix();
a.FillMatrix();
a.PrintMatrix();
b.PrintMatrix();
}
Answer 1

Отсюда:

Для любого другого значения, передаваемого через параметр seed, и используемого при вызове функции srand, алгоритм генерации псевдо-случайных чисел может генерировать различные числа с каждым последующим вызовом функции rand. Если использовать одно и то же значение seed, с каждым вызовом функции rand, алгоритм генерации псевдо-случайных чисел будет генерировать ту же самую последовательность чисел.

Я бы делал так:

#include <random>
class Matrix
{
private:
    std::mt19937 random_generator_;
    std::uniform_int_distribution<std::uint8_t> rand_uid(0, 9);
public:
    Matrix()      //конструктор класса
    {
        std::random_device random_device;
        random_generator_.seed(random_device()); 
    }   
    void FillMatrix()     //метод заполнения
    {
        for (int i = 0; i < str; i++)
        {
            for (int j = 0; j < col; j++)
            {
                mat[i][j] = rand_uid(random_generator_));
            }
        }
    }
};
READ ALSO
Как добавить подписываемый параметр OCSP RESPONSE в ASN1 PKCS7

Как добавить подписываемый параметр OCSP RESPONSE в ASN1 PKCS7

Занимаюсь подписанием строкиОбычная подпись проходит

136
С++ нарушение прав доступа [закрыт]

С++ нарушение прав доступа [закрыт]

Пытаюсь освоить новый для себя c++ и пишу приложение "blackjack"На данный момент уже долгое время ломаю голову над этой ошибкой - Необработанное...

132