Генератор случайных чисел генерирует одинаковые числа - C#
Формулировка задачи:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; class Rndthread { private int RowsA; private int RowsB; private int ColumsA; private int ColumsB; private double[,] MatrixA; private double[,] MatrixB; private int howMuchFlows; private int NumberOfthread; static Random WhataNumber = new Random(); Thread RNDThread; public Rndthread(int name/*имя потока*/, double[,] InputmatrixA/*имя матрицы*/, double[,] InputmatrixB, int m, int n, int k, int amountflow) { RowsA = m; RowsB = n; ColumsA = n; ColumsB = k; MatrixA = InputmatrixA; MatrixB = InputmatrixB; howMuchFlows = amountflow; NumberOfthread = name; RNDThread = new Thread(rndfunction); RNDThread.Priority = ThreadPriority.Highest; RNDThread.Start(); } void rndfunction() { double[,] mIndex = MatrixA; int StartColculation = RowsA / howMuchFlows * (NumberOfthread); int EndColculation = RowsA / howMuchFlows * (NumberOfthread + 1) - 1; Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("Матрица А - Поток №{0} ведет расчет от {1} строки до {2} строки и имеет в расположении {3} столбцов....", NumberOfthread + 1, StartColculation, EndColculation, ColumsA); Thread.Sleep(0); for (int i = StartColculation; i <= EndColculation; i++) { for (int j = 0; j < ColumsA; j++) { mIndex[i, j] = WhataNumber.Next(-10, 11); Thread.Sleep(0); } } mIndex = MatrixB; StartColculation = RowsB / howMuchFlows * (NumberOfthread); EndColculation = RowsB / howMuchFlows * (NumberOfthread + 1) - 1; Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("Матрица В - Поток №{0} ведет расчет от {1} строки до {2} строки и имеет в расположении {3} столбцов....", NumberOfthread + 1, StartColculation, EndColculation, ColumsB); Thread.Sleep(0); for (int i = StartColculation; i <= EndColculation; i++) { for (int j = 0; j < ColumsB; j++) { mIndex[i, j] = WhataNumber.Next(-10, 11); Thread.Sleep(0); } } Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Поток №{0} завершил заполнение матрицы случайными числами", NumberOfthread + 1); } }
Решение задачи: «Генератор случайных чисел генерирует одинаковые числа»
textual
Листинг программы
using System; using System.Security.Cryptography; // Cryptographically-strong random number generator // Source: MSDN Magazine > 2007 > September > .NET Matters: Tales from the CryptoRandom // Source URL: [url]http://msdn.microsoft.com/en-us/magazine/cc163367.aspx[/url] // via [url]https://gist.github.com/prettycode/5471944[/url] // Authors: Stephen Toub & Shawn Farkas public sealed class CryptoRandom : Random, IDisposable { private RNGCryptoServiceProvider cryptoProvider = new RNGCryptoServiceProvider(); private byte[] uint32Buffer = new byte[sizeof(uint)]; /// <summary> /// An implementation of System.Random used for cryptographically-strong random number generation. /// </summary> public CryptoRandom() { } /// <summary> /// An implementation of System.Random used for cryptographically-strong random number generation. /// </summary> public CryptoRandom(int seedIgnored) { } /// <summary> /// Returns a nonnegative random number. /// </summary> /// <returns> /// A 32-bit signed integer greater than or equal to zero and less than <see cref="F:System.Int32.MaxValue"/>. /// </returns> public override int Next() { cryptoProvider.GetBytes(uint32Buffer); return BitConverter.ToInt32(uint32Buffer, 0) & 0x7FFFFFFF; } /// <summary> /// Returns a nonnegative random number less than the specified maximum. /// </summary> /// <returns> /// A 32-bit signed integer greater than or equal to zero, and less than <paramref name="maxValue"/>; that is, the range of return values ordinarily includes zero but not <paramref name="maxValue"/>. However, if <paramref name="maxValue"/> equals zero, <paramref name="maxValue"/> is returned. /// </returns> /// <param name="maxValue">The exclusive upper bound of the random number to be generated. <paramref name="maxValue"/> must be greater than or equal to zero.</param> /// <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="maxValue"/> is less than zero.</exception> public override int Next(int maxValue) { if (maxValue < 0) throw new ArgumentOutOfRangeException("maxValue"); return Next(0, maxValue); } /// <summary> /// Returns a random number within a specified range. /// </summary> /// <returns> /// A 32-bit signed integer greater than or equal to <paramref name="minValue"/> and less than <paramref name="maxValue"/>; that is, the range of return values includes <paramref name="minValue"/> but not <paramref name="maxValue"/>. If <paramref name="minValue"/> equals <paramref name="maxValue"/>, <paramref name="minValue"/> is returned. /// </returns> /// <param name="minValue">The inclusive lower bound of the random number returned.</param> /// <param name="maxValue">The exclusive upper bound of the random number returned. <paramref name="maxValue"/> must be greater than or equal to <paramref name="minValue"/>.</param> /// <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="minValue"/> is greater than <paramref name="maxValue"/>.</exception> public override int Next(int minValue, int maxValue) { if (minValue > maxValue) throw new ArgumentOutOfRangeException("minValue"); if (minValue == maxValue) return minValue; long diff = maxValue - minValue; long max = (1 + (long)uint.MaxValue); long remainder = max % diff; while (true) { cryptoProvider.GetBytes(uint32Buffer); uint rand = BitConverter.ToUInt32(uint32Buffer, 0); if (rand < max - remainder) { return (int)(minValue + (rand % diff)); } } } /// <summary> /// Returns a random number between 0.0 and 1.0. /// </summary> /// <returns> /// A double-precision floating point number greater than or equal to 0.0, and less than 1.0. /// </returns> public override double NextDouble() { cryptoProvider.GetBytes(uint32Buffer); uint rand = BitConverter.ToUInt32(uint32Buffer, 0); return rand / (1.0 + uint.MaxValue); } /// <summary> /// Fills the elements of a specified array of bytes with random numbers. /// </summary> /// <param name="buffer">An array of bytes to contain random numbers.</param> /// <exception cref="T:System.ArgumentNullException"><paramref name="buffer"/> is null. public override void NextBytes(byte[] buffer) { if (buffer == null) throw new ArgumentNullException("buffer"); cryptoProvider.GetBytes(buffer); } public void Dispose() { InternalDispose(); } ~CryptoRandom() { InternalDispose(); } void InternalDispose() { if (cryptoProvider != null) { cryptoProvider.Dispose(); cryptoProvider = null; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д