Procedure Edit1 KeyPress( Sender: TObject; var Key: Char);



Лабораторная работа №14

Задание: Создайте приложение, которое предлагает пользователю ввести размер массива и создать массив случайных целых чисел, а затем, используя переключатели, указать порядок сортировки (по неубыванию, по невозрастанию), выполнить сортировку и просмотреть отсортированный массив.

 

Окно формы приложения линейной сортировки массива

 

Алгоритм выполнения работы.

 

1. Создайте форму, для свойства Caption задайте значение «Линейная сортировка массива».

 

2. На форме разместите компоненты Edit1, Edit2 и Edit3, кнопку Button1, для свойства Caption которой задайте значение «Создать массив».

 

3. Удалите текст Edit1, Edit2, Edit3 из соответствующих компонентов.

 

4. Разместите на форме компоненты Label1, Label2 и задайте для их свойств Caption значения «Число элементов» и «Исходный массив» соответственно.

 

5. Ниже объекта Edit3 на форме разместите панель RadioGroup1, для свойства Caption которой задайте значение «Порядок сортировки».

 

6. Для выбора порядка сортировки задайте два переключателя в панели RadioGroup1 и подписи к ним. Выбрав в Инспекторе объектов компонент RadioGroup1, на странице свойств выберите свойство Items, затем в окне String List Editor введите список элементов: По невозрастанию, По неубыванию и нажмите ОК.

 

7. Справа от панели RadioGroup1 разместите кнопку Button2, для свойства Caption которой задайте значение «Отсортировать».

 

8. В нижней части формы разместите Edit3 для вывода отсортированного массива. Над объектом Edit3 разместите объект Label3, для свойства Caption которого задайте значение «Отсортированный массив».

 

9. Выровняйте компоненты на форме, как показано на рис. 7.1.

 

Рис. 7.1. Окно формы приложения линейной сортировки массива

 

 

10. Зафиксируйте положение компонентов на форме, выбрав в меню Delphi команду Правка ► Зафиксировать.

 

11. Сохраните файл проекта и программного модуля.

 

 

Рис. 7.2. Окно формы приложения линейной сортировки массива

 

 

12. Аналогично предыдущему примеру, прежде чем создавать обработчики событий щелчка мышью по кнопкам Button1 и Button2, опишите глобальные переменные целого типа N и I, где N — размер массива, а I — порядковый номер элемента массива, а также М — динамический массив целых чисел.

Var

Form1: TForm1;

N, I : integer;

M : array of integer; {описание динамического массива целых чисел}

 

13. Для предупреждения ошибки ввода в окно Edit1 нечислового значения введите обработку события нажатия клавиши в окне Edit1, чтобы запретить ввод любых символов, кроме цифр от 0 до 9. Для создания процедуры обработчика события нажатия клавиши в окне Edit1 выберите в окне Инспектора объектов компонент Edit1 и на странице События дважды щелкните левой кнопкой мыши на пустом поле списка в событии On Key Press. После этого в текст процедуры обработчика события добавьте следующий оператор: if not (Key in ['0'..'9']) then Key:=#O;. Полный текст процедуры обработчика события будет выглядеть следующим образом:

procedure Edit1 KeyPress( Sender: TObject; var Key: Char);

Begin

if not (Key in ['0'..'9']) then Key:=#0;

end;

14. Создание массива целых чисел опишите в процедуре обработчика события щелчка мышью на кнопке Button1. Для создания процедуры обработчика события выберите в окне Инспектора объектов объект Button1, затем на странице События произведите двойной щелчок на пустом поле списка в событии OnClick. После этого в окне Редактора кода в заготовку процедуры обработчика события введите следующий текст:

procedure TForm1.Button1Click(Sender: TObject);

Begin

Randomize;

N:=StrToInt(Edit1.Text);    {число элементов массива}
SetLength(M, N);                    {задать динамическому массиву М длину N}

Edit2. Text:=' ';

for I:= 0 to N-1 do          {заполнить массив случайными значениями целых чисел}

Begin

M[I]:= Round(Sin(Random(100))*100);

{присвоить элементу массива случайное значение}

Edit2.Text:=Edit2.Text+' '+IntToStr(M[I]);

{вывести элементы массива}

End;

end;

 

15. Обработка события нажатия кнопки Button2 «Вычислить» начинается с сортировки массива, которую можно записать с помощью оператора цикла for.

 

Для хранения номера элемента массива, сравниваемого с текущим (имеющим номер I) введем переменную целого типа J. Для запоминания элемента массива при обмене в процессе сортировки введем переменную Тmр.

Линейная сортировка массива выполняется путем перестановки элементов в массиве при соблюдении следующих условий: если в неотсортированной части массива найден элемент с номером J, больший, чем элемент с номером I (для сортировки по невозрастанию), или меньший, чем элемент с номером I (для сортировки по неубыванию). Поэтому можно записать следующий оператор if then else с составным условием:

if (RadioGroup1.ItemIndex=0) and (M[I]<M[J])

or (RadioGroup1.ItemIndex=1) and (M[I]>M[J]) then

 

Перестановка элементов массива осуществляется с использованием третьей переменной:

Т mр:= М[ I];       {запомнить на время значение М[1]}

М[ I]:= M[ J];

M[ J]:= Tmp;

 

Вывод отсортированного массива в окне Edit3 можно записать оператором:

for I:=0 to N-1 do

Edit3.Text:=Edit3.Text+' '+IntToStr(M[I]);

 

В целом текст процедуры сортировки и вывода отсортированного массива будет выглядеть следующим образом:


Дата добавления: 2020-11-15; просмотров: 94; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!