для моего задания мне нужно умножить две матрицы вместе, чтобы создать новую. Затем я буду сортировать новый из унаследованного класса. Мой вопрос заключается в том, какой формат для умножения двух массивов разных измерений, мой первый a1d
составляет 5 целых чисел. Мой другой a2d
- массив 5х10. Как правильно умножить их вместе, так как они разных размеров и размеров. Умножить ли a1d на каждую строку a2d? Я собираюсь вывести продукты в одномерный массив, чтобы упростить сортировку. Я нарисовал два массива в виде таблиц, чтобы помочь мне их визуализировать. Я приложу короткий код, который у меня есть, и мою иллюстрацию. Это в C ++.
#pragma once
#include<ctime>
#include<iostream>
#include<cmath>
using namespace std;
class matrices
{
private:
int* a1d[5]; // Old Code:int* a1d = new int[5];
int** a2d = new int* [5];
public:
int* matrix;
matrices();
~matrices();
int* filla1d();
int* filla2d();
int* multiply();
};
int* matrices::filla1d() {
for (int i = 0; i < 5; i++) {
a1d[i] = new int;
}
for (int i = 0; i < 5; i++) {
*a1d[i] = rand() % 10 + 1;
}
return *a1d;
}
int* matrices::filla2d() {
for (int i = 0; i < 5; i++) {
a2d[i] = new int[10];
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 10; j++) {
a2d[i][j] = rand() % 10 + 1;
cout << a2d[i][j] << endl;
}
}
return *a2d;
}
int* matrices::multiply() {
}
требуется, чтобы я использовал только переменные типа указателя и функции возврата указателя, хотя это не слишком сильно меняется. Я не знаю, как они должны быть умножены, и из-за этого я не уверен, сколько значений будет сгенерировано из умножения для размера нового массива. Заранее спасибо!
Вот то, что я разработал, чтобы умножить их вместе. Я изменил, как распределяются мои массивы указателей. Моя проблема сейчас в том, что он говорит мне, что «выражение должно иметь арифметический тип enummeti c или unscoped enum». Где у меня есть matrix[i] =(a1d[index1] * a2d[index1][index2]);
Я подумал, что, возможно, a1d должен быть указателем, но он выдает ошибку, когда он не может конвертировать из int * в int.
Кроме того, при отладке мои массивы a1d
и matrix
выделяются идеально и показывают правильное количество слотов данных при наведении. Однако a2d
показывает только один указатель, который в данном случае указывает на 5. Я следовал синтаксису, который я видел в Интернете для массива указателей для создания 2d массива.
int* matrices::filla1d() {
for (int i = 0; i < 5; i++) {
a1d[i] = new int;
}
for (int i = 0; i < 5; i++) {
*a1d[i] = rand() % 10 + 1;
}
return *a1d;
}
int* matrices::filla2d() {
for (int i = 0; i < 5; i++) {
a2d[i] = new int[10];
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 10; j++) {
a2d[i][j] = rand() % 10 + 1;
}
}
return *a2d;
}
int* matrices::multiply() {
for (int i = 0; i < 50; i++) {
matrix[i] = new int;
}
int index1 = 0;
int index2 = 0;
for (int i = 0; i < 50; i++) {
matrix[i] = (a1d[index1] * a2d[index1][index2]);
index1++;
index2++;
}
return *matrix;
}
class matrices
{
private:
int* a1d[5];
int** a2d = new int*[5];
public:
int* matrix[50];
matrices();
~matrices();
int* filla1d();
int* filla2d();
int* multiply();
};
Редактировать 2:
Я изменил строку, чтобы заполнить новый matrix
, чтобы сказать *matrix[i] = a2d[index1][index2] * *a1d[index1];
Теперь я получаю ошибку нарушения доступа в этой строке. matrix
выделено так же, как выделено a1d
, что может вызвать нарушение моего доступа?