Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика_Delphi.doc
Скачиваний:
11
Добавлен:
25.08.2019
Размер:
2.92 Mб
Скачать

Тема 7. Масиви

Оголошення масиву

Масив, як і будь-яка змінна програми, перед використанням має бути оголошений в розділі оголошення змінних. У загальному|спільному| вигляді|виді| інструкція оголошення масиву виглядає таким чином:

Ім'я: array| [нижній_індекс|. .верхній_індекс] of| тип , де:

ім'я - ім'я масиву;

array| - зарезервоване слово мови|язика| Delphi|, що позначає|значить|, що оголошуване ім'я є|з'являється| ім'ям масиву;

нижній_індекс| і верхній_індекс| - цілі константи, що визначають діапазон зміни індексу елементів масиву і, неявно, кількість елементів (розмір) масиву;

тип - тип елементів масиву.

Приклади|зразки| оголошення масивів:

temper:array|[1..31] of| real|;

kоef:array|[0. .2] of| integer|;

name:array|[1..30] of| string|[25];

При оголошенні масиву зручно використовувати іменовані константи. Іменована константа оголошується в розділі оголошення констант, який зазвичай|звично| розташовують перед розділом оголошення змінних. Починається|розпочинає| розділ оголошення констант словом const|. У інструкції оголошення іменованої константи указують|вказують| ім'я константи і її значення, яке відділяється|відокремлюється| від імені символом "рівно". Наприклад, щоб|аби| оголосити іменовану константу nb|, значення якої дорівнює 10, в розділ const| треба записати інструкцію: nb=10|. Після|потім| оголошення іменованої константи її можна використовувати в програмі як звичайну|звичну| числову або символьну константу. Нижче як приклад|зразок| приведено оголошення масиву назв команд-учасниць чемпіонату по футболу, в якому використовуються іменовані константи.

const|

NT| = 18; // число команд

SN| = 25; // гранична довжина назви команди

var|

team|: array|[1..NT] of| string|[SN|];

Для того, щоб в програмі використовувати елемент масиву, треба вказати ім'я масиву і номер елементу (індекс), уклавши індекс в квадратні дужки. Як індекс можна використовувати константу або вираз|вираження| цілого типу|типа|, наприклад:

team| [ 1] := 'Зеніт';

d := koef|[l]*koef[l]-4*koef[2]*koef[1];

ShowMessage|(name|[n+1|]);

temper|[i]:= StrToFloat|(Edit1|.text);

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

Імя:array [нижній_індекс|..верхній_індекс|] of| тип = (список);

де список — розділені комами значення елементів масиву. Наприклад:

а: array|[10] of| integer| = (0,0,0,0,0,0,0,0,0,0);

Team|: array|[1..5] of| String|[10]=

('Зеніт','дінамо','спартак','ротор','ська');

Кількість елементів списку ініціалізації повинна відповідати розмірності масиву. Якщо це буде не так, то компілятор виведе повідомлення|сполучення| про помилку: Number| of| elements| differs| from| declaration| (кількість елементів не відповідає вказаному в оголошенні).

При спробі ініціалізувати локальний масив компілятор виводить повідомлення|сполучення| про помилку: Cannot| initialize| local| variables| (локальна змінна не може ініціалізувати). Локальний масив можна ініціалізувати тільки|лише| під час роботи програми, наприклад, так:

for| i := 1 to| 10 do|

а[i]:= 0;

Операції з|із| масивами

Типовими операціями при роботі з|із| масивами є|з'являються|:

  • виведення масиву;

  • введення масиву;

  • пошук максимального або мінімального елементу масиву;

  • пошук заданого елементу масиву;

  • сортування масиву.

Виведення масиву

Під виведенням масиву розуміється вивід|висновок| на екран монітора (у діалогове вікно) значень елементів масиву.

Якщо в програмі необхідно вивести значення всіх елементів масиву, то для цього зручно використовувати інструкцію for|, при цьому змінна-лічильник інструкції for| може бути використана як індекс елементу масиву.

Приклад|зразок|: Програма виводить пронумерований список футбольних команд. Слід звернути увагу, що для того, щоб список команд виглядав дійсно як список, властивості Label1|.AutoSize потрібно привласнити значення False| (надайте властивості Label1|.AutoSize значення True| і подивіться|поглянете|, як працюватиме програма). Текст програми приведений в лістингу.

Ініціалізація і виведення масиву

unit| outar_|;

interface|

uses|

Windows|, Messages|, SysUtils|, Variants, Classes|, Graphics|, Controls|, Forms, |Dialogs|, StdCtrls|;

type|

TForm1| = class|(TForm|)

Button1|: TButton|;

Label1|: TLabel|;

procedure| ButtonlClick|(Sender|: TObject|);

private|

{ Private| declarations| } public|

{ Public| declarations| } end|;

Form1|: TForm1|;

Implementation |($R *.dfm}

const| NT| = 5;

var|

team|: array|[1..NT] of| string|[10]=('Зеніт','дінамо','ротор','спартак','ська'

procedure| TForm1|.ButtonlClick(Sender|: TObject|);

var|

st:string|; // список команд

i:integer|; // індекс, номер елементу масиву

begin|

for| i:=l| to| NT| do

|st| := st| + IntToStr|(i)+ ' ' + team|[i]+ #13|; // виведення списку Label1|.Caption := st|; формування списку для

end|; end|. відображення у формі

Введення масиву

Під введенням масиву розуміється процес отримання|здобуття| від користувача (або з|із| файлу) під час роботи програми значень елементів масиву.

"Лобове" рішення задачі введення елементів масиву - для кожного елементу масиву створити поле введення. Проте|однак| якщо потрібно ввести|запроваджувати| достатньо|досить| великий масив, то таке рішення|розв'язання| неприйнятне. Очевидно, що послідовність чисел зручно вводити|запроваджувати| в рядок таблиці, де кожне число знаходиться|перебуває| в окремому осередку|чарунці|. Нижче розглядаються|розглядують| два варіанти організації введення масиву з використанням компонентів StringGrid| і Memo|.

Використання компоненту StringGrid|

Для введення масиву зручно використовувати компонент StringGrid|. Значок компоненту StringGrid| знаходиться|перебуває| на вкладці Additional| .

Компонент StringGrid| є таблицею, комірки|чарунок| якої містять|утримують| рядки символів. У таблиці. 5.1 перераховані деякі властивості компоненту StringGrid|.

Таблиця . Властивості компоненту StringGrid|

Властивість

Визначає

Name|

Ім'я компоненту. Використовується в програмі для доступу до властивостей компоненту

Властивість

Визначає

ColCount|

Кількість колонок таблиці

RowCount|

Кількість рядків таблиці

Cells|

Відповідний таблиці двовимірний масив. Елемент таблиці, що знаходиться|перебуває| на перетині|пересіченні| стовпця номер col| і рядки номер row| визначається елементом cells| [col|, row|]

FixedCols|

Кількість зафіксованих зліва|ліворуч| колонок таблиці. Зафіксовані колонки виділяються кольором|цвітом| і при горизонтальній прокрутці таблиці залишаються на місці

FixedRows|

Кількість зафіксованих зверху рядків таблиці. Зафіксовані рядки виділяються кольором|цвітом| і при вертикальній прокрутці таблиці залишаються на місці

Options|.goEditing|

Ознака допустимості редагування вмісту елементів таблиці. True| — редагування дозволене, False| — заборонено

Options| . goTab|

Вирішує (True|) або забороняє (False|) використання клавіші <Таb> для переміщення курсора в наступний|такий| елемент таблиці

Options|.GoAlwayshowEditor|

Ознака знаходження компоненту в режимі редагування. Якщо значення властивості False|, то для того, щоб в осередку|чарунці| з'явився|появлявся| курсор, треба почати|розпочинати| набирати текст, натиснути|натискувати| клавішу <F2|> або зробити клацання|натиснення| мишею

DefaultColWidth|

Ширіну колонок таблиці

DefaultRowHeight|

Висоту рядків таблиці

GridLineWi-dth|

Ширіну ліній, що обмежують елементи таблиці

Left|

Відстань від лівої межі|кордону| поля таблиці до лівої межі|кордону| форми

Тор

Відстань від верхньої межі|кордону| поля таблиці до верхньої межі|кордону| форми

Height|

Висоту поля таблиці

Width|

Ширіну поля таблиці

Font|

Шрифт, використовуваний для відображення вмісту елементів таблиці

ParentFont|

Ознака спадкоємства характеристик шрифту форми

Як приклад|зразок| використання компоненту stringGrid| для введення масиву розглянемо|розглядуватимемо| програму, яка обчислює|обчисляє| середнє арифметичне значення елементів масиву. Компонент stringGrid| використовується для введення масиву, компоненти Label1| і Label2| — для виведення тексту пояснення і результату розрахунку, Buttoni| - для запуску процесу розрахунку.

Додається|добавляє| компонент stringGrid| у форму точно так, як і інші компоненти. Після|потім| додавання|добавляти| компоненту до форми потрібно виконати його налаштування відповідно до таблиці. 5.2. Значення властивостей Height| і width| слід за допомогою миші встановити такими, щоб|аби| розмір компоненту дорівнював розміру рядка.

Таблиця . Значення властивостей компоненту StringGrid1|

Властивість

Значення

ColCount|

5

FixedCols|

0

RowCount|

1

DefaultRowHeight|

24

Height|

24

DefaultColWidth|

64

Width|

328

Options|.goEditing|

True|

Options|.AlwaysShowEditing|

True|

Options|.goTabs

True|

Лістинг Введення і обробка масиву цілих чисел

unit| getar_|;

interface|

uses|

Windows|,Messages|,SysUtils|, Variants,| Classes|,Graphics|, Controls|, Forms|, Dialogs|, Grids|, StdCtrls|;

type|

TForm1| = class|(TForm|)

Label1|: TLabel|;

StringGridl|: TStringGrid|;

Button1|: TButton|;

Label2|: TLabel|;

procedure| ButtonlClick|(Sender|: TObject|); private|

{ Private| declarations| } public| { Public| declarations| } end|;

Var |Form1|: TForm1| ;

Implementation | {$R *.dfm}

procedure| TForm1|.ButtonlClick(Sender|: TObject|); var|

а : array|[1..5] of| integer|; // масив

summ|: integer|; // сума елементів

sr|: real|; // середнє арифметичне

i: integer|; // індекс

begin|

// введення массиву, вважаємо|лічимо|, що якщо осередок|чарунка| порожній|пустий|, то відповідний їй елемент масиву = 0

for| i:=| 1 to| 5 do|

if| Length|(StringGridl|.Cells[i-1|, 0]) <>0|

then| а[i]:= StrToInt|(StringGridl|.Cells[i-1,0|]) else| а[i]:= 0;

summ| := 0; // обробка масиву

for| i :=1 to| 5 do|

summ| := summ| + а[i]; sr| := summ|/5;

У|біля| виведення результату Label2|.Caption :='Сума елементів: ' + IntToStr|(summ|)+ #13+ 'Середнє арифметичне: ' + FloatToStr|(sr|);

end|; end|.

Після|потім| пробних запусків програми виникає бажання внести зміни в процес введення масиву. Так, було б непогано, щоб|аби| курсор автоматично переходив в наступний|такий| елемент таблиці, наприклад, в результаті|унаслідок| натиснення клавіші <Enter|>. Зробити це можна за допомогою процедури обробки події onKeyPress|. На цю ж процедуру можна покласти завдання|задачу| фільтрації що вводяться|запроваджують| в елемент таблиці даних. У нашому випадку треба вирішити введення в комірку|чарунку| тільки|лише| цифр.

Текст процедури обробки події OnKeyPress| приведений в лістингу. Слід звернути увагу на властивість Col|, яка під час роботи програми містить|утримує| номер колонки таблиці, в якій знаходиться|перебуває| курсор. Цю властивість можна також використовувати для переміщення курсора в потрібний елемент таблиці. Проте|однак| потрібно враховувати, що колонки таблиці, втім, як і рядки, нумеруються з нуля|нуль-індикатора|.

Лістинг.Процедура обробки події OnKeyPress|

procedure| TForm1|.StringGridlKeyPress(Sender|: TObject|;var| Кеу: Char|);

begin|

case| Кеу of|

#8,'0'..'9' : ; // цифри і клавіша <Backspace|>

#13: // клавіша <Enter|>

if| StringGridl|.Col < StringGridl|.ColCount - 1then| StringGridl|.Col := StringGridl|.Col + 1;

else| key| := Chr|(0); // решта символів заборонена

end|; end|;

Якщо потрібно ввести|запроваджувати| масив дробових чисел (а: array| [1. .5] of| real|), то процедура обробки події OnKeyPress| декілька ускладниться, оскільки окрім цифр допустимими символами є|з'являються| символ-роздільник (кома або крапка|точка| — залежить від налаштування Windows|) і мінус. З метою забезпечення деякої дружності програми по відношенню до користувача можна застосувати трюк: підмінити невірний роздільник, що вводиться|запроваджує| користувачем, вірним. Визначити, який символ-роздільник допустимий в поточному налаштуванні Windows|, можна, звернувшись|обертатися| до глобальної змінної Decimaiseparator|.

У лістингу приведений текст модуля додатку|застосування| введення і обробки масиву дробових чисел. Процедура обробки події OnKeyPress| забезпечує введення в комірку|чарунку| таблиці тільки|лише| допустимих при записі дробового числа символів.

Лістинг. Введення і обробка масиву дробових чисел

unit|. getar_1|; interface|

uses|

Windows|,Messages|,SysUtils|,Variants|,Classes,Graphics|,Controls|,Forms|,Dialogs|,Grids|,StdCtrls|;

|type|

TForm1=| class|(TForm|)

Label1|: TLabel|;

StringGrid1|: TStringGrid|;

Button1|: TButton|;

Label2|: TLabel|;

procedure| Button1ClicktSender|: TObject|);

procedure| StringGridlKeyPress|(Sender|: TObject|; var| Кеу: Char|);

private|

{ Private| declarations| } public| { Public| declarations| } end|;

var|

Form1|: TForm1|;

Implementation | {$R *.dfm}

procedure| TForm1|.ButtonlClick(Sender|: TObject|);

var|

а : array|[1..5] of| real|; // масив

suram,sr |: real|; // сума елементів|/ середнє арифметичне

i: integer|; // індекс

begin |// введення массиву, вважаємо|лічимо|, що якщо осередок|чарунка| порожній|пустий|, то відповідний їй елемент масиву = 0|нуль-індикатору|

for| i:=| 1 to| 5 do|

if| Length|(StringGridl|.Cells[i-l,0|]) <>0 |then| а[i]:= StrToFloat|(StringGridl|.Cells[i-1|, 0]) else| а[i]:= 0;

// обробка масиву

summ| := 0;

for| i :=1 to| 5 do|

summ| := summ| + а[i]; sr| := summ| / 5; // виведення результату

Label2|.Caption := 'Сума елементів: ' + FloatToStr|(summ|) + #13+ 'Середнє арифметичне: ' + FloatToStr|(sr|); end|; // Функція забезпечує введення в осередок|чарунку| тільки|лише| допустимих символів

procedure| TForm1|.StringGridlKeyPress(Sender|: TObject|; var| Кеу: Char|);

begin|

case| Кеу of|

#8,'0'..'9' : ; // цифри і <Backspace|>

#13: // клавіша <Enter|>

if| StringGridl|.Col < StringGridl|.ColCount–1 then| StringGridl|.Col := StringGridl|.Col + 1; '.',',':

// роздільник цілої і дробової частин|часток| числа

begin|

if| Кеу<>DecimalSeparator| then| Кеу:= DecimalSeparator|; // замінимий роздільник на допустимий

if| Pos|(StringGridl|.Cells[StringGridl|.Col,0], DecimalSeparator|) <> 0 then| Кеу:= Chr|(O);

// заборона введення другого роздільника

end|; // ' -' мінус можна ввести|запроваджувати| тільки|лише| першим символом тобто коли осередок|чарунка| порожній|пустий|

if| Length|(StringGrid1|.Cells[StringGrid1|.Col, 0]) <>0| then | Кеу := Chr|(0);

else| // решта символів заборонена

key| := Chr|(0);

end|; end|; end|.

Використання компоненту Memo|

В деяких випадках для введення масиву можна використовувати компонент Memo|. Компонент Memo| дозволяє вводити|запроваджувати| текст, що складається з достатньо|досить| великої кількості рядків, тому його зручно використовувати для введення символьного масиву. Компонент Memo| додається|добавляє| у форму звичайним способом. Значок компоненту знаходиться|перебуває| на вкладці Standard|

Таблиця . Властивості компоненту Memo|

Властивість

Визначає

Name|

Ім'я компоненту. Використовується в програмі для доступу до властивостей компоненту

Text|

Текст, що знаходиться|перебуває| в полі Memo|. Розглядається|розглядує| як єдине ціле

Lines|

Текст, що знаходиться|перебуває| в полі Memo|. Розглядається|розглядує| як сукупність рядків. Доступ до рядка здійснюється по номеру

Lines|.Count

Кількість рядків тексту в полі Memo|

Left|

Відстань від лівої межі|кордону| поля до лівої межі|кордону| форми

Тор

Відстань від верхньої межі|кордону| поля до верхньої межі|кордону| форми

Height|

Висоту поля

Width|

Ширину поля

Font|

Шрифт, використовуваний для відображення тексту, що вводиться|запроваджує|

ParentFont|

Ознака спадкоємства властивостей шрифту батьківської форми

При використанні компоненту Memo| для введення масиву значення кожного елементу масиву слід вводити|запроваджувати| в окремому рядку і після|потім| введення кожного елементу масиву натискати|натискувати| клавішу <Enter|>.

Дістати доступ до тієї, що знаходиться|перебуває| в полі Memo| рядку тексту можна за допомогою властивості Lines|, вказавши в квадратних дужках номер потрібного рядка (рядки нумеруються з нуля|нуль-індикатора|).

Наступна|така| програма демонструє використання компоненту Memo| для введення символьного масиву.

Основний цикл процедури введення символьного масиву з|із| компоненту Memo| може виглядати так:

for| i:=l| to| SIZE| do|

а [ i ]:= Memol|.Lines[i];

де:

SIZE| - іменована константа, що визначає розмір масиву; а - масив; Memol| - ім'я Memo-компонента|; Lines| - властивість компоненту Memo|, що є масивом, кожен елемент якого містить|утримує| один рядок що знаходиться|перебуває| в полі Memo| тексту.

Форма програми приведена на мал.1. Окрім поля Memo| вона містить|утримує| командну кнопку (Button1|), при клацанні|натисненні| на якій виконується введення значень елементів масиву з|із| поля Memo|.

Мал.1. Діалогове вікно додатку|застосування| Введення масиву

Лістинг . Введення масиву рядків з|із| компоненту Memo|

unit| fr_memo_|; interface|

uses |Windows|, Messages|, SysUtils|, Classes, |Graphics|, Controls|, Forms|, Dialogs|, Menus|, StdCtrls|;

type|

TForm1| = class|(TForm|)

Memo1|: TMemo|;

Button1|: TButton|;

Label1|: TLabel|;

procedure| ButtonlClick|(Sender|: TObject|);

private |{ Private| declarations| }

public| { Public| declarations| } end|;

var |Form1|: TForm1|;

implementation| {$R *.DFM}

procedure| TForm1| .ButtonlClick(Sender|: TObject|);

const |SIZE=5|; // розмір масиву

var|

a:array|[l..SIZE]of| string|[30]; //массив

n: integer|; // кількість рядків, введених|запроваджувати| в поле Memo|

i:integer|; // індекс елементу масиву

st:string|;

begin|

n:=Memo1|.Lines.Count;

if| n = 0 then| begin|

ShowMessage|('Початкові|вихідні| дані не введені|запроваджувати|!');

Exit|; // вихід із процедури обробки події

end|; // у полі Memo| є текст

if| n > SIZE| then| begin |

ShowMessage|('Кількість рядків перевищує розмір масиву.');

n:=SIZE|; // вводитимемо|запроваджуватимемо| тільки|лише| перші SIZE| рядків

end|;

for| i:=1| to| n do|

а[i]:=Form1.Memol.Lines[i-1|]; // рядки Memo| пронумеровані з нуля|нуль-індикатора|

// виведення масиву у вікно повідомлення|сполучення|

if| n > 0 then| begin|

st:='Введенный| масив:'+#13;

for| i: =1 to| n do|

st:=st+IntToStr|(i)+' '+ а[i]+f13; ShowMessage|(st|);

end|; end|; end|.

Основну роботу виконує процедура TForm1|.Button1Click, яка спочатку перевіряє, чи є в полі Memo1| текст. Якщо текст є (в цьому випадку значення властивості Lines|.Count більше нуля|нуль-індикатора|), то процедура порівнює кількість введених|запроваджувати| рядків і розмір масиву. Якщо цю кількість перевищує розмір масиву, то програма змінює|зраджує| значення n, тим самим готує введення тільки|лише| перших рядків SIZE|.|

Алгоритм простого перебору

Нижче приведений текст програми пошуку в масиві цілих чисел. Перебір елементів масиву здійснюється інструкцією repeat|, в тілі якої інструкція if| порівнює поточний елемент масиву із|із| зразком|взірцем| і привласнює змінною found| значення true|, якщо поточний елемент і зразок|взірець| рівні.

Цикл завершується, якщо в масиві виявлений елемент, рівний зразку|взірцю| (в цьому випадку значення змінної found| рівне true|), або якщо перевірені всі елементи масиву. Після закінчення циклу за значенням змінній found| можна визначити, успішний пошук чи ні|або ні|.

Вид діалогового вікна програми Пошук в масиві:

Клацання|натиснення| на командній кнопці Пошук (Button1|) запускає процедуру TForm1|.Button1Click (її текст приведений в лістингу), яка з|із| компоненту stringGridi| вводить|запроваджує| масив, а з|із| поля редагування Edit2| - число (зразок|взірець|). Потім виконується перевірка, чи містить|утримує| масив введене|запроваджувати| число. Після|потім| завершення перевірки процедура showMessage| виводить повідомлення|сполучення| про результат пошуку.

Лістинг. Пошук в масиві

unit| s_found_|; interface|

uses |Windows|, Messages|, SysUtils|, Classes|, Graphics|, Controls|, Forms|, Dialogs|, StdCtrls|, Grids|;

type|

TForm1| = class|(TForm|)

Label1|: TLabel|;

Label2|: TLabel|;

Button1|: TButton|;

Edit2|: TEdit|;

StringGridi|: TStringGrid|;

procedure| ButtonlClick|(Sender|: TObject|);

private |{ Private| declarations| }

public |{ Public| declarations| ) end|;

var |Form1|: TForm1| ;

implementation | {$R *.DFM}

procedure| TForm1|.ButtonlClick(Sender|: TObject|); { пошук в масиві перебором }

const|

SIZE=5|; var|

а: array|[1..SIZE] of| integer|; //массив

obr|: integer|; // зразок|взірець| для пошуку

found|: boolean|; // TRUE| - збіг зразка|взірця| з|із| елементом масиву

i: integer|; // індекс елементу масиву

begin|

for| i:=l| to| SIZE| do // введення масиву

|а[i]:= StrToInt|(StringGridl|.Cells[i-1,0|]); // введення зразка|взірця| для пошуку

obr| := StrToInt|(edit2|.text); // пошук

found| := FALSE|; // нехай|нехай| потрібного елементу в масиві немає

i:=| 1; repeat|

if| а[i]= obr |then|

found| := TRUE| else| i := i+1|;

until| (i > SIZE|) or| (found| = TRUE|);

if| found |then|

ShowMessage|('Збіг з|із| елементом номер '+IntToStr|(i)+#13+'Пошук успішний.')

else|

ShowMessage|('Збігів із|із| зразком|взірцем| немає.');

end|; end|.

Очевидно, що ніж більше елементів в масиві і чим далі розташований|схильний| потрібний елемент від початку масиву, тим довше програма шукатиме необхідний елемент.

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

Сортування методом прямого вибору

Алгоритм сортування масиву за збільшенням методом прямого вибору може бути представлений|уявляти| так:

1. Проглядаючи масив від першого елементу, знайти мінімальний елемент і помістити його на місце|місце-милю| першого елементу, а перший — на місце|місце-милю| мінімальне.

2. Проглядаючи масив від другого елементу, знайти мінімальний елемент і помістити його на місце|місце-милю| другого елементу, а другий — на місце|місце-милю| мінімальне.

3. І так далі до передостаннього елементу.

Нижче представлена|уявляти| програма сортування масиву цілих чисел за збільшенням,

Процедура сортування, текст якого приведений в лістингу, запускається натисненням кнопки Сортування (Button1|). Значення елементів масиву вводяться|запроваджують| з|із| осередків|чарунок| компоненту StringGrid1|. Після|потім| виконання чергового циклу пошуку мінімального елементу в частині|частці| масиву процедура виводить масив в полі (Label2|).

Лістинг. Сортування масиву простим вибором

procedure| TForm1|.ButtonlClick(Sender|: TObject|);

const | SIZE=10|;

var|

a:array|[1..SIZE] of| integer|;

min:integer|; { номер мінімального елементу в частині|частці| масиву від i до верхньої межі|кордону| масиву }

j:integer|; { номер елементу, що порівнюється з|із| мінімальним }

buf:integer|; { буфер, використовуваний при обміні елементів масиву }

i,k:integer|;

begin|

for| i:=l| to| SIZE| do // введення масиву

|а[i]:=StrToInt(StringGridl|.Cells[i-1,0|]) ; Iabel2|.caption:='';

for| i:=l| to| SIZE-1| do| begin { пошук мінімального елементу в частині|частці| масиву від а[1] до а[SIZE|]}

|min:=i|;

for| j:=i+l| to| SIZE| do

|if| а[j]< а [min|] then| min:=j|; { поміняємо місцями а [min|] і а[i]}

buf:=a|[i]; а[i]:=a[min|]; а[min|]:=buf; { виведення масиву }

for| k:=l| to| SIZE| do|

Label2|.caption:=label2.caption+' '+IntTostr|(а[k]);

Label2|.caption:=label2.caption+#13; end|;

Label2|.caption:=label2.caption+#13+'MaccMB відсортований.';

end|;

Мал. . Діалогове вікно програми Сортування массиву