Головна

Interface | графіка | Практична робота № 27 | Практична робота № 28 | лістинг підпрограми | переміщення малюнка | Then begin | побудова графіка | Практична робота № 32 | Практична робота № 36 |

© um.co.ua - учбові матеріали та реферати

Висновок табличних даних

  1. I. Інтерпретація даних за шкалами термінальних цінностей
  2. II. Інтерпретація даних за шкалами життєвих сфер
  3. II. Умови і порядок обробки персональних даних у зв'язку з реалізацією службових або трудових відносин
  4. III. висновок
  5. IV. Умови і порядок обробки персональних даних, необхідних у зв'язку з наданням державних послуг і виконанням державних функцій
  6. IX. Розгляд запитів суб'єктів персональних даних або їх представників
  7. V. Порядок обробки персональних даних в автоматизованих інформаційних системах

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

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

 малюнок 53


1. Додати на форму сітку - компонент StringGrid. Цей компонент служить для введення і виведення табличних даних.

2. Необхідно ввести дані і описати подію реагування на їх введення. У властивості Options встановіть пункт Editing, інакше сітка буде доступною тільки для читання. Тепер при запуску програми можна вводити текст.

3. Натиснувши мишкою в інспектор об'єктів, описати обробник події OnSelectCell, яке виникає, коли користувач вибирає будь-яку осередок для редагування.

4. Тепер при запуску програми і виборі комірки в заголовку форми відображається інформація про стовпці і рядку введення.

5. Таким чином, в розділі uses виникла посилання на модуль Grids, в якому описані компоненти сіток. В описі класу форми додалася змінна - посилання на компонент сітки, а також опис методу - обробника події. Сам обробник описаний вже в розділі implementation.

6. Обробити подія, що виникає, коли користувач намагається виділити якусь клітинку.

procedure Tform1.StringGrid1SelectCell (Sender: Tobject; Acol, Arow: Integer;

var CanSelect: Boolean);

Begin

Caption: = 'Виділена клітина (' + IntToStr (Acol) + ':' + IntToStr (Arow) + ')';

End;

 Як параметри оброблювач одержує (крім Sender) номер стовпчика, номер рядка і змінну CanSelect, яку можна змінити всередині обробника, так як вона передається як var.

 малюнок 54


Можна, наприклад, заборонити виділення осередків третього стовпчика. Для цього вставте в цей обробник ще рядок: CanSelect: = (Acol <> 3);

В цьому випадку CanSelect буде дорівнює false, якщо Acol = 3.

7. Налаштувати сітку залежно від значення констант, які треба оголосити в interface. Тепер при запуску програми сітка має розмір, заданий в константі, і виглядає значно акуратніше. Якщо змінити значення константи, то при запуску і розмір сітки буде відповідним.

8. Встановити розмір сітки відповідно до значення констант Num і сSize, оголошених в interface:

const Num = 4;
 cSize = 30;

...

procedure Tform1.FormCreate (Sender: Tobject);
begin
 .DefaultColWidth: = CSize;
 MyGrid.DefaultRowHeight: = cSize;
 MyGrid.ColCount: = Num;
 MyGrid.RowCount: = Num;
 MyGrid.Width: = Num * (cSize + 1) + 3;
 MyGrid.Height: = Num * (cSize + 1) + 3;
 MyGrid.Font.Size: = cSize div 2;
end;

 малюнок 55


У наведеному ділянці коду змінюються ширина і висота сітки, встановлені за замовчуванням, а також кількість рядків і стовпців сітки. Додавання одиниці до ширини кожного осередку пов'язано з наявністю ліній між осередками, а додавання трійки до всієї суми - наявністю бордюру навколо сітки. В останньому рядку встановлюється відповідний величині клітини розмір шрифту.

9. Для розрахунку суми по стовпцях і рядках чисел, що вводяться написати власну процедуру і дві функції.

Функції будуть розраховувати суму в рядку і стовпці, отримуючи їх номер в якості параметра. Процедура буде в циклі викликати ці функції і відповідним чином заповнювати клітини.

Тепер треба створити обробник для натискання на саму форму і описати в ньому виклик розрахунку. Власна процедура коштує в коді раніше, ніж обробник, з якого вона викликається. Коли описується власна процедура, потрібно звертатися до компонентів через форму.

При запуску програми потрібно ввести числа в сітку і клікнути на саму форму.

Function ColSum (n: integer): integer;
var
 i: integer;
begin
 Result: = 0;
for I: = 1 to Num - 1 do Result: = Result + StrToInt (Form1.MyGrid.Cells [n, i]);
end;
functionRowSum (n: integer): integer;
var
 i: integer;
begin
 Result: = 0;
for I: = 1to Num - 1 do Result: = Result + StrToInt (Form1.MyGrid.Cells [I, n]);
end;

procedure Calculate;
var i: integer;
begin
forI: = 1 to Num - 1do
begin
 Form1.MyGrid.Cells [I, 0]: = IntToStr (ColSum (i));
 Form1.MyGrid.Cells [0, i]: = IntToStr (RowSum (i));
end;
end;

У даній програмі використовується властивість Cells, компонента сітки. Ця властивість має тип двовимірного масиву рядків. Рахунок в цьому масиві починається з нуля. Фіксовані (сірі) клітини, з точки зору індексування масиву, нічим не відрізняються від інших. У нашому випадку фіксовані перший рядок і перший стовпець (в масиві вони мають відповідні нульові координати). Тому при розрахунку суми проходять від 1 (а не від 0) до Num - 1 (при індексуванні з нуля останній стовпець / рядок мають, зрозуміло, номер Num - 1).

Однак, якщо станеться введення якої-небудь літери, відразу виникне виняткова ситуація. Вона, очевидно, виникає через неможливість перекладу букви в число в функції StrToInt. Якщо небажано, щоб при виникненні виняткової ситуації програма в Delphi переходила в режим налагодження, можна відключити прапорець Menu => Tools => Debugger Options => Language Exceptions => Stop on Delphi Exceptions. Тепер програма буде виконуватися так, як якщо б вона виконувалася з-під Windows. Тепер кожен раз, коли вводиться нечислової символ, програма не зупиняється, а тільки з'являється стандартне вікно Windows з повідомленням про помилку.

За допомогою обробки винятків можна уникнути появи цього вікна. Для цього треба додати в функцію конструкцію try..except. Таким чином «небезпечна» команда (або цілий блок) поміщається всередину конструкції try..except..end або try..finally..end:

function StrToVal (s: string): integer;
begin
if S = '' then Result: = 0 else
try
 Result: = StrToInt (s);
except
 Result: = 0;
 Form1.Caption: = 'Вводити треба числа!';
end;
end;

Якщо виникає виняткова ситуація, тобто введено нечислове значення, вважається, що введений нуль, а також виводиться повідомлення про це користувачеві. Ще потрібно додати висновок інформації, що все в порядку. А також видалити код всередині обробника Click форми. В результаті, якщо введено неправильне значення, то вікно помилки не з'являється, а в Caption форми виводиться нагадування.



Interface | Практична робота № 34