Использование структур
Массивы состоят из элементов одного типа. В тех случаях, когда единообразно нужно обрабатывать наборы данных, представляющих совокупность величин различного типа, рассматривая их как единое целое, целесообразно использовать структуры. Структуры определяются с помощью ключевого слова struct. Далее указывается имя структуры и в фигурных скобках определяются члены структуры. Структуры могут содержать произвольное число различных видов членов: полей, методов и других. Здесь в качестве членов структур (и в дальнейшем классов) будут использоваться только поля и методы. Поле это переменная, объявленная в структуре. У поля есть имя и тип. Метод это функция, определенная в структуре. Рассмотрим определение структуры, в которой содержатся два поля разных типов. struct Sportsmen { public string famile; public int rez; } Здесь описана структура с именем Sportsmen с двумя полями: famile типа string и rez типа int. Описание структуры располагается вне метода Main. В связи с этим уровень доступа к полям установлен максимальный (public – открытый доступ), что дает возможность доступа к полям из метода Main. Экземпляр структуры создается в методе Main как обычно указанием типа перед именем переменной. Sportsmen temp; Далее в поля этой переменной можно поместить значения (инициализировать поля структуры). Для доступа к полю нужно указать имя переменной и после точки имя поля. Например, using System; class Program { struct Sportsmen { public string famile; public int rez; } static void Main() { Sportsmen temp; temp.famile = " Иванов"; temp.rez = 77; Console.WriteLine(" Фам {0}\tРезультат{1: f2}", temp.famile, temp.rez); Console.ReadKey(); } } Или using System; struct Sportsmen { public string famile; public int rez; } class Program { static void Main() { Sportsmen temp; temp.famile = " Иванов"; temp.rez = 7; Console.WriteLine(" Фам {0}\t Результат {1: f2}", temp.famile, temp.rez); Console.ReadKey(); } } Объявление массива структур. Например, Sportsmen[] sp = new Sportsmen[5]; Здесь объявлен массив sp из 5 элементов, каждый из которых содержит два поля. Использование структур делает представление данных более компактным и наглядным. Структуры можно пересылать одну в другую, если они идентичны. Возможен, например, следующий оператор sp[0] = temp; Пример. using System; struct Sportsmen { public string famile; public int rez; } class Program { static void Main() { Sportsmen temp; temp.famile = " Иванов"; temp.rez = 17; Sportsmen[] sp = new Sportsmen[5]; sp[0] = temp; Console.WriteLine(" Фам {0}\t Результат {1: f2}", sp[0].famile, Console.ReadKey(); } } Пример 4.1. Протокол соревнований по прыжкам в высоту содержит список фамилий и результатов (одна попытка) в порядке стартовых номеров. Получить итоговую таблицу, содержащую фамилии и результаты в порядке занятых мест. Количество спортсменов не более 30. Для размещения исходных данных используется массив структур. Структура содержит информацию – фамилия и результат спортсмена. Массив структур является в данном случае одномерным массивом и для его обработки можно использовать типовые алгоритмы, рассмотренные в п. 3. using System; struct Sportsmen { public string famile; public double rez; } class Program { static void Main() { Sportsmen[] sp = new Sportsmen[5]; string[] s = new string[] { " Иванов", " Петров", " Сидоров", " Кузнецов", double[] r = new double[] { 1.50, 1.55, 1.47, 1.46, 1.54 }; for (int i = 0; i < sp.Length; i++) { sp[i].famile = s[i]; sp[i].rez = r[i]; Console.WriteLine(" Фамилия {0}\t Результат {1: f2}", } //Упорядочение по результатам for (int i = 0; i < sp.Length - 1; i++) { double amax = sp[i].rez; int imax = i; for (int j = i + 1; j < sp.Length; j++) { if (sp[j].rez > amax) { amax = sp[j].rez; imax = j; } } Sportsmen temp; temp = sp[imax]; sp[imax] = sp[i]; sp[i] = temp; } Console.WriteLine(); for (int i = 0; i < sp.Length; i++) { Console.WriteLine(" Фамилия {0}\t Результат {1: f2}", } Console.ReadKey(); } } Здесь исходные данные первоначально заданы в двух массивах: фамилии в массиве s, результаты – в массиве r. Далее этими данными заполняются поля структуры. В результат будет выведено Вопросы для самопроверки 1. Структура. Поля структуры. Члены структуры. Объявление структуры. Доступ к отдельным полям структуры. 2. Создание экземпляра структуры. Инициализация полей структуры. 3. Операции со структурами. 4. Преимущества использования структур. 5. Массивы структур и их обработка.
|