§ 16. Тып даных структура (struct)
Сайт: | Профильное обучение |
Курс: | Інфарматыка. 10 клас (Павышаны ўзровень) |
Книга: | § 16. Тып даных структура (struct) |
Напечатано:: | Гость |
Дата: | Пятница, 3 Май 2024, 20:46 |
16.1. Апісанне структур
Прыкладам структуры можа паслужыць любы аб’ект, які вызначаецца наборам сваіх характарыстык. Напрыклад, пункт на плоскасці вызначаецца абсцысай і ардынатай, дата — днём, месяцам і годам, для кнігі такімі характарыстыкамі могуць быць: аўтар, назва, год выдання, колькасць старонак і г. д. Для апісання такіх аб’ектаў на мове праграміравання С++ выкарыстоўваецца ключавое слова struct (структура). Структура ўяўляе сабой складаны тып даных, складзены з простых тыпаў, які дазваляе выкарыстоўваць групу звязаных паміж сабой даных як адзінае цэлае. Асобны элемент структуры называюць полем. Агульная форма аб’яўлення структуры: struct імя_тыпу { тып_1 элемент_1; тып_2 элемент_2; … тып_n элемент_n; }; Апісваецца структура да функцыі main. Пасля закрывальнай фігурнай дужкі «}» у аб’яве структуры абавязкова ставіцца кропка з коскай. У прыкладзе 16.1 прыведзена апісанне структур. Апісанне структуры стварае новы тып даных. Для таго каб выкарыстоўваць структуру, трэба апісаць пераменную адпаведнага тыпу (прыклад 16.2). Ініцыялізаваць структуру можна, прысвоіўшы яе пераменным значэнні з дапамогай сінтаксісу ініцыялізацыі (аналагічна ініцыялізацыі масіваў): у фігурных дужках перадаюцца значэнні для элементаў структуры ў тым парадку, у якім яны апісаны (прыклад 16.3). Для структур вызначана адзіная аперацыя — прысвойванне. Усе астатнія дзеянні пры апрацоўцы структур адбываюцца з яе палямі. Зварот да поля структуры адбываецца праз кропку «.» (прыклад 16.4). З палямі структуры можна выконваць усе дзеянні, вызначаныя для тыпу, якім апісана поле. У якасці поля структуры можа быць выкарыстана іншая структура. Яна павінна быць апісана да таго, як выкарыстоўваецца (прыклад 16.5). Пры выкарыстанні структур асяроддзе праграміравання выводзіць падказку са спісам усіх палёў структуры пасля таго, як карыстальнік паставіць кропку. Імя поля можна выбраць са спіса (прыклад 16.6). Структуры могуць перадавацца ў функцыі як параметры. Функцыя можа вяртаць значэнне ў выглядзе структуры. |
Прыклад 16.1. Апісанне структур. Структура для апісання пункта на плоскасці:
Структура для апісання даты:
Структура для апісання кнігі:
Структура, што апісвае студэнта, які паступіў у ВНУ па выніках ЦТ:
У дадзеным прыкладзе для кожнага студэнта захоўваецца яго прозвішча (fam), горад, з якога ён прыехаў (gorod), год нараджэння (god_r). У вектары otmх[1] захоўваюцца тры адзнакі, атрыманыя на ЦТ, поле sr_bal прызначана для захоўвання сярэдняга бала атэстата. Прыклад 16.2. Апісанне пераменных тыпу структура.
Тут апісаны пераменныя А і В тыпу tchk (два пункты); пераменныя d1 і d2 тыпу date (дзве даты); пераменная K тыпу kniga і пераменная gruppa, што з’яўляецца масівам, які змяшчае апісанне для 30 студэнтаў. Прыклад 16.3. Ініцыялізацыя структуры:
Пункт А мае каардынаты (3.2; –4.1): кніга K — «Комбинаторика», аўтар — Н. Я. Виленкин, у ёй 400 старонак, выдадзена ў 2013 г. Прыклад 16.4. Зварот да палёў структуры.
Прыклад 16.5. Апісанне структуры для захоўвання адрэзка, канцы якога з’яўляюцца пунктамі.
Выкарыстанне:
Або так
Прыклад 16.6. Падказка сістэмы. [1] Пры апісанні вектара ў якасці поля структуры нельга ініцыялізаваць элементы даных адразу ў дужках (vector <int> otm(3)), трэба прысвоіць полю ініцыялізуемае значэнне. |
16.2. Выкарыстанне структур для апісання геаметрычных аб’ектаў
Самым простым геаметрычным аб’ектам на плоскасці з’яўляецца пункт, які задаецца сваімі каардынатамі. Пункт апісаны ў прыкладзе 16.1. Пары пунктаў на плоскасці вызначае адрэзак, які апісаны ў прыкладзе 16.5. Яшчэ адным важным геаметрычным аб’ектам на плоскасці з’яўляецца прамая. У матэматыцы выкарыстоўваюць розныя спосабы апісаць прамую з дапамогай ураўненняў. Ураўненне прамой на плоскасці ў прамавугольнай сістэме каардынат — гэта некаторае ўраўненне з дзвюма пераменнымі x і y, якое ператвараецца ў тоеснасць пры падстаноўцы ў яго каардынат любога пункта гэтай прамой. Любая форма ўраўнення прамой мае параметры. Выкарыстоўваючы параметры ўраўнення, можна апісаць адпаведную структуру (прыклад 16.7). Розныя формы ўраўнення прамой (у большасці выпадкаў) могуць быць прыведзены адна да адной, паколькі яны апісваюць адзін і той жа аб’ект. Выкарыстанне той ці іншай формы ўраўнення прамой залежыць ад задачы. Ураўненне прамой у агульным выглядзе з’яўляецца найбольш універсальным. Любая іншая форма ўраўнення прамой заўсёды можа быць прыведзена да агульнага ўраўнення прамой. Прыклад 16.8. Вядомы каардынаты двух пунктаў, праз якія праходзіць прамая. Атрымаць запіс ураўнення гэтай прамой у агульным выглядзе. Этапы выканання задання I. Зыходныя даныя: пераменная p1 (структура, якая апісвае ўраўненне прамой, што праходзіць праз два пункты). II. Вынік: пераменная p2 (структура, якая апісвае ўраўненне прамой у агульным выглядзе). III. Алгарытм рашэння задачы.
4. Вывад выніку. IV. Апісанне пераменных: p1, p2 – struct. Прыклад 16.9. Вядомы каардынаты пункта і каэфіцыенты ўраўнення прамой у агульным выглядзе. Вызначыць, ці належыць пункт прамой. Этапы выканання задання I. Зыходныя даныя: пераменная AB (структура, якая апісвае ўраўненне прамой у агульным выглядзе), A(структура, якая апісвае пункт). II. Вынік: паведамленне «так» або «не». III. Алгарытм рашэння задачы.
IV. Апісанне пераменных: A, AB – struct. Прыклад 16.10. Вядомы каардынаты канцоў адрэзка і каэфіцыенты ўраўнення прамой у агульным выглядзе. Вызначыць, ці маюць прамая і адрэзак агульныя пункты. Этапы выканання задання I. Зыходныя даныя: пераменная CD (структура, якая апісвае ўраўненне прамой у агульным выглядзе), АB (структура, якая апісвае адрэзак). II. Вынік: паведамленне «так» або «не». III. Алгарытм рашэння задачы.
3.1. Адзін з канцоў адрэзка ляжыць на прамой.
IV. Апісанне пераменных: CD, AB – struct. Прыклад 16.11. Многавугольнік зададзены спісам сваіх вяршынь у парадку абходу. Для кожнай вяршыні вядомы яе каардынаты на плоскасці. Знайсці перыметр многавугольніка. Этапы выканання задання I. Зыходныя даныя: n — колькасць пунктаў, a — масіў пунктаў. II. Вынік: перыметр многавугольніка. III. Алгарытм рашэння задачы.
IV. Апісанне пераменных: n – int, a – vector<tchk>. |
Прыклад 16.7. Формы запісу ўраўнення прамой і адпаведныя ім апісанні структур. Ураўненне прамой з вуглавым каэфіцыентам: y = kx + l. Уравнение не позволяет описать прямую, параллельную оси OY.
Ураўненне прамой у адрэзках: Параметры а і b — велічыні адрэзкаў, якія адсякаюцца прамой на восях каардынат. Ураўненне не дазваляе апісаць прамую, якая праходзіць праз пачатак каардынат.
Ураўненне прамой, якая праходзіць праз два пункты ) і :
Агульнае ўраўненне прамой:
Прыклад 16.8. V. Праграма:
VI. Тэсціраванне. Прыклад 16.9. V. Праграма:
VI. Тэсціраванне. Прыклад 16.10. V. Праграмма:
VI. Тэсціраванне. Адрэзак цалкам ляжыць на прамой. Адзін канец адрэзка ляжыць на прамой. Прамая перасякае адрэзак. Няма агульных пунктаў. Прыклад 16.11. V. Праграма:
VI. Тэсціраванне. |
16.3. Выкарыстанне структур для апісання даты і часу
Прыклад 16.12. Бягучы час зададзены ў гадзінах, мінутах і секундах. Колькі часу будзе праз k секунд? Этапы выканання задання I. Зыходныя даныя: v — структура, якая апісвае час, k — колькасць секунд. II. Вынік: новы час. III. Алгарытм рашэння задачы. 1. Увод зыходных даных. 2.1.Перавядзём бягучы час у секунды. Для гэтага падсумуем колькасць гадзін, памножаную на 3600 (колькасць секунд у гадзіне), колькасць мінут, памножаную на 60, і колькасць секунд. 3. Вывад выніку. IV. Апісанне пераменных: k – int, v – struct. Прыклад 16.13. Зададзены дзве даты. Вызначыць колькасць дзён паміж імі. Этапы выканання задання I. Зыходныя даныя: d1, d2 — структуры, якія апісваюць даты. II. Вынік: колькасць дзён паміж двума датамі. III. Алгарытм рашэння задачы.
дзе d — нумар дня ў даце, d1, d2, ... dm – 1 — колькасць дзён у месяцах, якія папярэднічаюць зададзенаму, (y – 1900) * 365 — колькасць дзён за поўны мінулы год да бягучай даты, (g – 1900)/4 — колькасць дзён, якія трэба дабавіць за мінулыя высакосныя гады. Формула будзе правільнай для дат ад 01.01.1900 да 28.02.2100. (2100 год не з’яўляецца высакосным, паколькі 2100 дзеліцца на 100, але не дзеліцца на 400). 3. Створым функцыю date_to_int. |
Прыклад 16.12. V. Праграма:
VI. Тэсціраванне. Прыклад 16.13. V. Праграма:
VI. Тэсціраванне. У функцыі пераўтварэння неабходна дадатковая праверка для выпадку, калі бягучы год з’яўляецца высакосным. Тады дадатковы нумар павінен быць дабаўлены толькі да дат пасля 28 лютага. 1900 г. выключаецца, паколькі ён не з’яўляецца высакосным. |
Пытанні к параграфу
1. Які тып даных называюць структурай? 2. Як называецца асобны элемент структуры? 3. Як апісваюцца структуры? 4. Якія структуры можна выкарыстоўваць для апісання геаметрычных аб’ектаў? 5. Якія структуры можна выкарыстоўваць для апісання даты і часу? |
Практыкаванні
1. Напішыце праграму, якая пераўтварае ўраўненне прамой у адрэзках у агульнае ўраўненне прамой.
2. Напішыце праграму, якая пераўтварае агульнае ўраўненне прамой ва ўраўненне прамой з вуглавым каэфіцыентам. Прадугледзець праверку выпадку, калі гэта зрабіць немагчыма.
3. Напішыце праграму, якая пераўтварае ўраўненне прамой, што праходзіць праз два пункты, ва ўраўненне прамой з вуглавым каэфіцыентам. Калі гэта немагчыма, то атрымаць ураўненне ў выглядзе х = х0.
4. Напішыце праграму, якая вызначыць узаемнае размяшчэнне пункта з каардынатамі (x0, y0) і прамой у = kx + b.
5. Напішыце праграму, якая вызначыць узаемнае размяшчэнне пунктаў з каардынатамі (x1, y1), (x2, y2) і прамой Ax + By + C = 0.
6. Напішыце праграму, якая вызначыць узаемнае размяшчэнне пункта з каардынатамі (x0, y0) і дзвюх паралельных прамых Ax + By + C1 = 0 і Ax + By + C2 = 0.
7. Многавугольнік зададзены спісам сваіх вяршынь у парадку абходу. Для кожнай вяршыні вядомы яе каардынаты на плоскасці. Знайдзіце даўжыню самай кароткай дыяганалі многавугольніка.
8. Многавугольнік зададзены спісам сваіх вяршынь у парадку абходу. Для кожнай вяршыні вядомы яе каардынаты на плоскасці. Атрымайце масіў прамых, зададзеных ураўненнем прамой, якая праходзіць праз два пункты. Кожная прамая праходзіць праз старану многавугольніка. Пераўтварыце кожнае ўраўненне ў агульнае ўраўненне прамой. Выведзіце гэтыя ўраўннні. * Ці ёсць у многавугольніка дзве розныя стараны, якія ляжаць на адной прамой (гэта можа быць у нявыпуклага многавугольніка)?
9. Для праверкі таго, што пункт (x0, y0) ляжыць унутры трохвугольніка, зададзенага вяршынямі (x1, y1), (x2, y2), (x3, y3), можна выкарыстаць наступны алгарытм:
- Правесці прамую праз пункты (x1, y1), (x2, y2).
- Калі пункты (x0, y0) і (x3, y3) ляжаць у розных паўплоскасцях адносна гэтай прамой, то пункт (x0, y0) ляжыць звонку.
- Калі пункты (x0, y0) і (x3, y3) ляжаць у адной паўплоскасці, то выканаць аналагічныя праверкі для астатніх вяршынь.
- Калі для ўсіх трох прамых пункт (x0, y0) і астатняя вяршыня ляжаць у адной паўплоскасці, то пункт (x0, y0) унутры трохвугольніка
Реализовать описанный выше алгоритм.
10*. Напісаць праграму для праверкі, ці ляжыць пункт (x0, y0) унутры выпуклага многавугольніка.
11. Уводзяцца два значэнні часу: гадзіны, мінуты, секунды. Колькі секунд прайшло паміж імі? Час паказаны ў межах адных сутак.
12. Уводзяцца два значэнні часу: гадзіны, мінуты, секунды. Паміж імі магло прайсці больш за суткі (але не больш за двое сутак). Колькі прайшло часу паміж імі? Адказ атрымаць у гадзінах, мінутах і секундах.
13. Уводзіцца дата: дзень, месяц, год. Паменшыць уведзеную дату на t дзён.
14. Дадзена дата. Вывесці, колькі дзён да яе засталося (або колькі дзён прайшло).
15. Уводзіцца дата: месяц, год. Вызначыць дзень тыдня. Для вызначэння дня тыдня можна выкарыстаць наступныя формулы:
a = (14 − месяц) / 12
y = год − a
m = месяц + 12 * a − 2
Дзень Тыдня = (дзень + y + y / 4 − y / 100 + y / 400 + (31 * m) / 12) % 7
Усе дзяленні цэлалікавыя. Вынік: 0 — нядзеля, 1 — панядзелак і г. д.
16. Дадзена дата. Згенерыраваць расклад з гэтай даты на t дзён па такім прынцыпе: суткі праз трое. Калі рабочы дзень прыпадае на нядзелю, то ён пераносіцца на панядзелак. У выніку паказаць даты рабочых дзён.
17*. Дадзены рэжым работы інтэрнэт-магазіна. ПН 9:00 — 21:00, АЎТ 9:00 — 21:00, С 9:00 — 21:00, ЧЦ 9:00 — 21:00, ПТ 9:00 — 21:00, СБ 10:00 — 18:00, Н 10:00 — 18:00. І дадзены дата і час. Вызначыць, ці працуе ў гэты час магазін і колькі мінут да канца рабочай змены.