- •Тема 1. Поняття про об’єктно-орієнтоване програмування. Поняття про об’єктно-орієнтоване програмування
- •Інструмент прискореної розробки програм
- •Список файлів проекту.
- •Деякі важливі принципи візуального програмування.
- •Вікна інспектора об'єктів, форми, модуля.
- •Лабораторна робота №1 «Робота в середовищі Delphi»
- •Тема 2. Основи об’єктно-орієнтованого програмування.
- •Лабораторна робота №2 «Створення типового вікна Windows-додатку. Властивості об’єктів форми.»
- •Теоретичні відомості:
- •I. Властивості об’єкту Форма.
- •Теоретичні питання:
- •Тема 3. Особливості ооп: основні концепції
- •Лабораторна робота №3 Робота з формою та компонентами Panel, Label, Edit, Button.
- •Лабораторна робота №4 Робота над проектом «Альбом картинок» (компонент Image вкладки Additional)
- •Тема 4. Структура програми Структура програми складається з:
- •Структура проекту
- •Структура модуля
- •Елементи програми
- •Елементи мови Алфавіт
- •Лексеми
- •Теоретичні питання
- •Лабораторна робота №5 Робота над проектом «Текстовий редактор»
- •Тема 5. Типи даних. Введення та виведення числових даних. Функції перетворення. Математичні функції
- •Прості типи
- •Порядкові типи
- •Цілі типи
- •Введення та виведення числових даних
- •Допомога 1.
- •Допомога 2.
- •Лабораторна робота №6. «Створення програм лінійної структури. Створення програми «Калькулятор»
- •В аріант завдання для вибору:
- •Тема 6. Оператори мови Delphi
- •Лабораторна робота №7 Створення найпростішого Windows-Додатка в Delphi, з використанням умовного оператора та оператора вибору.
- •1 Спосіб розв’язку квадратного рівняння
- •2 Спосіб розв’язання квадратного рівняння
- •Створити додатки за вказаним варіантом та записати блок-схему алгоритму:
- •Лабораторна робота № 8 «Створення програм з використанням операторів циклів»
- •Лабораторна робота № 9 «Розробка графічного інтерфейсу програми. Основні керуючі елементи.»
- •1. Програмування об’єкту – перемикач (tRadioButton).
- •Програмування об’єкту – прапорець (tCheckBox).
- •Тема 7. Масиви
- •Лабораторна робота № 10 «Структуровані типи даних»
- •Тема 8. Робота з файлами
- •Лабораторна робота №11 «Файлові типи даних»
- •Тема 9. Допоміжні алгоритми
- •Лабораторна робота № 12 «Створення програм з використанням процедур та функцій»
- •Тема 10. Работа з графікою та мультимедіа
- •Реалізація мультимедійних технологій. Відтворення відеокліпів
- •Внимание!
- •Лабораторна робота № 13 «Створення проекту «Побудова графіка функцій»»
- •Тема 11. Створення анімації в Delphi
- •Лабораторна робота № 14 «Створення проекту «Графічний конструктор»»
- •Лабораторна робота № 15 Створення багатовіконного проекту «Тест з географії»
- •Форма «Тестування» — модуль f_Test
- •Форма «Результат» — модуль fRes
- •Форма «Домопога» — модуль fInstr unit f__lnstr;
- •Тема 12. Організація роботи з таблицями та базами даних. Лабораторна робота №16. Розробка проекту «Рейтинг країн за результатами олімпійських змагань»
- •Лабораторна робота № 17 Створення проекту «Довідник по країнах»
- •Лабораторна робота № 18 Створення проекту «Телефонна книга»
- •Лабораторна робота № 19 Створення проекту «Довідник по тваринах»
- •Лабораторна робота № 20 Створення довідкової системи
- •Хід роботи
Тема 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|;
Мал. . Діалогове вікно програми Сортування массиву