АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Багатовимірні масиви

Читайте также:
  1. Багатовимірність людського буття: співвідношення біологічного і соціального в людині
  2. Одновимірні масиви

Лабораторна робота №6

 

1 Мета роботи

 

Вивчити засоби використання багатовимірних масивів в програмах алгоритмічною мовою Object Pascal у середовищі Delphi.

 

2 Основні теоретичні відомості

 

2.1 Вимірність масиву

Кількість індексів визначає вимірність масиву, наприклад, вектори в програмах – це одновимірні масиви, матриці – двовимірні. Кількість індексів у елементів масивів є необмежена. Значення індексів записують після імені масиву в квадратних дужках і відокремлюють комами. Наприклад:

b[4,5], Matr [I,J+1], P['F','K'] - елементи матриць: b45, Matri,j+1, P’F’,’K’;

Masivlarge[i+2*m,True,25,n] - елемент масиву з чотирма індексами Masivlargei+2m,True,25,n.

У пам’яті комп’ютера елементи масиву розміщуються один за одниму такій спосіб, що при переході від молодших адрес до старших найперш змінюється крайній правий індекс. Так само, як і одновимірний масив, багатовимірний масив загалом може займати в пам’яті не більш за 2 Гбайт.

2.2 Описування багатовимірних масивів

Багатовимірні масиви (як і одновимірні) в програмах можна описувати двома способами:

1) Type ім'я_типу = аrray [ тип_індексу1, тип індексу2, … ] оf тип_елементів_масиву;

Var ім'я_масиву: ім'я_типу;

2) Var ім'я_масиву: аrray [ тип_індексу1, тип індексу2, … ] оf

тип_елементів;

Можна вказувати індекси іншим способом, наприклад, для двовимірного масиву:

Var ім'я_масиву: аrray [ тип_індексу1 ] of array [ тип індексу2 ] оf

тип_елементів;

Кількість елементів масиву дорівнює добутку кількості елементів кожного індексу.

Приклади описування масивів:

Type Matr1 = array [ 0.. 11,1..4,3..7 ] of boolean;

Matr2 = array [ 1.. 5, 1.. 5 ] of integer;

Matr3 = array [ 'a'..'e', -2..5, 1..8 ] of real;

Matr4 = array [ Boolean,1..5,1..3,2..5] of char;

Var A: Matr1; B: Matr2; C: Matr3; D: Matr4;

X: array [ 1.. 8, 0.. 5 ] of boolean;

Тут описано:

А - тривимірний масив 240 елементів логічного типу;

B- квадратна матриця величин розміром 5´5

 

B11 B12 … B15

B21 B22 … B25

………………,

B51 B52 … B55

 

яка складена з цілих елементів: B[1,1], B[1,2], ..., B[1,5], B[2,1], B[2,2], ..., B[2,5], ..., B[5,1], B[5,2], ..., B[5,5].

C - тривимірний масив 320 елементів дійсного типу;

D - четиривимірний масив 120 елементів символьного типу;

X - матриця елементів логічного типу розміром 8´6 елементів.

Для описування багатовимірних масивів зручно використовувати також типізовані констант-масиви, які дозволяють одночас описати масив й задати його значення в розділі констант:

Const ім'я_масиву :аrray [ тип_індексів ] оf тип_елементів_масиву=

(значення_елементів_масиву);

Значення елементів багатовимірних масивів слід записувати використовуючи вкладені дужки для кожного індексу, враховуючи, що спочатку змінюється останній індекс, за ним – передостанній і так далі, до першого індексу. Так, значення елементів матриць слід перераховувати за рядками. Наприклад, для матриці В розміром 3х4

 

1 2 3 4

R = 5 6 7 8

9 0 –1 –2

слід записати такий оператор:

Соnst R :array [1..3,1..4] of integer = ((1,2,3,4),(5,6,7,8),(9,0, –1,–2));

Значення елементів багатовимірних масивів, як і одновимірних масивів із загальним описом, можна присвоювати один одному лише одним оператором присвоєння, не використовуючи цикли. Наприклад, при описуванні масивів

Var F,G: array [1..4,1..4] of real;

після введення або обчислення значень масиву G можна присвоїти такі ж самі значення масиву F одним оператором F:=G;

 

2.3Виведення елементів багатовимірних масивів

Виводити значення масивів можна у файл або на форму, використо-вуючи різноманітні компонети Delphi. При цьому, виводити значення елементів масивів можна лише поелементно, для чого слід зорганізувати цикли змінювання за значеннями кожного індексу. Як зорганізувати виведення масивів у файл, буде розглянуто далі в інших лабораторних роботах. Тепер розглянемо, як організувати виведення багатовимірних масивів на форму за допомогою компонентів Edit, Label, Memo, ListBox, StringGrid та функції ShowMessage.

В наведених прикладах використовуватимемо змінні, які мають такий опис:

Соnst R :array [1 .. 3,1 .. 4] of integer = ((1,2,3,4),(5,6,7,8),(9,–1,–2,–3));

Var B: array [ 1.. 5, 1.. 5 ] of integer;

i,j, ier: integer;

sb, st :string;

 

2.3.1 В компонент Edit можна виводити лише один рядок значень багатовимірного масиву, відокремлюючи елементи пропусками. Кількість елементів, котрі можна побачити, є обмеженою довжиною компонента Edit на формі вікна.

Приклад фрагмента програми виведення 3-го рядка масиву В:

і:=3; // присвоєння номера рядка

st:=’’; // очищення рядка st,

For j:=1 to 5 do // початок циклу за індексами у рядку масиву

begin

str(В[i,j]:4:1, sb); // перетворення числа на рядкову величину

st:=st+sb +’ ’; // нагромадження рядка значень масиву

end;

Edit1.Text:=st; // присвоєння значень рядка масиву компоненту Edit1

2.3.2 В компонент Label можна виводити масиви, відокремлюючи елементи пропусками (’ ’) або символами переходу до нового рядка (#13) за тими ж самими правилами, що і в компонент Edit, лише в програмі замість Edit1.Text треба писати Label1.Caption (наприклад, Label1.Caption:=st;).

Приклад виведення матриці R:

Label1.Caption:= ’’; // очищення компоненти Label

For i:=1 to 3 do // початок циклу за індексами рядків

begin

st:=’’; // очищення рядка st

For j:=1 to 4 do // початок циклу за індексами стовпчиків

begin

str(R[i,j]:2, sb); // перетворення числа на рядкову величину

st:=st+sb +’ ’; // нагромадження рядка значень масиву

end;

Label1.Caption:=Label1.Caption+st+#13; // виведення рядка

end;

 

2.3.3 Виведення у вікно діалогу за допомогою функції ShowMessage організують так само, як і в попередніх прикладах, лише замість оператора присвоєння треба записати оператор виклику процедури. Наприклад,

ShowMessage(st);.

2.3.4 За допомогою компонента Memo можна виводити масиви з будь-якою кількістю елементів, оскільки можна використовувати лінійки прокручування (надати властивості ScroollBar значення ssBoth або ssVertical).

Приклад виведення значень матриці R:

Memo2.Clear; // очищення компонента

For i:=1 to 3 do // початок циклу за індексами рядків

begin

st:=’’; // очищення рядка st

For j:=1 to 4 do // початок циклу за індексами стовпчиків

begin

str(B[i,j]:2, sb); // перетворення числа на рядкову величину

st:=st+sb +’ ’; // нагромадження рядка значень масиву

end;

Memo2.Lines.Add(sb); // виведення рядка значень масиву

end;

 

2.3.5 Виведення масивів за допомогою компонента ListBox організують так само, як і з компонентом Memo, лише замість Memo треба писати оператор виклику процедури ListBox. Наприклад, замість оператора

Memo2.Lines.Add(sb);

треба записати

ListBox1.Items.Add(sb);.

 

2.3.6 Виведення масивів за допомогою компоненту StringGrid (сітка).

Компонент String-Grid має вигляд таблиці з комірками і розташована на вкладці Additional палітри компонент.

 

Цю компоненту ми будемо використовувати вперше, тому наведемо опис її основних власти-востей (таблиця 6.1):

 

 

Таблиця 6.1 – Властивості компонента StringGrid

Властивість Призначення
Name Ім’я компонента для доступу до його властивостей
ColCount Кількість стовпчиків таблиці
RowCount Кількість рядків таблиці
Cells Масив комірок таблиці. Наприклад, Cells[i,j] – це комірка розташована на перетинанні i-го стовпчика та j-го рядка (нумерація починається з нуля).
FixedCol Кількість фіксованих стовпчиків (для заголовка)
FixedRow Кількість фіксованих рядків (для заголовка)
Options.goEditing Ознака дозволу на редагування вмісту комірки
Options.Tabs Ознака дозволу на переміщення по таблиці за до-помогою клавіші <Tab>
Options.goColSizing Ознака дозволу на змінювання ширини стовпчиків
Options.goRowSizing Ознака дозволу на змінювання висоти рядків

 

В кожній комірці (Cells) можна розташувати величину рядкового типу, як і в іншіх компонентах, якими ми користувалися раніше (Edit, Label та ін.). Властивості групи Options відкривають подвійним клацанням і надають їм значення true або false. Наприклад для виведення матриці Rкомпоненті StringGrid слід надати властивості, подані в таблиці 6.2.

 

Таблиця 6.2 – Значення властивостей компоненти StringGrid

Властивість Значення
Name mb
ColCount  
RowCount  
FixedCol  
FixedRow  
Options.goColSizing True
Options.goRowSizing True

 

Приклад фрагмента програми:

 

For i:=1 to 3 do // цикл фіксованих заголовків рядків

mb.cells[0,i]:=IntToStr(i)+' - й рядок';

For j:=1 to 4 do // цикл фіксованих заголовків стовпчиків

mb.cells[j,0]:=IntToStr(j)+'-й стовпчик';

For i:=1 to 3 do // початок циклу за індексами ряд ків

begin

For j:=1 to 4 do // початок циклу за індексами стовпчиків

begin

str(R[i,j]:3, sb); // перетворення числа на рядкову величи ну

mb.cells[j,i]:=sb; // виведення значення масиву в комірку

end;

end;

 

2.4 Введення багатовимірних елементів масиву

Вводити значення масивів можна використовуючи такі компоненти Delphi, як StringGrid, Memo, ListBox. Як і при виведенні масивів, при введенні слід організовувати цикли змінювання з кожного індексу.

 

2.4.1. За допомогою компонента StringGrid можна вводити масиви лише під час виконання програми.

Наприклад для виведення матриці В компоненту StringGrid слід надати такі властивості:

Властивість Значення
Name mb
ColCount  
RowCount  
FixedCol  
FixedRow  
Options.goColSizing True
Options.goRowSizing True
Options.goEditing True
Options.Tabs True

 

Приклад фрагмента програми:

 

For i:=1 to 5 do // цикл фіксованих заголовків рядків

mb.cells[0,i]:=IntToStr(i)+' - й рядок';

For j:=1 to 5 do // цикл фіксованих заголовків стовпчиків

mb.cells[j,0]:=IntToStr(j)+'-й стовпчик';

For i:=1 to 5do // початок циклу за індексами ряд ків

begin

For j:=1 to 5 do // початок циклу за індексами стовпчиків

begin

str(B[i,j]:3, sb); // перетворення числа на строкову величи ну

mb.cells[j,i]:=sb; // виведення значення масиву в комірку

end;

end;

 

2.4.2 Введення через пропуск елементів багатовимірного масиву за допомогою компонент Memo або ListBox потребує складення спеціальної підпрограми зчитування рядкової величини та перетворення її на масив величин іншого типу. Таку підпрограму буде розглянуто при вивченні роботи з рядковими величинами.

 

 


1 | 2 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.)