Використання структур

Масиви складаються з елементів одного типу. У тих випадках, коли однаково потрібно обробляти набори даних, що представляють сукупність величин різного типу, розглядаючи їх як єдине ціле, доцільно використовувати структури.







Структури визначаються за допомогою ключового слова struct. Далі вказується ім'я структури і в фігурних дужках визначаються члени структури. Структури можуть містити довільне число різних видів членів: полів, методів і ін.

Класи і структури є двома основними конструкціями системи загальних типів. Кожна з них по суті є структурою даних, інкапсулює набір даних (поля) і поведінку (методи). Дані і поведінку є членами класу або структури. Їх об'єднання в одному типі називається инкапсуляцией. Відповідно до принципу інкапсуляції, клас або структура може задати рівень доступності кожного з членів по відношенню до коду поза класом або структури. Рівень доступу public (відкритий доступ) використаний в нижченаведених прикладах. Інші рівні доступу тут не розглядаються.

Як члени структур (в подальшому класів) в цьому посібнику будуть використовуватися тільки поля і методи.

Поле - це змінна, оголошена в структурі. У поля є ім'я і тип. Метод - це функція, певна в структурі.

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

public string famile;

Тут описана структура з ім'ям Sportsmen з двома полями: famile типу string і rez типу int. Опис структури розташовується поза методу Main. У зв'язку з цим рівень доступу до полів встановлений максимальний (public - відкритий доступ), що дає можливість доступу до полів з методу Main.

Примірник структури створюється в методі Main як зазвичай зазначенням типу перед ім'ям змінної:

Далі в поля цієї змінної можна помістити значення (ініціалізувати поля структури). Для доступу до поля потрібно вказати ім'я змінної і після точки ім'я поля. наприклад,

Sportsmen [] sp = new Sportsmen [5];

Console.WriteLine ( "Фам \ t Результат",

Приклад 4.1. Протокол змагань зі стрибків у висоту містить список прізвищ і результатів (одна спроба) в порядку стартових номерів. Отримати підсумкову таблицю, яка містить прізвища і результати в порядку зайнятих місць. Кількість спортсменів не більше 30. Для розміщення вихідних даних використовується масив структур. Структура містить інформацію - прізвище та результат спортсмена. Масив структур є в даному випадку одновимірним масивом і для його обробки можна використовувати типові алгоритми, розглянуті в гл. 3:

public string famile;

public double rez;

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

"Прізвище \ t Результат",

// Упорядкування за результатами

for (int i = 0; i

double amax = sp [i] .rez;

Тут вихідні дані спочатку задані в двох масивах: прізвища в масиві s, результати - в масиві r. Далі цими даними заповнюються поля структури.

В результат буде виведено:

Питання для самоперевірки

2. Створення примірника структури. Ініціалізація полів структури.

3. Операції зі структурами.

4. Переваги використання структур.

5. Масиви структур і їх обробка.

Завдання для самостійного виконання

1. На підставі результатів змагань зі стрибків у довжину (прізвища і результати трьох спроб) скласти підсумковий протокол змагань, вважаючи, що в залік йде кращий результат.

2. Результати змагань зі стрибків у довжину визначаються за сумою двох спроб. У протоколі для кожного учасника вказуються: прізвище, суспільство, результати першої та другої спроб. Вивести протокол у вигляді таблиці з заголовком в порядку зайнятих місць.







3. Скласти програму для обробки результатів кросу на 500 м для жінок. У кросі беруть участь не більше 100 студенток. Для кожної учасниці ввести прізвище, групу, прізвище викладача, результат. Отримати результуючу таблицю, впорядковану за результатами, в якій міститься також інформація про виконання нормативу. Визначити сумарну кількість учасниць, які виконали норматив.

4. Радіокомпанія провела опитування слухачів (не більше 500) з питання: «Кого ви вважаєте людиною року?». Визначити п'ять найбільш часто зустрічаються відповідей і їх часток (у відсотках від загальної кількості відповідей).

5. Лижні гонки проводяться окремо для двох груп учасників (в кожній групі не більше 50 осіб). Результати змагань задані у вигляді прізвищ учасників і їх результатів в кожній групі. Розташувати результати змагань в кожній групі в порядку зайнятих місць. Об'єднати результати обох груп зі збереженням упорядкованості і вивести у вигляді таблиці з заголовком.

6. Обробити результати першості з футболу (беруть участь не більше 15 команд). Результати кожної гри задані у вигляді назв команд і рахунки (кількість забитих і пропущених м'ячів). Сформувати таблицю очок (виграш - 3, нічия - 1, програш - 0) і впорядкувати результати відповідно до зайнятим місцем. Якщо сума очок у двох команд однакова, то порівнюються різниці забитих і пропущених м'ячів. Вивести результуючу таблицю, яка містить місце, назва команди, кількість очок.

7. Для формування збірної з хокею попередньо відібрано 30 гравців. На підставі протоколів ігор (не більше 15) складена таблиця, в якій міститься штрафний час кожного гравця по кожній грі (2, 5 або 10 хв). Написати програму, яка складає список кандидатів до збірної в порядку зростання сумарного штрафного часу. Гравець, оштрафований на 10 хв, зі списку кандидатів виключається.

8. Результати сесії містять оцінки 5 іспитів по кожній групі. Визначити середній бал для п'яти груп одного потоку студентів і видати список груп в порядку убування середнього балу. Результати вивести у вигляді таблиці з заголовком.

9. Студенти однієї групи (не більше 25 осіб) в сесію здають чотири іспити. Скласти список студентів, середній бал яких по всіх іспитах не менше «4». Результати вивести у вигляді таблиці з заголовком в порядку убування середнього бала.

10. Результати змагань зі стрибків у довжину визначаються за сумою двох спроб. У протоколі для кожного учасника вказуються: прізвище, суспільство, результати першої та другої спроб. Вивести протокол у вигляді таблиці з заголовком в порядку зайнятих місць.

12. У змаганнях зі стрибків з 120-метрового трампліну бере участь не більше 30 спортсменів. Судять змагання 5 суддів. Кожен суддя виставляє оцінку за стиль стрибка за 20-бальною шкалою. Менша і велика оцінки відкидаються, інші підсумовуються. До цієї суми додаються бали за дальність стрибка: 120 метрів - 60 очок, за кожен метр перевищення додаються по 2 очка, при меншої дальності віднімаються 2 очка за кожен метр. Отримати підсумкову таблицю змагань, що містить прізвище та підсумковий результат для кожного учасника в порядку зайнятих місць.

13. Групі студентів (не більше 25) в результаті полусеместровой атестації були виставлені оцінки з інформатики, а також визначено кількість пропущених занять. Успішність кожного студента оцінюється наступними балами: «0» (не атестованих), «2», «3», «4» або «5». Вивести список невстигаючих (оцінка «2») студентів в порядку зменшення кількості пропущених ними занять. Дані задати самостійно.

14. Протокол змагань зі стрибків у воду містить список прізвищ спортсменів (не більше 15) і бали, виставлені 5 суддями за результатами 2 стрибків. Отримати підсумковий протокол, що містить прізвища і результати, в порядку зайнятих спортсменами місць за результатами 2 стрибків. Дані задати самостійно.

15. Після закінчення шахового соpевнованія турнірна таблиця містить прізвища учасників (не більше 10) і результати зіграних партій (виграш - 1 очко, нічия - 1/2 очка, програш - 0 очок). Скласти підсумкову таблицю в порядку убування отриманих учасниками очок. Дані задати самостійно.

4.2. Використання конструктора примірника
і інших методів при роботі зі структурами

Розглянемо більш докладно різні способи ініціалізації полів структури, роботи з окремими екземплярами структури, зокрема, включення методів в опис структури на прикладі структури Sportsmen (див. Приклад 4.1).

У прикладі 4.1 екземпляр (об'єкт) структури оголошується як звичайна змінна зазначенням типу перед ім'ям. В цьому випадку поля структури залишаються без значень, і їх не можна використовувати до ініціалізації всіх полів. наприклад,

public string famile;

+ "Середній бал ",

Тут членом структури є конструктор з двома параметрами, відповідними двом полів структури, які будуть заповнюватися при виклику конструктора для кожного об'єкта структури. При цьому значення третього поля обчислюється в конструкторі з використанням значень елементів масиву, що є другим полем структури.

Питання для самоперевірки

1. Створення об'єкта структури за допомогою конструктора. Що таке конструктор примірника.

2. Особливості ініціалізації полів структури при використанні конструктора примірника.

3. Різні способи завдання значень полів структури при використанні конструктора.

4. Можливість використання методів, як членів структури.

Завдання для самостійного виконання







Схожі статті