Нужно вычислить произведение матрицы на вектор. В полученном векторе найти макисмальный элемент. необходимо решить данную задачу тремя способами:
- с использованием статических массивов
- использовать только динамические массивы с явным разыменованием указателя
- использовать только динамические массивы, адресацию к элементам массива выполнять с помощью индексов.
То есть, у вас должно получиться три отдельных исходника — три программы. Пример работы программы смотрите ниже.
Произведение матрицы на вектор с использованием статических массивов.
#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; }
Введите количество строк матрицы: 2
Введите количество столбцов матрицы: 4
matrix[1][1] = 1
matrix[1][2] = 2
matrix[1][3] = 3
matrix[1][4] = 4
matrix[2][1] = 5
matrix[2][2] = 6
matrix[2][3] = 7
matrix[2][4] = 8
Введите элементы вектора:
vector[1] = 1
vector[2] = 0
vector[3] = 1
vector[4] = 0
Введенная матрица:
1 2 3 4
5 6 7 8
Введенный вектор:
1
0
1
0
результирующий вектор:
4
12
Максимальное значение = 12
Комментарии
Eduard_P
Выполнил только вариант 3, так как он наиболее сложен в понимании работы с указателями.
fishb0ne
Данилъ Сейфуллинъ
fishb0ne
fishb0ne