
- •Тема 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) //функция знаходження сум елементів
- •Множення матриць
- •Література:
Множення матриць
Матриця – математичний об'єкт, еквівалентний двовимірному масиву. Числа розташовуються в матриці по рядках і стовпцях. Дві матриці однакового розміру можна поелементно скласти або відняти один з одного.
Якщо число стовпців в першій матриці збігається з числом рядків в другій, то ці дві матриці можна перемножити. В твору буде стільки ж рядків, скільки в першій матриці, і стільки ж стовпців, скільки в другій. При множенні матриці розміром 3х4 на матрицю розміром 4x7 ми отримуємо матрицю розміром 3x7. Множення матриць некомутативне: обоє твору АВ і ВА двох квадратних матриць однакового розміру можна обчислити, проте результати, взагалі кажучи, відрізнятимуться один від одного. (Відзначимо, що множення чисел комутативне, і твори АВ і ВА двох чисел A і В рівні.)
Для обчислення добутку двох матриць кожен рядок першої поелементно умножається на кожен стовпець другої. Потім підраховується сума таких творів і записується у відповідну клітку результату. Нижче наведений приклад множення двох матриць, яке в цьому випадку вимагає 24-х множень і 16-і складань. Взагалі, стандартний алгоритм множення матриці розміром ахb на матрицю розміром bхс виконує abc множень і а(b-1) із складань.
Розглянемо стандартний алгоритм множення матриці G розміром ахb на матрицю Н розміром bxс. Результат записується в матрицю R розміром ахс. Алгоритм обчислення елементів матриці R містить три вкладені цикли.
Зверніть увагу, що перші два цикли мають як верхні значення параметрів циклу значення а і з (як значення розмірів нової матриці). Третій цикл має як верхнє значення параметра циклу значення b (кількість елементів в рядку першої матриці і стовпці другої матриці):
for (int i=1; i< а ; i++) for (int j=1; i< з ; j++) { R[i][j]=0; for (int k=1; до< b ; k++) R[i][j]=R[i][j]+G[i][k]*H[k][j]; } // for j
Контрольні питання:
-
Яким чином у пам'яті розташовується багатовимірний масив?
-
Властивості квадратних матриць
-
Яким чином здійснюється введення значень двовимірного массиву?
-
Яким чином здійснюється виведення елементів двовимірного массиву?
-
Яким чином виконується перебір елементів матриці?
Література:
-
П. Франка. C++. Учебный курс. 2003 год., 528 стр.
-
С. В. Глушаков, А. В. Коваль, С. В. Смирнов. Язык программирования C++. Учебный курс. 2002 год., 505 стр.
-
Х. Дейтл, П. Дейтл. Как программировать С++. 2001 год., 1006 стр.
-
С.Х. Дьюхэрст. Скользкие места С++. Как избежать проблем при проектировании и компиляции ваших программ. 2006 год., 265 стр.
-
М. Динман. С++. Освой на примерах. 2006 год. 384стр.
-
Лаптев и др. С++. Объектно-ориентированное программирование. Задачи и упражнения. 2007 год. 288 стр.
-
Дж. Либерти. Освой самостоятельно C++. 3-изд. 2009 год. 820 стр.
-
Стенли Б. Липпман, Жози Лажойе. С++ для начинающих. 2001 год.