русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-11-28; переглядів: 1153.


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

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

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

Function Sum(Var X : Array Of Real) : Real;

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

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

S:real;

. . .

S:=Sum(a);

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

Function Sum(Var X : Array Of Real) : Real;

Var I : Word;

S : Real;

Begin

S:=0;

For I:=Low(X) To High(X) Do S:=S+X[I];

Sum:=S;

End;

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

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

Var s:real;

begin

writeln (Sum(a):6:1);

end.

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

 

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

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

var x:array [1..7] of real;

y:array [1..5] of real;

k1,k2,i:integer;

 

procedure Input (n:integer; var a:array of real);

var i:integer;

begin

writeln ('Enter ',n,' items of array:');

for i:=0 to n-1 do read (a[i]);

end;

 

function Kol (var a:array of real; x1,x2:real):integer;

var i,k:integer;

begin

k:=0;

for i:=Low(a) to High(a) do

if (a[i]>=x1) and (a[i]<=x2) then k:=k+1;

Kol:=k;

end;

 

begin

Input (7,x);

Input (5,y);

k1:=Kol(x,0,3);

k2:=Kol(y,-1,1);

writeln ('k1=',k1,' k2=',k2);

end.

 


<== попередня лекція | наступна лекція ==>
Масиви як параметри підпрограми | Безлічі й перечислимые типи


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн