У вас вопросы?
У нас ответы:) SamZan.net

61 ~ Схема алгоритму пошуку максимального елемента

Работа добавлена на сайт samzan.net: 2016-06-20

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 3.2.2025

96

Фіксований рядок

Фіксований стовпчик

mi = i

max = Fij

Fij>max

     Вихід

mj = j

EMBED PBrush  

i = 1,4

mj = 1

mi = 1

max = F11

Рис. 6.1 – Схема алгоритму пошуку

             максимального елемента.

j = 1,5

     Вхід

так

ні

Dj = Dj Fij

Fij > 0

i = 1,4

     Вихід

j = 1,5

Dj = 1

Рисунок 6.2 –

      Схема

       алгоритму

      добутку

      додатніх

      елементів

    Вхід

так

ні

Виведення max

Виведення dj

dobut

max_el

Введення Fij

j = 1,5

i = 1,4

   Кінець

j = 1,4

     Рис. 6.3 – Схема алгоритму головної

             програми.

  Початок

  1.  

Лабораторна робота  №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 - квадратна матриця величин розміром 55

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 - матриця елементів логічного типу розміром 86 елементів.

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

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

5

RowCount

4

FixedCol

1

FixedRow

1

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

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.

  1.  Контрольні запитання

1 Як визначити вимірність масиву?         

2 Які з наведених нижче описів двовимірних масивів неправильнi й чому?

        а) Var C : array [ 1.. 5 ], [ 1.. 5 ];

        б) Var C=array [ 1.. 5, 1.. 5 ] of real;

        в) Var C : array [ 1, 5; 1, 5 ] of integer;

        г) Var C : array [ 1.. 5, 1...5 ] of char;

3 Матриця цілих чисел складається з 3-х рядків і 5-ти стовпчиків. Напишіть фрагмент програми для введенння її елементів.

4  Матриця цілих чисел складається з 3-х рядків і 5-ти стовпчиків. Надайте значення елементам масиву у розділі  опису.

5 Для матриці дійсних чисел, з 3-х рядків і 5-ти стовпчиків напишіть фрагмент програми для виведення на форму її елементів.

  1.  Лабораторне завдання

  1.  Скласти схеми алгоритмів, розробити  проект форми та  програми алгоритмічною мовою Object Pascal для виконання індивідуального завдання відповідно до варіантів. В проекті  передбачити введення елементів матриці з клавіатури через компонент StringGrid (значення придумати самостійно) і виведення одержаних результатів на форму.                                                 
  2.   Оформити протокол  для виконання лабораторної роботи.
  3.  При виконанні програми на комп’ютері значення елементів масиву (матриць) обрати самостійно, записати в протокол результати роботи проекту програми.

6. Варіанти індивідуальних завдань

1 В матрицi дійсних чисел з 5-ти рядків і 4-х стовпчикiв визначити кількість додатніх, від’ємних і нульових елементів.

2 В матрицi цілих чисел розміром 45 визначити номер рядка, котрий містить найбiльший елемент.

3 Визначити мінімальний елемент головної діагоналі квадратної матрицi розміром 55 і номер рядка, в якому він знаходиться.

4 Одержати вектор добуткiв непарних елементів парних рядків матрицi дійсних чисел розміром 63.

5 В матрицi цілих чисел розміром 35 замінити від’ємні елементи нулями.

6 Одержати вектор скалярних добуткiв елементів першого рядка матрицi цілих чисел розміром 44 на стовпчики цієї матрицi.

7 Визначити номер стовпчика матрицi дійсних чисел розміром 45 з найменшою сумою елементів.

8 Одержати вектор скалярних добуткiв рядків матрицi цілих чисел розміром 55 на її неголовну діагональ.

9 Помiняти місцями елементи першого рядка матрицi дійсних чисел розміром 44 і елементи її неголовної діагоналі.

10 Одержати вектор добуткiв парних елементів непарних стовпчиків матрицi цілих чисел розміром 45.

11 Визначити максимальний і мінімальний елементи матрицi дійсних чисел розміром 66 і помiняти їх місцями.

12 Визначити найбiльший елемент з числа від’ємних елементів парних стовпчикiв матрицi цілих чисел розміром 46.

13 Визначити номер рядка матрицi цілих чисел розміром 45 з найбільшою сумою елементів.

14 Одержати вектор скалярних добуткiв рядків матрицi дiйсних чисел розміром 44 на її останній стовпчик.

15. Обчислити суму елементів неголовної діагоналі матрицi цілих чисел розміром 55.

16. Одержати вектор скалярних добуткiв елементів стовпчикiв матриці дійсних чисел розміром 33 на її головну діагональ.

17. Для матрицi цілих чисел розміром 55 одержати транспоновану матрицю.

18. Визначити номер рядка матрицi дійсних чисел розміром 63, що містить найменший елемент.

19. Визначити мінімальний елемент неголовної діагоналі матрицi цілих чисел розміром 55 і номер стовпчика, в якому він знаходиться.

20. Одержати вектор сум елементів рядків матрицi цілих чисел розміром 73.

21. Замінити в непарних рядках матрицi дiйсних чисел розміром 74 від’ємні елементи нулями, а позитивні елементи одиницями.

22. Замінити елементи головної діагоналі матрицi цілих чисел розміром 33 сумами елементів її рядків.

23. В матрицi дiйсних чисел розміром 73 визначити номер рядка з найменшою сумою елементів.

24. Знайти в матрицi цілих чисел розміром 74 найменший елемент з числа додатніх і найбiльший з числа від’ємних і помiняти їх місцями.

25. Обчислити різницю сум елементів головної і неголовної діагоналей матрицi дійсних чисел розміром 55.

26. Одержати вектор сум квадратів елементів стовпчикiв матрицi дійсних чисел розміром 35.

27. В матрицi цілих чисел розміром 55 помiняти місцями елементи головної й неголовної діагоналей.

28. Замінити елементи головної діагоналі матрицi цілих чисел розміром 33 сумами елементів стовпчикiв.

29. Замінити в непарних рядках матрицi дійсних чисел розміром 73 від'ємні елементи нулями, а позитивні елементи – одиницями.

  1.  Одержати вектор сум елементів непарних стовпчикiв матрицi цілих чисел розміром 35.




1. Вариант 7 Для представленной схемы представить временную диаграмму на выходе и записать логическую ф
2. Какой орган должны уведомить государственные служащие в результате совершения коррупции орган проку
3. Бухгалтерский учет вложений во внеоборотные активы
4. тематическое планирование на 20122013 учебный год Предмет- Информатика Класс- 3 Учитель- Л
5. .Соотнесите названия форм и операций мышления c их психологическими характеристиками
6. Внешняя политика и деятельность КГБ при Ю.В. Андропов
7. греч землеразделение
8. Курсовая работа- Муниципальная собственность - социально-экономическая основа местного самоуправления
9.  совокупные расходы общества состоят из четырёх компонентов- личное потребление населения; инвестиционное
10. православной форме получило распространение среди господствующего класса Руси