Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / 3_кол / Лекції / лекция_С++(12_1)_у.doc
Скачиваний:
15
Добавлен:
30.05.2020
Размер:
202.75 Кб
Скачать

Побудова матриць

Елементи матриці можна задати за деяким спеціальним правилом залежно від її індексів. Наприклад:

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

Соседние файлы в папке Лекції