одномірні масиви

Масивом називають упорядкований набір однотипних змінних (елементів). Кожен елемент має цілочисельний порядковий номер, званий індексом. Число елементів в масиві називають його розмірністю. Масиви використовуються там, де потрібно обробити відразу кілька змінних одного типу - наприклад, оцінки всіх 20 студентів групи або координати 10 точок на площині. Рядок тексту можна розглядати як масив символів, а текст на сторінці - як масив рядків.

Масив описується в розділі var оператором такого вигляду:

var ІмяМассіва: array [НІ. ВІ] of Тип;

НІ (нижній індекс) - цілочисельний номер 1-го елемента масиву;

.. -- оператор діапазону Паскаля (див. п. 7.8);

ВІ (верхній індекс) - цілочисельний номер останнього елемента;

Тип - будь-який з відомих типів даних Паскаля. Кожен елемент масиву буде розглядатися як змінна відповідного типу.

Наведемо кілька масивів різного призначення.

var a: array [1..20] of integer;

Тут ми описали масив з ім'ям A, що складається з 20 цілочисельних елементів;

var x, y. array [1..10] of real;

Описано 2 масиву з іменами x і y, що містять по 10 речових елементів;

var t. array [0..9] of string;

Масив t складається з 10 рядків, які пронумеровані з нуля.

Легко побачити, що розмірність (число елементів) масиву обчислюється як ВІ - НІ + 1.

Для звернення до окремого елементу масиву використовується оператор виду ІмяМассіва [Індекс].

Тут Індекс - цілочисельний номер елемента (може бути цілочисельним виразом або константою). Індекс не повинен бути менше значення нижнього або більше верхнього індексу масиву, інакше виникне помилка "Constant out of range". Окремий елемент масиву можна використовувати так само, як змінну відповідного типу, наприклад:

У цьому розділі ми вивчаємо одномірні масиви, в яких кожен елемент має один номер (індекс), що характеризує його положення в масиві. В математиці поняттю одновимірного масиву з n елементів відповідає поняття вектора з n компонент: A = i>, i = 1, 2. n.

Як правило, введення, обробка і виведення масиву здійснюються поелементно, з використанням циклу for.

Найпростіший спосіб введення - введення масиву з клавіатури:

var a: array [1..n] of real;

writeln ( 'Введіть елементи масиву');

for i: = 1 to n do read (A [i]);

Розмірність масиву визначена константою n, елементи вводяться по одному в циклі for - при запуску цієї програми користувачеві доведеться ввести 10 числових значень. При вирішенні навчальних завдань вводити масиви "вручну", особливо якщо їх розмірність велика, не завжди зручно. Існують, як мінімум, два альтернативних рішення.

Опис масиву констант зручно, якщо елементи масиву не повинні змінюватися в процесі виконання програми. Як і інші константи, масиви констант описуються в розділі const. Наведемо приклад такого опису:

const a: array [1..5] of real = (

Як видно з прикладу, елементи масиву перераховуються в круглих дужках через кому, їх кількість повинна відповідати його розмірності.

Формування масиву з випадкових значень доречно, якщо при вирішенні задачі масив служить лише для ілюстрації того чи іншого алгоритму, а конкретні значення елементів несуттєві. Для того щоб отримати чергове випадкове значення, використовується стандартна функція random (N), де параметром N передається значення порядкового типу. Вона поверне випадкове число того ж типу, що тип аргументу і лежить в діапазоні від 0 до N-1 включно. Наприклад, оператор виду a [1]: = random (100); запише в a [1] випадкове число з діапазону [0,99].

Для того щоб при кожному запуску програми ланцюжок випадкових чисел була новою, перед першим викликом random слід викликати стандартну процедуру randomize ;, яка запускає генератор випадкових чисел. Наведемо приклад заповнення масиву з 20 елементів випадковими числами, що лежать в діапазоні від -10 до 10:

var a: array [1..20] of integer;

for i: = 1 to 20 do begin

Ще більш зручний шлях - читання елементів масиву з текстового або виконуваного файлу. Про це розповідається в гл. 21 і 22.

До масивів застосовні всі типові алгоритми, вивчені в темі "Цикли". Наведемо один приклад, в якому обчислюється сума s позитивних елементів масиву.

var b: array [1..5] of real;

writeln ( 'Введіть 5 елементів масиву');

for i: = 1 to 5 do read (b [i]);

for i: = 1 to 5 do if b [i]> 0 then s: = s + b [i];

Висновок масиву на екран також робиться за допомогою циклу for.

for i: = 1 to 5 do write (b [i]: 6: 2);

Тут 5 елементів масиву b надруковані в один рядок. Для виведення одного елемента на одному рядку можна було б використовувати оператор writeln замість write.

Важливо не тільки те, що якщо обробка масиву здійснюється послідовно, по 1 елементу, цикли введення та обробки часто можна об'єднати, як в наступному прикладі.

Знайти арифметичне середнє елементів речового масиву t розмірністю 6 і значення його мінімального елемента.

var b: array [1..6] of real;

writeln ( 'Введення B [6]');

for i: = 1 to 6 do begin

if b [i]

writeln ( 'min =', min, 's =', s / 6);

Теоретично в цій програмі можна було б обійтися і без масиву - адже елементи b [i] використовуються тільки для накопичення суми і пошуку максимуму, так що опис масиву цілком можна було замінити описом дійсної змінної b. Однак, в реальних задачах дані, як правило, обробляються неодноразово і без масивів обійтися важко. Наведемо приклад навчальної завдання, де використання масиву дає виграш за рахунок зменшення обсягу обчислень, виконуваних програмою.

Задана послідовність Ti = max, i = -5, -4. 5. Знайти елемент послідовності, що має мінімальне відхилення від арифметичного середнього позитивних елементів.

Тут в першому циклі можна сформувати масив по заданому правилу і знайти арифметичне середнє позитивних елементів. У другому циклі, коли середнє відомо, можна шукати відхилення. Без використання масиву нам довелося б вважати елементи послідовності двічі.

var t. array [-5..5] of real;

for i: = - 5 to 5 do begin

if t [i]

if t [i]> 0 then begin

for i: = - 5 to 5 do begin

if abs (t [i] -s)

writeln ( 'Ot =', ot: 8: 2);

Поширена обробка в одному завданню відразу декількох масивів. Наведемо приклад.

Координати 10 точок на площині задані масивами x = i>, y = i>, i = 1, 2. 10. Знайти довжину ламаної, що проходить через точки (x1. Y1), (x2. Y2). (X10. Y10), а також номер точки, що лежить найдалі від початку координат.

При вирішенні задачі використовуємо формулу для знаходження відстані між 2 точками на площині, заданими координатами (x1, y1) і (x2, y2):.

Позначимо через r відстань між поточною точкою і наступної, Len шукану довжину ламаної, Dist - відстань від поточної точки до початку координат, max - максимальне з цих відстаней, Num - шуканий номер точки.

var x, y. array [1..10] of real;

r, Len, Dist, max. real;

writeln ( 'Введіть координати 10 точок');

for i: = 1 to 10 do begin

Dist: = sqrt (sqr (x [i]) + sqr (y [i]));

if dist> max then begin

writeln ( 'Номер точки =', num,

for i: = 1 to 9 do begin

r: = sqrt (sqr (x [i] -x [i + 1]) +

writeln ( 'Довжина ламаної =', len: 8: 2);

Наведемо приклад завдання формування масиву по правилу.

Заданий масив x з 8 елементів. Сформувати масив y за правилом

і знайти кількість його позитивних елементів.

var x, y: array [1..8] of real;

writeln ( 'Введіть масив x з 8 ел.');

for i: = 1 to 8 do begin

if i mod 2 = 0 then y [i]: = 4 * x [i]

Схожі статті