
Програми циклічної структури з використанням
одновимірних та двовимірних масивів
Масивом називається впорядкована послідовність величин, яка позначається одним іменем. Впорядкованість полягає в тому, що значення елементів масиву займають послідовні комірки пам'яті.
Масиви бувають одновимірними і багатовимірними.
Описуючи одновимірний масив, необхідно вказувати загальну кількість тих елементів, що входять в масив і тип цих елементів. При цьому використовуються зарезервовані слова array і of (масив, з).
Наприклад,
var
a: array [1 . . 10] of real;
b: array [0 . . 50] of сhar;
c: array [1 . . 4] of boolean.
За словом array в квадратних дужках вказуються межі зміни індексу (порядкового номера) елементів масиву. Так, масив a складається з 10 елементів, масив b – з 51, а масив c – з 4 елементів. За словом of вказується тип елементів, з яких складається масив. Тут a – масив дійсних чисел, b – масив символів, c – масив змінних логічного типу.
Доступ до кожного елемента одновимірного масиву в програмі здійснюється з допомогою індексу – цілого числа. При звертанні в програмі до довільного елемента масиву зразу за іменем масиву повинен записуватись індекс елемента в квадратних дужках.
Описати масив можна і так:
type <ім'я типу> = array <список інд.типів> of <тип>
Тут <ім'я типу> – ідентифікатор (довільна TP-змінна);
<список інд.типів> - список з одного або кількох індексних типів;
<тип> – довільний тип ТР.
У системі програмування TurboPascal можна одним оператором присвоєння передати всі елементи масиву іншому масиву того ж типу.
Наприклад,
type
vect= array[1..5] of integer;
var a,b:vect;
begin
........
a:= b;
.......
end;
Після цього присвоєння всі п'ять елементів масиву а отримають відповідно ті ж значення, що і в масиві b. Проте не можна записати: if a=b then ...
Порівняти два масиви можна поелементно, наприклад:
type
vect=array[1..n] of integer;
var a,b: vect;
i:integer;
eq:boolean;
begin
.......
for i:=1 to 5 do
if a[i]<>b[i] then
eq:=false;
.......
end.
У двовимірному масиві кожний елемент ідентифікується номером рядка і номером стовпця, на перетині яких він знаходиться.
Матрицю дійсних чисел а, яка складається з 10 рядків і 15 стовпців і матрицю символьних даних b, яка складається з 51 рядка і 10 стовпців можна описати, наприклад, так
var
a: array [ 1 . . 10, 1..15 ] of real;
b: array [0 . . 50, 1.. 10] of сhar;
Елементи двовимірного масиву – це змінні з двома індексами, і тому, щоб перебрати всі його елементи необхідно змінювати два параметри: і – номер рядка; j – номер стовпця.
Доступ до кожного елемента двовимірного масиву в програмі здійснюється з допомогою імені масиву, за яким в квадратних дужках вказується через кому порядковий номера рядка і стовпця, на перетині яких він знаходиться.
Описувати змінні як масив можна і без попереднього опису типу масиву:
var a,b,c: array[1..10, 1..15] of real;
Великі одновимірні, а також двовимірні масиви, що складаються з m рядків та n стовпців зручно описувати через імена констант, наприклад:
const m=20; n=30;
type matr=array[1..m,1..n] of integer;
Тоді при зміні кількості рядків і стовпців матриці в програмі доведеться змінити лише значення констант.
Уведення та виведення значень елементів масивів здійснюється в циклі поелементно.
Наприклад, фрагмент програми
const n=25;
var a:array [1..n] of integer;
i:integer;
begin
for i:=1 to 25 do read(a[i]);{уведення ел.масиву}
for i:=1 to 25 do write(' ',a[i]);{виведення ел.масиву}
end.
здійснює уведення елементів одновимірного масиву з клавіатури і їх виведення на екран.
При уведенні та виведенні значень елементів двовимірного масиву (матриці) використовуються вкладені цикли, тобто цикли, які включають в себе один або більше інших циклів. Цикл, що містить в собі інші цикли, називається зовнішнім, а вкладені в нього цикли – внутрішніми. Дія вкладеного циклу не повинна виходити за область дії зовнішнього. Перехресні цикли не допускаються.
Параметри внутрішнього і зовнішнього циклів змінюються не одночасно: при одному значенні параметра зовнішнього циклу параметр внутрішнього послідовно набуває усіх можливих значень.
При уведенні значень елементів матриці немає значення який із названих параметрів змінюється у внутрішньому, а який у зовнішньому циклі. Від цього залежить лише порядок перебору елементів матриці (по рядках чи стовпцях).
Фрагмент програми
const n=2; m=2;
var A: array[1..n,1..m] of integer;
i,j: integer;
begin
for i:=1 to n do {зовнішній цикл}
for j:=1 to m do {внутрішній цикл}
read(a[i,j]); readln;
end;
здійснює уведення значень елементів двовимірного масиву, а фрагмент програми
const n=2; m=2;
var A: array[1..n,1..m] of integer;
i,j: integer;
begin
for i:=1 to n do {зовнішній цикл}
begin
for j:=1 to m do {внутрішній цикл}
write(a[i,j]); writeln;
end;
end;
здійснює їх виведення на екран.