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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!