Структуры данных. Массив. Синтаксис C#
До этой лекции, для решения задач, использовалось единственное значение, хранимое в переменной. Но для большинства задач, требующих автоматизации, характерна обработка большого количества значений. Количество необходимых для получения результата вычисления может достигать несколько тысяч значений. Возникает вопрос. Как хранить и обрабатывать большое количество значений? Применение метода «одна переменная — одно значение» в данном случае неприемлемо. Представьте программный код с одной тысячей переменных. Удобочитаемость, имена переменных, сам набор символов для инициализации или объявления переменной, создадут огромные трудности для программиста. Здесь, даже не стоит говорить об эффективности программного кода с точки зрения аппаратной части вычислительной системы.
Для устранения проблемы по хранению большого количества значений, логично было бы создать некую конструкцию, в котором значения хранились бы единым блоком, в виде множества переменных с единственным значением. К примеру, как строковое значение, с той разницей, что элемент строкового значения хранит один символ, а элемент этой конструкции хранил бы переменную с единственным значением. Такая конструкция была создана, вернее целое семейство таких конструкций под общим названием — структуры данных.
Но лекция не об структурах данных. Структуры данных — большой объем информации, для изучения которого существует специализированный учебный курс “Структуры и алгоритмы обработки данных”.
Нам, для учебных целей, вполне достаточно одной структуры с названием — массив данных, а точнее одномерный массив данных. Одномерный массив данных можно представить собой запись различных значений в одну строку, к примеру оценки ученика в школьном журнале. Помимо одномерного массива, есть многомерные, к примеру двумерные массивы, представляющие собой таблицу, к примеру оценки всех учеников в классе, где строки — данные ученика, столбцы — оценки по предмету.
Массив в C# имеет некоторые ограничения
1. Массив хранит значения с одним типом данных.
2. Размер массива определяется сразу и не меняется.
В случае необходимости хранить значения с разными типами данных или когда размер массива нельзя предсказать заранее, применяются другие структуры данных, о которых вы можете узнать из курса “Структуры и алгоритмы обработки данных”.
При объявлении массива указывается тип хранимых данных и имя, по которому будет осуществляется доступ к элементам массива, а также указывается размер массива, т.е. количество элементов. Элементы можно представить как отдельные мини переменные объединенный в один блок.
Нижеприведенный массив состоит из двух элементов, каждый из которых хранит единственное значение типа данных int.
int[] arr = new int[2];
Отдельно нужно пояснить про оператор « new », который используется для указания на создание объекта некоторого класса. Классы не будут рассмотрены, поэтому примите оператор « new » как обязательный параметр при объявлении массива.
Заполним массив значениями. Для этого обратимся к элементам по соответствующим индексам и присвоим им значения, как обычным переменным. Нумерация индексов начинается с нуля.
static void Main(string[] args)
{
int[] arr = new int[2];
arr[0] = 5;
arr[1] = 3;
}
Вот так будет выглядеть массив в памяти компьютера. Здесь, значение ссылки приведено для наглядности и не соответствует действительности
По аналогии с переменной, принято не объявлять, а инициализировать массив, т.е. присваивать значения элементам сразу. При инициализации массива, правый операнд представляет собой набор значений в фигурных скобках, в соответствующем для типа данных формате. Неизменяемый размер массива определяется по количеству значений в фигурных скобках.
string[] text = { "Hello", ", ", "world ", "!"};
int[] arr = { 10, 5, 6, 3, 4 };
Доступ к единичному элементу массива осуществляется по имени массива с указанием индекса
static void Main(string[] args)
{
int[] arr = { 10, 5, 6, 3, 4 };
Console.WriteLine("Первое значение массива: " + arr[0]);
Console.WriteLine("Второе значение массива: " + arr[1]);
Console.WriteLine("Третье значение массива: " + arr[2]);
Console.WriteLine("Четвертое значение массива: " + arr[3]);
Console.WriteLine("Пятое значение массива: " + arr[4]);
}
Так как нумерация индексов элементов массива начинается с нуля, то для доступа к первому значению массива, нужно обратится к элементу с индексом « ноль ».
Но самым важным отличием массива от строкового значения является возможность изменения хранимых в элементах массива значений.
static void Main(string[] args)
{
string []text = { "А","Р","Т","К" };
text[2] = "M";
Console.WriteLine(text[2]);
}
Доступ ко всем элементам массива осуществляется через цикл используя тот же алгоритм, что и для обработки элементов строкового значения. А именно создается счетчик, где переменная, принимая каждую итерацию новое значение, изменяет индекс элемента. Таким образом каждую итерацию программа обращается к новому элементу массива.
Для работы с массивами создана специальная конструкция повторения с оператором foreach, но использовать мы ее не будем, а получим доступ к элементам массива с помощью конструкцией с оператором for
static void Main(string[] args)
{
int[] arr = new int[5] { 10, 5, 6, 3, 4 };
for(int i=0; i < arr.Length; i++ )
{
Console.Write(arr[i] + " ");
}
}
Или while
static void Main(string[] args)
{
string[] arr = new string[5] { "10", "5", "6", "3", "4" };
int i = 0;
while (i < arr.Length)
{
Console.Write(arr[i] + " ");
i++;
}
}
Где,
Выражение int i=0— начальное значение счетчика
Выражение i < arr.Length — логическое выражение со свойством Length, которое определяет размер массива. В случае результата true в операции отношения, выполняется итерация цикла, результат — false, заканчивает цикл.
Унарная операция i++ — операция по изменению счетчика.
В заключении.
Хранение большого количества значений в переменных не эффективно, как с точки информативности и удобочитаемости программного кода, так и с точки эффективности использования аппаратной части вычислительной системы. Для хранения некоторого количества значений используются более сложные структуры данных. Одной из таких структур является — массив. Массив переназначен для хранения однотипных значений, в области памяти компьютера под названием — куча. Доступ к элементу, хранимому значение, осуществляется по его индексу. Первый индекс элемента равен нулю. Для доступа к массиву в стеке записывается ссылка в виде имени массива, указывающая, где находится массив.
Зная, что массив — это набор элементов, можно проводить операции как над отдельными элементами, для этого достаточно вызвать элемент по индексу. Для операций над всеми элементами используются конструкции повторения.
На этом занятие закончено.
Вы можете самостоятельно найти задачи для закрепления теоретического материала или для получения задач с ответами отправьте письмо на basicprog@mail.ru
Удачи в выполнении практических заданий!
