Для установки компонета 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.