Учебная работа. Лабораторная работа: Создание и обработка линейного массива
Задание 1.
Сделайте приложение, которое дает задать размер линейного массива, заполняет этот массив случайными целыми числами, выводит перечень частей массива, вычисляет сумму всех частей и количество положительных, описывает малый и наибольший элементы массива по выбору.
Решение:
Сделайте папку для сохранения проекта «Массив1». Сохраните проект – Massiv. На форме разместите составляющие Label1,2 и Edit1,2 и клавишу Button1. Для характеристики 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>LockControls из головного меню.
Рис. 4.1 Пример формы проекта «Массив1»
До этого чем создавать обработчики событий щелчка мышью по кнопочкам, в разделе описания переменных нужно объявить переменные целого типа N, I, где N – размер массива, а I – порядковый номер элемента массива, также X – динамический
массив целых чисел.
Var
Form1: TForm1;
N, I: integer;
X
:
array
of
integer
;
{описание динамического массива целых чисел}
Примечание:
динамические массивы различаются от обыденных статистических массивов тем, что для их не объявляется заблаговременно длина – число частей. При объявлении динамического массива пространство под него не отводится. До этого чем употреблять массив, нужно задать его размер процедурой SetLength
.
Для предупреждения ввода в окно Edit1 нечислового значения, используйте обработку действия OnKeyPress для соответственного компонента. Сделайте это без помощи других (см. лаб. раб. №3).
Для сотворения процедуры обработки действия, сотворения массива целых чисел, изберите клавишу «Сделать массив», потом на страничке Действия сделайте двойной щелчок на пустом поле перечня действия OnClick. Опосля этого отредактируйте функцию в окне Редактора кода последующим образом:
Begin
Randomize;
N:= StrToInt (Edit1. Text
);
{число частей массива}
SetLength
(
X
,
N
);
{задать массиву Х длину N}
Edit2. Text:= ‘»;
{очиститьокно Edit2}
For I:= 0 to N‑1 do
Begin
X[I]:= Round (Sin(Random(100))*100);
{присвоить элементу массива случайное значение}
Edit2. Text:= Edit2. Text + ‘» + IntToStr (X[I]);
{вывести элементы массива}
End
;
End
;
Обработку массива опишите в процедуре обработчика действия щелчка мышью на кнопочке «Вычислить». В окне Редактора кода в заготовку процедуры расположите описание локальных переменных последующее:
Var
Max, Min, Sum, CountPlus: integer;
где Max – наибольший элемент массива, Min – малый элемент массива, Sum – сумма всех частей массива, CountPlus – количество положительных частей массива. Текст процедуры обработки массива быть может записан последующим образом:
Begin
If
CheckBox
1.
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 do
Begin
If CheckBox1. Checked then
If Min > X[I] then Min:= X[I];
If CheckBox2. Checked then
If Max < X[I] then Max:= X[I];
If CheckBox3. Checked then
Sum:= Sum + X[I];
If CheckBox4. Checked then
If 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 значения «Малый элемент», «Наибольший элемент» соответственно. Потом справа разместите составляющие Edit 1,2 и клавишу с надписью «Вычислить». Выровняйте составляющие как показано на рис. 5.1.
5. До этого чем создавать обработчики событий клавиш «Заполнить» и «Вычислить», следует добавить в раздел описания переменных данного модуля целочисленные переменные, созданные для хранения индексов массива.
Var
Form1: TForm1;
I, J: integer;
6. Сделайте функцию обработки действия щелчка мышью на кнопочке Button1, в какой поначалу будет выполнена операция вывода номеров строк и столбцов, а потом ячейки StringGrid1 будут заполнены случайными целыми числами.
Рис. 5.1 Пример формы проекта «Массив2»
Примечание:
при исследовании языка TPascal вы употребляли оператор with…do для сокращения записи при воззвании к полям записей. сейчас можно использовать этот оператор для воззвания к свойствам и способам объекта. Это делается, чтоб избежать повторных ссылок на объект в следующих операторах. К примеру, заместо того чтоб, обращаясь к ячейки объекта StringGrid1 писать StringGrid1. Cells[I, J], удобнее употреблять оператор withStringGrid1 do, в теле которого можно не один раз обращаться к Cells[I, J], не упоминая имени объекта StringGrid1.
Процедура обработки действия клавиши Button1:
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
StringGrid
1
do
{наполнение в таблице двумерного массива}
For I:= 1 to ColCount – 1 do
For J:= 1 to RowCount – 1 do
Begin
Cells [I, J]:= IntToStr (Round(Sin (Random(100))*100));
End
;
End
;
7. Сделайте функцию обработки массива для 2-ой клавиши «Вычислить». Введите текст процедуры:
procedure
TForm
1.
Button
2
Click
(
Sender
:
TObject
);
{обработка массива}
var
min, max: integer;
begin
if CheckBox1. Checked then
with StringGrid1 do
begin
min:= StrToInt (Cells [1,1]);
for I:=1 to colCount – 1 do
for J:= 1 to RowCount – 1 do
if StrToInt (Cells [I, J]) < min then min:= StrToInt (Cells [I, J]);
Edit1. Text:= IntToStr (min);
End
Else Edit1. Text
:= ‘’; …
(Определение наибольшего записать без помощи других аналогично первой части модуля).
End
;
Приложение:
Текст программки файла модуля.
unit main
;
interface
uses
Windows, 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;
private {Private declarations}
public {Public declarations}
end;
var
Form1: TForm1;
implementation {$R *.dfm}
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 do
for i:=1 to ColCount‑1 do
for j:=1 to RowCount‑1 do
begin
Cells [i, j]:=IntToStr (Round(Sin (Random(100))*100));
end; end;
var min, max:integer;
begin
if CheckBox1. Checked then
with StringGrid1 do begin
min:=StrToInt (Cells[1,1]);
for i:=1 to ColCount‑1 do
for j:=1 to RowCount‑1 do
if StrToInt (Cells[i, j])<min then min:=StrToInt (Cells[i, j]);
Edit1. Text:=IntToStr(Min);
End else Edit1. Text:=»;
if CheckBox2. Checked then
with StringGrid1 do begin
max:=StrToInt (Cells[1,1]);
for i:=1 to ColCount‑1 do
for j:=1 to RowCount‑1 do
if StrToInt (Cells[i, j])>max then max:=StrToInt (Cells[i, j]);
Edit2. Text:=IntToStr(Max);
End else Edit2. Text:=»;
end; end.
]]>