Member 13589920 Ответов: 2

Пожалуйста, помогите мне с этой проблемой


создайте массив 5x5 со случайными элементами от 0 до одного(a[5][5] rand() % 100.Затем меняйте места элементов, расположенных справа и слева от диагонали массива.Я попробовал использовать несколько методов, но ни один из них не помог(

Что я уже пробовал:

#include<iostream>
#include<time.h>
using namespace std;

void main() {
	const int	S = 5;
	int arr[S][S] = {};
	for (int i = 0; i < S; i++) {
		for (int j = 0; j < S; j++) {
			arr[i][j] = rand() % 100;
			cout << arr[i][j] << "\t";

		}
		cout << "\n";

	}
	cout << "\n\n\n\n";
	for (int i = 0; i < S; i++) {
		for (int j = 0; j < S; j++) {
			arr[i][j] = rand() % 100;
			if (i < j)
				int m = 0;
			int m = j - i;
			arr[i][j] = arr[i + m][j - m]; { cout << arr[i + m][j - m] << "\t"; }
			if (j < i)
				int n = 0;
			int n = i - j;
			arr[i][j] = arr[i - n][j + n]; { cout << arr[i - n][j + n] << "\t"; }
			
			
		}
		cout << "\n";
	}
}

Member 13589920

от 0 до 100*

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

Richard MacCutchan

Нарисуйте массив на листе бумаги, и вы увидите координаты адресов ячеек в диагоналях.

2 Ответов

Рейтинг:
4

Rick York

Как упоминал Ричард, рисование этого на бумаге поможет вам увидеть узор. Это очень просто.

Кроме того - взгляните на функцию swap в стандартной библиотеке. Он будет принимать этот аспект вещей для вас.

Другое дело - не забудьте засеять генератор случайных чисел (ГСЧ) с помощью srand(). У вас есть как минимум два варианта посеять его. Один из них-использовать заранее определенное значение. Простые числа хороши для этого, например 47 или 43, и большие значения тоже в порядке. С заранее заданным семенем вы получите ту же последовательность случайных величин. Другой вариант-использовать случайное значение для семени. Для этого обычно используется время. Вот вам пример :

int seed = time( NULL ) % RAND_MAX;
Это приведет к тому, что ГСЧ будет возвращать более случайную последовательность значений. Это до вас, чтобы выбрать, какую последовательность вы хотите.

Наконец, вы можете реализовать функцию для отображения матрицы для вас. Вам нужно будет сделать это дважды, так что вы можете также использовать один кусок кода, чтобы сделать это. Это может занять некоторое время, чтобы выяснить, как передать матрицу в функцию, так что это необязательно. Хотя, скорее всего, это будет познавательно, чтобы понять это.

Вот подсказка - у вас есть размер, определенный как константа, и это хорошее начало. Вы можете использовать typedef и определить матрицу как тип, и это упростит задачу. ;)

Желаю удачи.


Member 13589920

извините за то, что раздражаю, но не могли бы вы написать код?:)

Rick York

Я сделаю это для typedef, но вам нужно выяснить все остальное.

const int MatrixSize = 5;
typedef int MyMatrix[MatrixSize][MatrixSize];

MyMatrix source; // объявить экземпляр матрицы

Рейтинг:
1

KarstenK

Ваш процесс изменения не является правильным, потому что вы заполняете свою матрицу новыми значениями.

Я бы сделал копию и затем использовал механизм преобразования для заполнения целевой матрицы.

int source[S][S] = {};
memcpy( source, arr, 5*5*sizeof(int));//make a memory copy of the source data
//apply transformation algorithm
for (int i = 0; i < S; i++) {
    for (int j = 0; j < S; j++) {
      int k = i; // best guess
      int n = ... //TODO
      arr[i][j] = source[k][n];

Совет: заполните свой файл простыми тестовыми данными (например, упорядоченными числами) для отладки и тестирования трасформации.


Member 13589920

Не могли бы вы написать весь код, пожалуйста?