|
Создание и обработка линейного массива
Создание и обработка линейного массива
Лабораторная работаНа тему: «Создание и обработка линейного массива. Использование компонента StringGrid для представления двумерных массивов в среде Delphi»Задание 1. Создайте приложение, которое предлагает задать размер линейного массива, заполняет этот массив случайными целыми числами, выводит список элементов массива, вычисляет сумму всех элементов и количество положительных, определяет минимальный и максимальный элементы массива по выбору.Решение:Создайте папку для сохранения проекта «Массив1». Сохраните проект - Massiv. На форме разместите компоненты Label1,2 и Edit1,2 и кнопку Button1. Для свойства Caption кнопки задайте значение «Создать массив». Разместите на форме панель GroupBox1 и задайте значение «Определить», для свойства Caption.В этой панели разместите компоненты CheckBox1,2,3,4, для свойства Caption которых задайте значения: «Минимальный элемент», «Максимальный элемент», «Сумма всех элементов», «Число положительных элементов», соответственно. Напротив них разместите компоненты Edit3,4,5,6. Если компоненты CheckBox не будут отображаться, то следует выделить панель GroupBox1 и выбрать в контекстном меню команду Control > Send to Back (Порядок > На задний план).В нижней части формы разместите кнопку Button2 и задайте название - «Вычислить». Удалите текст Edit1,2,3,4,5,6 из соответствующих компонентов. Выровняйте компоненты на форме, как показано на рис. 4.1. Зафиксируйте положение компонентов на форме с помощью команды Edit>Lock Controls из главного меню.Рис. 4.1 Пример формы проекта «Массив1»Прежде чем создавать обработчики событий щелчка мышью по кнопкам, в разделе описания переменных необходимо объявить переменные целого типа N, I, где N - размер массива, а I - порядковый номер элемента массива, а также X - динамический массив целых чисел.VarForm1: TForm1;N, I: integer;X: array of integer;{описание динамического массива целых чисел}Примечание: динамические массивы отличаются от обычных статистических массивов тем, что для них не объявляется заранее длина - число элементов. При объявлении динамического массива место под него не отводится. Прежде чем использовать массив, надо задать его размер процедурой SetLength.Для предупреждения ввода в окно Edit1 нечислового значения, используйте обработку события OnKeyPress для соответствующего компонента. Выполните это самостоятельно (см. лаб. раб. №3).Для создания процедуры обработки события, создания массива целых чисел, выберите кнопку «Создать массив», затем на странице События сделайте двойной щелчок на пустом поле списка события OnClick. После этого отредактируйте процедуру в окне Редактора кода следующим образом:BeginRandomize;N:= StrToInt (Edit1. Text); {число элементов массива}SetLength (X, N); {задать массиву Х длину N}Edit2. Text:= `»; {очистить окно Edit2}For I:= 0 to N_1 doBeginX[I]:= Round (Sin(Random(100))*100);{присвоить элементу массива случайное значение}Edit2. Text:= Edit2. Text + `» + IntToStr (X[I]);{вывести элементы массива}End;End;Обработку массива опишите в процедуре обработчика события щелчка мышью на кнопке «Вычислить». В окне Редактора кода в заготовку процедуры поместите описание локальных переменных следующее:VarMax, Min, Sum, CountPlus: integer;где Max - максимальный элемент массива, Min - минимальный элемент массива, Sum - сумма всех элементов массива, CountPlus - количество положительных элементов массива. Текст процедуры обработки массива может быть записан следующим образом:BeginIf CheckBox1. Checked then Min:= X[0];Edit3. Text:= `»;If CheckBox2. Checked then Max:= X[0];Edit4. Text:= `»;Sum:= 0;Edit5. Text:= `»;CountPlus:= 0;Edit6. Text:= `»;For I:= 0 to N_1 doBeginIf CheckBox1. Checked thenIf Min > X[I] then Min:= X[I];If CheckBox2. Checked thenIf Max < X[I] then Max:= X[I];If CheckBox3. Checked thenSum:= Sum + X[I];If CheckBox4. Checked thenIf X[I] >0 then CountPlus:= CountPlus + 1;End;{вывод результатов обработки массива}If CheckBox1. Checked then Edit3. Text:=IntToStr(Min);If CheckBox2. Checked then Edit4. Text:=IntToStr(Max);If CheckBox3. Checked then Edit5. Text:=IntToStr(Sum);If CheckBox4. Checked then Edit6. Text:=IntToStr(CountPlus);End;Сохраните файлы проекта и программного модуля, запустите программу на выполнение, задавая различные значения числа элементов, убедитесь в правильной работе приложения.Задание 2. Создайте приложение, которое выводит двумерный массив случайных целых чисел и определяет минимальный и максимальный элементы в этом массиве.Решение:1. Сохраните проект в папке «Массив2» с именем Massiv2 (файл модуля можно сохранить как Unit1).2. Создайте форму «Обработка двумерного массива».3. Выберите в палитре компонентов страницы Additional компонент StringGrid и разместите его в левом верхнем углу (см. рис. 5.1). Задайте для свойств ColCount (количество столбцов) и RowCount (количество строк) значение 6. Задайте для свойств FixedCols и FixedRows (количество фиксированных, непрокручиваемых столбцов и строк, используемых для размещения надписей номеров строк и столбцов).Примечание: данный компонент представляет собой таблицу, содержащую строки. Таблица может иметь полосы прокрутки, причем заданное число первых строк и столбцов может быть фиксированным. Таким образом, можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента.4. Справа от объекта разместите кнопку Button1 и задайте для нее свойство Caption значение «Заполнить». Ниже разместите панель GroupBox1 и присвойте значение «Определить». На данной панели разместите компоненты CheckBox 1,2 и назначьте свойству Caption значения «Минимальный элемент», «Максимальный элемент» соответственно. Затем справа разместите компоненты Edit 1,2 и кнопку с надписью «Вычислить». Выровняйте компоненты как показано на рис. 5.1.5. Прежде чем создавать обработчики событий кнопок «Заполнить» и «Вычислить», следует добавить в раздел описания переменных данного модуля целочисленные переменные, предназначенные для хранения индексов массива.VarForm1: TForm1;I, J: integer;6. Создайте процедуру обработки события щелчка мышью на кнопке Button1, в которой сначала будет выполнена операция вывода номеров строк и столбцов, а затем ячейки StringGrid1 будут заполнены случайными целыми числами.Рис. 5.1 Пример формы проекта «Массив2»Примечание: при изучении языка TPascal вы использовали оператор with…do для сокращения записи при обращении к полям записей. Теперь можно применять этот оператор для обращения к свойствам и методам объекта. Это делается, чтобы избежать повторных ссылок на объект в последующих операторах. Например, вместо того чтобы, обращаясь к ячейки объекта StringGrid1 писать StringGrid1. Cells [I, J], удобнее использовать оператор with StringGrid1 do, в теле которого можно неоднократно обращаться к Cells [I, J], не упоминая имени объекта StringGrid1.Процедура обработки события кнопки Button1:Procedure TForm1. Button1Click (Sender: TObject);{заполнение массива}beginrandomize;with StringGrid1 dobeginI:= 0;For J:= 1 to RowCount - 1 do {вывести номера строк}Cells [I, J]:= IntToStr(J);J:= 0;For I:= 1 to ColCount - 1 do {вывести номера столбцов}Cells [I, J]:= IntToStr(I);End;With StringGrid1 do {заполнение в таблице двумерного массива}For I:= 1 to ColCount - 1 doFor J:= 1 to RowCount - 1 doBeginCells [I, J]:= IntToStr (Round(Sin (Random(100))*100));End;End;7. Создайте процедуру обработки массива для второй кнопки «Вычислить». Введите текст процедуры:procedure TForm1. Button2Click (Sender: TObject); {обработка массива}varmin, max: integer;beginif CheckBox1. Checked thenwith StringGrid1 dobeginmin:= StrToInt (Cells [1,1]);for I:=1 to colCount - 1 dofor J:= 1 to RowCount - 1 doif StrToInt (Cells [I, J]) < min then min:= StrToInt (Cells [I, J]);Edit1. Text:= IntToStr (min);EndElse Edit1. Text:= `'; …(Определение максимального записать самостоятельно аналогично первой части модуля).End;Приложение: Текст программы файла модуля.unit main;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;Type TForm1 = class(TForm)StringGrid1: TStringGrid;Button1: TButton; Button2: TButton;GroupBox1: TGroupBox; CheckBox1: TCheckBox; CheckBox2: TCheckBox;Edit1: TEdit; Edit2: TEdit;procedure Button1Click (Sender: TObject);procedure Button2Click (Sender: TObject);private {Private declarations}public {Public declarations}end;var Form1: TForm1; i, j: integer;implementation {$R *.dfm}procedure TForm1. Button1Click (Sender: TObject);begin Randomize;with StringGrid1 do begin i:=0;for j:=1 to RowCount_1 do Cells [i, j]:=IntToStr(j);j:=0;for i:=1 to ColCount_1 do Cells [i, j]:=IntToStr(i); end;with StringGrid1 dofor i:=1 to ColCount_1 dofor j:=1 to RowCount_1 dobeginCells [i, j]:=IntToStr (Round(Sin (Random(100))*100));end; end;procedure TForm1. Button2Click (Sender: TObject);var min, max:integer;beginif CheckBox1. Checked thenwith StringGrid1 do beginmin:=StrToInt (Cells[1,1]);for i:=1 to ColCount_1 dofor j:=1 to RowCount_1 doif StrToInt (Cells[i, j])<min then min:=StrToInt (Cells[i, j]);Edit1. Text:=IntToStr(Min);End else Edit1. Text:='';if CheckBox2. Checked thenwith StringGrid1 do beginmax:=StrToInt (Cells[1,1]);for i:=1 to ColCount_1 dofor j:=1 to RowCount_1 doif StrToInt (Cells[i, j])>max then max:=StrToInt (Cells[i, j]);Edit2. Text:=IntToStr(Max);End else Edit2. Text:='';end; end.
|
|