
- •Тема 12_1 Базові алгоритми роботи з масивами
- •Порядкова обробка
- •Обробка по стовпцях
- •Обробка всієї матриці
- •Обхід по «спіралі» квадратної матриці порядку n
- •Обробка частини матриці Обробка елементів головної або побічної діагоналей квадратної матриці
- •Обробка елементів над (під) головною або побічною діагоналями квадратної матриці
- •Вставка рядка
- •Побудова матриць
- •Приклади «Дзеркальне відображення» матриці відносно вертикальної осі, що проходить через її середину
- •Знаходження мінімального елементу матриці і викреслювання рядка і стовпця, на пересіченні яких він знаходиться
- •Void vyvod_ar(int arra[nrow][ncol], int m, int n) //функция виведення масиву
- •Void vvod_ar(int arra [nrow][ncol], int m, int n) //функция введення масиву
- •Знаходження сум елементів квадратної матриці на головній діагоналі і на діагоналях, паралельних головною
- •Void vyvod_ar(int arra[n][n], int n) //функция виведення масиву
- •Void vvod_ar(int arra [n][n], int n) //функция введення масиву
- •Void sum_diag(int а, int n) //функция знаходження сум елементів
- •Множення матриць
- •Література:
Побудова матриць
Елементи матриці можна задати за деяким спеціальним правилом залежно від її індексів. Наприклад:
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
A[i][j]=(i+1)*(j+1);
При побудові матриці можна використовувати одне число. Наприклад, побудуємо матрицю А для заданих значень x і n:
Алгоритм наступний: черговий елемент «периметра матриці» отримуємо так: умножаємо попередній елемент на х і поміщаємо його в перший і останній рядки, в перший і останній стовпці. Для цього досить одного циклу. Всі «центральні» елементи обнуляємо.
const n=5;
double x, A[n][n], T;
cin >> x;
A[0][0]= A[n-1][n-1]=1;
T=1;
for (int i=1; i<n; i++)
{T *=x;
A[0][i]= //элементы 0-го рядка
A[i][0]= //элементы 0-го стовпця
A[n-1][n-1-i]= //элементы (n-1) -го рядка
A[n-1-i][n-1]= T; //элементы (n-1) -го стовпця
}
for (int i=1; i<n-1; i++)
for (int j=1; j<n-1; j++)
A[i][j]=0;
Матрицю можна побудувати, використовуючи один або декілька одновимірних масивів. Наприклад, задане b[n]. Сформувати матрицю за наступним правилом:
У таких завданнях необхідно встановити, від чого і як залежать індекси елементів матриці і, можливо, значення її елементів. В даному випадку залежність проста, тому отримуємо:
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
A[i][j]=b[i]+j;
Нову матрицю можна побудувати на основі однієї або декількох визначених до цього часу матриць. Наприклад, задана матриця C[n][n]. Отримаємо нову матрицю A[n][n] такої ж розмірності за наступним правилом: позитивні числа вихідної матриці збільшимо в 2 рази, а негативні зменшимо в стільки ж раз:
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
{ t=C[i][j];
A[i][j]= t>0 ? t*2: t/2;
}
Відмітимо, що стара матриця C збереглася без зміни, а побудована розмістилася на новому місці.
Якби перетворювалася вихідна матриця, а змінені значення зберігалися на тому ж місці, то необхідно було записати в телі циклу:
{ t=C[i][j];
С[i][j]= t>0 ? t*2: t/2;
}
Приклади «Дзеркальне відображення» матриці відносно вертикальної осі, що проходить через її середину
#include <iomanip>
#include <stdlib.h>
const int n=3;
const int m=5;
int main ()
{int а, i, j, x;
for (i=0; i< n; i++)
{for( j=0; j< m; j++)
{а[i][j]= rand();
cout << setw(10) << а[i][j] << " ";
}
cout << endl;
}
cout <<endl << endl;
for (j=0; j< m/2; j++)
for( i=0; i< n; i++)
{x=a[i][j];
а[i][j]= а[i][m-(j+1)];
а[i][m-(j+1)]= x;
}
for (i=0; i< n; i++)
{for( j=0; j< m; j++)
cout << setw(10) << а[i][j] << " ";
cout << endl;}
_getch();
return 0;
}
Результат:
41 18467 6334 26500 19169
15724 11478 29358 26962 24464
5705 28145 23281 16827 9961
19169 26500 6334 18467 41
24464 26962 29358 11478 15724
9961 16827 23281 28145 5705