2.4 Введення багатовимірних елементів масиву
Вводити значення масивів можна використовуючи такі компоненти Delphi, як StringGrid, Memo, ListBox. Як і при виведенні масивів, при введенні слід організовувати цикли змінювання з кожного індексу.
2.4.1. За допомогою компонента StringGrid можна вводити масиви лише під час виконання програми.
Наприклад для виведення матриці В компоненту StringGrid слід надати такі властивості:
-
Властивість
Значення
Name
mb
ColCount
6
RowCount
6
FixedCol
1
FixedRow
1
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 потребує складення спеціальної підпрограми зчитування рядкової величини та перетворення її на масив величин іншого типу. Таку підпрограму буде розглянуто при вивченні роботи з рядковими величинами.
3. Приклад програми з двовимірним масивом
Завдання. Скласти схему алгоритму та проект програми в Delphi для введення за допомогою компонента StringGrid елементів матриці F дійсних чисел розміром 4*5 й визначити:
максимальний елемент матриці та його місцезнаходження;
добутки додатних елементів стовпчиків матриці з виведенням результату (вектора добутків D) в StringGrid.
Схеми алгоритмів підпрограм розрахунків наведено на рисунках 6.1-6.3.
Ф
орма
проекту програми (із результатами
обчислень) має вигляд:
Текст програми :
unit Unit1;
interface
……………………………….
implementation
{$R *.DFM}
// опис типів та глобальних елементів
Type matr=array [1..4,1..5] of real;
vect= array [1..5] of real;
var i,j:integer;
// процедура знаходження максимального елементу та його
координат
procedure max_el(F:matr; var max:real;var mi,mj:integer);
begin
max:=F[1,1]; mi:=1; mj:=1;
for i:=1 to 4 do
for j:=1 to 5 do
if F[i,j]>max then
begin max:=F[i,j];
mi:=i; mj:=j;
end;
end;
// процедура обчислення добутків додатніх елементів
procedure dobut (F:matr; var D:vect);
begin
for j:=1 to 5 do
begin D[j]:=1;
for i:=1 to 4 do
if F[i,j]>0 then D[j]:= D[j]*F[i,j];
end;
end;
// процедура відгуку на натиснення кнопки “Вихід”
procedure Tform1.Button3Click(Sender: Tobject);
begin
close;
end;
// процедура відгуку на утворення форми проекту
//( виведення заголовків рядків та стовпчиків)
procedure Tform1.FormCreate(Sender: Tobject);
begin
for i:=1 to 4 do
kM.cells[0,i]:=IntToStr(i)+’-й рядок’;
for j:=1 to 5 do
kM.cells[j,0]:=IntToStr(j)+’-й стовпчик’;
for j:=1 to 5 do
kD.cells[j-1,0]:=IntToStr(j)+’-й ‘;
end;
// процедура відгуку на натиснення кнопки “Пуск”
procedure Tform1.Button1Click(Sender: Tobject);
var sm,smax,sd:string; F:matr;D:vect;
ier,imax,jmax:integer; max:real;
begin
for i:=1 to 4 do
for j:=1 to 5 do
begin
sm:=kM.cells[j,i];
val(sm,F[i,j],ier);
end;
// виклик підпрограми знаходження максимального елементу
max_el(F,max,imax,jmax);
// виведення максимального елементу та його координат
Str(max:5:1,smax);
Edit1.Text:=’Мах=’+smax+’ рядок=’+IntToStr(imax)+
‘ стовпчик=’+IntToStr(jmax);
// виклик підпрограми обчислення добутків додатніх елементів
dobut (F,D);
// виведення вектору добутків
for j:=1 to 5 do
begin
str(D[j]:5:1,sd);
kD.cells[j-1,1]:=sd;
end;
end;
// процедура очищення компонент форми
procedure Tform1.Button2Click(Sender: Tobject);
begin
for i:=1 to 4 do
for j:=1 to 5 do
kM.cells[j,i]:=’ ‘;
for j:=1 to 5 do
kD.cells[j-1,1]:=’ ‘;
Edit1.Clear;
end;
end.
