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

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

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

2.2 Массивы

Массив – это конечная упорядоченная совокупность однотипных

данных, связанная с упорядоченным набором целых чисел, называемых

индексами.

Индекс представляет собой адрес элемента в массиве.

Массив характеризуется именем, размерностью и размером.

Имя массива аналогично имени любой переменной (поля)

используется для доступа к массиву и его элементам.

Размерность массива определяется количеством индексов,

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

Размер массива определяется количеством элементов. Размер одномерного массива обычно указывают в виде числа, размер двумерного – в

виде пары чисел m×n (число строк m на число столбцов n) и т.д. Также часто используют термин длина массива, обозначающий общее число элементов массива.

Для доступа к элементу одномерного массива следует указать имя массива и в квадратных скобках индекс (номер элемента в массиве). Для доступа к элементу двумерного массива через запятую указываются два индекса (номер строки и номер столбца). Индексами могут быть – константы,

переменные или выражения целого типа.

Для работы с элементами массива, как правило, используются операторы цикла, чаще всего цикл с параметром.

2.2.1Объявление одномерных массивов

Формат объявления одномерных массивов:

Тип[] Имя_массива;

Например:

int[] mas;

11

*Здесь объявлен одномерный массив с именем mas, элементы которого имеют целочисленный тип int.

Можно перечислить несколько имен массивов одного типа через

запятую.

int[] a, b, c;

*Здесь объявлены три массива целочисленного типа int.

2.2.2Инициализация одномерных массивов

Перед использованием массивов их необходимо инициализировать, то

есть каждому элементу массива необходимо присвоить начальное значение.

1) Инициализация с помощью литералов

Инициализировать массив можно сразу при его объявлении, явно прописывая значение каждого элемента. Такая инициализация массива возможна только с одновременным объявлением (отложенная инициализация невозможна):

double[] x ={5.5, 6.6, 7.7, 1.0};

*Здесь объявлен и проинициализирован массив x вещественных чисел, состоящий из

четырех элементов

2) Инициализация с помощью вызова конструктора массива

При вызове конструктора используется ключевое слово new и в квадратных скобках указывается размер массива. Значения элементов заполняются значениями по умолчанию (например, для int это 0, для string – пустая строка).

int [] d = new int [5];

*Здесь объявлен и проинициализирован массив целочисленный d из пяти элементов,

каждый из которых равен нулю.

Примечание. Нижняя граница индексов массива в C# по умолчанию равна нулю!

Указывая верхнюю границу массива, пользователь выделяет память под определенное количество элементов. В примере массив d имеет размер 5, но индексы элементов будут изменяться от 0 до 4.

12

13

Возможно проинициализировать массив и следующим образом,

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

int[] mas = new int[2] {3, 5};

Проинициализировать массив можно и позднее, это называется отложенной инициализацией. Однако нужно иметь ввиду, что в этом случае возможна только инициализация с помощью конструктора и ключевого слова new:

double[] x;

x = new double[4] {5.5, 6.6, 7.7, 1.0};

int[] d;

d = new int[5];

В качестве размера массива может быть использована не константа, а

переменная. В этом случае говорят о массиве переменной длины.

int size = int.Parse(textBox1.Text);

int[] m = new int [size];

*Здесь размер массива считывается из текстового поля

Однако необходимо понимать, что размер массива задается только один раз, переопределить его невозможно.

Доступ к элементу массива, как было указано выше, осуществляется по имени массива и индексу элемента, который указывается в квадратных скобках:

double[] x ={5.5, 6.6, 7.7, 1.0};

x[0]+=0.2;

*Здесь значение нулевого элемента массива x[0] увеличится на 0,2 и станет равным

5,7

14

2.2.3Формирование одномерных массивов псеводослучайных чисел

Для работы со случайными числами (на самом деле,

псевдослучайными, поскольку для генерации этих чисел используется определённый алгоритм) в библиотеке .NET Framework имеется класс

Random пространства имен System.

Методы этого класса вызываются для конкретного экземпляра, т.е.

необходимо сначала создать экземпляр класса с помощью конструктора,

вызываемого ключевым словом new. Только создав объект класса Random,

можно использовать методы и свойства этого класса для данного объекта.

Random b = new Random();

*Здесь new – ключевое слова для вызова конструктора; Random – класс,

предназначенный для работы с псевдослучайными числами; b – имя создаваемого

экземпляра класса Random.

Конструктор new без параметров использует начальное значение генератора, вычисленное на основе текущей даты и времени, что позволяет генерировать неповторяющуюся последовательность чисел при каждом запуске кода:

Чтобы обеспечить возможность получения одинаковых

последовательностей случайных чисел при каждом запуске кода,

используется конструктор с параметром:

Random b = new Random(k);

*Здесь k – параметр типа int.

Параметр конструктора k используется для построения начального элемента серии случайных чисел, поэтому при задании одного и того же значения параметра последовательность случайных чисел будет повторяться.

Для получения очередного значения случайного числа из некоторой последовательности используют методы, представленные в табл. 1.

15

Таблица 1

Основные методы экземпляра класса System.Random

Название

 

 

 

 

Описание

 

 

 

 

 

 

 

 

 

 

 

 

 

Возвращает

целое

положительное

число

типа

int

Next()

 

во всем положительном диапазоне

 

 

 

 

 

 

 

 

 

 

 

 

 

Возвращает целое положительное число в диапазоне

Next(макс)

 

[0; макс]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Возвращает целое положительное число в диапазоне

Next(мин,макс)

[мин; макс]

 

 

 

 

 

 

 

 

 

 

 

 

Возвращает

вещественное положительное

число

NextDouble()

 

в диапазоне [0; 1)

 

 

 

 

 

 

 

 

 

 

 

 

Пример использования метода Next() класса Random для заполнения

одномерного

массива

случайными

числами

из

диапазона

[-10, 10]:

 

 

 

 

 

 

 

 

int size = 5;

int[] massiv = new int[size]; Random rnd = new Random(); for (int i = 0; i < size; i++)

{

massiv[i] = rnd.Next(-10, 10);

}

16

Общее задание 1

Заполните массив заданного пользователем размера случайными целыми числами от 0 до 20.

Найдите квадраты этих чисел и определите номер первого минимального элемента.

Реализуйте решение данной задачи в окне Общее задание 1, созданного в проекте из предыдущего общего задания.

Для обработки массива используйте циклы с параметром.

Шаг 1. В созданном проекте измените соответствующий макет формы,

чтобы он выглядел как на рисунке 5. Кнопка Вычислить должна быть недоступна для нажатия, пока не сгенерирован массив (в окне Свойства

измените свойство Enabled на значение False).

Рисунок 5 – Пример интерфейса для общего задания 1

Шаг 2. Сгенерируйте методы обработки событий клика для каждой кнопки типа Button. Для кнопки Выход реализуйте закрытие текущего окна.

Шаг 3. В методе обработки клика по кнопке Сгенерировать массив (Generate_button_Click) напишите следующий программный

17

код, предварительно проанализировав его (комментарии в своем коде не

пишите):

Обратите внимание, что в коде используются мнемонические названия элементов управления, а не названия по умолчанию. Для корректной работы данного программного кода либо внесите в него соответствующие изменения и используйте названия ваших элементов (например, textBox1 вместо size_textBox), либо измените названия элементов, воспользовавшись свойством Name в окне Свойства.

Также в данном коде используются поля, объявленные не в контексте метода, а в контексте класса, то есть поля, объявленные вне границ метода: переменная size и

массивы massiv и sqrmassiv. Это необходимо сделать, чтобы данные поля были доступны и для других методов класса.

Шаг 4. Выполните предварительный запуск вашего приложения,

откройте с помощью меню окно для данного задания и проверьте корректность работы приложения при генерации элементов массива.

Остановите выполнение приложения. При наличии ошибок исправьте их.

Шаг 5. В методе обработки клика по кнопке Вычислить

(Calculate_button_Click) напишите следующий программный код,

также предварительно проанализировав его (комментарии опустите):

18

Шаг 6. Запустите проект и убедитесь в его работоспособности (рис. 6).

Рисунок 6 – Результат работы приложения по заданию 2

Задание 1 выполнено!

2.2.4 Класс System.Array

На самом деле все типы данных в .NET являются объектами

(экземплярами) некоторых классов. Это касается и массивов – любой массив является экземпляром класса System.Array.

Все методы класса Array работают с массивами только фиксированной длины (размер массива не может увеличиваться или уменьшаться после инициализации).

19

В классах библиотеки .NET Framework есть два типа методов: общие

(статические) методы класса и методы экземпляра класса. Общий метод реализован непосредственно в классе для всех его объектов, и определяется только именем класса. Методы экземпляра основываются на отдельном экземпляре класса и должны уточняться именем этого экземпляра.

Создать экземпляр класса можно с помощью конструктора new.

Некоторые методы и свойства класса Array представлены в табл. 2.

 

 

 

Таблица 2

 

 

 

 

Название

 

Описание

 

 

 

 

 

 

 

 

Свойства

 

 

 

 

 

Length

Позволяет узнать общее число элементов в массиве

 

 

 

 

 

Статические методы класса

 

 

 

 

IndexOf()

Ищет первое вхождение в массив указанного объекта

 

 

 

LastIndexOf()

Ищет последнее вхождение в массив указанного объекта

 

 

 

 

 

Sort()

Позволяет

сортировать

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

по

возрастанию

 

 

 

 

 

 

 

 

 

 

Reverse()

Изменяет порядок элементов на обратный

 

 

 

 

Copy()

Копирует часть одного массива в другой

 

 

 

 

 

Методы экземпляра класса

 

 

 

 

Count()

Определяет количество элементов в массиве

 

 

 

 

GetValue()

Ищет значение элемента с указанным индексом

 

 

 

 

 

 

SetValue()

Присваивает

значение

элементу, находящемуся

в

указанной позиции

 

 

 

 

 

 

 

CopyTo()

Копирует все элементы одного массива в другой массив,

начиная с указанного индекса

 

 

 

 

 

 

 

 

Примечание: некоторые из указанных методов являются «перегруженными», т.е.

фактически представляют собой несколько методов с одним именем, но имеющих разное количество параметров, причем тип параметров тоже может отличаться.

20