Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Алгоритми обробки багатовимірних масивів



До традиційних обчислювальних алгоритмів обробки багатовимірних масивів належать: алгоритми пошуку максимальних і мінімальних елементів та індексів їх розміщення у масиві; обчислення сум і добутків елементів рядків і стовпчиків матриць; перестановки місцями рядків і стовпчиків матриць; вилучення рядків і стовпчиків матриць; обчислення суми, різниці та добутку матриць; транспонування матриць та інші. Розглянемо деякі з цих алгоритмів.

Приклад. Нехай задана матриця , . Розробити програму, яка перестановкою рядків і стовпчиків перетворює матрицю так, щоб мінімальний елемент матриці (вважається, що він єдиний) розмістився в правому нижньому куті.

Алгоритм розв’язання задачі складається з двох частин. Перша частина – це пошук номера рядка і номера стовпчика , на перетині яких розміщений мінімальний елемент матриці. Друга частина – це переміщення мінімального елемента матриці у правий нижній кут. Для цього потрібно поміняти місцями -ий і -ий рядки та -ий і -ий стовпчики матриці.

Для реалізації алгоритму командою File|New Application створимо новий проект. Присвоїмо формі заголовок Обчислення функції (властивість Caption). Командою File|Save All запишемо програмний модуль у файл з іменем ULAB4_1.pas, а проект – PLAB4_1.dpr.

Розробимо форму для введення початкових даних і виведення результату Рис.4.1.

Для введення розмірності матриці n розмістимо на формі компонент Edit. Для введення елементів матриці та виведення перетвореної матриці розмістимо на формі два компоненти StringGrid з такими властивостями:

Cels(ACol,ARow:integer):string – вмістиме комірки з координатами ACol, Arow;

Cols(Index:integer): Tstrings – вмістиме колонки Index;

Rows(Index:integer): Tstrings – вмістиме рядка Index;

Name: string – ім’я компонента;

Col: longint – номер поточного стовпця;

Row: longint – номер поточного рядка;

ColCount: longint – кількість стовпців;

RowCount: longint – кількість рядків;

FixedCol: longint – кількість стовпців фіксованої зони;

FixedRow: longint – кількість рядків фіксованої зони;

Options.goEditing: Boolean – дозвіл на редагування;

Options.goTabs: Boolean – переміщення курсора кл. Tab.

Рис.4.1 Форма Перетворення матриці

Встановимо компонентам StringGrid такі значення властивостей: FixedCols=0, FixedRows=0, Options.goEditing=true, Options.goTabs=true.

Крім цього, розмістимо на формі три керуючі кнопки (компонент Button) з написами Введення, Обчислення та Вихід.

Обробники кнопок Введення Обчислення містяться у програмному модулі ULAB4_1 і мають вигляд:

unit ULAB4_1;

interface

………………

implementation

{$R *.DFM}

var n:integer;

{Обробник кнопки Введення}

procedure TForm1.Button1Click(Sender: TObject);

begin

if edit1.Text=''then ShowMessage('Введіть n')

else begin n:=strtoint(Edit1.Text);

if (n<0)or(n>14)then ShowMessage('Недопустиме n')

else begin

StringGrid1.RowCount:=n;

StringGrid1.ColCount:=n;

StringGrid2.RowCount:=n;

StringGrid2.ColCount:=n;

end;

end;

end;

{Обробник кнопки Введення}

procedure TForm1.Button2Click(Sender: TObject);

Type Tmas=array[0..14] of integer;

Var a: array[0..14] of Tmas;

b:Tmas;

i, j, k, l, r: integer;

begin

{Введення початкових даних}

for i:=0 to n-1 do

for j:=0 to n-1 do

a[i,j]:=StrToInt(StringGrid1.Cells[j,i]);

{Пошук координат мінімального елемента матриці }

k:=0; l:=0;

for i:=0 to n-1 do

for j:=0 to n-1 do

if a[i,j]<a[k,l] then begin k:=i; l:=j;end;

{Перестановка місцями -го і -го рядків матриці}

b:=a[n-1]; a[n-1]:=a[k]; a[k]:=b;

{Перестановка місцями -го і -го стовпців матриці}

for i:=0 to n-1 do

begin r:=a[i,n-1]; a[i,n-1]:=a[i,l]; a[i,l]:=r; end;

{Виведення перетвореної матриці }

for i:=0 to n-1 do

for j:=0 to n-1 do

StringGrid2.Cells[j,i]:=IntToStr(a[i,j]);

end;

end.

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

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

тобто елемент , який стоїть в -му рядку і -му стовпчику, дорівнює сумі добутків відповідних елементів -го рядка матриці і -го стовпчика матриці .

Для реалізації алгоритму командою File|New Application створимо новий проект. Присвоїмо формі заголовок Обчислення функції (властивість Caption). Командою File|Save All запишемо програмний модуль у файл з іменем ULAB4_2.pas, а проект – PLAB4_2.dpr.

Розробимо форму для введення початкових даних і виведення результату Рис.4.2.

Аналогічно, як у попередньому прикладі для введення розмірності матриць n розмістимо на формі компонент Edit. Для введення елементів матриць і та виведення їх добутку розмістимо на формі три компоненти StringGrid і встановимо їм такі ж значення властивостей.

Крім цього, розмістимо на формі три керуючі кнопки з написами Введення, Обчислення та Вихід.

Обробник кнопки Обчислення міститься у програмному модулі ULAB4_2.

Рис.4.2 Форма Добуток матриць

unit ULAB4_2;

..................

procedure TForm1.Button2Click(Sender: TObject);

Type Tmas=array[0..14] of real;

Var a, b, c: array[0..14] of Tmas;

i, j, k: integer;

begin

{Введення початкових даних}

for i:=0 to n-1 do

for j:=0 to n-1 do

a[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);

for i:=0 to n-1 do

for j:=0 to n-1 do

b[i,j]:=StrToFloat(StringGrid2.Cells[j,i]);

{Обчислення добутку матриць a і b }

for i:=0 to n-1 do

for j:=0 to n-1 do

begin c[i,j]:=0;

for k:=0 to n-1 do

c[i,j]:= c[i,j]+a[i,k]*b[k,j];

end;

{Виведення добутку матриць}

for i:=0 to n-1 do

for j:=0 to n-1 do

StringGrid3.Cells[j,i]:=FloatToStr(c[i,j]);

end;

end.





Дата публикования: 2015-04-06; Прочитано: 715 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.011 с)...