Умножьте матрицу на вектор с моим собственным вводом - PullRequest
0 голосов
/ 22 января 2020

Я хочу использовать этот метод для умножения матрицы на вектор, представляя мои собственные cin>> для строк и столбцов для матрицы, а также для векторных данных, это мой метод умножения.

int multiply()
{
    int a[3][3]= //MY OWN INPUT
    int b[]={1,2,3}; //MY OWN INPUT
    int c[3]; //SOLUTION

    for (int i=0;i<3;i++)
    {
         c[i]=0;
    }

    for (int i=0;i<3;i++)
    {
        for (int j=0;j<3;j++)
        {
            c[i]+=(a[i][j]*b[j]);
        }
    }

    for (int i=0;i<3;i++){
        cout<<c[i]<<"  "<<endl;
    }
    system ("pause>0");

}

Полагаю, что для матрицы чтение входных данных будет выглядеть примерно так:

void leerMatriz( int **M, int fil, int col )
{
    cout << "\nRellenar la matriz:\n";
    for( int i = 0; i < fil; i++ ){
        for( int j = 0; j < col; j++ ){
            cout << "Matriz[" << i << "][" << j << "]: ";
            cin >> M[i][j];
        }
    }
}
int main()
{
    int filA, colA, filB, colB;



    cout << "\nDimension de la matriz A:";
    cout << "\nFilas de la matriz: "; cin >> filA;
    cout << "Columnas de la matriz: "; cin >> colA;

    int** A = new int*[filA];
    for( int i = 0; i < filA; i++ )
        A[i] = new int[colA];

    leerMatriz( A, filA, colA );

    cout << "\nDimension de la matriz B:";
    cout << "\nFilas de la matriz: "; cin >> filB;
    cout << "Columnas de la matriz: "; cin >> colB;

    int** B = new int*[filB];
    for( int i = 0; i < filB; i++ )
        B[i] = new int[colB];

    leerMatriz( B, filB, colB );

а как же вектор? Есть ли более простой способ?

1 Ответ

0 голосов
/ 22 января 2020

Есть несколько проблем с кодом, которым вы поделились с нами, но вот несколько советов для написания этого:

1) Избегайте использования сырых указателей, как вы делаете в своем основном, может быть, посмотрите на что-то вроде этого Правильный способ создать матрицу в c ++ , где вместо этого определен класс. Этот класс может иметь функцию 'getInput', например, которая будет захватывать ввод от пользователя. Вы могли бы написать что-то подобное и для вектора.

2) Как я уверен, вы знаете, в матричном векторном произведении размер имеет значение. Убедитесь, что ваш векторный размер соответствует количеству строк в вашей матрице. И убедитесь, что размеры инициализированы в вашей программе.

3) При приеме многоэлементного ввода в качестве значений списка через стандартный ввод важно определить символ-разделитель. (вектор [0,1,2,3,4] может быть записан как "0,1,2,3,4"). Затем вам придется анализировать эту строку в значения. Или просто получайте вводимые символы за символом.

4) Ваша функция умножения должна быть «адаптируемой» в соответствии с вашим вводом, верно? Поэтому в качестве входных данных необходимо принять некоторые параметры.

В c ++ легко заблудиться с нематематическим вопросом и легко сделать «плохой» код, go легко, начать с умножения двух векторов может быть?

...