- •1. Методичні вказівки до лабораторної роботи №1
- •1.1. Етапи створення віконної прикладної програми
- •1.2. Структура проекту Delphi
- •1.3. Приклад створення простої віконної прикладної програми
- •1.4. Теоретичні запитання
- •1.5. Завдання до лабораторної роботи №1.
- •2. Методичні вказівки до лабораторної роботи №2
- •2.1. Етапи створення віконної прикладної програми табулювання функції
- •2.2. Приклад створення віконної прикладної програми табулювання функції
- •2.3. Теоретичні запитання
- •Етапи створення віконної прикладної програми табулювання функції.
- •2.4. Завдання до лабораторної роботи №2.
- •3. Методичні вказівки до лабораторної роботи №3
- •3.1. Етапи створення віконної прикладної програми роботи з таблицями рядків StringGrid
- •3.2. Теоретичні запитання
- •3.3. Завдання до лабораторної роботи №3. Робота зі структурами даних типу масив
- •4. Методичні вказівки до лабораторної роботи №4
- •4.1. Основні поняття об'єктно-орієнтованого програмування. Робота з класами
- •4.2. Приклад. Об'єктно-орієнтована реалізація комплексних чисел
- •4.3. Завдання до лабораторної роботи №4. Створення об’єктного типу - клас.
- •4.4. Завдання до лабораторної роботи №5. Класи. Прості властивості та властивості-масиви
- •4.5. Завдання до лабораторної роботи №6. Класи. Спадкування. Поліморфізм
- •4.6. Теоретичні запитання
3. Методичні вказівки до лабораторної роботи №3
3.1. Етапи створення віконної прикладної програми роботи з таблицями рядків StringGrid
Створити проект роботи з масивами, який використовує стандартний об'єкт StringGrid, для обчислення суми векторів Х и У розмірністю n=6, m=4, відповідно. Результат обчислення – матриця розмірністю nm.
Рішення
1. Для створення нового проекту можна скористатися командою головного меню File New Application або, якщо ви тільки що завантажили середовище Delphi, можна, відразу приступати, до створення нового проекту.
2. Відмовтеся від можливості змінювати вікна програми. Змінить значення властивості форми BorderStyle на bsDilog. При запуску програми зверніть увагу на відсутність кнопок для мінімізації, максимізації вікна. Розглянете інші властивості і чим вони відрізняються.
3. Властивості Caption для Form1 задайте значення – Работа c массивами (Робота з масивами).
4. З вкладки Additional на Form1 помістимо три компоненти StringGrid.
У таблиці StringGrid може знаходитися довільне число рядків і стовпців. Якщо зафіксувати необхідна кількість перших рядків і стовпців, то можна задати заголовки рядків і стовпців, що постійно присутні у вікні компонента, у тому числі при горизонтальному і вертикальному скролінгу.
На перетинанні рядків і стовпців знаходяться комірки. Кожна комірка може містити символьний рядок або довільний об'єкт, асоційований з коміркою. Найчастіше таким об'єктом є деякий рисунок. Якщо для комірок задано режим редагування, то на етапі виконання програми дозволяється вводити і редагувати, дані які знаходяться в комірці.
Нумерація рядків і стовпців таблиці починається з нуля. Координати кожної комірки таблиці задаються парою чисел, перше з яких є номером стовпця, а друге – номером рядка. Наприклад, комірка Cells[3, 5] розташована в четвертому стовпці і шостому рядку.
Властивість |
Опис властивості |
Name |
Ім'я компонента. Використовується в програмі для доступу до властивостей компонента |
Cells |
Відповідній таблиці двовимірний строковий масив. Якщо рядки і стовпці таблиці нумерувати з нуля, то комірці (Cells) таблиці, що знаходиться на перетинанні i-й стовпчика і j-й рядка відповідає Cells[i,j] елемент масиву |
ColCount |
Задає число стовпців у таблиці |
RowCount |
Задає число рядків у таблиці |
FixedCols |
Задає число фіксованих стовпців таблиці. За замовчуванням задається один фіксований стовпець |
FixedRows |
Задає число фіксованих рядків таблиці. За замовчуванням задається один фіксований рядок |
Options |
Властивість є множиною, що визначає багато властивостей таблиці |
Options.goEditing |
Ознака припустимого редагування вмісту комірок таблиці |
Options.goColSizing, Options.goRowSizing |
Можливість для користувача змінювати за допомогою миші розміри стовпців і рядків |
Задамо наступні значення
Властивість |
Значення |
||
StringGrid1 |
StringGrid2 |
StringGrid3 |
|
Name |
SG1 |
SG2 |
SG3 |
ColCount |
7 |
5 |
5 |
RowCount |
2 |
2 |
7 |
FixedCols |
1 |
1 |
1 |
FixedRows |
1 |
1 |
1 |
DefaultColWidth |
50 |
50 |
50 |
Options.goEditing (можливість редагувати) |
True (мається) |
True (мається) |
False (відсутня) |
Зауваження. Щоб відкрити список властивості Options (Параметри) об'єкта, треба двічі клацнути на цьому слові у вікні Object Inspector даного об'єкта.
5. З вкладки Standard на Form1 помістимо два компоненти Button. Властивості Caption для Button1 задайте значення – &Вычислить (&Обчислити). Властивості Caption для Button2 задайте значення – &Новое (&Нове).
Зауваження. Символ & у заголовку кнопки вказує на те, що цю кнопку можна натиснути також за допомогою «гарячої» комбінації клавіш Alt + Shift+ буква заголовка, перед якою стоїть цей символ (тобто, наприклад, Alt +Shift + В).
6. З вкладки Additional на Form1 перенесемо командну кнопку BitBtn.
Компонент BitBtn – кнопка з рисунком і визначеним типом дії. Стандартний набір файлів з малюнками для кнопок знаходиться в папці C:\Program Files\Borland\Images\Buttons. Цей компонент має такі властивості:
Властивість |
Опис властивості |
Приклади значень |
Glyph |
Рисунок з файлу на кнопці |
Адреса файлу задається в діалоговому вікні |
Kind |
Тип стандартної дії |
bkClose (закриває вікно), bkCancel (кнопка "Скасувати" діалогового вікна), bkYes (кнопка «Так»), bkNo (кнопка "Ні" діалогового вікна), bkHelp (кнопка «Допомога») і інші |
Якщо задати стандартну дію, то дану кнопку програмувати не потрібно. Задайте наступні властивості для вставленого об'єкта:
Властивість |
Значення |
Kind |
bkClose |
Caption |
& Завершить (& 3авершити) |
7. Збережемо проект в окремій папці.
8. Комірки першого, зафіксованого, рядка і першого, зафіксованого, стовпця таблиці використовуються як заголовки колонок і рядків таблиць. Під час створення (проектування) форми додатка установити значення елементів масиву Cells не можна, тому що елементи масиву доступні тільки під час роботи програми. Тому значення елементів масиву Cells, що відповідають першому рядкові і першому стовпцеві таблиць, установлює процедура обробки події onActivate, що відбувається під час обробки форми додатка. Крім цього процедура вписує в перші рядки і перші стовпці таблиць їхні заголовки. Запрограмуємо процедуру onActivate.
Для того щоб запрограмувати процедуру обробки події onActivate необхідно щоб у Object Inspector у списку компонентів поточної форми стояв напис:
Form1
|
TForm1
|
Тоді на вкладці Events у стовпці назв подій знаходимо подію onActivate (див Рис. 10). Цій стандартній події відповідає назва методу (FormActivate), що з'явиться після подвійного щиглика миші в правому стовпці (стовпець назв оброблювачів подій). У цей момент у вікно тексту програми додається шаблон базового коду (процедури) для цього методу. Шаблон необхідно заповнити відповідними командами.
procedure TForm1.FormActivate(Sender: TObject);
var i:byte;
begin
//Для SG1
//Записуємо символ X у комірку що знаходиться
//у першому стовпчику і першому рядку – Cells [0,0]
SG1.Cells[0,0]:=' X ';
//Комірка Cells[0,l] указує на кількість рядків,
//таким чином масив одновимірний
SG1.Cells[0,1]:='Row N 1';
//Заповнюються заголовки стовпців
For і:=1 to SG1.ColCount-1 do
SG1.Cells[і,0]:='Col N'+IntToStr(і);
//Для SG2
SG2.Cells[0,0]:=' Y ';
SG2.Cells[0,1]:='Row N 1';
For i:=1 to SG2.ColCount-1 do
SG2.Cells[і,0]:='Col N'+IntToStr(і);
//Для SG3
SG3.Cells[0,0]:=' X+Y ';
//Заповнюються заголовки стовпців
For і:=1 to SG3.ColCount-1 do
SG3.Cells[і,0]:='Col N'+IntToStr(і);
//Заповнюються заголовки рядків
For i:=1 to SG3.RowCount-1 do
SG3.Cells[0,i]:='Row N'+IntToStr(i);
end;
9. Запрограмуємо кнопку «Вычислить» («Обчислити»).
procedure TForm1.Button1Click(Sender: TObject);
Const N=6;M=4;
var i,j:byte;
x:array [1..N]of integer;
y:array [1..M]of integer;
z:array [1..N,1..M]of integer;
begin
//Заповнюємо першу таблицю SG1 - масив Х
For і:=1 to SG1.ColCount-1 do
x[і]:=StrToInt(SG1.Cells[і,1]);
//Заповнюємо другу таблицю SG2 – масив У
For j:=1 to SG2.ColCount-1 do
y[j]:=StrToInt(SG2.Cells[j,1]);
//Обчислюємо суму двох векторів
For i:=1 to N do
For j:=1 to M do
begin
z[i,j]:=x[i]+y[j];
SG3.Cells[j,i]:=IntToStr(z[i,j]);
end;
end;
Для рішення цієї задачі можна було не використовувати проміжні масиви, а працювати прямо з комірками таблиць:
For i:=1 to SG1.ColCount-1 do
For j:=1 to SG2.ColCount-1 do
SG3.Cells[j,i]:=IntToStr(StrToInt(SG1.Cells[i,1])+
+StrToInt(SG2.Cells[j,1]));
10. Запрограмуємо кнопку «Новое» («Нове»). Необхідно очистити комірки всіх трьох таблиць.
procedure TForm1.Button2Click(Sender: TObject);
var i,j:byte;
begin
with SG1 do
for i:=1 to ColCount-1 do Cells[i,1]:=' ';
with SG2 do
for i:=1 to ColCount-1 do Cells[i,1]:=' ';
with SG3 do
for i:=1 to RowCount-1 do
for j:=1 to ColCount-1 do Cells[j,i]:=' ';end;
Результат
роботи проекту приведений на рис. 11.
Рис. 11. Результат роботи проекту «Робота з масивами»
