Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна_9.doc
Скачиваний:
2
Добавлен:
04.05.2019
Размер:
276.99 Кб
Скачать
  1. Підготовка до виконання роботи.

    1. Підготувати бланк звіту з роботи;

    2. Опрацювати теоретичний матеріал за темою роботи;

    3. Використовуючи теоретичний матеріал дати відповіді на контрольні запитання.

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

  1. Що таке масив?

  2. Для чого можна використовувати масиви?

  3. Дайте загальний вид інструкції оголошення масиву?

  4. Напишіть приклад оголошення масиву з використанням іменованої сталої.

  5. Напишіть приклад оголошення масиву з одночасним вводом значень елементів масиву?

  6. Що таке локальний масив?

  7. Що таке ввід масиву?

  8. Що таке компонент StringGrid?

  9. Що означають властивості ColCount та RowCount?

  10. Що означає властивість Options.goEditing.

  11. Що означає подія onKeyPress?

  12. Для чого потрібен оператор DecimalSeparator (дивись ст.8).

  1. Обладнання та програмне забезпечення

    1. Персональний комп’ютер з операційною системою Windows;

    2. Програма Delphi

  1. Порядок виконання роботи

    1. Запустити програму Delphi;

    2. Реалізувати наведений приклад задачі (1) з використанням програми Delphi:

    3. Написати програму яка виведе список з 10 студентів вашої групи з використанням масиву.

    4. Переробіть задачу 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.