Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР5 С#3 Пользовательское меню. Методы пользователя. Одномерные массивы

.pdf
Скачиваний:
0
Добавлен:
25.02.2024
Размер:
1.21 Mб
Скачать

Общее задание 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