Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Масив_лр_6.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
451 Кб
Скачать
☆

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.