Как заполнить 2d массив случайными числами с помощью указателей

Когда я выполняю этот код, я не получаю матрицу полностью случайных чисел, а вместо этого получаю много повторяющихся чисел. Есть идеи, как я могу использовать функцию rainGen для создания действительно случайной 2d матрицы? Любая помощь, которую вы можете оказать, будет очень признательна!

#include <iostream>
#include <cstdlib>
using namespace std;

const int MATRIX_ROW = 5;
const int MATRIX_COL = 5;

int** rainGen(int **theMatrix_ptr_ptr, int rows);

int main()
{
int matrix[MATRIX_ROW][MATRIX_COL];
int *matrix_ptr[MATRIX_ROW];
int **matrix_ptr_ptr = &matrix_ptr[0];
int rows = 3;

for (int count = 0; count < MATRIX_ROW; count++)
matrix_ptr[count] = &matrix[count][0];

rainGen(matrix_ptr_ptr, rows);

return 0;
}

int** rainGen(int **theMatrix_ptr_ptr, int rows)
{
srand(1023);

for (int i = 0; i < rows; i++)
for (int j = 0; j < MATRIX_COL; j++)
*((*theMatrix_ptr_ptr + i) + j) = rand() % 100;

return theMatrix_ptr_ptr;
}

2

Решение

Я добавил отладочный код. int matrix[MATRIX_ROW][MATRIX_COL]; оператор выделяет память для matrix но он не инициализирует значения элемента. Значения будут такими, какими были битовые комбинации, оставшиеся от предыдущего использования памяти. Я инициализировал matrix значения элемента к неожиданному значению -1, В конце я напечатал matrix,

#include <iostream>
#include <cstdlib>
using namespace std;

const int MATRIX_ROW = 5;
const int MATRIX_COL = 5;

int** rainGen(int **theMatrix_ptr_ptr, int rows);

int main()
{
int matrix[MATRIX_ROW][MATRIX_COL];
// initialize matrix elements to -1.
for (int i = 0; i < MATRIX_ROW; ++i)
for (int j = 0; j < MATRIX_COL; ++j)
matrix[i][j] = -1;
int *matrix_ptr[MATRIX_ROW];
int **matrix_ptr_ptr = &matrix_ptr[0];
int rows = 3; // error
for (int i = 0; i < MATRIX_ROW; i++)
matrix_ptr[i] = &matrix[i][0];
rainGen(matrix_ptr_ptr, rows);
// print matrix elements.
for (int i = 0; i < MATRIX_ROW; ++i) {
for (int j = 0; j < MATRIX_COL; ++j)
cout << " [" << i << "," << j << "] " << matrix[i][j];
cout << endl;
}
return 0;
}

int** rainGen(int **theMatrix_ptr_ptr, int rows)
{
srand(1023);
for (int i = 0; i < rows; i++)
for (int j = 0; j < MATRIX_COL; j++)
*((*theMatrix_ptr_ptr + i) + j) = rand() % 100; //error
return theMatrix_ptr_ptr;
}

Выход:

[0,0] 8 [0,1] 53 [0,2] 30 [0,3] 51 [0,4] 40
[1,0] 88 [1,1] 60 [1,2] -1 [1,3] -1 [1,4] -1
[2,0] -1 [2,1] -1 [2,2] -1 [2,3] -1 [2,4] -1
[3,0] -1 [3,1] -1 [3,2] -1 [3,3] -1 [3,4] -1
[4,0] -1 [4,1] -1 [4,2] -1 [4,3] -1 [4,4] -1

Как вы можете видеть из matrix элементы со значением -1Вы не даете все элементы matrix случайное значение.

В качестве полезного совета я отметил два заявления, представляющие особый интерес, // error комментарий.

Как только вы исправите свои проблемы, результат должен выглядеть примерно так:

[0,0] 8 [0,1] 14 [0,2] 19 [0,3] 36 [0,4] 99
[1,0] 53 [1,1] 45 [1,2] 20 [1,3] 64 [1,4] 3
[2,0] 30 [2,1] 51 [2,2] 40 [2,3] 88 [2,4] 60
[3,0] 22 [3,1] 36 [3,2] 42 [3,3] 1 [3,4] 49
[4,0] 96 [4,1] 24 [4,2] 48 [4,3] 92 [4,4] 46
1

Другие решения

Я думаю, что вы должны вывести свой srand () из функции

int** rainGen(int **theMatrix_ptr_ptr, int rows)

Вы должны поместить его в main ().

Другой метод:

Вы можете изменить srand (1234) на srand (время ())

но вы должны

#include <time.h>

первый

0

srand () повторно инициализирует генератор случайных чисел.
Вы можете использовать текущее время в качестве параметра srand ().
это решит вашу проблему

0

Согласно моему пониманию вашего вопроса. Я предоставил некоторый код для вас. Может быть, это поможет вам.

    #include <stdio.h>
#include <stdlib.h>
#include <time.h>

--------->int <---------
main (int argc, char *argv[])
{
/* Simple "srand()" seed: just use "time()" */
unsigned int iseed = (unsigned int)time(NULL);
srand (iseed);

/* Now generate 5 pseudo-random numbers */
int i;
for (i=0; i<5; i++)
{
printf ("rand[%d]= %u\n",
i, rand ());
}
return 0;
}

/*
* rand: Generates 5 numbers using standard "srand()/rand()" function
*
* SAMPLE OUTPUT:
*   rand[0]= 824522256
*   rand[1]= 1360907941
*   rand[2]= 1513675795
*   rand[3]= 1046462087
*   rand[4]= 253823980
*/
0
По вопросам рекламы [email protected]