Настройка компонента TstringGrid

Для установки компонета TStringGrid на форму необходимо на странице Additional меню компонентов щелкнуть мышью по пиктограмме. После этого щелкните мышью в нужном месте формы. Захватывая кромки компонента, отрегулируйте его размер. В инспекторе объектов значения свойств ColCount и RowCount установите 2, а FixedCols и FixedRows установите 1. Так как компоненты StringGrid2 и StringGrid3 имеют только один столбец, то у них: ColCount=1, RowCount=2, FixedCols=0 и FixedRows=1. По умолчанию в компонент TStringGrid запрещен ввод информации с клавиатуры, поэтому необходимо свойство Options goEditing для компонентов StringGrid1 и StringGrid2 установить в положение True.

Текст программы приведен ниже.

 

Unit Rab_4;

Interface

Uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls, Grids;

 

type

TInputForm = class(TForm)

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

Procedure FormCreate(Sender: TObject);

Procedure Button1Click(Sender: TObject);

Procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

const

Nmax = 10; // Максимальная размерность массива

type

Mas1 = array[1..Nmax] of Extended; // Объявление типа одномерного массива

Mas2 = array[1..Nmax, 1..Nmax] of Extended; // Объявление типа двумерного массива

var

InputForm: TInputForm;

A : Mas2; // Объявление двумерного массива

B, Y : Mas1; // Объявление одномерных массивов

N, i, j : integer;

 

Implementation

 

{$R *.DFM}

 

Procedure TInputForm.FormCreate(Sender: TObject);

begin

N := 3; // Размерность массива

Edit1.Text := FloatToStr(N);

// Задание числа строк и столбцов

StringGrid1.ColCount := N + 1;

StringGrid1.RowCount := N + 1;

StringGrid2.RowCount := N + 1;

StringGrid3.RowCount := N + 1;

// Ввод в левую верхнюю ячейку таблицы названия массива

StringGrid1.Cells[0, 0] := 'Массив A';

StringGrid2.Cells[0, 0] := 'Массив B';

StringGrid3.Cells[0, 0] := 'Массив Y';

// Заполнение верхнего и левого столбцов поясняющими подписями

for i:=1 to N do

begin

StringGrid1.Cells[0, i] := 'i='+ IntToStr(i);

StringGrid1.Cells[i, 0] := 'j='+ IntToStr(i);

end;

end;

 

Procedure TInputForm.Button1Click(Sender: TObject);

begin

N := StrToInt(Edit1.Text);

// Задание числа строк и столбцов в таблицах

StringGrid1.ColCount := N + 1;

StringGrid1.RowCount := N + 1;

StringGrid2.RowCount := N + 1;

StringGrid3.RowCount := N + 1;

// Заполнение верхнего и левого столбцов поясняющими подписями

for i:=1 to N do

begin

StringGrid1.Cells[0, i] := 'i=' + IntToStr(i);

StringGrid1.Cells[i, 0] := 'j=' + IntToStr(i);

end;

end;

 

Procedure TInputForm.Button2Click(Sender: TObject);

var

s : extended;

begin

// Заполнение массива A элементами из тавлицы StringGrid1

for i:=1 to N do

for j:=1 to N do

A[i, j] := StrToFloat(StringGrid1.Cells[j, i]);

// Заполнение массива B элементами из тавлицы StringGrid2

for i:=1 to N do

B[i] := StrToFloat(StringGrid2.Cells[0, i]);

// Умножение массива A на массив B

for i:=1 to N do

begin

s := 0;

for j:=1 to N do

s := s + A[i, j]*B[j];

Y[i] := s;

// Вывод результата в таблицу StringGrid3

StringGrid3.Cells[0, i] := FloatToStrF(Y[i], ffFixed,6,2);

end;

end;

 

end.

 

Индивидуальные задания

 

Во всех заданиях по теме “Массивы” скалярные переменные вводить с помощью компонета Tedit с соответствующим пояснением в виде компоненета TLabel. Скалярный результат выводить в виде компонента TLabel. Массивы представлять на форме в виде компонентов TStringGrid, в которых 0-й столбец и 0-ю строку использовать для отображения индексов массивов. Вычисления выполнять, после нажатия кнопки типа TButton.

1. Задана матрица размером . Получить массив B, присвоив его k-муэлементу значение 0, если все элементы k-го столбца матрицы нулевые, и значение 1 в противном случае.

2. Задана матрица размером . Получить массив B, присвоив его k-му элементу значение 1, если элементы k-ой строки матрицы упорядочены по убыванию, и значение 0 в противном случае.

3. Задана матрица размером . Получить массив B, присвоив его k-му элементу значение 1, если k-ая строка матрицы симметрична, и значение 0 в противном случае.

4. Задана матрица размером . Определить k - количество "особых" элементов матрицы, считая элемент "особым", если он больше суммы остальных элементов своего столбца.

5. Задана матрица размером . Определить k - количество "особых" элементов матрицы, считая элемент “особым”, если в его строке слева от него находятся элементы меньшие его, а справа – большие.

6. Задана символьная матрица размером . Определить k - количество различных элементов матрицы (т. е. повторяющиеся элементы считать один раз).

7. Дана матрица размером . Упорядочить ее строки по неубываниюих первых элементов.

8. Дана матрица размером . Упорядочить ее строки по неубыванию суммы их элементов.

9. Дана матрица размером . Упорядочить ее строки по неубыванию их наибольших элементов.

10. Определить, является ли заданная квадратная матрица n-го порядка симметричной относительно побочной диагонали.

11. Для матрицы размером вывести на экран все ее седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот.

12. В матрице n-го порядка переставить строки так, чтобы на главной диагонали матрицы были расположены элементы, наибольшие по абсолютной величине.

13. В матрице n-гo порядка найти максимальный среди элементов, лежащих ниже побочной диагонали, и минимальный среди элементов, лежащих выше главной диагонали.

14. В матрице размером поменять местами строку, содержащую элемент с наибольшим значением со строкой, содержащей элемент с наименьшим.

15. Из матрицы п-го порядка получить матрицу порядка п-1 путем удаления из исходной матрицы строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением.

16. Дан массив из k символов. Вывести на экран сначала все цифры, входящие в него, а затем все остальные символы, сохраняя при этом взаимное расположение символов в каждой из этих двух групп.

17. Дан массив, содержащий от 1 до k символов, за которым следует точка. Вывести этот текст в обратном порядке.

18. Дан непустой массив из цифр. Вывести на экран цифру, наиболее часто встречающуюся в этом массиве.

19. Отсортировать элементы массива Х по возрастанию.

20. Элементы массива Х расположить в обратном порядке.

21. Элементы массива Х циклически сдвинуть на k позиций влево.

22. Элементы массива Х циклически сдвинуть на n позиций вправо.

23. Преобразовать массив Х по следующему правилу: все отрицательные элементы массива перенести в начало, а все остальные – в конец, сохраняя исходное взаимное расположение, как среди отрицательных, так и среди остальных элементов.

24. Элементы каждого из массивов X и Y упорядочены по неубыванию. Объединить элементы этих двух массивов в один массив Z так, чтобы они снова оказались упорядоченными по неубыванию.

25. Дан массив из k символов. Определить симметричен ли он, т. е. читается ли он одинаково слева направо и справа налево.

26. Даны два массива. Найти наименьшее среди тех элементов первого массива, которое не входит во второй.

27. Определить количество инверсий в этом массиве Х (т.е. таких пар элементов, в которых большее число находится слева от наименьшего: при ).

28. Дан массив из строчных латинских букв. Вывести на экран в алфавитном порядке все буквы, которые входят в этот текст по одному разу.

29. Вывести на экран заданный массив из k символов, удалив из него повторные вхождения каждого символа.

30. Определить сколько различных символов входит в заданный текст, содержащий не более k символов и оканчивающийся точкой (в сам текст точка не входит).


Работа 5.