Вычислить произведение матрицы на вектор: статические и динамические массивы
Нужно вычислить произведение матрицы на вектор. В полученном векторе найти макисмальный элемент. необходимо решить данную задачу тремя способами:
с использованием статических массивов
использовать только динамические массивы с явным разыменованием указателя
использовать только динамические массивы, адресацию к элементам массива выполнять с помощью индексов.
То есть, у вас должно получиться три отдельных исходника — три программы.
Произведение матрицы на вектор с использованием статических массивов.
#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;
}
Комментарии:
Нету комментариев для вывода...