ЛР5 С#3 Пользовательское меню. Методы пользователя. Одномерные массивы
.pdfОбщее задание 2
Заполните массив заданного пользователем размера случайными целыми числами от 0 до 100.
Отсортируйте элементы этого массива по возрастанию и по убыванию.
Выведите результаты каждой сортировки Реализуйте решение данной задачи в окне Общее задание 2, созданного
при выполнении нулевого общего задания.
Для обработки массива используйте методы класса Array.
Шаг 1. В созданном проекте измените соответствующий макет формы,
чтобы он выглядел как на рисунке 7. Кнопка Отсортировать массивы
также должна быть недоступна для нажатия, пока не сгенерирован массив.
Рисунок 7 – Пример интерфейса для общего задания 2
Шаг 2. Сгенерируйте методы обработки событий клика для каждой кнопки типа Button. Для кнопки Выход реализуйте закрытие текущего окна.
Шаг 3. В методе обработки клика по кнопке Сгенерировать массив (Generate_button_Click) напишите программный код,
21
аналогичный предыдущему заданию, внесите в него изменения при необходимости:
Шаг 4. Выполните предварительную проверку корректности работы вашего приложения.
Шаг 5. В методе обработки клика по кнопке Отсортировать массивы (Sort_button_Click) напишите следующий программный код,
также предварительно проанализировав его (комментарии опустите):
Шаг 6. Запустите проект и убедитесь в его работоспособности.
Задание 2 выполнено!
22
2.3 Методы пользователя
Если в программе возникает необходимость частого обращения к некоторой группе операторов, то рационально выделить такую группу в самостоятельный блок, к которому можно обращаться по имени из любого места в программе. Такие программные блоки, созданные самим пользователем, раньше называли подпрограммами (процедурами или функциями). С появлением технологии объектно-ориентированного программирования подпрограммы стали называть методами класса.
В C# и процедуры и функции существуют только как методы
некоторого класса, они не существуют вне класса.
Синтаксически в описании метода различают две части: заголовок метода и его тело.
Синтаксис заголовка метода:
[модификатор |
доступа] |
тип_результата |
имя_метода |
([список_аргументов])
Модификатор доступа (определяет область видимости):
-public – метод открыт и доступен для вызова;
-рrivate (по умолчанию) – метод предназначен для внутреннего использования в классе и доступен для вызова только в теле методов текущего класса.
Существуют и другие специфичные модификаторы доступа: protected, internal и др.
Помимо модификатора доступа может быть указан также модификатор static, обозначающий, что данный метод является статическим, то есть относится ко всему классу, и для обращения к такому методу не нужно создавать экземпляр класса.
В типе результата метода указывается тип возвращаемого значения
(например, int или int[]). Если метод не должен возвращать никакого значения, то указывают ключевое слово void (тогда метод является
23
аналогом процедуры). Если указан тип возвращаемого значения, отличный от void, то в теле цикла обязательно должна быть строка, возвращающая это значение, начинающаяся с ключевого слова return.
Список аргументов (или параметров) – это те данные, которые необходимы для выполнения метода.
Обязательным при описании заголовка является указание типа результата, имени метода и круглых скобок, наличие которых необходимо даже в том случае, если методу не нужны аргументы.
Примеры заголовков методов
// внутренняя процедура класса, не принимающая аргументов private void A()
{…}
// внутренняя функция класса int B()
{…}
// процедура класса доступна клиентам и потомкам класса public void C()
{…}
Список аргументов метода может быть пустым, а может содержать фиксированное число параметров, разделяемых запятой.
Синтаксис объявления формального параметра:
[ref|out] тип_параметра имя_параметра
Обязательным при объявлении аргумента является указание его типа и имени. Никаких ограничений на тип не накладывается. Он может быть любым скалярным типом, массивом, классом, структурой, интерфейсом,
перечислением, функциональным типом.
Аргументы в метод могут быть переданы:
-по значению (используется по умолчанию);
-по ссылке (ref).
24
При передаче аргумента в метод по значению вместо самого объекта передается его копия. Это значит, что изменения объекта в вызываемом методе не отражаются на исходном объекте, когда управление возвращается вызывающему объекту.
При передаче объекта в качестве параметра по ссылке метод получает его адрес в памяти. И, таким образом, этот объект изменяется не только внутри вызываемого метода, после выхода из метода, объект будет иметь измененное значение
Все параметры метода могут быть (не обязательно) разделены на:
-входные (in),
-выходные (out),
Модификатор in указывает, что данный параметр будет передаваться в метод по ссылке, однако внутри метода его значение параметра нельзя будет изменить.
Модификатор out указывает, что параметр будет передаваться по ссылке и при этом представлять собой результаты метода. Если параметр объявлен с ключевым словом out, то в теле метода обязательно должен присутствовать оператор присваивания, задающий значение этому параметру, передаются по ссылке. Использование подобных модификаторов позволяет вернуть из метода не одно значение, а несколько.
Тело метода cинтаксически является блоком, представляющим последовательность операторов и описаний переменных, заключенными в фигурные скобки. Переменные, описанные в блоке метода, считаются локализованными в этом блоке. В записи операторов блока участвуют имена локальных переменных блока, имена полей класса и имена параметров метода.
Синтаксис вызова метода:
имя_метода([список_параметров])
Между списком параметров, указанным при объявлении метода, и
списком параметров, указываемых при вызове метода, должно выполняться
25
определенное соответствие по числу, порядку следования, типу и статусу параметров. Если параметр объявлен с ключевым словом ref или out, то фактический параметр должен сопровождаться таким же ключевым словом в точке вызова (соответствие по статусу).
Однако необходимо знать, что объектно-ориентированное программирование поддерживает так называемую «перегрузку» методов,
когда метод может принимать различное количество аргументов
.
Общее задание 3
Измените программный код созданного в общем задании 2 приложения так, чтобы вывод элементов массива в текстовые поля осуществлялся с помощью метода пользователя.
Шаг 1. Напишите программный код метода, который выводил бы указанный массив в указанное текстовое поле.
Шаг 2. В методе обработки клика по кнопке Отсортировать массивы (Sort_button_Click) удалите код, реализующий вывод элементов массива в цикле. То есть строки
Шаг 3. Вместо удаленного кода вызовите разработанный вами метод.
Например, для отсортированного массива необходимо указать текстовое поле для вывода sortMassiv_textBox:
Шаг 4. Выполните аналогичную замену во всех остальных случаях.
26
Шаг 5. Запустите проект и убедитесь в его работоспособности.
Задание 3 выполнено!
Создание классов проекта
Когда создаются многооконные приложения, то возникает необходимость использования одних и тех же объектов в программных кодах разных форм. При работе с общими переменными и общими пользовательскими методами, глобальными относительно всего приложения,
т.е. доступными в программном коде любой формы приложения, в C#
используются классы проекта, либо уже имеющиеся, например, классы
созданных форм, либо создаются новые дополнительные классы. |
|
||||
Создать |
новый |
класс |
можно, |
выполнив |
команду |
Project |
Add Class.В появившемся окне Add New Item следует |
задать имя класса и нажать кнопку Add. Далее, в созданный класс, следует
поместить |
коды |
описания |
глобальных |
переменных |
и глобальных методов. |
|
|
|
|
Переменные и методы, объявленные в классе с помощью |
||||
модификатора |
Public, |
становятся |
глобальными по |
отношению |
ко всем формам проекта. Если в объявлении добавлен еще и модификатор
Static, то создаются общие (статические) методы класса, их вызов идентифицируется именем класса. Если в объявлении нет модификатора
Static, то создаются методы экземпляра класса, и их вызов идентифицируется именем экземпляра класса, экземпляр следует создать с помощью конструктора new, до использования метода.
27
3 ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
Индивидуальные задания необходимо выполнить в рамках одного многооконного приложения, созданного при выполнении общего задания 0.
При этом каждое из них необходимо выполнить в отдельном окне.
Для реализации вывода массива, а также заполнения массива случайными числами разработайте методы пользователя.
В Приложении А в конце методических указаний приведены типовые алгоритмы решения задач обработки массивов.
3.1 Индивидуальное задание 1
Создайте приложение, позволяющее решить задачу согласно варианту для массива случайных чисел из диапазона -100..100. Размер массива вводиться пользователем.
№ |
Задание |
|
|
1. |
Найти минимальный по модулю элемент и его номер |
|
|
2. |
Найти первый максимальный элемент и его номер. |
|
|
3. |
Подсчитать количество элементов, значение которых состоят из |
|
одной цифры |
|
|
4. |
Найти количество тех элементов, значения которых по модулю |
|
кратны 5 |
|
|
5. |
Вывести индексы тех элементов, значения которых больше |
|
значения последующего элемента |
|
|
6. |
Найти последний максимальный элемент массива и его номер |
|
|
7. |
Подсчитать количество четных элементов массива, значения |
|
которых больше заданного пользователем числа А |
|
|
8. |
Найти индекс минимального элемента в массиве |
|
|
9. |
Вывести индексы тех элементов, после которых расположено |
|
отрицательное число |
|
|
28
10. |
Подсчитать количество четных отрицательных элементов в |
|
массиве |
|
|
11. |
Найти первый минимальный элемент и его номер в массиве |
|
|
12. |
Подсчитать количество элементов, значения которых состоят из |
|
двух цифр |
|
|
13. |
Вывести индексы тех элементов, значения которых кратны 2 и 3. |
|
|
14. |
Вывести индексы тех элементов, значения которых больше |
|
значения предыдущего элемента |
|
|
15. |
Вывести индексы тех элементов, значения которых состоят из двух |
|
цифр |
|
|
3.2 Индивидуальное задание 2
Создайте приложение, позволяющее решить задачу согласно варианту для массива случайных чисел из диапазона -100..100. Размер массива вводиться пользователем.
№ |
|
Задание |
|
|
|
|
|||
|
Переставить в сформированном массиве первые три и последние |
|||
1. |
три элемента местами, сохраняя порядок их следования |
|
||
|
|
|||
|
|
|||
|
Переставить в сформированном массиве элементы следующим |
|||
2. |
образом: a[0], a[11], a[1], a[10], a[2], a[9],a[3], a[8], a[4], a[7], a[5], |
|||
|
a[6]. Принцип замены определите самостоятельно |
|
||
|
|
|||
|
Перенести в сформированном массиве первые k элементов в |
|||
3. |
конец: a[k+1], a[k+2], .. ,a[n-1], a[0], .., a[k]. |
|
|
|
|
|
|
||
|
|
|
|
|
|
Поменять |
местами в сформированном |
массиве |
первый |
4. |
положительный и последний отрицательный элементы. |
|
||
|
|
|||
|
|
|
|
|
|
Переставить |
в обратном порядке часть |
массива |
между |
5. |
элементами с номерами К1 и К2, включая их. |
|
|
|
|
|
|
||
|
|
|
|
|
29
№ |
Задание |
|
|
|
|
|
Переставить в сформированном массиве первые k и последние k |
|
6. |
элемента местами, сохраняя порядок их следования. |
|
|
|
|
|
|
|
|
Переставить в сформированном массиве элементы следующим |
|
7. |
образом: a[0], a[11], a[1], a[10], a[2], a[9],a[3], a[8], a[4], a[7], a[5], |
|
|
a[6]. Принцип замены определите самостоятельно |
|
|
|
|
|
Перенести в сформированном массиве первые k элементов в |
|
8. |
конец: a[k+1], a[k+2], .. , a[n-1], a[0], .., a[k]. |
|
|
|
|
|
|
|
|
Переставить в сформированном массиве в обратном порядке |
|
9. |
часть массива между элементами с номерами К1 и К2, включая |
|
|
их. Номера вводятся пользователем |
|
|
|
|
10. |
Поменять местами две половины массива, сохраняя их порядок. |
|
|
|
|
|
Переставить в сформированном массиве первые два и средние |
|
11. |
два элемента местами, сохраняя порядок их |
следования |
|
(количество элементов – четное). |
|
|
|
|
|
Переставить в сформированном массиве последние три и |
|
12. |
средние три элемента местами, сохраняя порядок их следования |
|
|
(количество элементов – нечетное). |
|
|
|
|
|
Поменять в сформированном массиве местами |
три первых |
13. |
элемента с тремя средними, сохраняя порядок их следования. |
|
|
||
|
|
|
|
Поменять местами в сформированном массиве |
три средних |
14. |
элемента с тремя последними, сохраняя порядок их следования. |
|
|
||
|
|
|
|
Поменять в сформированном массиве местами 2, 4 и 6 элемент с |
|
15. |
тремя последними элементами, сохраняя порядок их следования. |
|
|
||
|
|
|
30