
- •Лабораторна робота № 1.
- •Лабораторна робота № 2.
- •Лабораторна робота № 3.
- •2) Зберегти проект в свою робочу папку, виконав команду меню File / Save Project As. Буде збережено декілька файлів проекту.
- •Лабораторна робота № 4.
- •Лабораторна робота № 5.
- •Лабораторна робота № 6.
- •10) Зберегти проект в свою робочу папку, виконав команду меню File / Save Project As. Буде збережено декілька файлів проекту.
- •Лабораторна робота № 7. Тема: Використання компоненту StringGrid для обробки масивів
- •Лабораторна робота № 8.
- •2) Зберегти проект в свою робочу папку, виконав команду меню File / Save Project As. Буде збережено декілька файлів проекту.
Лабораторна робота № 7. Тема: Використання компоненту StringGrid для обробки масивів
Мета роботи: Придбати практичні навички роботи з багатовимірними масивами в C++ Builder; вивчення властивостей та методів компонента StringGrid.
Навчальний приклад:
Помножити
на
.
Рішення.
В ході обчислень були виконані наступні дії:
Множимо 1 рядок на 1 стовпець 1 • (-1) + (-2) • 23 + 3 • 4.4 + 1 • (-4.4) = -38.2
Множимо 1 рядок на 2 стовпець 1 • 2 + (-2) • (-23) + 3 • 12 + 1 • 12 = 96
Множимо 1 рядок на 3 стовпець 1 • 3 + (-2) • 1 + 3 • 1 + 1 • (-1) = 3
Множимо 2 рядок на 1 стовпець 23 • (-1) + (-23) • 23 + 1 • 4.4 + 2 • (-4.4) = -556.4
Множимо 2 рядок на 2 стовпець 23 • 2 + (-23) • (-23) + 1 • 12 + 2 • 12 = 611
Множимо 2 рядок на 3 стовпець 23 • 3 + (-23) • 1 + 1 • 1 + 2 • (-1) = 45
Множимо 3 рядок на 1 стовпець (-44) • (-1) + 12 • 23 + 0 • 4.4 + 1 • (-4.4) = 315.6
Множимо 3 рядок на 2 стовпець (-44) • 2 + 12 • (-23) + 0 • 12 + 1 • 12 = -352
Множимо 3 рядок на 3 стовпець (-44) • 3 + 12 • 1 + 0 • 1 + 1 • (-1) = -121
Приклад компоновки форми:
Рис1. Розташування компонентів StringGrid на формі
Вимоги до оформлення роботи:
1) Для роботи з матрицями (введення та виведення матриць) необхідно використовувати компонент StringGrid.
2) Матриці, що перемножуються, вводяться користувачем. Тобто таблиця StringGrid1 и StringGrid2 можна редагувати.
3) Таблиця з результатом StringGrid3 повинна бути закрита для редагування користувачем.
Рекомендації по використанню компонента StringGrid.
Компонент StringGrid являє собою таблицю, що містить рядки. Данні таблиці можуть бути тільки для читання або редагування. Таблиця може мати смуги прокрутки, причому задане число перших рядків та стовпців може бути фіксованим та не прокручуватись. Таким чином, можна задати заголовки стовпців та рядків. Кожній комірці таблиці може бути поставлена у відповідність деякий об’єкт.
Компонент
StringGrid
знаходиться
на вкладці Additional панелі компонентів.
Таблиця StringGrid складається з виділених сірим FixedCols та FixedRows - зафіксованих комірок-заголовків, та звичайних, білих комірок. Вміст Fixed комірок недоступний для редагування, та змінюється тільки програмно. Для встановлення кількості фіксованих комірок можна змінити значення властивостей FixedCols та FixedRows у вікні властивостей Object Inspector. Або змінити кількість фіксованих рядків та стовпців програмно, написав в коді програми команди
StringGrid1-> FixedCols=1; // встановлює 1 фіксований стовпець
StringGrid1-> FixedRows=1; // встановлює 1 фіксований рядок
Загальна кількість рядків та стовпців в таблиці можна встановити вручну в вікні Object Inspector, відредагувавши властивості RowCount та ColCount, а можна змінити програмно в ході виконання програмного коду, написавши наступні команди:
StringGrid1->RowCount=5 //встановлюємо загальну кіл-сть рядків рівною 5
StringGrid1->ColCount=7 // встановлюємо загальну кіл-сть стовпців рівною 7
Ці властивості доступні як для запису (при встановлюванні кількості рядків і стовпців), так і для читання (при перевірці розміру таблиці).
За багато властивостей компонента StringGrid відповідає властивість Options в Інспекторі Об’єктів. Options - це спадаючий список, що являє собою елементи даної множини. Якщо значення елемента дорівнює True, то він присутній у множині, якщо False - то ні.
Рис 2.
Властивість |
Значення |
goFixedVertLine |
Наявність вертикальних розділових смуг між "фіксованими" комірками |
goFixedHorzLine |
Наявність горизонтальних розділових смуг між "фіксованими" комірками |
goVertLine |
Наявність вертикальних розділових смуг між "звичайними" комірками |
goHorzLine |
Наявність горизонтальних розділових смуг між "звичайними" комірками |
goRangeSelect |
Можливість виділити діапазон комірок |
goDrawFocusSelected |
Розфарбування комірки з фокусом введення |
goRowSizing |
Можливість змінювати висоту рядків мишкою |
goColSizing |
Можливість змінювати ширину стовпців мишкою |
goRowMoving |
Можливість змінювати номер рядка, тобто переміщувати його, мишкою |
goColMoving |
Можливість змінювати номер стовпця, тобто переміщувати його, мишкою |
goEditing |
Можливість редагувати вміст комірки з клавіатури |
goTabs |
При значенні True фокус зміщується на наступну комірку в таблиці, False - на наступний компонент |
goRowSelect |
Виділяється весь рядок з "фокусованою" коміркою |
goAlwaysShowEditor |
При значенні True вміст комірки при отриманні фокуса зразу доступний редагуванню, False - спочатку необхідно клацнути по ній мишкою (прим.: не діє при goRowSelect=True) |
goThumbTracking |
При значенні True переміщення "бігунка" прокрутки мишкою викликає негайне переміщення комірок, False - комірки переміщуються тільки при відпусканні "бігунка" |
Як слідує з таблиці, за можливість редагувати вміст комірок з клавіатури відповідає елемент goEditing властивість-множини Options. В Інспекторі Об’єктів встановіть його значення в True. Щоб керувати цією можливістю програмно, необхідно увімкнути або вимкнути з множини даний елемент:
StringGrid1->Options<<goEditing; //Вмикаємо редагування, інші
//елементи не чіпаємо
StringGrid1->Options>>goEditing; //Вимикаємо редагування, інші
//елементи не чіпаємо
Компонент StringGrid має можливість адресації кожної окремої комірки по номеру стовпця та рядка.
Вміст комірки (i, j), де i - номер стовпця, j - номер рядка, має вигляд:
StringGrid1->Cells[i][j]
и доступно як для читання, так і для запису. Наприклад:
StringGrid1->Cells[i][j]=”Hello”; - записує слово в комірку з координатами і и j.
A=StringGrid1->Cells[i][j]; - зчитує вміст комірки з координатами і та j в змінну A.
Номера стовпців (i) та рядків (j) рахується від 0.
Виділена комірка таблиці має:
номер стовпця: StringGrid1->Col
номер рядка: StringGrid1->Row
тому вміст виділеної комірки буде адресуватись так:
S=StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row];
Комірок в таблиці, як правило, багато, и в рамках компонента видна тільки частина з них. Якщо комірки не вміщуються в таблиці, з’являються смуги прокрутки. При прокручуванні:
StringGrid1->LeftCol Номер стовпця, видимого самим лівим
StringGrid1->TopRow Номер рядка, видимого самим верхнім
StringGrid1->VisibleColCount Кількість стовпців, видимих в рамках таблиці
StringGrid1->VisibleRowCount Кількість рядків, видимих в рамках таблиці
У таблиці StringGrid також є властивість для керування розміром комірок. Для всіх комірок
DefaultRowHeight - висота рядків за замовченням
DefaultColWidth - ширина стовпців за замовченням
Ці значення ширини та висоти приймають всі нові комірки. При необхідності індивідуально встановити ширину та висоту стовпців та рядків відповідно, користуємось властивостями
RowHeights[i] - масив, що містить висоти рядків с номером i
ColWidths[i] - масив, що містить ширину стовпців с номером i
Всі ц властивості можна настроїти в оброблювачі подій OnCreate форми, так само як і надписи заголовків, що розташовані в рядках та стовпцях "фіксованої" зони таблиці. В результаті таблиця з’являється вже в "настроєному" вигляді.
Так як таблиця StringGrid, на відміну від, наприклад, компонента ListBox, не має методу для очистки вмісту відразу всіх комірок, то для видалення внесених раніше в таблицю даних приходиться очищувати кожну комірку окремо. Здійснюється це двома вкладеними циклами for, що пробігають по стовпцям та рядкам:
int i, j;
{
for (i=1;i<StringGrid1->RowCount;i++) //Заголовків рядків не торкаємось
for (j=1;j<StringGrid1->ColCount;j++) //Заголовків стовпців не торкаємось
StringGrid1->Cells[j][i]='';
}
Хотя, есть метод для очищення вмісту цілого стовпця або рядка:
StringGrid1->Cols[i]->Clear(); //Очищується стовпець з номером i
StringGrid1->Rows[i]->Clear(); //Очищується рядок з номером i
Очевидно, очищення цим методом здійснюється набагато швидше. Але будуть очищені й комірки фіксованої зони, що містять, наприклад, назви рядків та стовпців, які видаляти не треба. Їх після очистки необхідно просто "написати" заново, наочно це маніпулювання непомітне. Для очистки всієї таблиці достатньо послідовно очистити тільки рядки або тільки стовпці:
int i, j;
{
for (i=1;i<StringGrid1->RowCount;i++) //Заголовків стовпців не торкаємось
//цикл від 1
{
StringGrid1->Rows[i]->Clear();
StringGrid1->Cells[0][i]="Заголовок строки i";
}
}
Індивідуальні завдання:
Дано дві квадратні матриці А та В. Побудувати третю матрицю С,елементи якої розраховуються за наступними правилами:
С=А+5*В;
С=(А+В)*3;
С=4*А-В;
С=А+ВТ ;
С=АТ+2*В;
С=1/3*А+ ВТ ;
С=А*В+В*А;
С=В*А-6;
С=(А-6)*(В+1);
С= (АТ+2)*3.