Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Настройка компонента TStringGrid
1.Установите на форму 3 компонента типа TStringGrid: StringGrid1, StringGrid2 и StringGrid3(вкладка Additional – ЛКМ по пиктограмме ). 2. Захватывая кромки компонент, отрегулируйте их размер. 3. В инспекторе объектов установите значения свойств StringGrid1: ColCount равным 4 (четыре столбца), RowCount равным 4 (две строки), FixedCols – 1 (один столбец с фиксированной зоной для подписи номеров строк), FixedRows – 1 (одна строка с фиксированной зоной для подписи индексов столбцов). Установите значения свойств StringGrid2иStringGrid3: ColCount равным 1 (один столбец), RowCount равным 4 (четыре строки), FixedCols – 0 (нет столбца с фиксированной зоной), FixedRows – 1 (одна строка с фиксированной зоной для подписи имени массива). Раскройте свойство Options (нажав на знак “+”, стоящий слева от Options) и установите свойство goEditing в положение Trueдля компонент StringGrid1, StringGrid2 и StringGrid3 (по умолчанию в компонент TStringGrid запрещен ввод информации с клавиатуры). Панель диалога приведена на рис. 6.1.
Рис. 6.1. Панель диалога формы Код программы unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, Grids, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; StringGrid1: TStringGrid; StringGrid2: TStringGrid; StringGrid3: TStringGrid; Label2: TLabel; Label3: TLabel; Button2: TButton; BitBtn1: TBitBtn; BitBtn2: TBitBtn; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Type Mas=array[1..1] of Extended; //Тип одномерного массива PMas=^Mas; //Тип указателя на одномерный массив вещественного типа Matr=array[1..1] of PMas; //Тип массива указателей PMatr=^Matr; //Тип указателя на массив указателей Var Pb, Px: PMas; //Указатели на массивы B и X Pa: PMatr; //Указатель на массив указателей A n, m, i, j: Integer; Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin n: =3; // Задание размера массивов: количества строк n и m: =3; // количества столбцов m массива А Edit1.Text: =IntToStr(n); Edit2.Text: =IntToStr(m); StringGrid1.ColCount: =m+1; // Задание числа столбцов и StringGrid1.RowCount: =n+1; // строк в таблицах, включая StringGrid2.RowCount: =m+1; // фиксированную зону (+1) для подписей StringGrid3.RowCount: =n+1; StringGrid1.Cells[0, 0]: =' A: '; //Ввод в левую верхнюю ячейку StringGrid2.Cells[0, 0]: =' B: '; // таблицы названия массива StringGrid3.Cells[0, 0]: =' X: '; For i: =1 To n Do // Заполнение таблицы поясняющими подписями: StringGrid1.Cells[0, i]: =' i='+IntToStr(i); // ввод номера строки For i: =1 To m Do StringGrid1.Cells[i, 0]: =' j='+IntToStr(i); // ввод номера столбца end; procedure TForm1.Button1Click(Sender: TObject); // Изменить begin // размер n: =StrToInt(Edit1.Text); m: =StrToInt(Edit2.Text); StringGrid1.ColCount: =m+1; // Задание числа столбцов и StringGrid1.RowCount: =n+1; // строк в таблицах, включая StringGrid2.RowCount: =m+1; // фиксированную зону (+1) для подписей StringGrid3.RowCount: =n+1; For i: =1 To n Do // Ввод поясняющих подписей: StringGrid1.Cells[0, i]: =' i='+IntToStr(i); // номера строки For i: =1 To m Do StringGrid1.Cells[i, 0]: =' j='+IntToStr(i); // номера столбца end; procedure TForm1.BitBtn1Click(Sender: TObject); // Очистить begin For i: =1 To n Do Begin For j: =1 To m Do Begin StringGrid1.Cells[j, i]: =''; StringGrid2.Cells[0, j]: =''; End; StringGrid3.Cells[0, i]: =''; End; end; procedure TForm1.Button2Click(Sender: TObject); // Вычислить Var s: Extended; begin GetMem(Pb, m*SizeOf(Extended)); // Выделение памяти для массива B GetMem(Px, n*SizeOf(Extended)); // Выделение памяти для массива X GetMem(Pa, n*SizeOf(Pointer)); //Выделение памяти для указателей на строки For i: =1 To n Do GetMem(Pa^[i], m*SizeOf(Extended)); //и значения массива A For i: =1 To n Do // Заполнение массива А значениями из StringGrid1 For j: =1 To m Do Pa^[i]^[j]: =StrToFloat(StringGrid1.Cells[j, i]); For i: =1 To m Do //Заполнение массива B значениями из StringGrid2 Pb^[i]: =StrToFloat(StringGrid2.Cells[0, i]); For i: =1 To n Do // Умножение матрицы A на вектор B Begin Px^[i]: =0; For j: =1 To m Do // Строка матрицы A умножается Px^[i]: =Px^[i]+Pa^[i]^[j]*Pb^[j]; // на столбец вектора B End; For i: =1 To n Do Begin StringGrid3.Cells[0, i]: =FloatToStr(Px^[i]); //Вывод результата FreeMem(Pa^[i], m*SizeOf(Extended)); //Освобождение памяти End; // в обратном порядке для строк матрицы A FreeMem(Pa, n*SizeOf(Pointer)); //Освобождение массива указателей FreeMem(Px, n*SizeOf(Extended)); //Освобождение памяти для массива X FreeMem(Pb, m*SizeOf(Extended)); //Освобождение памяти для массива B End; End. 6.5. Индивидуальные задания Используя динамические массивы и указатели, составить программы в соответствии с индивидуальным вариантом для лабораторных работ 5 и 6. Скалярные переменные вводить с помощью компонента TEdit с соответствующим пояснением в виде компонента TLabel. Скалярный результат выводить в виде компонента TLabel. Массивы представлять на форме в виде компонентов TStringGrid, в которых 0–й столбец и 0–ю строку использовать для отображения индексов массивов. Вычисления выполнять после нажатия кнопки типа TBitBtn. Для выхода из программы использовать кнопку Close. Предусмотреть применение исключительных ситуаций. 1. Из матрицы размером n∙ mполучить массив B, присвоив его k–му элементу значение 0, если все элементы k–го столбца матрицы нулевые, и значение 1в противном случае. 2. Из матрицы размером n∙ mполучить массив B, присвоив его k–му элементу значение 1, если элементы k–й строки матрицы упорядочены по убыванию, и значение 0в противном случае. 3. В матрице размером n∙ mполучить массив B, присвоив его k–му элементу значение 1, если k–я строка матрицы симметрична, и значение 0в противном случае. 4. В матрице размером n∙ mопределить k– количество «особых» элементов матрицы, считая элемент «особым», если он больше суммы остальных элементов своего столбца. 5. В матрице размером n∙ mопределить k– количество «особых» элементов матрицы, считая элемент «особым», если в его строке слева от него находятся элементы, меньшие его, а справа – большие. 6. В символьной матрице размером n∙ m определить k– количество различных элементов матрицы (повторяющиеся элементы считать один раз). 7. В матрице размером n∙ m упорядочить строки по неубыванию их первых элементов. 8. В матрице размером n∙ m упорядочить столбцы по неубыванию суммы их элементов. 9. Найти в каждом столбце матрицы максимальный элемент и записать их в новый массив. Среди найденных элементов определить минимальный. 10. Определить, является ли заданная квадратная матрица n–го порядка симметричной относительно побочной диагонали. 11. Определить количество отрицательных элементов, расположенных выше главной диагонали матрицы. 12. Определить количество положительных элементов, расположенных ниже побочной диагонали матрицы. 13. В матрице n–го порядка найти максимальный среди элементов, лежащих ниже побочной диагонали, и минимальный среди элементов, лежащих выше главной диагонали. 14. В матрице размером n∙ m поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением. 15. Определить сумму элементов, расположенных на главной диагонали матрицы, и произведение элементов, расположенных на побочной диагонали. 16. Для матрицы размером n∙ m вывести на экран все ее седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот. 17. Из матрицыn–го порядка получить матрицу порядка n–1 путем удаления из исходной матрицы строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением. 18. В матрице n–го порядка переставить строки так, чтобы на главной диагонали матрицы были расположены элементы, наибольшие по абсолютной величине. 19. В двумерном массиве поменять местами столбцы, содержащие соответственно максимальный и минимальный элементы массива. 20. Пребразовать двумерную квадратную матрицу в одномерный массив путем обхода всех элементов двумерной матрицы по скручивающейся против часовой стрелки спирали. 21. Определить количество столбцов матрицы, состоящих только из одних нулей. 22. Определить произведение элементов тех столбцов матрицы, последний элемент которых равен нулю. 23. Из двумерного квадратного массива построить одномерный путем обхода его элементов по скручивающейся по часовой стрелке спирали. 24. Пребразовать двумерную квадратную матрицу в одномерный массив путем обхода всех элементов матрицы по скручивающейся по часовой стрелке спирали. 25. Для каждого столбца матрицы определить количество элементов, совпадающих с первым элементом столбца. 26. В матрице размером n∙ m найти в каждой строке наибольший элемент и поменять его местами с элементами главной диагонали. 27. В матрице размером n∙ m подсчитать количество столбцов матрицы, сумма элементов которых кратна трем, но не кратна пяти. 28. В каждом столбце матрицы определить количество элементов, больших среднего арифметического значения соответствующего столбца. 29. Поменять местами элементы четных и нечетных столбцов матрицы. 30. В каждой строке матрицы подсчитать количество отрицательных элементов, кратных пяти, и записать найденные элементы в новый одномерный массив.
Популярное:
|
Последнее изменение этой страницы: 2016-08-31; Просмотров: 748; Нарушение авторского права страницы