1) Створити двовимірний масив 5х5, заповнити його випадковими числами від 10 до 99 і вивести на екран. Поміняти місцями максимальний елемент кожного рядка з першим елементом у відповідному рядку. Завдання вирішити за допомогою покажчиків.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <iostream> #include <ctime> using namespace std; int main() { setlocale(LC_ALL, "rus"); srand(time(NULL)); int size = 5; // выделяем память для указателей на строки матрицы int** arrWithDigits = new int* [size]; for (int i = 0; i < size; i++) { arrWithDigits[i] = new int[size]; // выделение памяти для каждого элемента строки матрицы } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { arrWithDigits[i][j] = 10 + rand() % 90; // заполняем числами от 10 до 99 cout << arrWithDigits[i][j] << " | "; // показываем } cout << endl; } cout << endl << endl; // поиск максимального значение в строке матрицы int max = 0; // для записи максимального значения int buf = 0; // буфер для перестановки местами значений int x = 0; // для записи номера строки в котором ищем максимальное значение int y = 0; // для записи номера столбца с максимальным значением for (int i = 0; i < size; i++) { max = arrWithDigits[i][0]; for (int j = 1; j < size; j++) { if (arrWithDigits[i][j] > max) { max = arrWithDigits[i][j]; x = i; // запоминаем номер строки y = j; // запоминаем номер столбца } } // замена максимума с первым элементом в строке if (arrWithDigits[i][0] < max) { buf = arrWithDigits[i][0]; arrWithDigits[i][0] = max; arrWithDigits[x][y] = buf; } } cout << "Матрица после перестановки максимальных значений в строке: "<< endl; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { cout << arrWithDigits[i][j] << " | "; } cout << endl; } cout << endl << endl; // освобождение памяти for (int i = 0; i < size; i++) { delete[] arrWithDigits[i]; // освобождаем память ячеек } delete[] arrWithDigits; // память под указатели на строки матрицы return 0; } |
Питання про те, як виділити пам'ять під двовимірний масив, детально розкритий в цьому уроці – Завдання: Указатели в С (задача №3). В принципі, коментарів у вихідному коді повинно вистачити, щоб розібратися з вирішенням цього завдання. Але якщо питання залишилися – задавайте.
Результат работы программы:
2) Завдання на множення матриць. Користувач довільно задає розмірність двох матриць і заповнює значеннями вручну. Не забувайте, що необхідно виділити відповідні ділянки пам'яті для матриць, які буде заповнювати користувач і для третьої підсумкової матриці. Далі виведіть на екрані обидві заповнені матриці і підсумкову матрицю (їх відтворення).
Можливо хтось не знає, як множити матриці. Подивіться це коротке відео (автор: Пріходовскій М.А.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | #include <iostream> #include <conio.h> using namespace std; int main() // матрицы произвольного размера { setlocale(LC_ALL, "rus"); int a; // размерность матриц int b; int c; int d; do { system("cls"); cout << "Введите размерность 1-й матрицы: "; cin >> a; cin >> b; cout << endl; cout << "Введите размерность 2-й матрицы: "; cin >> c; cin >> d; cout << endl; if (b != c) { system("cls"); cout << " Эти матрицы невозможно умножить!"; cout << "\n Нажмите Enter для повторного ввода!"; _getch(); } } while (b != c); // выделяем память под матрицы с заданным размером int **M1 = new int*[a]; // сначала для массива указателей на строки матрицы for (int i(0); i < a; i++) M1[i] = new int[b]; // и для каждого элемента int **M2 = new int*[c]; for (int i(0); i < c; i++) M2[i] = new int[d]; int **M3 = new int*[a]; for (int i(0); i < a; i++) M3[i] = new int[d]; system("cls"); cout << "Заполните 1-ю матрицу " << a << "x" << b << endl; for (int i(0); i < a; i++) { for (int j(0); j < b; j++) { cin >> M1[i][j]; } cout << endl; } cout << "Заполните 2-ю матрицу " << c << "x" << d << endl; for (int i(0); i < c; i++) { for (int j(0); j < d; j++) { cin >> M2[i][j]; } cout << endl; } for (int i(0); i < a; i++) // обнуляем 3-ю матрицу { for (int j(0); j < d; j++) { M3[i][j] = 0; } } system("cls"); cout << "Первая матрица: " << endl; for (int i(0); i < a; i++) { cout << "| "; for (int j(0); j < b; j++) { cout << M1[i][j]; if (j < b - 1) cout << " "; else cout << " |" << endl; } } cout << "\nВторая матрица : " << endl; for (int i(0); i < c; i++) { cout << "| "; for (int j(0); j < d; j++) { cout << M2[i][j]; if (j < d - 1) cout << " "; else cout << " |" << endl; } } // умножение (произведение) матриц for (int i(0); i < a; i++) { for (int j(0); j < d; j++) { for (int m(0); m < b; m++) M3[i][j] += M1[i][m] * M2[m][j]; } } cout << "\nИтоговая матрица : " << endl; for (int i(0); i < a; i++) { cout << "| "; for (int j(0); j < d; j++) { cout << M3[i][j] << " "; } cout << "|" << endl; } // освободим память for (int i(0); i < a; i++) // сначала элементы строк { delete[] M1[i]; delete[] M2[i]; delete[] M3[i]; } delete[] M1; // затем память указателей на строки delete[] M2; delete[] M3; } |
Для вас домашнє завдання: напишіть функції для введення розмірності матриць, виділення і звільнення пам'яті, виведення на екран і для множення матриць.
Результат работы:
#include
#include
#include
using namespace std;
порожній логотип()
{
cout << "+————————————————-+" << endl;
cout << "|Програма для арифметичних операцій з матрицями|" << endl;
cout << "+————————————————-+" << endl << endl;
}
порожнеча DeleateMatrix(int **& matrix, ІНТ рядки, int cols)
{
for (int i = 0; i < рядки; i )
{
delete[] matrix[i];
}
delete[] matrix;
матриця = nullptr;
}
порожнеча CreateMatrix(int **&matrix, ІНТ рядки, int cols)
{
матриця = new int * [рядки];
for (int i = 0; i < рядки; i )
{
matrix[i] = new int[смещ_по_столбцам];
}
for (int i = 0; i < рядки; i )
{
for (int j = 0; j < смещ_по_столбцам; j )
{
matrix[i][j] = 0;
}
}
}
порожнеча InputMatrix(int **&matrix, ІНТ рядки, int cols)
{
for (int i = 0; i < рядки; i )
{
cout << i + 1 << " рядок: " << endl;
for (int j = 0; j < смещ_по_столбцам; j )
{
cout <= k; k * = 10)
{
cout << " ";
}
cout << j + 1;
cout <> matrix[i][j];
}
}
}
порожнеча OutputMatrix(int **& matrix, ІНТ рядки, int cols)
{
cout << endl;
for (int i = 0; i < рядки; i )
{
for (int j = 0; j < смещ_по_столбцам; j )
{
if (J == 0)
{
cout << "{ ";
}
cout << matrix[i][j];
if (j != cols – 1)
{
cout << "\t";
}
if (j == зб – 1)
{
cout << " }";
}
}
cout << endl;
}
cout << endl;
}
int main()
{
setlocale(LC_ALL, "rus");
while (true)
{
bool пауза = 0;
помилка bool = false;
char повторення = 0;
int ** firstMatrix = 0;
int firstRows = 0;
int firstCols = 0;
int ** resultMatrix = 0;
int ** secondMatrix = 0;
int secondRows = 0;
int secondCols = 0;
do {
system("cls");
логотип();
помилка = хибне;
cout <> firstRows;
cout <> firstCols;
CreateMatrix(firstMatrix, firstRows, firstCols);
cout << endl;
cout <> secondRows;
cout <> secondCols;
CreateMatrix(друга матриця, secondRows, secondCols);
if (firstCols != secondRows)
{
cout << "\n\aОщибка! Кількість стовпців в першому матриці не дорівнює кількості рядків у другій матриці(натисніть будь-яку клавішу для продовження)" << endl;
пауза = _getch();
помилка = істина;
}
else if (repeat == 'R' || repeat == 'r' || repeat == 'К' || repeat == 'к')
{
cout << "\nПроверьте правильно ли вы ввели параметры матрицы." << endl
<< "Если вы неправильно ввели параметры, то натисніть клавішу R для того, щоб ввести параметри знову" << endl
<< "(натисніть будь-яку клавішу щоб продлжіть)" << endl;
повторити = _getch();
помилка = істина;
}
if (firstRows == 0 || firstCols == 0 || secondRows == 0 || secondCols == 0)
{
cout << "\n\aОщибка! Кількість рядків або стовпців не може дорівнювати нулю(натисніть будь-яку клавішу для продовження)" << endl;
пауза = _getch();
помилка = істина;
}
} while (error);
do {
помилка = хибне;
system("cls");
логотип();
cout << "\nЗаполните первую матрицу" << endl;
InputMatrix(firstMatrix, firstRows, firstCols);
OutputMatrix(firstMatrix, firstRows, firstCols);
cout << "\nПроверьте правильно ли вы ввели данные в матрицу." << endl
<< "Если вы неправильно ввели данные, то натисніть клавішу R для того, щоб ввести дані знову" << endl
<< "(натисніть будь-яку клавішу щоб продлжіть)" << endl;
повторити = _getch();
if (repeat == 'R' || repeat == 'r' || repeat == 'К' || repeat == 'к')
{
помилка = істина;
}
} while (error);
do {
помилка = хибне;
system("cls");
логотип();
cout << "Первая матрица: " << endl;
OutputMatrix(firstMatrix, firstRows, firstCols);
cout << "Заполните вторую матрицу" << endl;
InputMatrix(друга матриця, secondRows, secondCols);
OutputMatrix(друга матриця, secondRows, secondCols);
cout << "\nПроверьте правильно ли вы ввели данные в матрицу." << endl
<< "Если вы неправильно ввели данные, то натисніть клавішу R для того, щоб ввести дані знову" << endl
<< "(натисніть будь-яку клавішу щоб продлжіть)" << endl;
повторити = _getch();
if (repeat == 'R' || repeat == 'r' || repeat == 'К' || repeat == 'к')
{
помилка = істина;
}
} while (error);
do {
помилка = хибне;
system("cls");
логотип();
cout << "Первая матрица: " << endl;
OutputMatrix(firstMatrix, firstRows, firstCols);
cout << "Вторая матрица: " << endl;
OutputMatrix(друга матриця, secondRows, secondCols);
cout << "Выберите арифметическую операцию, яку ви хочете виконати з цими матрицями" << endl << endl;
cout << "1. множення(кількість рядків у першій Мотрони має дорівнювати кількості стовпців в другій матриці)" << endl;
cout << "2. додавання(матриці повинні бути однакового розміру)" << endl;
cout << "3. віднімання(матриці повинні бути однакового розміру)" << endl;
CreateMatrix(resultMatrix, firstRows, secondCols);
char вибір = _getch();
system("cls");
логотип();
cout << "Первая матрица: " << endl;
OutputMatrix(firstMatrix, firstRows, firstCols);
cout << "Вторая матрица: " << endl;
OutputMatrix(друга матриця, secondRows, secondCols);
switch (вибір)
{
case '1':
for (int i = 0; i < firstRows; i )
{
for (INT L = 0; L < secondCols; л ++)
{
for (int j = 0; j < firstCols; j )
{
resultMatrix[i][L] += firstMatrix[i][j] * друга матриця[j][L];
}
}
}
cout << "Результат умножения двух матриц: " << endl;
break;
case '2':
if (firstRows != secondRows && firstCols != secondCols)
{
cout << "Ощибка! Матриці повинні бути однакового розміру(натисніть будь-яку клавішу для продовження)" << endl;
}
else
{
for (int i = 0; i < firstRows; i )
{
for (int j = 0; j < firstCols; j )
{
resultMatrix[i][j] = firstMatrix[i][j] + друга матриця[i][j];
}
}
cout << "Результат сложения двух матриц: " << endl;
}
break;
case '3':
if (firstRows != secondRows && firstCols != secondCols)
{
cout << "Ощибка! Матриці повинні бути однакового розміру(натисніть будь-яку клавішу для продовження)" << endl;
}
else
{
for (int i = 0; i < firstRows; i )
{
for (int j = 0; j < firstCols; j )
{
resultMatrix[i][j] = firstMatrix[i][j] – друга матриця[i][j];
}
}
cout << "Результат вычитания двух матриц: " << endl;
}
break;
}
OutputMatrix(resultMatrix, firstRows, secondCols);
} while (error);
DeleateMatrix(firstMatrix, firstRows, firstCols);
DeleateMatrix(друга матриця, secondRows, secondCols);
DeleateMatrix(resultMatrix, firstRows, secondCols);
cout << "Нажмите любую клавишу чтобы продолжить" << endl; _getch();
}
return 0;
Хто-небудь може підказати, чому якщо int maxRowValue = arr[i][0],
видає помилку?
#include <iostream>
using namespace std;
int main()
{
int size = 5;
int ** arr = новий int *[size];
for (int i = 0; i < size; i )
{
arr[i] = new int[size];
}
for (int i = 0; i < size; i )
{
for (int j = 0; j < size; j )
{
arr[i][j] = 10 + rand() % + 89;
cout << arr[i][j] << "\t";
}
cout << endl;
}
cout << endl;
for (int i = 0; i < size; i )
{
int maxRowValue = 0; /*arr[i][0];*/
int * buf = 0;
for (int j = 0; j < size; j )
{
if (arr[i][j] > maxRowValue)
{
maxRowValue = обр[i][j];
buf = &(arr[i][j]);
}
}
*buf = обр[i][0];
arr[i][0] = maxRowValue;
}
for (int i = 0; i < size; i )
{
for (int j = 0; j < size; j )
{
cout << arr[i][j] << "\t";
}
cout << endl;
}
for (int i = 0; i < size; i )
{
delete[] arr[i];
} delete[]arr;
}
#include <iostream>
using namespace std;
int main()
{
int size = 5;
int ** arr = новий int *[size];
for (int i = 0; i < size; i )
{
arr[i] = new int[size];
}
for (int i = 0; i < size; i )
{
for (int j = 0; j < size; j )
{
arr[i][j] = 10 + rand() % + 89;
cout << arr[i][j] << "\t";
}
cout << endl;
}
cout << endl;
for (int i = 0; i < size; i )
{
int maxRowValue = 0; /*arr[i][0];*/
int * buf = 0;
for (int j = 0; j < size; j )
{
if (arr[i][j] > maxRowValue)
{
maxRowValue = обр[i][j];
buf = &(arr[i][j]);
}
}
*buf = обр[i][0];
arr[i][0] = maxRowValue;
}
for (int i = 0; i < size; i )
{
for (int j = 0; j < size; j )
{
cout << arr[i][j] << "\t";
}
cout << endl;
}
for (int i = 0; i < size; i )
{
delete[] arr[i];
} delete[]arr;
}
Доброго дня,на вашому сайті, при натисканні на “+” не виникає код
#include
#include
#include
using namespace std;
int main (){
const int SIZE = 5;
srand(time(NULL));
int arr[SIZE][SIZE];
for(INT I = 0;i<SIZE;i ){
for (int j = 0; j < SIZE; j ){
arr[i][j]= 10 + rand() % 90;
}
}
for(INT I = 0;i<SIZE;i ){
for (int j = 0; j < SIZE; j ){
cout << arr[i][j] << '\t';}
cout << endl;}
for(INT I = 0;i<SIZE;i ){
INT J,k;
int *макс;
макс = &arr[i][0];
int **перший;
first = &max;
for( J = 0;j *макс){
макс.=&arr[i][j];}}
k = **перший;
*max = arr[i][0];
arr[i][0] = k;
}
cout << endl << endl << endl;
for(INT I = 0;i<SIZE;i ){
for (int j = 0; j < SIZE; j ){
cout << arr[i][j] << '\t';}
cout << endl;}
return 0;
}
Тільки заповнюється сама, #Життя СтрічокВажливі
#include
#include
int main()
{
setlocale(LC_ALL, “rus”);
srand(time(NULL));
int rows1 = 0;
int обидва = 0;
int cols2 = 0;
std::cout <> рядки1;
std::cout <> обидва;
std::cout <> cols2;
int** dArray1 = новий int* [рядки1]; // Виділення пам'яті для першої матриці
for (int i = 0; i < рядки1; i )
{
dArray1[i] = new int[обидва];
}
int** dArray2 = новий int* [обидва]; // Виділення пам'яті для другої матриці
for (int i = 0; i < обидва; i )
{
dArray2[i] = new int[cols2];
}
int** dArray3 = новий int* [рядки1]; // Виділення пам'яті для третьої матриці
for (int i = 0; i < рядки1; i )
{
dArray3[i] = new int[cols2];
}
for (int i = 0; i < рядки1; i ) // Заповнення першої матриці цифрами від 1 до 9
{
for (int j = 0; j < обидва; j )
{
dArray1[i][j] = 1 + rand() % 9;
}
}
for (int i = 0; i < рядки1; i ) // Виведення першої матриці
{
for (int j = 0; j < обидва; j )
{
std::cout << dArray1[i][j] << " | ";
}
std::cout << "\n";
}
std::cout << "\n\n\n";
for (int i = 0; i < обидва; i ) // Заповнення другої матриці цифрами від 1 до 9
{
for (int j = 0; j < cols2; j )
{
dArray2[i][j] = 1 + rand() % 9;
}
}
for (int i = 0; i < обидва; i ) // Виведення другої матриці
{
for (int j = 0; j < cols2; j )
{
std::cout << dArray2[i][j] << " | ";
}
std::cout << "\n";
}
std::cout << "\n\n\n";
for (int i = 0; i < рядки1; i )
{
for (int j = 0; j < cols2; j )
{
int buffer = 0;
for (INT з = 0; c < обидва; C ++)
{
буфер += dArray1[i][c] * dArray2[c][j];
}
dArray3[i][j] = буфер;
}
}
for (int i = 0; i < рядки1; i )
{
for (int j = 0; j < cols2; j )
{
std::cout << dArray3[i][j] << " | ";
}
std::cout << "\n";
}
for (int i = 0; i < рядки1; i ) {
delete[] dArray1[i];
}
delete[] dArray1;
for (int i = 0; i < обидва; i ) {
delete[] dArray2[i];
}
delete[] dArray2;
for (int i = 0; i < рядки1; i ) {
delete[] dArray3[i];
}
delete[] dArray3;
return 0;
}