НОУ ІНТУЇТ | лекція | масиви
Заняття 2. Двовимірні масиви
У двовимірного масиву є два індексу:
- номер рядка,
- номер стовпчика.
Індексація двовимірного масиву представлена на Мал. 6.4 .
Мал.6.4.
Індексація двовимірного масиву
Для використання двовимірного масиву в програмі необхідно:
- Оголосити масив в функції main (): тип_даних імя_массіва [кількість рядків] [кількість стовпців]; double a [5] [9]; // двовимірний масив з 5 рядків, 9 стовпців
- Проініціалізувати масив;
- Провести обчислення, дослідження.
Способи ініціалізації двовимірного масиву
представлені в таблиці 6.4 . Звернемо увагу на те, що числа
і
відомі заздалегідь і в програмі не фігуруватимуть.
Таблиця 6.4. Способи ініціалізації двовимірного масиву a [n] [m] Частина блок-схеми Частина програми 1. з файлу: double a [n] [m]; int i, j; fstream file; file.open ( "1.txt", ios :: in); for (i = 0; i <n; i = i + 1) {for (j = 0; j <m; j = j + 1) {file >> a [i] [j]; }} File.close (); 2. по заданій формулі
: Double a [n] [m]; int i, j; for (i = 0; i <n; i = i + 1) {for (j = 0; j <m; j = j + 1) {a [i] [j] = f (i, j); }}
Примітка. Двовимірний масив також можна проинициализировать і заздалегідь визначеними числами, і з клавіатури. Але ці методи незручні для двовимірних масивів, тому що вони містять занадто багато елементів.
Висновок двовимірного масиву на екран представлений в табл. 6.5 .
Таблиця 6.5. Висновок двовимірного масиву на екран Частина блок-схеми Частина програми for (i = 0; i <n; i = i + 1) {for (j = 0; j <m; j = j + 1) {cout << setw ( 6) << a [i] [j]; } Cout << endl; }
Принципи знаходження таких величин, як сума, твір, мінімальне, максимальне значення, представлені в табл. 6.6 .
Таблиця 6.6. Принципи дослідження двовимірного масиву Частина блок-схеми Частина програми 1. знаходження суми: s = 0; for (i = 0; i <n; i = i + 1) {for (j = 0; j <m; j = j + 1) {s = s + a [i] [j]; }} Cout << "s =" << s << endl; 2. знаходження твори: p = 1; for (i = 0; i <n; i = i + 1) {for (j = 0; j <m; j = j + 1) {p = p * a [i] [j]; }} Cout << "p =" << p << endl; 3. знаходження середнього арифметичного і кількості елементів: s = 0, k = 0; for (i = 0; i <n; i = i + 1) {for (j = 0; j <m; j = j + 1) {s = s + a [i] [j]; k = k + 1; }} S = s / k; cout << "s =" << s << endl; cout << "k =" << k << endl; 4. знаходження максимального елемента: max = -10E10; imax = 0; jmax = 0; for (i = 0; i <n; i = i + 1) {for (j = 0; j <m; j = j + 1) {if (a [i] [j]> max) {max = a [i] [j]; imax = i; jmax = j; }}} Cout << "max =" << max << endl; cout << "imax =" << imax << endl; cout << "jmax =" << jmax << endl; 5. знаходження мінімального елемента: min = 10E10; imin = 0; jmin = 0; for (i = 0; i <n; i = i + 1) {for (j = 0; j <m; j = j + 1) {if (a [i] [j] <min) {min = a [i] [j]; imin = i; jmin = j; }}} Cout << "min =" << min << endl; cout << "imin =" << imin << endl; cout << "jmin =" << jmin << endl; 6. поміняти елементи
і
місцями: tmp = a [i1] [j1]; a [i1] [j1] = a [i2] [j2]; a [i2] [j2] = tmp; 7. поміняти місцями рядки
і
: For (j = 0; j <m; j = j + 1) {tmp = a [i1] [j]; a [i1] [j] = a [i2] [j]; a [i2] [j] = tmp; } 8. поміняти місцями стовпчики
і
: For (i = 0; i <n; i = i + 1) {tmp = a [i] [j1]; a [i] [j1] = a [i] [j2]; a [i] [j2] = tmp; } 9. обчислення формули
: S = 0; for (i = 0; i <n; i = i + 1) {s = s + f (a [i] [j], i, j); } Cout << "s =" << s << endl;
Умови для дослідження квадратної матриці (кількість рядків і стовпців збігається):
Примітка. Якщо потрібно визначити, наприклад, суму елементів, що знаходяться над головною діагоналлю, то задаємо двовимірний цикл по
і в тілі циклу ставимо додаткову умову "
"
Приклад 3. Масив
заданий формулою
. Знайти суму елементів у другому рядку, поміняти місцями першу і третю рядки, знайти твір по формулі
.
Рішення. Дану задачу можна розбити на кілька етапів:
- задати масив за формулою і вивести його на екран;
- знайти суму елементів у другому рядку і вивести її на екран;
- поміняти місцями першу і третю рядки;
- вивести на екран змінений масив;
- знайти твір по формулі і вивести його на екран.
Кожен зазначений етап вирішується за допомогою циклів. Всі цикли доцільно використовувати з передумовою (в програмі - оператор for). На першому етапі слід організувати двовимірний цикл по
, по
, Тому що необхідно задати значеннями і вивести на екран весь масив. На другому етапі перед циклом необхідно задати
, А в тілі циклу по
налічувати значення
. індекс
задаємо як 1, що відповідає другому рядку. Слід зазначити, що не можна вважати суму з якоїсь певної рядку (стовпці, діагоналі) всередині двовимірного циклу, тому що в цьому випадку
буде більше в рази (залежить від кількості рядків / стовпців) .На третьому етапі індекси рядків беремо
- для першого рядка,
- для третього рядка. Заміна рядків організовується в одновимірному циклі по
. На четвертому етапі матриця а повинна бути відображена на екрані. Нам потрібно показати, що заміна рядків виконана верно.На п'ятому етапі перед циклом слід задати
, А в тілі циклу налічувати твір. Цикл організуємо одновимірний по
від 0 до 2 включно, тому що згідно з формулою змінюється тільки
.
Блок-схема для прикладу 3 приведена на Мал. 6.5 .
Мал.6.5.
Блок-схема для прикладу 3
Код програми (Visual Studio) з оператором for:
// proga29.cpp: визначає точку входу для консольного застосування. // #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; int main () {double a [6] [8]; double S, tmp, P; int i, j; cout << "Massiv a:" << endl; for (i = 0; i <6; i = i + 1) {for (j = 0; j <8; j = j + 1) {a [i] [j] = 3.0 * i-5.0 * j; cout << setw (5) << a [i] [j]; } Cout << endl; } S = 0; for (j = 0; j <8; j = j + 1) {S = S + a [1] [j]; } Cout << "S =" << S << endl; for (j = 0; j <8; j = j + 1) {tmp = a [0] [j]; a [0] [j] = a [2] [j]; a [2] [j] = tmp; } For (i = 0; i <6; i = i + 1) {for (j = 0; j <8; j = j + 1) {cout << setw (5) << a [i] [j ]; } Cout << endl; } P = 1; for (i = 0; i <= 2; i = i + 1) {P = P * (a [i] [1] -a [i] [0]); } Cout << "P =" << P << endl; return 0; } Результат виконання програми:
короткі підсумки
Найпоширенішими видами масивів є одномірні і двовимірні масиви. Статичні масиви легко задавати і використовувати в програмі. Цикли роблять роботу з масивами зручною і доступною.
питання
- Що таке масив?
- Перерахуйте види масивів.
- Що таке індекс?
- Як домогтися відображення масиву на екрані у вигляді рівної таблиці?
вправи
- Одновимірна масив
задати в програмі. Знайти максимальний з негативних елементів і поміняти його місцями з останнім. - Одновимірна масив
задати з клавіатури. Знайти суму негативних, кількість позитивних і твір ненульових елементів. - Одновимірна масив
задати числами. Знайти середнє арифметичне елементів, що задовольняють умові
. - Одновимірна масив
задати за формулою
. Знайти кількість елементів, що задовольняють умові
, Мінімальний елемент. - матрицю
задати за формулою
. Знайти новий одновимірний масив
з творів елементів кожного рядка матриці
. Знайти максимальний елемент серед позитивних елементів матриці
. Замінити третій елемент в першому рядку матриці
на знайдений максимальний елемент. - матрицю
задати за формулою
. Знайти суму позитивних елементів над головною діагоналлю матриці. Знайти максимальний елемент серед негативних елементів 4-ої рядка. Замінити знайдений максимальний елемент значенням суми. - матрицю
задати за формулою
. Поміняти місцями першу і останню рядки матриці. підрахувати
для елементів кожного рядка матриці за формулою:
, де
- номер рядка.
Як домогтися відображення масиву на екрані у вигляді рівної таблиці?