
- •Міністерство транспорту та зв’язку України Львівський коледж Державного університету інформаційно – комунікаційних технологій
- •Предмет “Програмування” Інструкція до Лабораторна робота №9
- •Компонента StringGrid
- •Мета роботи
- •Теоретичні відомості.
- •1 Поняття масиву
- •1.1 Оголошення масиву
- •1.2 Вивід масиву
- •1.3 Введення масиву
- •1.3.1 Використання компонента StringGrid
- •Підготовка до виконання роботи.
- •Контрольні питання
- •Обладнання та програмне забезпечення
- •Порядок виконання роботи
- •Оформлення звіту
- •Мета роботи.
- •Література:
Підготовка до виконання роботи.
Підготувати бланк звіту з роботи;
Опрацювати теоретичний матеріал за темою роботи;
Використовуючи теоретичний матеріал дати відповіді на контрольні запитання.
Контрольні питання
Що таке масив?
Для чого можна використовувати масиви?
Дайте загальний вид інструкції оголошення масиву?
Напишіть приклад оголошення масиву з використанням іменованої сталої.
Напишіть приклад оголошення масиву з одночасним вводом значень елементів масиву?
Що таке локальний масив?
Що таке ввід масиву?
Що таке компонент StringGrid?
Що означають властивості ColCount та RowCount?
Що означає властивість Options.goEditing.
Що означає подія onKeyPress?
Для чого потрібен оператор DecimalSeparator (дивись ст.8).
Обладнання та програмне забезпечення
Персональний комп’ютер з операційною системою Windows;
Програма Delphi
Порядок виконання роботи
Запустити програму Delphi;
Реалізувати наведений приклад задачі (1) з використанням програми Delphi:
Написати програму яка виведе список з 10 студентів вашої групи з використанням масиву.
Переробіть задачу 2 для вводу дійсних чисел у масив з використанням перевірки та фільтрації символів, що вводяться (задача 3), пояснити роботу програми.
Задача 1. Як приклад на рисунку 1.1 наведене діалогове вікно додатка, що демонструє ініціалізацію і процес виводу значень елементів масиву в поле мітки. Програма виводить пронумерований список футбольних команд. Варто звернути увагу, що для того щоб список команд виглядав дійсно як список, властивості Label1.AutoSize потрібно привласнити значення False (привласніть властивості Label1.AutoSize значення True і подивитеся, як буде працювати програма). Текст програми наведений у лістингу 1.1.
Рисунок 1.1. Форма і діалогове вікно додатка Виводу масиву
Лістинг 1.1. Ініціалізація і вивід масиву
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;
var
Form1: TForm1;
implementation
($R *.dfm}
const
NT = 5;
var
team: array[1..NT] of string[10] =
('Карпати','Динамо','Шахтар','Спартак','СКА')
procedure TForml.ButtonlClick(Sender: TObject);
var
st:string; // список команд
i:integer; // індекс, номер елемента масиву
begin
// формування списку для відображення у формі
for i:=1 to NT do st := st + IntToStr(i)+ ' '
+ team[i] + #13; // вивід списку Label1.Caption := st;
end;
end.
Задача 2. Як приклад використання компонента stringGrid для введення масиву розглянемо програму, що обчислює середнє арифметичне значення елементів масиву. Діалогове вікно програми наведене на рисунку 1.3. Компонент stringGrid використовується для введення масиву, компоненти Label1 і Label2 - для виведення пояснювального тексту і результату розрахунку, Button1 - для запуску процесу розрахунку.
Рисунок 1.3. Діалогове вікно програми Введення і обробка масиву
Додається компонент stringGrid у форму точно так само, як і інші компоненти. Після додавання компонента до форми потрібно виконати його настроювання відповідно до таблиці 1.2. Значення властивостей Height і width треба за допомогою миші встановити такими, щоб розмір компонента був рівний розміру рядка.
Текст програми наведений у лістингу 1.2.
Таблиця 1.2. Значення властивостей компонента StringGrid1
Властивість |
Значення |
ColCount |
5 |
FixedCols |
0 |
RowCount |
1 |
DefaultRowHeight |
24 |
Height |
24 |
DefaultColWidth |
64 |
Width |
328 |
Options . goEditing |
True |
Options . AlwaysShowEditing |
True |
Options .goTabs |
True |
Лістинг 1.2. Введення і обробка масиву цілих чисел
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: TForml ;
implementation
{$R *.dfm}
procedure TForml.ButtonlClick(Sender: TObject); var
a : array[1..5] of integer; // масив
summ: integer; // сума елементів
sr: real; // середнє арифметичне
i: integer; // індекс
begin
// введення масиву
// вважаємо, що якщо комірка порожня, то відповідний
// їй елемент масиву дорівнює нулю
for i:= 1 to 5 do
if Length(StringGridl.Cells[i-1, 0]) <>0
then a[i] := StrToInt(StringGridl.Cells[i-1,0])
else a[i] := 0;
// обробка масиву
summ := 0;
for i :=1 to 5 do
summ := summ + a[i]; sr := summ / 5;
У виводі результату Label2.Caption :=
'Сума елементів: ' + IntToStr(summ)
+ #13+ 'Середнє арифметичне: ' + FloatToStr(sr);
end;
end.
Внесення доповнень до програми.
Після пробних запусків програми виникає бажання внести зміни в процес введення масиву. Так, було б непогано, щоб курсор автоматично переходив у наступний комірка таблиці, наприклад, у результаті натискання клавіші <Enter>. Зробити це можна за допомогою процедури обробки події onKeyPress. На цю же процедуру можна покласти завдання фільтрації даних, що вводять в комірку таблиці. У нашому випадку треба дозволити введення в комірку тільки цифр.
Текст процедури обробки події OnKeyPress наведений у лістингу 1.3. Варто звернути увагу на властивість Col, що під час роботи програми містить номер стовпчика таблиці, у якій перебуває курсор. Це властивість можна також використати для переміщення курсору в потрібну комірку таблиці. Однак потрібно враховувати, що стовпчики таблиці, в тім, як і рядка, нумеруються з нуля.
Лістинг 1.3. Процедура обробки події OnKeyPress
procedure TForm1.StringGridlKeyPress(Sender: TObject;
var Key: Char);
begin
case Key of
#8,'0'..'9' : ; // цифри і клавіша <Backspace>
#13: // клавіша <Enter>
if StringGridl.Col < StringGridl.ColCount - 1
then StringGridl.Col := StringGridl.Col + 1;
else key := Chr(0); // інші символи заборонені
end;
end;
Задача 3. Якщо потрібно ввести масив дробових чисел (a: array [1. .5] of real), то процедура обробки події OnKeyPress трохи ускладниться, тому що крім цифр припустимими символами є символ-роздільник (кома або крапка - залежить від настроювання Windows) і мінус. З метою забезпечення деякої дружності програми стосовно користувача можна застосувати трюк: підмінити невірний роздільник, що вводить користувачем, вірним. Визначити, який символ-роздільник допустимо в поточному настроюванні Windows, можна, звернувшись до глобальної змінної Decimalseparator.
У лістингу 1.4 наведений текст модуля додатка введення і обробки масиву дробових чисел. Процедура обробки події OnKeyPress забезпечує введення в комірку таблиці тільки припустимих при записі дробового числа символів.
Лістинг 1.4. Введення і обробка масиву дробових чисел
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 Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ButtonlClick(Sender: TObject);
var
a : array[1..5] of real; // масив
suram: real; // сума елементів
sr: real; // середнє арифметичне
i: integer; // індекс
begin
// введення масиву
// вважаємо, що якщо комірка порожня, то відповідний
// їй елемент масиву дорівнює нулю
for i:= 1 to 5 do
if Length(StringGridl.Cells[i-l,0])<>0
then a[i] := StrToFloat(StringGridl.Cells[i-1, 0]) else a[i] := 0;
// обробка масиву
summ := 0;
for i :=1 to 5 do
summ := summ + a[i]; sr := summ / 5;
// виведення результату
Label2.Caption :=
' Сума елементів: ' + FloatToStr(summ)
+ #13+ ' Середнє арифметичне: ' + FloatToStr(sr); end;
'/ Функція забезпечує введення в комірки тільки дозволені символів
procedure TForm1.StringGridlKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
#8,'0'..'9' : ; // цифри і <Backspace>
#13: // клавіша <Enter>
if StringGridl.Col < StringGridl.ColCount - 1
then StringGridl.Col := StringGridl.Col + 1; '.',',':
// роздільник цілої і дробової частин числа
begin
if Key <> DecimalSeparator then
Key := DecimalSeparator; // замінимо роздільник
// на припустимий
if Pos(StringGridl.Cells[StringGridl.Col,0],
DecimalSeparator) <> 0
then Key := Chr(O); // заборона введення іншого
// роздільника end;
' -' : // мінус можна ввести тільки першим символом,
// т. е. коли комірка порожня
if Length(StringGrid1.Cells[StringGrid1.Col, 0]) <>0 then
Key := Chr(0) ;
else // інші символи заборонені
key := Chr(0);
end;
end;
end.