Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_нов_Ci.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
6.9 Mб
Скачать

Лабораторна робота № 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";

}

}

Індивідуальні завдання:

Дано дві квадратні матриці А та В. Побудувати третю матрицю С,елементи якої розраховуються за наступними правилами:

  1. С=А+5*В;

  2. С=(А+В)*3;

  3. С=4*А-В;

  4. С=А+ВТ ;

  5. С=АТ+2*В;

  6. С=1/3*А+ ВТ ;

  7. С=А*В+В*А;

  8. С=В*А-6;

  9. С=(А-6)*(В+1);

  10. С= (АТ+2)*3.