Заполнение массивов случайными числами
Есть отдельный класс матрица, в конструкторе по умолчанию инициализируется и заполняется случайными числами двумерный массив:
Проблема в том, что когда в основной программе создаю 2 объекта класса моей матрицы, оба массива получаются с одинаковыми числами.
Как сделать, что бы числа были разными?
![]()
Дело в том, что ваша программа бежит быстро. Random генерирует псевдослучайные числа, высчитывая каждое новое число из предыдущего. В качестве начального значения используется текущее время. Но если ваша программа бежит быстро, то при заполнении второй матрицы начальный момент времени тот же! Ведь время «тикает» достаточно редко по сравнению с несколькими микросекундами, расходуемыми на ваш цикл. Вот и последовательность «случайных» чисел получается точно такая же.
Обычное решение этой проблемы — не пересоздавайте объект Random , используйте тот же самый, сохранив его в статическую переменную.
Если ваша программа многопоточная, вам придётся в каждом из потоков заводить по экземпляру Random , так как эти объекты не потокобезопасны. (Да, это глобальное решение локальной проблемы. Сорри.)
Дополнение. Описанная в вопросе проблема с Random существует лишь в .NET Framework. Если вы перейдёте на .NET Core, там матрицы будут разными, даже если вы будете создавать Random каждый раз в цикле.
C++, Создать матрицу и заполнить ее случайными числами
Напишите программу, которая принимает с клавиатуры число N, создает матрицу размера N на N, заполненную случайными числами, и выводит ее на экран.

5 Responses
подскажите, а почему при удалении двухмерного массива цикл удаления написан для одномерного массива?
наверное, потому что двумерный массив — это массив массивов, а[i]-это i-я строчка, и мы удаляем каждую строчку таким образом
Подскажите, как сделать, чтобы в массиве были и отрицательные элементы?
вместо:
a[i][j] = rand() % 10;
напишите например так:
a[i][j] = (rand() % 10)-10;
А как создать одномерный массив на основе этой программы, пробовал удалить второй цикл, выдает ошибку.
Генерирование случайных чисел. Функции rand() , srand() , time() . Примеры
В языке C++ существуют средства для генерирования случайных чисел. Чтобы сгенерировать случайное число используется функция rand() , которая размещается в библиотечном файле stdlib.h . Синтаксис объявления функции следующий:
Функция возвращает случайное целочисленное значение, которое лежит в пределах от 0 до 32767.
Пример.
здесь startValue – целочисленное значение, которое служит отправной точкой для генерирования последовательности случайных чисел функцией rand() . Изменяя значение startValue , можно получать разные последовательности случайных чисел.
Пример.
то каждый раз при запуске программы будет создана новая отправная точка в генерировании последовательности чисел функцией rand() . И, как следствие, будут получаться разные последовательности случайных чисел.
Пример. В примере демонстрируется генерирование последовательности из двух случайных чисел. Каждый раз при запуске программы будет получена новая последовательность.
4. Как сгенерировать случайное целое число в заданных пределах? Пример
В примере приведена функция GetRandomNumber() , которая генерирует случайное число в заданных пределах.
5. Заполнение двумерной матрицы случайными целыми числами в указанных пределах. Пример
Условие задачи. Дана двумерная матрица порядка n ( n столбцов, n строк) целых чисел. Найти наибольшее из значений элементов, которые размещены в закрашенной части матрицы. Значение элементов матрицы формируются случайным образом и находятся в пределах [-5; +5].
Текст программы следующий
6. Как сгенерировать случайное число с плавающей запятой в указанных пределах? Пример
В примере демонстрируется функция GetRandomNumberFloat() , которая генерирует случайное число с плавающей запятой в указанных пределах.
Как заполнить матрицу случайными числами c
Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.
What can I do to prevent this in the future?
If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.
If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.
Another way to prevent getting this page in the future is to use Privacy Pass. You may need to download version 2.0 now from the Chrome Web Store.
Cloudflare Ray ID: 71ad7c052d116910 • Your IP : 82.102.23.104 • Performance & security by Cloudflare