C++

Вычислить произведение матрицы на вектор: статические и динамические массивы

Нужно вычислить произведение матрицы на вектор. В полученном векторе найти макисмальный элемент. необходимо решить данную задачу тремя способами:

с использованием статических массивов
использовать только динамические массивы с явным разыменованием указателя
использовать только динамические массивы, адресацию к элементам массива выполнять с помощью индексов.
То есть, у вас должно получиться три отдельных исходника — три программы.

Произведение матрицы на вектор с использованием статических массивов.
#include <iostream>
using namespace std;
#include <iomanip>
 
int main()
{
    int matrix[100][100], // статический массив
        rows    = 0,      // строки
        columns = 0;      // столбцы
 
    cout << "Введите количество строк матрицы: ";
    cin >> rows;
 
    cout << "Введите количество столбцов матрицы: ";
    cin >> columns;
 
    // заполнение матрицы
    for (int ix = 0; ix < rows; ix++ )
        for (int jx = 0; jx < columns; jx++)
        {
            cout << "matrix[" << (ix + 1) << "][" << (jx + 1) << "] = ";
            cin  >> matrix[ix][jx];
        }
 
    int vector[100]; // вектор
    cout << "Введите элементы вектора:\n";
 
    // заполнение вектора
    for (int ix = 0; ix < columns; ix++ )
    {
        cout << "vector[" << (ix + 1) << "] = ";
        cin >> vector[ix];
    }
 
    cout << "\nВведенная матрица:\n";
    for (int ix = 0; ix < rows; ix++ )
    {
        for (int jx = 0; jx < columns; jx++)
        {
            cout << setw(4) << matrix[ix][jx];
        }
        cout << endl;
    }
 
    cout << "\nВведенный вектор:\n";
    for (int ix = 0; ix < columns; ix++ )
    {
        cout << setw(4) << vector[ix] << endl;
    }
 
    int out[100]; // выходной вектор
    // умножение элементов матрицы на вектор
    for (int ix = 0; ix < rows; ix++)
    {
        out[ix] = 0;
        for (int jx = 0; jx < columns; jx++)
            out[ix] += matrix[ix][jx] * vector[jx];
    }
 
    cout << "\результирующий вектор:\n";
    for (int ix = 0; ix < rows; ix++ )
    {
        cout << setw(4) << out[ix] << endl;
    }
 
    int max = out[0]; // переменная для хранения максимального значения
 
    for (int ix = 0; ix < rows; ix++ )
        if ( max < out[ix] ) // поиск максимального значения в одномерном массиве
            max = out[ix];
 
        cout << "\nМаксимальное значение = " << max << endl;
    return 0;
}

Произведение матрицы на вектор с использованием динамических массивов с явным разыменованием указателя.
#include <iostream>
using namespace std;
#include <iomanip>
 
int main()
{
    int rows    = 0,      // строки
        columns = 0;      // столбцы
 
    cout << "Введите количество строк матрицы: ";
    cin >> rows;
 
    cout << "Введите количество столбцов матрицы: ";
    cin >> columns;
 
    // объявление двумерного динамического массива
    int **matrix = new int* [rows];
        for (int count = 0; count < 2; count++)
            *(matrix+ count) = new int [columns];
 
    // заполнение матрицы
    for (int ix = 0; ix < rows; ix++ )
        for (int jx = 0; jx < columns; jx++)
        {
            cout << "matrix[" << (ix + 1) << "][" << (jx + 1) << "] = ";
            cin  >> *((*(matrix + ix)) + jx);
        }
 
    // объявление одномерного динамического массива
    int *vector = new int [columns];
    cout << "Введите элементы вектора:\n";
 
    // заполнение вектора
    for (int ix = 0; ix < columns; ix++ )
    {
        cout << "vector[" << (ix + 1) << "] = ";
        cin >> *(vector + ix);
    }
 
    cout << "\nВведенная матрица:\n";
    for (int ix = 0; ix < rows; ix++ )
    {
        for (int jx = 0; jx < columns; jx++)
        {
            cout << setw(4) << *((*(matrix + ix)) + jx);
        }
        cout << endl;
    }
 
    cout << "\nВведенный вектор:\n";
    for (int ix = 0; ix < columns; ix++ )
    {
        cout << setw(4) << *(vector + ix) << endl;
    }
 
    // объявление одномерного динамического массива
    int *out = new int [columns];
    // умножение элементов матрицы на вектор
    for (int ix = 0; ix < rows; ix++)
    {
        out[ix] = 0;
        for (int jx = 0; jx < columns; jx++)
            *(out + ix) += *((*(matrix + ix)) + jx) * *(vector + jx);
    }
 
    cout << "\результирующий вектор:\n";
    for (int ix = 0; ix < rows; ix++ )
    {
        cout << setw(4) << *(out + ix) << endl;
    }
 
    int max = *out; // переменная для хранения максимального значения
 
    for (int ix = 0; ix < rows; ix++ )
        if ( max < *(out + ix) ) // поиск максимального значения в одномерном массиве
            max = *(out + ix);
 
    cout << "\nМаксимальное значение = " << max << endl;
 
    // высвобождение памяти отводимой под двумерный динамический массив:
        for (int count = 0; count < rows; count++)
            delete [] *(matrix + count);
 
    // высвобождение памяти отводимой под одномерный динамический массив
    delete [] vector;
    delete [] out;
 
    return 0;
}

Произведение матрицы на вектор с использованием динамических массивов с адресацией элементов массивов по индексам.
#include <iostream>
using namespace std;
#include <iomanip>
 
int main()
{
    int rows    = 0,      // строки
        columns = 0;      // столбцы
 
    cout << "Введите количество строк матрицы: ";
    cin >> rows;
 
    cout << "Введите количество столбцов матрицы: ";
    cin >> columns;
 
    // объявление двумерного динамического массива
    int **matrix = new int* [rows];
        for (int count = 0; count < 2; count++)
            matrix[count] = new int [columns];
 
    // заполнение матрицы
    for (int ix = 0; ix < rows; ix++ )
        for (int jx = 0; jx < columns; jx++)
        {
            cout << "matrix[" << (ix + 1) << "][" << (jx + 1) << "] = ";
            cin  >> matrix[ix][jx];
        }
 
    // объявление одномерного динамического массива
    int *vector = new int [columns];
    cout << "Введите элементы вектора:\n";
 
    // заполнение вектора
    for (int ix = 0; ix < columns; ix++ )
    {
        cout << "vector[" << (ix + 1) << "] = ";
        cin >> vector[ix];
    }
 
    cout << "\nВведенная матрица:\n";
    for (int ix = 0; ix < rows; ix++ )
    {
        for (int jx = 0; jx < columns; jx++)
        {
            cout << setw(4) << matrix[ix][jx];
        }
        cout << endl;
    }
 
    cout << "\nВведенный вектор:\n";
    for (int ix = 0; ix < columns; ix++ )
    {
        cout << setw(4) << vector[ix] << endl;
    }
 
    // объявление одномерного динамического массива
    int *out = new int [columns];
    // умножение элементов матрицы на вектор
    for (int ix = 0; ix < rows; ix++)
    {
        out[ix] = 0;
        for (int jx = 0; jx < columns; jx++)
            out[ix] += matrix[ix][jx] * vector[jx];
    }
 
    cout << "\результирующий вектор:\n";
    for (int ix = 0; ix < rows; ix++ )
    {
        cout << setw(4) << out[ix] << endl;
    }
 
    int max = out[0]; // переменная для хранения максимального значения
 
    for (int ix = 0; ix < rows; ix++ )
        if ( max < out[ix] ) // поиск максимального значения в одномерном массиве
            max = out[ix];
 
    cout << "\nМаксимальное значение = " << max << endl;
 
    // высвобождение памяти отводимой под двумерный динамический массив:
        for (int count = 0; count < rows; count++)
            delete [] matrix[count];
 
    // высвобождение памяти отводимой под одномерный динамический массив
    delete [] vector;
    delete [] out;
 
    return 0;
}
Теги:
произведение матрицы, статические массивы, динамические массивы
Добавлено: 11 Апреля 2018 09:29:28 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...