|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Багатовимірні масиви
Лабораторна робота №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
В кожній комірці (Cells) можна розташувати величину рядкового типу, як і в іншіх компонентах, якими ми користувалися раніше (Edit, Label та ін.). Властивості групи Options відкривають подвійним клацанням і надають їм значення true або false. Наприклад для виведення матриці Rкомпоненті StringGrid слід надати властивості, подані в таблиці 6.2.
Таблиця 6.2 – Значення властивостей компоненти StringGrid
Приклад фрагмента програми:
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 слід надати такі властивості:
Приклад фрагмента програми:
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 потребує складення спеціальної підпрограми зчитування рядкової величини та перетворення її на масив величин іншого типу. Таку підпрограму буде розглянуто при вивченні роботи з рядковими величинами.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.) |