одновимірних і
Двовимірного масиву (ТАБЛИЦІ) h2>
Масив - це пронумерована послідовність величин однакового
типу, що позначається одним ім'ям. Елементи масиву розташовуються в послідовних
комірках пам'яті, позначаються ім'ям масиву та індексом. Кожне із значень,
складових масив, називається його компонентою (або елементом масиву). p>
Масив даних в
програмі розглядається як мінлива структурованого типу. Масиву присвоюється
ім'я, за допомогою якого можна посилатися як на масив даних в цілому, так і
на будь-яку з його компонент. p>
Змінні,
представляють компоненти масивів, називаються змінними з індексами в
відміну від простих змінних, що представляють в програмі елементарні дані.
Індекс в позначенні компонент масивів може бути константою, змінною або
виразом порядкового типу. p>
Якщо за кожним
елементом масиву закріплений лише один його порядковий номер, то такий масив
називається лінійним. Взагалі кількість індексів елементів масиву визначає
розмірність масиву. За це ознакою масиви поділяються на одномірні (лінійні),
двовимірні, тривимірні і т.д. p>
Приклад:
числова послідовність парних натуральних чисел 2, 4, 6, ..., N
являє собою лінійний масив, елементи якого можна позначити А [1] = 2,
А [2] = 4, А [3] = 6, ..., А [К] = 2 * (К +1), де К - номер елемента, а 2, 4, 6, ..., N --
значення. Індекс (порядковий номер елемента) записується у квадратних дужках
після імені масиву. p>
Наприклад, A [7]
- Сьомий елемент масиву А; D [6] - шостий елемент масиву D. p>
Для розміщення
масиву в пам'яті ЕОМ відводиться поле пам'яті, розмір якого визначається типом,
довжиною і кількістю компонент масиву. У мові Pascal ця інформація задається
в розділі описів. Масив описується так: p>
ім'я масиву: Array [початкове значення
індексу .. кінцеве значення індексу] Of базовий тип; p>
Наприклад, p>
Var B: Array
[1 .. 5] Of Real, R: Array [1 .. 34] Of Char; p>
- описується
У масив, що складається з 5 елементів і символьний масив R, що складається з 34
елементів. Для масиву У буде виділено 5 * 6 = 30 байт пам'яті, для масиву R --
1 * 34 = 34 байти пам'яті. p>
Базовий тип
елементів масиву може бути будь-яким, за винятком файлового. p>
Заповнити
масив можна таким чином: p>
1) за допомогою
оператора присвоєння. Цей спосіб заповнення елементів масиву особливо
зручний, коли між елементами існує будь-яка залежність, наприклад,
арифметична або геометрична прогресії, або елементи пов'язані між собою
реккурентним співвідношенням. p>
Завдання 1.
Заповнити одновимірний масив елементами, які відповідають наступному співвідношенню: p>
a1 = 1; a2 = 1; ai = ai-2 + ai-1 (i = 3, 4, ..., n). p>
Read (N); (Введення
кількості елементів) p>
A [1]: = 1; p>
A [2]: = 1; p>
FOR I: = 3 TO N DO p>
A [I]: =
A [I - 1] + A [I - 2]; p>
Інший варіант
прісваісванія значень елементів масиву - заповнення значеннями, отриманими з
допомогою датчика випадкових чисел. p>
Завдання 2.
Заповнити одновимірний масив за допомогою датчика випадкових чисел таким чином,
щоб всі його елементи були різні. p>
Program Create; p>
Type Mas = Array [1 .. 100] Of Integer; p>
Var A: Mas; I, J, N: Byte; Log: Boolean; p>
Begin p>
Write ('');
ReadLn (N); p>
randomize;
A [1]: = -32768 + random (65535); p>
For I: = 2
To N Do p>
Begin p>
Log: =
True; p>
Repeat p>
A [i]: = -32768 + random (65535); J: = 1; p>
While Log and (j <= i - 1) Do p>
begin Log: = a [i] <> a [j]; j: = j + 1 End p>
Until
Log p>
End; p>
For i: = 1
to N Do Write (a [i]: 7); writeln p>
End. p>
2) введення
значень елементів масиву з клавіатури використовується зазвичай тоді, коли між
елементами не спостерігається ніякої залежності. Наприклад, послідовність
чисел 1, 2, -5, 6, -111, 0 може бути введена в пам'ять наступним чином: p>
Program Vvod; p>
Var N, I:
Integer; p>
A: Array
[1 .. 20] Of Integer; p>
Begin p>
Write ( 'Введіть кількість елементів масиву
'); ReadLn (N); p>
FOR I: = 1 TO N DO p>
Begin p>
Write ( 'Введіть A [', I, ']');
ReadLn (A [I]) p>
End. p>
Над елементами
масивами найчастіше виконуються такі дії, як p>
а) пошук
значень; p>
б) сортування
елементів у порядку зростання або зменшення; p>
в) підрахунок
елементів у масиві, що задовольняють заданій умові. p>
Сума елементів
масиву можна підрахувати за формулою S = S + A [I] спочатку задав S = 0.
Кількість елементів масиву можна підрахувати за формулою К = К 1, спочатку
задавши К = 0. Твір елементів масиву можна підрахувати за формулою P = P *
A [I], спочатку задав P = 1. P>
Завдання 3. Дан
лінійний масив цілих чисел. Підрахувати, скільки в ньому різних чисел. P>
(Підрахунок
кількості різних чисел в лінійному масиві. p>
ІДЕЯ РІШЕННЯ: заводимо допоміжний масив,
елементами p>
якого є логічні величини (False
- Якщо елемент p>
вже зустрічався раніше, True - інакше)) p>
Program Razlichnye_Elementy; p>
Var I, N, K, Kol: Integer; p>
A: Array
[1 .. 50] Of Integer; p>
Lo: Array
[1 .. 50] Of Boolean; p>
Begin p>
Write ( 'Введіть кількість елементів масиву:
'); ReadLn (N); p>
FOR I: = 1 TO N DO p>
Begin p>
Write ( 'A [', I,']='); ReadLn (A [I ]); p>
Lo [I]: = True; (Заповнюємо допоміжний
масив значеннями True) p>
End; p>
Kol: = 0; (змінна, в якій буде
зберігатися кількість різних чисел) p>
FOR I: = 1 TO N DO p>
IF Lo [I]
THEN p>
Begin p>
Kol: = Kol
+ 1; p>
FOR K: = I
TO N DO p>
(У допоміжний масив заносимо
значення False, p>
якщо число вже траплялося раніше або
збігається з поточним елементом A [I]) p>
Lo [K]: = (A [K]
<> A [I]) And Lo [K]; p>
End; p>
WriteLn ( 'Кількість різних чисел:', Kol) p>
END. p>
Тест: N = 10;
елементи масиву - 1, 2, 2, 2, -1, 1, 0, 34, 3, 3. Відповідь: 6. P>
Завдання 4. Дан
лінійний масив. Упорядкувати його елементи в порядку зростання. P>
(Сортування
масиву вибором (у порядку зростання). p>
Ідея рішення: нехай частина масиву (з K-й
елемент включно) p>
відсортована. Потрібно знайти в
невідсортоване частини масиву p>
мінімальний елемент і поміняти місцями з
(K +1)-м) p>
Program Sortirovka; p>
Var N, I, J, K, Pr: Integer; A: Array [1 .. 30] Of
Integer; p>
Begin p>
Write ( 'Введіть
кількість елементів: '); ReadLn (N); p>
For I: = 1 To N Do p>
Begin p>
Write ( 'Введіть A [', I, ']'); Readln (A [I ]); p>
End; p>
WriteLn; p>
For I: = 1
To N - 1 Do p>
Begin p>
K: = I; p>
For J: = I
+ 1 To N Do If A [J] <= A [K] Then K: = J; p>
Pr: =
A [I]; A [I]: = A [K]; A [K]: = Pr; p>
End; p>
For I: = 1
To N Do Write (A [I], ''); p>
End. p>
Тест: N = 10; елементи
масиву - 1, 2, 2, 2, -1, 1, 0, 34, 3, 3. p>
Відповідь: -1, -1,
0, 1, 2, 2, 2, 3, 3, 34. P>
Якщо два
масиву є масивами еквіваленти типів, то можливо присвоювання одного
масиву іншому. При цьому всі компоненти присвоюється масиву копіюються в той
масив, віді присвоюється значення. Типи масивів будуть еквівалентними, якщо
ці масиви описуються спільно або описуються ідентифікатором одного і того
ж типу. Наприклад, в описі p>
Type Massiv = Array [1 .. 10] Of Real; p>
Var A, B: Massiv; C, D: Array [1 .. 10] Of Real; E:
Array [1 .. 10] Of Real; p>
типи змінних
A, B еквівалентні, і тому дані змінні сумісні по присвоювання; тип
змінних C, D також один і той же, і тому дані змінні також
спільно з присвоєння. Але тип змінних C, D не еквівалентний типами
змінних A, B, E, тому, наприклад, A і D не спільно з присвоєння. Ці
особливості необхідно враховувати при роботі з масивами. p>
При вирішенні
практичних задач часто доводиться мати справу з різними таблицями даних,
математичним еквівалентом яких служать матриці. Такий спосіб організації
даних, при якому кожен елемент визначається номером рядка та номером
стовпця, на перетині яких він розташований, називається двовимірним масивом
або таблицею. p>
Наприклад, дані
про планети Сонячної системи представлені наступною таблицею: p>
Планета p>
расст.
до Сонця p>
відносить.
обьем p>
відносить.
маса p>
Меркурій p>
57.9 p>
0.06 p>
0.05 p>
Венера p>
108.2 p>
0.92 p>
0.81 p>
Земля p>
149.6 p>
1.00 p>
1.00 p>
Марс p>
227.9 p>
0.15 p>
0.11 p>
Юпітер p>
978.3 p>
1345.00 p>
318.40 p>
Сатурн p>
1429.3 p>
767.00 p>
95.20 p>
Їх можна
занести в пам'ять комп'ютера, використовуючи поняття двовимірного масиву. Положення
елемента в масиві визначається двома індексами. Вони показують номер рядка та
номер стовпчика. Індекси розділяються комою. Наприклад: A [7, 6], D [56, 47]. P>
Заповнюється
двовимірний масив аналогічно одновимірному: з клавіатури, за допомогою оператора
привласнення. Наприклад, в результаті виконання програми: p>
Program Vvod2; p>
Var I, J:
Integer; p>
A: Array
[1 .. 20, 1 .. 20] Of Integer; p>
Begin p>
FOR I: = 1 TO
3 DO p>
FOR J: = 1
TO 2 DO A [I, J]: = 456 + I p>
End. p>
елементи
масиву приймуть значення A [1, 1] = 457; A [1, 2] = 457; A [2, 1] = 458; A [2, 2] =
458; A [3, 1] = 459; A [3, 2] = 459. p>
При описі
масиву задається необхідний обсяг пам'яті під двовимірний масив, вказуються ім'я
масиву і в квадратних дужках діапазони зміни індексів. p>
При виконанні
інженерних та математичних розрахунків часто використовуються змінні більш ніж з
двома індексами. При рішенні задач на ЕОМ такі змінні представляються як
компоненти відповідно три-, чотиривимірні масивів і т.д. p>
Однак опис
масиву у вигляді багатовимірної структури робиться лише з міркувань зручності
програмування як результат прагнення найбільш точно відтворити в
програмі об'єктивно існуючі зв'язки між елементами даних розв'язуваної
завдання. Що ж до образу масиву в пам'яті ЕОМ, то як одномірні, так і
багатовимірні масиви зберігаються у вигляді лінійної послідовності своїх
компонент, і принципової різниці між одновимірними і багатовимірними масивами в
пам'яті ЕОМ немає. Однак порядок, в якому запам'ятовуються елементи багатовимірних
масивів, важливо собі уявляти. У більшості алгоритмічних мов
реалізується загальне правило, яке встановлює порядок зберігання в пам'яті елементів
масивів: елементи багатовимірних масивів зберігаються в пам'яті в послідовності,
відповідної більш частого зміни молодших індексів. p>
Завдання 5.
Заповнити матрицю порядку n за таким зразком: p>
1 p>
2 p>
3 p>
... p>
n-2 p>
n-1 p>
n p>
2 p>
1 p>
2 p>
... p>
n-3 p>
n-2 p>
n-1 p>
3 p>
2 p>
1 p>
... p>
n-4 p>
n-3 p>
n-2 p>
... p>
... p>
... p>
... p>
... p>
... p>
... p>
n-1 p>
n-2 p>
n-3 p>
... p>
2 p>
1 p>
2 p>
n p>
n-1 p>
n-2 p>
... p>
3 p>
2 p>
1 p>
Program Massiv12; p>
Var I, J, K,
N: Integer; A: Array [1 .. 10, 1 .. 10] Of Integer; p>
Begin p>
Write ( 'Введіть порядок матриці:');
ReadLn (N); p>
For I: = 1 To N Do p>
For J: = I
To N Do p>
Begin p>
A [I, J]
: = J - I + 1; A [J, I]: = A [I, J]; p>
End; p>
For I: = 1
To N Do p>
Begin p>
WriteLn; p>
For J: =
1 To N Do Write (A [I, J]: 4); p>
End p>
End. p>
Завдання 6. Дана цілочисельних квадратна матриця.
Знайти у кожному рядку найбільший елемент і поміняти його місцями з елементом
головної діагоналі. p>
Program Obmen; p>
Var N, I, J,
Max, Ind, Vsp: Integer; A: Array [1 .. 15, 1 .. 15] Of Integer; p>
Begin p>
WRITE ( 'Введіть кількість елементів у
масиві: '); READLN (N); p>
FOR I: = 1 TO N DO p>
FOR J: = 1 TO
N DO p>
Begin p>
WRITE ( 'A [',
I, ',', J, ']'); READLN (A [I, J]) p>
End; p>
FOR I: = 1 TO
N DO p>
Begin p>
Max: = A [I,
1]; Ind: = 1; p>
FOR J: = 2
TO N DO p>
IF A [I,
J]> Max THEN p>
Begin p>
Max: =
A [I, J]; Ind: = J p>
End; p>
Vsp: = A [I,
I]; A [I, I]: = A [I, Ind]; A [I, Ind]: = Vsp p>
End; p>
FOR I: = 1
TO N DO p>
Begin p>
WriteLn; p>
FOR J: =
1 TO N Do Write (A [I, J]: 3); p>
End;
WriteLn p>
End. p>
Контрольні
питання і завдання p>
Що таке
масив? p>
Чому масив
є структурованим типом даних? p>
Що таке
розмірність масиву? Чи існують обмеження на розмірність масиву? p>
Якого типу
можуть бути елементи масиву? p>
Якого типу
можуть бути індекси елементів масиву? p>
Які прості
типи даних відносяться до порядковим? p>
Якими
способами може бути заповнений масив? Наведіть приклади. p>
Як визначити
мінімальний обсяг пам'яті, що відводиться під масив? p>
Які дії
виконують звичайно над елементами масиву? p>
Чи може масив
бути елементом масиву? p>
У якому випадку
масиви спільно з привласнення? p>
Нехай
елементами масиву A (a [1], a [2], a [3], a [4]) є відповідно x,-x,
x2,-x2. Чому дорівнюватиме значення виразу p>
a [-a [a [3] -2]] + a [-a [a [3 ]]] p>
при x = 2? p>
Чи можна
виконувати обхід двовимірного масиву, організувавши зовнішній цикл по стовпцях, а
внутрішній - по рядках? p>
Точно і
однозначно сформулювати умову задачі, рішення якої наведено в цiй
програмі: p>
Program Kr_N_4; p>
Const NMax = 50; Type Mass = Array [1 .. NMax, 0 .. NMax-1]
Of Real; p>
Var A: Mass; I, J, N: 0 .. NMax; C: Real; p>
Begin Write ( 'Кількість
елементів масиву N =? '); ReadLn (N); p>
For I: = 1 To
N Do p>
For J: = 0 To N-1 Do p>
Begin Write ( 'A [', I ,',', J, '] =');
Readln (A [I, J]) End; p>
For I: = 1 To
N Do p>
For J: = 0 To N-1 Do p>
Begin C: = A [I, J]; p>
A [I, J]
: = A [N-I 1, J]; p>
A [N-I 1, J]
: = C p>
End; p>
For I: = 1 To
N Do p>
Begin For J: = 0 To N-1 Do p>
Write (A [I, J]: 5:2, '
'); p>
WriteLn p>
End; p>
End. p>
Чи використовуються
вкладені цикли, якщо здійснюється обхід тільки головної діагоналі квадратної
матриці? p>
Список
літератури h2>
Для підготовки
даної роботи були використані матеріали з сайту http://www.comp-science.narod.ru/
p>