C _Учебник_МОНУ
.pdf
|
|
Масиви в С++ |
|
189 |
|
|
|
|
Таблиця 5.1 |
|
|
|
|
Основні властивості компонента StringGrid |
|
|
|
|
|
|
|
|
|
|
|
|
Значення |
Нові |
|
|
Властивість |
Опис |
за замов- |
значен- |
|
|
|
|
чуванням |
ня |
|
RowCount |
Кількість рядків |
5 |
6 |
|
|
ColCount |
Кількість стовпчиків |
5 |
4 |
|
|
Cells |
Програмно доступна властивість для звертання |
|
|
|
|
|
|
до комірок таблиці. Приміром, Cells[j][i] – |
|
|
|
|
|
це комірка в i-тому рядку j-того стовпчика |
|
|
|
|
|
(нумерація розпочинається від нуля) |
|
|
|
FixedCols |
Кількість фіксованих стовпчиків |
1 |
1 |
|
|
|
|
(для заголовка рядків) |
|
|
|
FixedRows |
Кількість фіксованих рядків |
1 |
1 |
|
|
|
|
(для заголовка стовпчиків) |
|
|
|
Options. |
Ознака дозволу на редагування |
false |
true |
|
|
|
goEditing |
змісту комірок |
|
|
|
Options. |
Ознака дозволу на переміщення |
false |
true |
|
|
|
goTabs |
таблицею за допомогою <Tab> |
|
|
|
Options. |
Ознака дозволу на змінення ширини стовпчиків |
false |
true |
|
|
|
goColSizing |
|
|
|
|
|
|
|
|
|
|
Options. |
Ознака дозволу на змінення висоти рядків |
false |
true |
|
|
|
goRowSizing |
|
|
|
|
|
|
|
|
|
|
Приклад створення заголовків таблиці в комірках фіксованих рядка та стовпчика (з індексом 0) під час створення форми.
void __fastcall TForm1::FormCreate(TObject *Sender) { for(int i=1; i<=5; i++)
StringGrid1->Cells[0][i] = IntToStr(i) + "-й рядок"; for(int j=1; j<=3; j++)
StringGrid1->Cells[j][0] = IntToStr(j) + "-й стовпчик";
}
До прикладу введення матриці float В[5][3] з комірок StringGrid1
for(int i=0; i<5; i++) for(int j=0; j<3; j++)
B[i][j]=StrToFloat(StringGrid1->Cells[j+1][i+1]);
можна долучити перевірку на незаповнені комірки:
for(int i=0; i<5; i++) for(int j=0; j<3; j++)
if(StringGrid1->Cells[j+1][i+1] != "") B[i][j]=StrToFloat(StringGrid1->Cells[j+1][i+1]);
else
{ ShowMessage("Заповніть ["+IntToStr(i+1) + ","
+ IntToStr(j+1) + "] елемент");
break;
}
190 |
Розділ 5 |
Введення матриці z розміром m n у консолі:
for(int i=0; i<m; i++)
for(int j=0; j<n; j++) cin >> z[i][j];
Для виведення двовимірного масиву a[4][5] у консолі у вигляді матриці елементи слід розташувати у рівні стовпчики. Це можна зробити за допомогою маніпулятора setw(), який задає ширину виведення змінної у cout, (аналогічно до табуляції). Для використання маніпуляторів треба долучити до програми заголовний файл iomanip.h:
#include <iostream.h> #include <iomanip.h> int main()
{int a[4][5];
for(int i=0; i<4; i++)
for(int j=0; j<5; j++) a[i][j]=random(15)-5; for(int i=0; i<4; i++)
{ for(int j=0; j<5; j++) |
// Аналогічне виведення рядка |
cout<<setw(5)<<a[i][j];// з табуляцією: cout<<"\t"<<a[i][j]; |
|
cout<<endl; |
//переведення курсора на новий рядок |
} |
|
cin.get(); |
|
return 0; |
|
}
5.3.3Програмування базових алгоритмів опрацювання двовимірних масивів
Приклад 5.13 Скласти схему алгоритму і розробити проект для введення матриці дійсних чисел розмірністю 3 5 і віднайти максимальний елемент матриці та його індекси.
Розв‟язок. На формі розташовано компоненти StringGrid1, Edit1,
Button1, Button2, Button3, Label1 та Label2, а їхні нові властивості зазначено в таблиці.
Компоненти |
Властивості |
Нові значення |
StringGrid1 |
RowCount |
4 |
StringGrid1 |
ColCount |
6 |
|
|
|
StringGrid1 |
Options.goEditing |
true |
StringGrid1 |
Options.goTabs |
true |
StringGrid1 |
Name |
SG1 |
|
|
|
Button1 |
Caption |
Максимальний елемента його індекси |
Button2 |
Caption |
Очищення |
Button3 |
Caption |
Вихід |
192 Розділ 5
Приклад 5.14 Скласти схему алгоритму і розробити проект для введення матриці цілих чисел розмірністю 5 7 та обчислення елементів вектора сум від‟ємних елементів стовпчиків матриці.
Розв‟язок. Для заповнення вихідної матриці слід передбачити можливість заповнення комірок випадковими числами. Користувач може скористатись такою можливістю чи то заповнити комірки самостійно. Випадкові числа формуємо за допомогою функції генератора випадкових чисел random(N), яка міститься в бібліотеці <stdlib.h>. Функція random(N) генерує випадкове ціле додатне число в діапазоні від 0 до N – 1. Щоб формувались і від‟ємні числа, використаємо конструкцію (50 – random(100)). Функція randomize() ініціалізує генератор випадкових чисел (див. підрозд. 3.7).
Нові властивості компонента StringGrid1, розташованого на формі, наведено нижче в таблиці.
|
|
|
|
|
Початок |
||||||
Компоненти |
Властивості |
Нові значення |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
||
StringGrid1 |
ColCount |
7 |
|
|
|
|
|
|
|
|
|
|
|
i 0,4 |
|||||||||
StringGrid1 |
RowCount |
5 |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
||||
StringGrid1 |
Options.goEditing |
true |
|
|
|
|
|
|
|
|
|
|
|
j 0,6 |
|||||||||
StringGrid1 |
Options.goTabs |
true |
|
|
Введення |
||||||
StringGrid1 |
FixedCols |
0 |
|
|
|||||||
|
|
|
|
Ai,j |
|||||||
|
|
|
|
|
|
|
|||||
StringGrid1 |
FixedRows |
0 |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
StringGrid1 |
DefaultColWidth |
40 |
|
|
|
|
|
|
|
|
|
StringGrid1 |
Name |
SG1 |
|
|
|
|
|
|
|
|
|
|
|
j 0,6 |
|||||||||
|
|
|
|
|
|||||||
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Хj = 0 |
||||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
i 0,4 |
||||||
|
|
|
Ні |
Aij<0 |
|||||||
|
|
|
|
|
Так
Xj= Xj +Aij
Виведення
Xj
Кінець
Масив A та змінні i, j оголошено перед усіма функціями глобально, оскільки посилання до цих об‟єктів є в різних функціях.
Тексти програм для усіх кнопок:
int A[5][7], i, j;
void __fastcall TForm1::Button1Click(TObject *Sender) { randomize();// Заповнити випадковими числами