умножение двух массивов разных размеров в с ++ - PullRequest
0 голосов
/ 15 апреля 2020

для моего задания мне нужно умножить две матрицы вместе, чтобы создать новую. Затем я буду сортировать новый из унаследованного класса. Мой вопрос заключается в том, какой формат для умножения двух массивов разных измерений, мой первый 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, что может вызвать нарушение моего доступа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...