відкриті масиви

Дата додавання: 2014-11-28; переглядів: 165; Порушення авторських прав

Недоліки вивченого раніше способу передачі масивів-параметрів очевидні: по-перше, необхідність опису типу даних масиву оператором type порушує правило переносимості підпрограм (дія підпрограми стає залежним від зовнішнього оператора), по-друге, для вказівки реальної розмірності переданих в підпрограму масивів доводиться використовувати додаткові параметри-значення, по-третє, при обробці масивів меншою, ніж зазначено в операторі type розмірності, неефективно втрачається оперативна пам'ять. В якійсь мірі виправити ці недоліки дозволяє використання відкритих масивів.

Спосіб підходить тільки для одновимірних масивів. Використовувати його з матрицями можливо, якщо інтерпретувати матрицю як вектор (див. Гл. 17).

Наявні в програмі вектори описуються в розділі var звичайним способом, без визначення типу type. У списку формальних параметрів підпрограми параметр-вектор вказується без діапазону розмірності:

function sum (var x: array of real): real;

При виклику підпрограми фактичний параметр-масив підставляється на місце формального:

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

Відкритим залишається питання - як відслідковувати з підпрограми розмірність переданого масиву? Для цього в Паскалі існують стандартні функції Low і High. Їхнім єдиним параметром передається ідентифікатор масиву, Low повертає найнижче значення допустиме значення індексу, а High - найвища. Якщо A - одновимірний масив, величини Low (A) і High (A) можна безпосередньо застосовувати як кордону циклу for:

function sum (var x: array of real): real;

var i: word; s: real;

for i: = Low (x) To High (x) Do s: = s + x [I];

Щоб завершити приклад, викличемо написану функцію sum:

const a: array [1..5] of real = (1,2,3,4,5.5);

Як правило, номер першого елемента відкритого масиву дорівнює нулю, однак, надійніше все-таки вказувати Low. Наведемо приклад програми, що включає підпрограму з відкритими масивами в якості параметрів.

Знайти кількість елементів вектора x [7], що потрапляють в інтервал [0, 3] і кількість елементів вектора y [5], що потрапляють в інтервал [-1, 1].

Для введення елементів масиву з клавіатури напишемо процедуру Input, якій все-таки доведеться передавати розмірність масиву-параметра (адже вводяться два вектора різної розмірності). Тому в Input використаний той факт, що нумерація елементів відкритого масиву за замовчуванням виконується в нуля. Функції kol, що обчислює кількість елементів відкритого масиву, що потрапляють в інтервал [x1, x2], досить стандартного вказівки Low і High: