3. Компонент StringGrid.
Компонент StringGrid розташований на стрінці Additional палітри компонентів. Він призначений для створення таблиць, в комірках яких можуть бути розташовані довільні текстові рядки. Така таблиця має 2 частини – фіксовану і робочу. Фіксована частина призначена для показу заголовків рядків та стовбчиків і для ручного керування їх розмірами. Робоча частина - це вся інша таблиця. Кількість рядків та стовбчиків робочої частини може задаватись як під час створення таблиці на формі, так і створюватись програмно. Якщо кількість рядків і стовбчиків робочої частини досить велика, робоча частина може не вміщуватись у вікно компонента, і тоді у компоненті автоматично з’являються смуги прокрутки.
Даний компонент має багато властивостей, деякі з яких ми вже вивчали розглядаючи інші компоненти (наприклад: BorderStyle, ScrollBars), деякі є специфічними для StringGrid. Розглянемо деякі з цих властивостей:
Назва властивості |
Значення властивості |
Col : LongInt |
Вміщує номер стовбця сфокусованої комірки |
Row : LongInt |
Вміщує номер рядка сфокусованої комірки |
Cells [ACol, ARow : LongInt] : String |
Визначає вміст комірки з координатами ACol, Arow |
ColCount : LongInt |
Вміщує кількість стовбців таблиці |
RowCount : LongInt |
Вміщує кількість рядків таблиці |
Cols [Index : LongInt]: String |
Вміщує всі комірки колонки з індексом Index |
Rows [Index : LongInt]: String |
Вміщує всі комірки рядка з індексом Index |
FixedCols : Integer |
Визначає кількість стовбців фіксованої зони |
FixedRows : Integer |
Визначає кількість рядків фіксованої зони |
Option |
Вміщує параметри таблиці: goEditing – дозволяє (true) або забороняє (false) редагування комірки; goTabs – дозволяє обходити комірки за допомогою клавіші <Tab> goColSizing – дозволяє змінювати ширину стовбців goRowSizing – дозволяє змінювати висоту рядків |
4. Найпростіші задачі.
Задача 1. Створити одновимірний масив з N дійсних чисел, знайти суму його елементів, а також визначити, чи є в ньому елементи, рівні числу Т. Число Т повинно вводитись з клавіатури.
Розв’язування.
Перелік використаних компонентів та їх властивості:
Компонент |
Властивість |
Значення |
Form1 |
Caption |
Додавання та пошук у одновимірному масиві |
Label1 |
Caption |
Текст відсутній |
Memo1 |
Lines |
Текст відсутній |
Memo1 |
ScrollBars |
SsVertical |
Label2 |
Caption |
Введіть число Т : |
Edit1 |
Text |
Текст відсутній |
Label3 |
Caption |
Сума елементів масива: |
Edit2 |
Text |
Текст відсутній |
Label4 |
Caption |
Кількість елементів, рівних числу Т: |
Edit3 |
Text |
Текст відсутній |
Button1 |
Caption |
Розв'язок |
Button2 |
Caption |
Новий розв'язок |
Button3 |
Caption |
Вихід |
Вигляд форми з поміщеними на ній компонентами:
Текст програми :
{Об’явлення константи N – кількості елементів масива}
const n=12;
{Кнопка “Вихід”}
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
{Кнопка “Розв’язок”}
procedure TForm1.Button1Click(Sender: TObject);
var
i,k:longint;
a:array[1..n] of real;
s,t:real;
s1:string;
begin
s:=0;
k:=0;
t:=strtofloat(edit1.Text);
for i:=1 to n do
begin
a[i]:=strtofloat(memo1.Lines[i-1]);
s:=s+a[i];
if t=a[i] then k:=k+1;
end;
str(s:5:2,s1);
edit2.Text:=s1;
edit3.text:=inttostr(k);
end;
{Оброблювач події встановлення початкових значень у працюючій програмі}
procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Caption:='Введіть '+inttostr(n)+' дійсних чисел:'
end;
{Кнопка “Новий розв’язок”}
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Lines.Clear;
edit1.clear;
edit2.Clear;
edit3.Clear;
memo1.SetFocus;
end;
Результат роботи програми:
Задача 2. Створити двовимірний масив цілих чисел розміром 3 х 4, знайти суми елементів рядків масиву, визначити середнє арифметичне елементів масиву, а також кількість елементів масиву, значення яких більше середнього значення.
Розв’язування.
Перелік використаних компонентів та їх властивості:
Компонент |
Властивість |
Значення |
Form1 |
Caption |
Двовимірний масив |
Label1 |
Caption |
Вхідний масив: |
StringGrid1 |
FixedCols |
1 |
StringGrid1 |
FixedRows |
1 |
StringGrid1 |
ColCount |
5 |
StringGrid1 |
RowCount |
4 |
StringGrid1 |
Options.goTabs |
true |
StringGrid1 |
Options.goEditing |
true |
Label2 |
Caption |
Суми елементів рядків: |
StringGrid2 |
FixedCols |
0 |
StringGrid2 |
FixedRows |
1 |
StringGrid2 |
ColCount |
3 |
StringGrid2 |
RowCount |
2 |
Label3 |
Caption |
Сума елементів масива: |
Edit1 |
Text |
Текст відсутній |
Label4 |
Caption |
Кількість елементів, рівних числу Т: |
Edit2 |
Text |
Текст відсутній |
Button1 |
Caption |
Розв'язок |
Button2 |
Caption |
Новий розв'язок |
Button3 |
Caption |
Вихід |
Вигляд форми з поміщеними на ній компонентами:
Текст програми:
{Об’явлення змінних i, j, що використовуються в декількох процедурах}
var
i,j:integer;
{Кнопка “Вихід”}
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
{Кнопка “Новий розв’язок”}
procedure TForm1.Button2Click(Sender: TObject);
begin
for i:=1 to 3 do
for j:=1 to 4 do StringGrid1.Cells[j,i]:='';
for i:=1 to 3 do StringGrid2.Cells[i-1,1]:='';
edit1.Clear;
edit2.Clear;
end;
{Кнопка “Розв’язок”}
procedure TForm1.Button1Click(Sender: TObject);
var
s:array[1..3] of integer;
a:array[1..3,1..4] of integer;
sa:real;
st:string;
k:longint;
begin
for i:=1 to 3 do
begin
s[i]:=0;
for j:=1 to 4 do
begin
a[i,j]:=strtoint(stringgrid1.Cells[j,i]);
s[i]:=s[i]+a[i,j];
end;
stringgrid2.Cells[i-1,1]:=inttostr(s[i]);
end;
sa:=0;
for i:=1 to 3 do
for j:=1 to 4 do sa:=sa+a[i,j];
sa:=sa/12;
str(sa:5:1,st);
edit1.Text:=st;
k:=0;
for i:=1 to 3 do
for j:=1 to 4 do
if a[i,j]>sa then k:=k+1;
edit2.text:=inttostr(k);
end;
{Оброблювач події встановлення початкових значень у працюючій програмі}
procedure TForm1.FormCreate(Sender: TObject);
begin
for i:=1 to 3 do stringgrid1.Cells[0,i]:=inttostr(i)+'-й рядок';
for i:=1 to 4 do stringgrid1.Cells[i,0]:=inttostr(i)+'-й стовбчик';
for i:=1 to 3 do stringgrid2.Cells[i-1,0]:=inttostr(i)+'-й рядок';
end;
Результат роботи програми:
