Масиви в delphi, delphi, компоненти delphi, вихідні коди delphi

Масиви в Delphi

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

Тоді тобі потрібно клікнути сюди:

Масиви в delphi, delphi, компоненти delphi, вихідні коди delphi

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

  • ім'я - ім'я масиву;
  • array - зарезервоване слово мови Delphi. позначає, що оголошується ім'я є ім'ям масиву;
  • ніжній_індекс і верхній_індекс - цілі константи, що визначають діапазон зміни індексу елементів масиву і, неявно, кількість елементів (розмір) масиву;
  • тип - тип елементів масиву.


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

koef: array [0..2] of integer;
name: array [1..30] of string [25];


const
ВТ = 15; // число команд
SN = 25; // гранична довжина назви команди
var
team: array [1. BT] of string [SN];

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


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

d: = koef [l] * koef [l] - 4 * koef [2] * koef [1];
ShowMessage (name [n + 1]);
temper: = StrToFloat (Editl. text);

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

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


a: array [lO] of integer = (0. 0. 0. 0. 0. 0. 0. 0. 0. 0);
Team: array [1..5] of String [10] = ( 'Зеніт'. 'Динамо'. 'Спартак'. 'Ротор'. 'СКА');

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

for i: = 1 to 10 do a: = 0;

Типовими операціями при роботі з масивами є:

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

висновок масиву

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

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

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

Лістинг. Ініціалізація і висновок масиву

02. interface
03. Windows, Messages, SysOtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
04. type
05. TForml = class (TForm)
06. Buttonl: TButton;
07. Label1: TLabel;
08. procedure ButtonlClick (Sender: TObject);
09. private
10.
11. public
12.
13. end;
14. var
15. Form1: TForm1;
16. implementation
17.
18. const
19. NT = 5;
20. var
21. team: array [1. NT] of string [10] = ( 'Зеніт1,' Динамо 1. 'Ротор1,' Спартак ',' СКА ');
22. procedure TForml. ButtonlClick (Sender: TObject);
23. var
24. st: string; // список команд
25. i: integer; // індекс, номер елемента масиву
26. begin
27. // формування списку для відображення в формі
28. for i: = l to NT do st: = st + IntToStr (i) + '' + team + # 13;
29. // виведення списку
30. Label1. Caption: = st;
31. end;
32. end.

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

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

"Лобове" рішення задачі введення елементів масиву - для кожного елемента масиву створити поле введення. Однак якщо потрібно ввести досить великий масив, то таке рішення є неприйнятним. Уявіть форму, наприклад, з десятьма полями редагування!

Очевидно, що послідовність чисел зручно вводити в рядок таблиці, де кожне число знаходиться в окремій клітинці. Нижче розглядаються два варіанти організації введення масиву з використанням компонентів StringGrid І Memo.

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

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

Для введення масиву зручно використовувати компонент StringGrid. Значок компонента StringGrid знаходиться на вкладці Additiona l (рис. 5.2).

Компонент strinqGrid є таблицею, осередки якої містять рядки символів.

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

Масиви в delphi, delphi, компоненти delphi, вихідні коди delphi

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

Текст програми приведений в лістингу.

Значення властивостей компонента StringGrid1

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


01. unit getar_;
02. interface
03. uses
04. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
05. Forms, Dialogs, Grids, StdCtrls;
06. type
07. TForml = class (TForm]
08. Labell: TLabel;
09. StringGridl; TStringGrid;
10. Buttonl: TButton;
11. Label2: TLabel;
12. procedure ButtorilClicMSender: TObject];
13. private
14.
15. public
16.
17. end;
18. var
19. Forml: TForml;
20. implementation
21.
22. procedure TForml. ButtonlClick (Sender: TObject);
23. var
24. a. array [1..5] of integer; // масив
25. suntrn: integer; // сума елементів
26. sr: real; // середнє арифметичне
27. i: integer / // індекс
28. begin
29. // введення масиву
30. // вважаємо, що якщо осередок порожня, то відповідний
31. // їй елемент масиву дорівнює нулю
32. for i: = 1 to 5 do
33. if Length (StringGridl. Cells [i-l, 0]] 0
34. then a: = StrToInt (StringGridl. Cells [i- 1. 0))
35. else a: = 0;
36. // обробка масиву
37. summ: = 0;
38. for i: = 1 to 5 do
39. summ: = summ + a;
40. sr. = Summ / 5;
41. // висновок результату
42. Label2. Caption: = 'Сума елементів:' + IntToStr (summl + # 13 + 'Середнє арифметичне:' + FloatToStr (sr);
43. end; end.

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

Текст процедури обробки події # 111; nkeypress приведений в лістингу 5.3. Слід звернути увагу на властивість Col, яке під час роботи програми містить номер колонки таблиці, в якій знаходиться курсор. Це властивість можна також використовувати для переміщення курсору в потрібну комірку таблиці. Однак потрібно враховувати, що колонки таблиці, втім, як і рядки, нумеруються з нуля.

Лістинг 5.3. Процедура обробки події # 111; nkeypress


procedure TForml. StringGridlKeyPress (Sender: TObject; var Key; Char);
begin
case Key of
# 8. '0'. '9'. ; // цифри і клавіша
# 13. // клавіша
if StringGridl. Col then StringGridl. Col: = StringGridl. Col + 1;
else key: = Chr (O); // інші символи заборонені
end;
end;

Якщо потрібно ввести масив дробових чисел (a: array [1. 5] of real), то процедура обробки події # 111; nkeypress дещо ускладниться, т. К. Крім цифр допустимими символами є символ-роздільник (кома або крапка - залежить від налаштування Windows) і мінус. З метою забезпечення деякої дружності програми по відношенню до користувача можна застосувати трюк: підмінити вводиться користувачем невірний роздільник вірним. Визначити, який символ-роздільник допустимо в установленою Windows, можна, звернувшись до глобальної змінної Decimal separator. У лістингу 5.4 приведений текст модуля програми введення та обробки масиву дрібних чисел. Процедура обробки події # 111; nkeypress забезпечує введення в осередок таблиці тільки допустимих при записі дробового числа символів.

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

01. unit getar_l;
02. interface
03. uses
04. Windows, Messages, SysUtils, Variants, Classes, Graphics, controls,
05. Forms, Dialogs, Grids, StdCtrls;
06. type
07. TForml - class (TFora)
08. Labell: TLabel;
09. StringGridl: TStringGrid;
10. Buttonl: TButton;
11. Label2: TLabel;
12. procedure ButtonlClick (Sender: TObject);
13. procedure StringGridlKeyPress (Sender: TObject; var Key: Char);
14. private
15.
16. public
17.
18. end;
19. var
20. Forml: TForml;
21. implementation
22.
23. procedure TForml. ButtonlClick (Sender: TObject);
24. var
25. a. array [1..5] of real; // масив
26. summ: real, - // сума елементів
27. sr: real; // середнє арифметичне
28. i: integer; // індекс
29. begin
30. // введення масиву
31. // вважаємо, що якщо осередок порожня, то відповідний
32. // їй елемент масиву дорівнює нулю
33. for i: = I to 5 do
34. if LengtMStringGridl. Cells [i- 1. 0]) 0
35. than a [i): = StrToFloat [StringGridl. Cells [i- 1. 0]]
36. else a: = 0;
37. // обробка масиву
38. summ: = 0;
39. for i: = 1 to 5 do
40. summ: = summ + a;
41. sr: = summ / 5;
42. // висновок результату
43. Label2. Caption: =
44. 'Сума елементів:' + FloatToStr (summ) + # 13 +
45. 'Середнє арифметичне:' + FloatToStr (sr);
46. ​​end;
47. // Функція забезпечує введення в осередок тільки допустимих символів
48. procedure TForml. StringGridlKeyPress (Sender: TObject; var Key: Char);
49. begin
50. case Key of
51. # 8. '0'. '9'. ; // цифри і
52. # 13. // клавіша
53. if StringGridl. Col 54. then StringGridl. Col: = StringGridl. Col + 1;
55. '. '. '. '. // роздільник цілої і дробової частин числа
56. begin
57. if Key DecimalSeparator then
58. Key: = Decimal Separator; // замінимо роздільник
59. // на допустимий
60. if Pos (StringGridl. Cells [StringGridl. Col, 0].
61. DecimalSeparator) про Про
62. then Key: = Chr (O); // заборона введення другого
63. // роздільник
64. end;
65. '-'. // мінус можна ввести тільки 'першим символом,
66. // т. Е. Коли осередок порожня
67. if Length (StringGridl. Cells [5tringGridl. Col, 0]) про Про
68. then Key: = Chr (O);
69. else // інші символи заборонені
70. key: = Chr [0);
71. end; end; end.

Допоможи проекту! Розкажи друзям про цей сайт: