НОУ ІНТУЇТ | лекція | масиви
Заняття 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-ої рядка. Замінити знайдений максимальний елемент значенням суми.
- матрицю задати за формулою . Поміняти місцями першу і останню рядки матриці. підрахувати для елементів кожного рядка матриці за формулою: , де - номер рядка.
Як домогтися відображення масиву на екрані у вигляді рівної таблиці?