Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

БистСма классов для описания плоских гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Абстрактный класс Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ — Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ создания экзСмпляров. АбстрактныС классы Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ООП — ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Абстрактный класс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ (ΠΈ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ) абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°. Абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ся для класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ объявлСн, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ для Π΅Π³ΠΎ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

БистСма классов для описания плоских гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚: Π’Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ образования Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 230 100.62 Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, комплСксы, систСмы ΠΈ ΡΠ΅Ρ‚ΠΈ ΠšΠ£Π Π‘ΠžΠ’ΠΠ― Π ΠΠ‘ΠžΠ’Π ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅: «ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»

Π›Ρ‹ΡΡŒΠ²Π°, 2013 Π³.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ тСорСтичСскиС свСдСния

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ВСорСтичСский ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎ Π·Π°Π΄Π°Ρ‡Π΅

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹

ВСстированиС

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А. ΠŸΠΎΠ»Π½Ρ‹ΠΉ листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

класс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° гСомСтричСский Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° являСтся ваТнСйшСй Ρ‡Π°ΡΡ‚ΡŒΡŽ обучСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ любого Ρ‚ΠΈΠΏΠ° Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡˆΠ½ΠΈΠΉ дСнь. ЦСлью Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ основных ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ тСорСтичСскиС свСдСния ΠžΠ±ΡŠΠ΅ΠΌΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΠΌΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅, ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΠΌΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ООП) — ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ основными концСпциями ΡΠ²Π»ΡΡŽΡ‚ΡΡ понятия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ².

ООП Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ развития ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования, Π³Π΄Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ‹. Для дальнСйшСго развития ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования часто большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ понятия события (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, КОП).

Π’ Π½Π°ΡΡ‚оящСС врСмя количСство ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… языков программирования (список языков), Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ, являСтся наибольшим ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°ΠΌ. Π’ ΠΎΠ±Π»Π°ΡΡ‚ΠΈ систСмного программирования Π΄ΠΎ ΡΠΈΡ… ΠΏΠΎΡ€ примСняСтся ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования, ΠΈ ΠΎΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ½ΡΡ‚Ρ‹ΠΌ языком программирования являСтся язык C. Π₯отя ΠΏΡ€ΠΈ взаимодСйствии систСмного ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠ΅ влияниС стали ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ языки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. НапримСр, ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ программирования являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ориСнтированная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Qt, написанная Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C++.

Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ ООП находится понятиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ — это ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ сообщСния, ΠΈ ΠΊΠΎΡ‚орая ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π° Π½ΠΈΡ… Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ свои Π΄Π°Π½Π½Ρ‹Π΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ — это экзСмпляр класса. Π”Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° скрыты ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘ΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… называСтся инкапсуляциСй.

НаличиС инкапсуляции достаточно для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΡΡ‚ΠΈ языка программирования, Π½ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ориСнтированности — для этого трСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ наслСдования.

Но Π΄Π°ΠΆΠ΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ инкапсуляции ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ язык программирования Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ООП. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ прСимущСства ООП ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π² ΡΠ·Ρ‹ΠΊΠ΅ программирования Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ; Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ спСцификациСй ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Π² ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках программирования ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, относящимся ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ классу. Класс прСдставляСт собой ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ программистом составной Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π² ΡΠΎΡΡ‚Π°Π²Π΅:

Поля Π΄Π°Π½Π½Ρ‹Ρ… ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ Π²ΡΠ΅, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅), Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ состояниС (свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области). Иногда поля Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ свойствами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π°. ЀизичСски поля ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой значСния (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, константы), ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ классу.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, связанныС с ΠΊΠ»Π°ΡΡΠΎΠΌ. Они ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ.

ΠšΠ»Π°ΡΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Класс-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ всС поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса-родитСля, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ… ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΌΠΈ Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ΅ наслСдованиС (класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ), лишь Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… допускаСтся мноТСствСнноС наслСдованиС — ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ класса ΠΎΡ‚ Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ классов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ.

ВзаимодСйствиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв обСспСчиваСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ обСспСчиваСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ срСдствами ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ чисто Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ Π»ΠΎΠ³ΠΈΠΊΡƒ функционирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊ ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΠΌΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΊΡ€Ρ‹Ρ‚ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΡ€ΠΈ доступности ΠΈΠ·Π²Π½Π΅ Π²Ρ‚ΠΎΡ€Ρ‹Ρ…. Для этого Π² ΡΠ·Ρ‹ΠΊΠΈ вводятся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ синтаксичСскиС конструкции, явно Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π° класса. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ это ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ public, protected ΠΈ private, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠ΅, соотвСтствСнно, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ класса, Ρ‡Π»Π΅Π½Ρ‹ класса, доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ²-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΠΈ ΡΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅, доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΈΡ… Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ смысл Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… языках.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа

Поля класса, Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны ΠΈΠ·Π²Π½Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊΠΎΠΉ доступ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π±Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ поля ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ скрытыми (Π»ΠΈΠ±ΠΎ язык Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΠΎΠ»ΡΠΌ класса ΠΈΠ·Π²Π½Π΅), Π° Π΄Π»Ρ доступа ΠΊ Π½Π°Ρ…одящимся Π² ΠΏΠΎΠ»ΡΡ… Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ доступа. Π’Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ поля, Π»ΠΈΠ±ΠΎ производят запись Π² ΡΡ‚ΠΎ ΠΏΠΎΠ»Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния. ΠŸΡ€ΠΈ записи ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ записываСмого значСния ΠΈ, ΠΏΡ€ΠΈ нСобходимости, произвСсти Π΄Ρ€ΡƒΠ³ΠΈΠ΅ манипуляции с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ (Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ согласованными). ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΅Ρ‰Ρ‘ аксСссорами (ΠΎΡ‚ Π°Π½Π³Π». access — доступ), Π° ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ — Π³Π΅Ρ‚Ρ‚Π΅Ρ€Π°ΠΌΠΈ (Π°Π½Π³Π». get — Ρ‡Ρ‚Π΅Π½ΠΈΠ΅) ΠΈ ΡΠ΅Ρ‚Ρ‚Π΅Ρ€Π°ΠΌΠΈ (Π°Π½Π³Π». set — запись).

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ рСализуСтся ΠΏΡƒΡ‚Ρ‘ΠΌ ввСдСния Π² ΡΠ·Ρ‹ΠΊ ΠΏΡ€Π°Π²ΠΈΠ», согласно ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° «ΠΊΠ»Π°ΡΡ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Π΅Ρ‘ ΠΊΠ»Π°ΡΡΠ°.

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ систСму классов для описания плоских гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€: ΠΊΡ€ΡƒΠ³, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², пСрСмСщСния Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ, измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡ Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»; вычислСния ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΈ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΠΈΠ³ΡƒΡ€. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отыскиваСт ΠΊΡ€ΡƒΠ³ наимСньшСго радиуса, содСрТащий всС Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹.

ВСорСтичСский ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎ Π·Π°Π΄Π°Ρ‡Π΅ БистСма ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Для описания систСмы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π°ΠΌ понадобится понятиС абстрактного класса.

Абстрактный класс Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ — Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ создания экзСмпляров. АбстрактныС классы Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ООП — ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Абстрактный класс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ (ΠΈ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ) абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°. Абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ся для класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ объявлСн, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ для Π΅Π³ΠΎ нСабстрактных ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ². АбстрактныС классы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ абстракции, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ наибольший ΠΎΠ±ΡŠΡ‘ΠΌ ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠ΅Π΅ содСрТаниС.

На ΡΠ·Ρ‹ΠΊΠ΅ программирования C++ абстрактный класс ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ чистой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΈΠΏΠ° virtual _сигнатура_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ_ =0;, которая, ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½Π°.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ vector

Для Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ vector.

Π¨Π°Π±Π»ΠΎΠ½ vector располоТСн Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Как ΠΈ Π²ΡΠ΅ стандартныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΎΠ½ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΡ‘Π½ std. Π”Π°Π½Π½Ρ‹ΠΉ интСрфСйс эмулируСт Ρ€Π°Π±ΠΎΡ‚Ρƒ стандартного массива C (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, быстрый ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности, Π²Ρ€ΠΎΠ΄Π΅ автоматичСского измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΡ€ΠΈ вставкС ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнтов.

ВсС элСмСнты Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. НапримСр, нСльзя совмСстно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠΎΠ² char ΠΈ int Π² ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. Класс vector ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ стандартным Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для доступа ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ, добавлСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ элСмСнтов, Π° Ρ‚Π°ΠΊΠΆΠ΅ получСния количСства Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… элСмСнтов.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ:

vector myVector;

Доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ осущСствляСтся Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ массива: myVector[i]=4;

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция size (), Π° ΠΎΡ‡ΠΈΡΡ‚ΠΊΠ° осущСствляСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ clear ().

ΠŸΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΈ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Ρ‹ гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€.

ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°: S=a2. ΠŸΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€: P=a*4.

ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°: S=a*b. ΠŸΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€: P=(a+b)*2.

ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π°: S=r2. ΠŸΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€: P=2r.

ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° ΡƒΠ³ΠΎΠ» ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° ΡƒΠ³ΠΎΠ» ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹:

x = x0 + (x1-x0)*cos (alpha) — (y1-y0)*sin (alpha) y = y0 + (x1-x0)*sin (alpha) + (y1-y0)*cos (alpha)

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ БистСма классов Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы классов создадим абстрактный класс Shape (Ρ„ΠΎΡ€ΠΌΠ°), Π½Π°ΠΏΠΎΠ»Π½ΠΈΠ² Π΅Π³ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ функциями Move, Resize, Rotate, FindSquare, FindPerimeter.

УнаслСдуСм ΠΎΡ‚ Shape классы Circle ΠΈ Rectangle — ΠΊΡ€ΡƒΠ³ ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. Π’ ΡΡ‚ΠΈΡ… классах Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ всС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ями ΠΊΠ°ΠΆΠ΄ΠΎΠΉ гСомСтричСской Ρ„ΠΈΠ³ΡƒΡ€Ρ‹. Π—Π°Ρ‚Π΅ΠΌ унаслСдуСм ΠΎΡ‚ Rectangle класс Quadrate — ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² Π½Ρ‘ΠΌ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΡΠΎΠΎΡ‚вСтствии с Π΅Π³ΠΎ гСомСтричСскими особСнностями. Удобством Π΄Π°Π½Π½ΠΎΠΉ систСмы Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΏΠΎΠ»Π΅ΠΉ классов Quadrate ΠΈ Rectangle, приводя ΠΈΡ… ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Rectangle.

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€ Для Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€ создаётся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ vector с Ρ‚ΠΈΠΏΠΎΠΌ Shape. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, анализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ type (Ρ‚ΠΈΠΏ), ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ приводится ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΌΠΊΡƒ класса Shape.

РСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ классов Рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для класса Rectangle.

Ѐункция Move прибавляСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ ΡƒΠ³Π»ΠΎΠ² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.

Ѐункция Rotate ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, описанныС Π² Ρ‚СорСтичСской части для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΡƒΠ³Π»ΠΎΠ² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.

Ѐункция Resize вычисляСт Π²Π΅ΠΊΡ‚ΠΎΡ€ — Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стороны ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° (Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ для случая, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ стороны Π½Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ осям ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠΉ плоскости), Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ (ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΌΡƒ), ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ Π½Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ стороны (ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°). ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ прибавляСтся (ΠΈΠ»ΠΈ вычитаСтся — всСгда растягивая ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π½Π°Ρ€ΡƒΠΆΡƒ) ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ ΡƒΠ³Π»Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΡƒΠ³Π»Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ FindSquare ΠΈ FindPerimeter Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΈ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€ соотвСтствСнно ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌ, прСдставлСнным Π² Ρ‚Π΅ΠΎΡ€. части.

ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° являСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ поля side — сторона, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎ ΠΎΠ±ΠΎΠΈΠΌ направлСниям.

Рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для класса Circle.

Ѐункция Move прибавляСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊΡ€ΡƒΠ³Π°.

Ѐункция Rotate пуста. Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΡ€ΡƒΠ³Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡ‚разится Π½Π° Π½Π°ΡˆΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ….

Ѐункция Resize ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ радиус Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ FindSquare ΠΈ FindPerimeter Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΈ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€ соотвСтствСнно ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌ, прСдставлСнным Π² Ρ‚Π΅ΠΎΡ€. части.

Ѐункция Main

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ многоступСнчатноС тСкстовоС мСню ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Π²Π²ΠΎΠ΄Π° Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΡƒΠ½ΠΊΡ‚Π° мСню. МСню позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²ΡΠ΅Ρ… Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ…, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π°Π΄ Π½ΠΈΠΌΠΈ всС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ мСню являСтся поиск Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΡ€ΡƒΠ³Π° минимального радиуса, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ всСго Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ.

Поиск наимСньшСго ΠΊΡ€ΡƒΠ³Π°, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ всС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΡ€ΡƒΠ³, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ максимальноС расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Ρ„ΠΈΠ³ΡƒΡ€ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ. Для этого ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ.

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ-ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. Π’ ΡΡ‚ΠΎΠΌ случаС Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ расстояниС ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ наибольшСС ΠΈΠ· Π½ΠΈΡ….

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ-ΠΊΡ€ΡƒΠ³. Π’ ΡΡ‚ΠΎΠΌ случаС вычисляСтся расстояниС ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π΄ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊΡ€ΡƒΠ³Π° (для Π΄Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°). Для этого ΠΊ Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π΄ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊΡ€ΡƒΠ³Π° прибавляСтся радиус ΠΊΡ€ΡƒΠ³Π° (ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ удалённая Ρ‚ΠΎΡ‡ΠΊΠ° Π»Π΅ΠΆΠΈΡ‚ Π½Π° ΠΏΡ€ΡΠΌΠΎΠΉ, проходящСй Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅Π½Ρ‚Ρ€). Из ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… расстояний выбираСтся наибольшСС.

ΠšΡ€ΡƒΠ³-ΠΊΡ€ΡƒΠ³. НаиболСС ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ окруТностСй Π»Π΅ΠΆΠ°Ρ‚ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ стороны прямой, проходящСй Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅Π½Ρ‚Ρ€Ρ‹ этих окруТностСй. ВычисляСм расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ†Π΅Π½Ρ‚Ρ€Π°ΠΌΠΈ ΠΊΡ€ΡƒΠ³ΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ радиусу ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π°.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ, благодаря наслСдованию класса Quadrate ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° Rectangle, Π½Π΅Ρ‚ нСобходимости Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ. ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ рассматриваСтся Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ структуру (4 ΡƒΠ³Π»Π°).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, получая максимальноС расстояниС для Π΄Π²ΡƒΡ… Ρ„ΠΈΠ³ΡƒΡ€, сравниваСм Π΅Π³ΠΎ с ΡΠΎΡ…Ρ€Π°Π½Ρ‘Π½Π½Ρ‹ΠΌ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ, Π² ΡΠ»ΡƒΡ‡Π°Π΅ прСвосходства ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, записываСм Π΅Π³ΠΎ Π² ΡΡ‚Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ максимальноС расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ всСх Ρ„ΠΈΠ³ΡƒΡ€ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ искомого ΠΊΡ€ΡƒΠ³Π°. Π¦Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ сСрСдина ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ°, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π³ΠΎ Π΄Π²Π΅ эти максимально ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ.

ВСстированиС ВСст 1.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π° ΠΊΡ€ΡƒΠ³Π°: r=30, c=(-25; 30) ΠΈ r=20, c=(20; 70).

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ для Π½ΠΈΡ… поиск минимального ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΡ€ΡƒΠ³Π°.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Рисунок 1. Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ тСста ВСст 2.

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (-80, -10), сторона=20

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (-35, -10), (0, -25)

ΠšΡ€ΡƒΠ³ r=20, c=(30, 50)

Рисунок 2. Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ тСста ВСст 3.

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (-15, -40), сторона 10

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (15, 15), сторона 5

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (-20, -5), (10, -15)

Рисунок 3. Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ тСста ВСст 4.

ΠšΡ€ΡƒΠ³ r=40, c=(-15, 5).

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Рисунок 4. Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠ³ΠΎ тСста ВСст 5.

ΠšΡ€ΡƒΠ³ r=25, c=(15, 20).

ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (5,40), (25, 15)

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ (15, 20), сторона 15.

ВСст 6.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (15, 75), (25, 25) ΠΈ Π½Π°ΠΉΠ΄Ρ‘ΠΌ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΡ€ΡƒΠ³.

Рисунок 6.1. Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ ΡˆΠ΅ΡΡ‚ΠΎΠ³ΠΎ тСста Π΄ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠŸΠΎΠ²Π΅Ρ€Π½Ρ‘ΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π½Π° ΡƒΠ³ΠΎΠ» 30 градусов.

Рисунок 6.2. ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΠ»ΠΈ Π½Π° 30 градусов Π‘Π½ΠΎΠ²Π° Π½Π°ΠΉΠ΄Ρ‘ΠΌ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΡ€ΡƒΠ³.

Рисунок 6. Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ ΡˆΠ΅ΡΡ‚ΠΎΠ³ΠΎ тСста

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΎΠ΄Π΅Π»Π°Π² ΠΊΡƒΡ€ΡΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, я ΠΏΡ€ΠΈΠΎΠ±Ρ€Ρ‘Π» Π½Π°Π²Ρ‹ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: наслСдования классов, использования абстрактных классов, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ нСсколько гСомСтричСских Π·Π°Π΄Π°Ρ‡ ΠΊΠ°ΠΊ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΡƒΠ», Ρ‚Π°ΠΊ ΠΈ Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° собствСнными силами. ΠŸΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Ρ‘Π½Π½Ρ‹Π΅ умСния бСзусловно Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΌΠ½Π΅, ΠΊΠ°ΠΊ студСнту направлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΈ.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников

ВикипСдия — http://ru.wikipedia.org/

Π€ΠΎΡ€ΡƒΠΌ программистов ΠΈ ΡΠΈΡΠ°Π΄ΠΌΠΈΠ½ΠΎΠ² — http://www.cyberforum.ru/

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А. ΠŸΠΎΠ»Π½Ρ‹ΠΉ листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

#include

#include

#include

using namespace std;

class Shape //ΠΎΠ±Ρ‰ΠΈΠΉ класс Ρ„ΠΈΠ³ΡƒΡ€

{

public:

float Perimeter, Square, CenterX, CenterY, Angle; //ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для всСх Ρ„ΠΈΠ³ΡƒΡ€

int type; //Ρ‚ΠΈΠΏ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹

//Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

virtual void Move (float X, float Y) =0;

virtual void Resize (float X, float Y) =0;

virtual void Rotate (float Kangle) =0;

virtual void FindSquare () =0;

virtual void FindPerimeter () =0;

};

class Rectangle: public Shape //ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

{

public:

float LTX, LTY, LDX, LDY, RDX, RDY, RTX, RTY; //ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΡƒΠ³Π»ΠΎΠ²

Rectangle (){};

Rectangle (float KLTX, float KLTY, float KRDX, float KRDY) //конструктор

{

type=2; //Π·Π°Π΄Π°Ρ‘ΠΌ Ρ‚ΠΈΠΏ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹

LTX=KLTX; //ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹

LTY=KLTY;

RDX=KRDX;

RDY=KRDY;

LDX=LTX;

LDY=RDY;

RTX=RDX;

RTY=LTY;

CenterX=(RDX-LDX)/2.0+LDX; //Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π°

CenterY=(LTY-LDY)/2.0+LDY;

}

void Move (float X, float Y) //ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π° X, Y

{

//просто сдвинСм всС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹

LTX+=X;

LTY+=Y;

LDX+=X;

LDY+=Y;

RDX+=X;

RDY+=Y;

RTX+=X;

RTY+=Y;

CenterX+=X;

CenterY+=Y;

}

void Resize (float X, float Y) //ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€

{

float XP=cos (Angle)*Y*1.0; //Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€-сдвиг Ρ‚ΠΎΡ‡ΠΊΠΈ для ΡˆΠΈΡ€ΠΈΠ½Ρ‹

float YP=sin (Angle)*Y*1.0;

LTX-=(XP/2.0); //и свдигаСм

LDX-=(XP/2.0);

RTX+=(XP/2.0);

RDX+=(XP/2.0);

LTY+=(YP/2.0);

RTY-=(YP/2.0);

LDY+=(YP/2.0);

RDY-=(YP/2.0);

float XQ=sin (Angle)*X*1.0; //Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€-сдвиг Ρ‚ΠΎΡ‡ΠΊΠΈ для Π΄Π»ΠΈΠ½Ρ‹

float YQ=cos (Angle)*X*1.0;

LTX+=(XQ/2.0); //и свдигаСм

LDX-=(XQ/2.0);

RTX+=(XQ/2.0);

RDX-=(XQ/2.0);

LTY+=(YQ/2.0);

RTY+=(YQ/2.0);

LDY-=(YQ/2.0);

RDY-=(YQ/2.0);

}

void Rotate (float Kangle) //ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚

{

float angle=-Kangle*3.14/180; //ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΈΠ· Π³Ρ€Π°Π΄ΡƒΡΠΎΠ² Π² Ρ€Π°Π΄ΠΈΠ°Π½Ρ‹

//Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния, Ρ‚.ΠΊ. ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² Ρ…ΠΎΠ΄Π΅ вычислСний, Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ вычислСния Π½ΡƒΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

float KLTX=LTX;

float KLTY=LTY;

float KLDX=LDX;

float KLDY=LDY;

float KRTX=RTX;

float KRTY=RTY;

float KRDX=RDX;

float KRDY=RDY;

LTX = CenterX+ (KLTX-CenterX) * cos (angle) — (KLTY-CenterY) * sin (angle);

LTY = CenterY+ (KLTX-CenterX) * sin (angle) + (KLTY-CenterY) * cos (angle);

RTX = CenterX+ (KRTX-CenterX) * cos (angle) — (KRTY-CenterY) * sin (angle);

RTY = CenterY+ (KRTX-CenterX) * sin (angle) + (KRTY-CenterY) * cos (angle);

LDX = CenterX+ (KLDX-CenterX) * cos (angle) — (KLDY-CenterY) * sin (angle);

LDY = CenterY+ (KLDX-CenterX) * sin (angle) + (KLDY-CenterY) * cos (angle);

RDX = CenterX+ (KRDX-CenterX) * cos (angle) — (KRDY-CenterY) * sin (angle);

RDY = CenterY+ (KRDX-CenterX) * sin (angle) + (KRDY-CenterY) * cos (angle);

Angle-=angle;

}

void FindSquare () //Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ

{

Square=sqrt (pow ((RTX-LTX), 2)+pow ((RTY-LTY), 2))*sqrt (pow ((LDX-LTX), 2)+pow ((LDY-LTY), 2));

}

void FindPerimeter () //ΠΈ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€

{

Perimeter=(sqrt (pow ((RTX-LTX), 2)+pow ((RTY-LTY), 2))+sqrt (pow ((LDX-LTX), 2)+pow ((LDY-LTY), 2)))*2;

}

};

class Quadrate: public Rectangle //ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚

{

public:

float side; //сторона

Quadrate (float KLTX, float KLTY, float Side) //конструктор

{

Rectangle ();//Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ конструктор супСр-класса

type=3; //ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΈΠΏ

side=Side; //ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

LTX=KLTX;

LTY=KLTY;

RDX=KLTX+Side; //ΠΈ вычисляСм Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅

RDY=KLTY-Side;

LDX=LTX;

LDY=RDY;

RTX=RDX;

RTY=LTY;

CenterX=(RDX-LDX)/2.0+LDX; //вычисляСм Ρ†Π΅Π½Ρ‚Ρ€

CenterY=(LTY-LDY)/2.0+LDY;

}

void Resize (float X)

{

float XP=cos (Angle)*X*1.0;

float YP=sin (Angle)*X*1.0;

LTX-=(XP/2.0);

LDX-=(XP/2.0);

RTX+=(XP/2.0);

RDX+=(XP/2.0);

LTY+=(YP/2.0);

RTY-=(YP/2.0);

LDY+=(YP/2.0);

RDY-=(YP/2.0);

float XQ=sin (Angle)*X*1.0;

float YQ=cos (Angle)*X*1.0;

LTX+=(XQ/2.0);

LDX-=(XQ/2.0);

RTX+=(XQ/2.0);

RDX-=(XQ/2.0);

LTY+=(YQ/2.0);

RTY+=(YQ/2.0);

LDY-=(YQ/2.0);

RDY-=(YQ/2.0);

side+=X;

}

void Rotate (float Kangle)

{

float angle=-Kangle*3.14/180;

float KLTX=LTX;

float KLTY=LTY;

float KLDX=LDX;

float KLDY=LDY;

float KRTX=RTX;

float KRTY=RTY;

float KRDX=RDX;

float KRDY=RDY;

LTX = CenterX+ (KLTX-CenterX) * cos (angle) — (KLTY-CenterY) * sin (angle);

LTY = CenterY+ (KLTX-CenterX) * sin (angle) + (KLTY-CenterY) * cos (angle);

RTX = CenterX+ (KRTX-CenterX) * cos (angle) — (KRTY-CenterY) * sin (angle);

RTY = CenterY+ (KRTX-CenterX) * sin (angle) + (KRTY-CenterY) * cos (angle);

LDX = CenterX+ (KLDX-CenterX) * cos (angle) — (KLDY-CenterY) * sin (angle);

LDY = CenterY+ (KLDX-CenterX) * sin (angle) + (KLDY-CenterY) * cos (angle);

RDX = CenterX+ (KRDX-CenterX) * cos (angle) — (KRDY-CenterY) * sin (angle);

RDY = CenterY+ (KRDX-CenterX) * sin (angle) + (KRDY-CenterY) * cos (angle);

Angle-=angle;

}

void FindSquare ()

{

Square=side*side;

}

void FindPerimeter ()

{

Perimeter=side*4;

}

};

class Circle: public Shape //ΠΊΡ€ΡƒΠ³

{

public:

float Radius; //радиус

Circle (float KRadius, float KCenterX, float KCenterY) //конструктор

{

type=1; //Π·Π°Π΄Π°Ρ‘ΠΌ Ρ‚ΠΈΠΏ

Radius=KRadius; //ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

CenterX=KCenterX;

CenterY=KCenterY;

}

void Move (float X, float Y) //ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΠΊΡ€ΡƒΠ³ = ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€

{

CenterX+=X;

CenterY+=Y;

}

void Rotate (float Kangle) {}; //Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΡ€ΡƒΠ³Π° Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ‚ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

void Resize (float X, float Y) //ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ радиус; Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ записан Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π·Π΄Π΅ΡΡŒ, Ρ‚.ΠΊ. это Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

{

Radius+=X;

}

void FindSquare ()

{

Square=M_PI*Radius*Radius;

}

void FindPerimeter ()

{

Perimeter=M_PI*Radius*2;

}

};

int main ()

{

system («chcp 1251»);

vector < Shape* > Shapes; //массив Ρ„ΠΈΠ³ΡƒΡ€

while (1) //Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мСню Π΄ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Enter." << endl << «1. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ» << endl << «2. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ» << endl << «3. Найти ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΡ€ΡƒΠ³, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ всС ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹» << endl << «4. Π’Ρ‹Ρ…ΠΎΠ΄» << endl;

int task;

cin>>task;

if (task==4)

{

break;

}

else if (task==1)

{

if (Shapes.size ()>0)

{

while (1)

{

for (int i=0; i

{

cout<<(i+1)<<". «;

if (Shapes[i]->type==1)

{

Circle *Temp=dynamic_cast (Shapes[i]); //ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΈΠΏΡƒ ΠΊΡ€ΡƒΠ³Π°

cout<<" ΠšΡ€ΡƒΠ³ — Радиус="<Radius<<" Π¦Π΅Π½Ρ‚Ρ€ «<CenterX<<»; «<CenterY<<»; «<

}

else if (Shapes[i]->type==2)

{

Rectangle *Temp=dynamic_cast (Shapes[i]); //ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΈΠΏΡƒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

cout<<" ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ — Π›Π΅Π²Ρ‹ΠΉ Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ Π£Π³ΠΎΠ» «<LTX<<»; «<LTY<<»; ΠŸΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΠ³ΠΎΠ» «<RDX<<»; «<RDY<<» ;" <

}

else if (Shapes[i]->type==3)

{

Quadrate *Temp=dynamic_cast (Shapes[i]); //ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΈΠΏΡƒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

cout<<" ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ — Π›Π΅Π²Ρ‹ΠΉ Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ Π£Π³ΠΎΠ» «<LTX<<»; «<LTY<<»; Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π° «<side<<» ;" <

}

}

cout<<(Shapes.size ()+1)<<". Π’ Π³Π»Π°Π²Π½ΠΎΠ΅ мСню" <

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹" <

int fnum;

cin>>fnum; fnum—;

if (fnum>Shapes.size ()-1) break;

if (Shapes[fnum]->type==1)

{

Circle *Temp=dynamic_cast (Shapes[fnum]);

Temp->FindSquare ();

Temp->FindPerimeter ();

cout<<" ΠšΡ€ΡƒΠ³: Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ" <<" Радиус="<Radius<<" ;" <<" Π¦Π΅Π½Ρ‚Ρ€: «<CenterX<<»; «<CenterY<<»; «<<» ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ="<Square<<" ;" <<" ΠŸΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€="<Perimeter<<" ;" <

}

else if (Shapes[fnum]->type==2)

{

Rectangle *Temp=dynamic_cast (Shapes[fnum]);

Temp->FindSquare ();

Temp->FindPerimeter ();

cout<<" ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ: Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ" <<" Π›Π΅Π²Ρ‹ΠΉ Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ Π£Π³ΠΎΠ»:" <LTX<<"; «<LTY<<» ;" <<" ΠŸΡ€Π°Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» «<RTX<<»; «<RTY<<» ;" <<" Π›Π΅Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ Π£Π³ΠΎΠ»:" <LDX<<"; «<LDY<<» ;" <<" ΠŸΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΠ³ΠΎΠ» «<RDX<<»; «<RDY<<» ;" <<" ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ="<Square<<" ;" <<" ΠŸΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€="<Perimeter<<" ;" <

}

else if (Shapes[fnum]->type==3)

{

Quadrate *Temp=dynamic_cast (Shapes[fnum]);

Temp->FindSquare ();

Temp->FindPerimeter ();

//float sd=sqrt (pow (Temp->LTX-Temp->RTX, 2)+pow (Temp->LTY-Temp->RTY, 2));

cout<<" ΠšΠ²Π°Π΄Ρ€Π°Ρ‚: Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ" <<" Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π°="<side<<" ;" <<" Π›Π΅Π²Ρ‹ΠΉ Π’Π΅Ρ€Ρ…Π½ΠΈΠΉ Π£Π³ΠΎΠ»:" <LTX<<"; «<LTY<<» ;" <<" ΠŸΡ€Π°Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» «<RTX<<»; «<RTY<<» ;" <<" Π›Π΅Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ Π£Π³ΠΎΠ»:" <LDX<<"; «<LDY<<» ;" <<" ΠŸΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΠ³ΠΎΠ» «<RDX<<»; «<RDY<<» ;" <<" ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ="<Square<<" ;" <<" ΠŸΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€="<Perimeter<<" ;" <

}

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Enter" <

cout<<" 1. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€" <<" 2. Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ" <<" 3. ΠŸΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π° ΡƒΠ³ΠΎΠ»" <<" 4. Π’Ρ‹ΠΉΡ‚ΠΈ Π² ΠΌΠ΅Π½ΡŽ" <

int item2;

cin>>item2;

if (item2==1)

{

if (Shapes[fnum]->type==1)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ число, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ радиус" <

float r;

cin>>r;

Circle *Temp=dynamic_cast (Shapes[fnum]);

Temp->Resize (r, 0);

}

if (Shapes[fnum]->type==2)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°" <

float x, y;

cin>>x>>y;

Rectangle *Temp=dynamic_cast (Shapes[fnum]);

Temp->Resize (x, y);

}

if (Shapes[fnum]->type==3)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ стороны ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°" <

float x;

cin>>x;

Quadrate *Temp=dynamic_cast (Shapes[fnum]);

Temp->Resize (x);

}

}

else if (item2==2)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» сдвиг ΠΏΠΎ ΠΎΡΠΈ X, ΠΏΠΎ ΠΎΡΠΈ Y" <

float x, y;

cin>>x>>y;

if (Shapes[fnum]->type==1)

{

Circle *Temp=dynamic_cast (Shapes[fnum]);

Temp->Move (x, y);

}

else if (Shapes[fnum]->type==2)

{

Rectangle *Temp=dynamic_cast (Shapes[fnum]);

Temp->Move (x, y);

}

else if (Shapes[fnum]->type==3)

{

Quadrate *Temp=dynamic_cast (Shapes[fnum]);

Temp->Move (x, y);

}

}

else if (item2==3)

{

if (Shapes[fnum]->type==1)

{

cout<<" ΠšΡ€ΡƒΠ³ вращаСтся, вращаСтся…" <

}

else if (Shapes[fnum]->type==2)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΏΠΎ Ρ‡Π°ΡΠΎΠ²ΠΎΠΉ стрСлкС (Π² Π³Ρ€Π°Π΄ΡƒΡΠ°Ρ…)" <

float ang;

cin>>ang;

Rectangle *Temp=dynamic_cast (Shapes[fnum]);

Temp->Rotate (ang);

}

else if (Shapes[fnum]->type==3)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΏΠΎ Ρ‡Π°ΡΠΎΠ²ΠΎΠΉ стрСлкС (Π² Π³Ρ€Π°Π΄ΡƒΡΠ°Ρ…)" <

float ang;

cin>>ang;

Quadrate *Temp=dynamic_cast (Shapes[fnum]);

Temp->Rotate (ang);

}

}

else {break;}

}

}

else

{

cout<<" На ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹." <

}

}

else if (task==2)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ 1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΠ³; 2, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ; 3, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚" <

int item1;

cin>>item1;

if (item1==1)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» радиус ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π°" <

float r, cx, cy;

cin>>r>>cx>>cy;

Shapes.push_back (new Circle (r, cx, cy));

}

if (item1==2)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» Π΄Π²Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π°, Π·Π°Ρ‚Π΅ΠΌ Π΄Π²Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡƒΠ³Π»Π°" <

float lx, ly, rx, ry;

cin>>lx>>ly>>rx>>ry;

Shapes.push_back (new Rectangle (lx, ly, rx, ry));

}

if (item1==3)

{

cout<<" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» Π΄Π²Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π°, Π·Π°Ρ‚Π΅ΠΌ сторону ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°" <

float lx, ly, sd;

cin>>lx>>ly>>sd;

Shapes.push_back (new Quadrate (lx, ly, sd));

Shapes[Shapes.size ()-1]->type=3;

}

}

else if (task==3) //поиск минимального ΠΊΡ€ΡƒΠ³Π°, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ всС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹

{

float cx, cy, r=-1; //здСсь Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ наибольший Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΡ€ΡƒΠ³ (Ρ†Π΅Π½Ρ‚Ρ€ ΠΈ Ρ€Π°Π΄ΠΈΡƒΡ)

for (int i=0; i

{

if (Shapes[i]->type>1) //для ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°

{

Rectangle *Main=dynamic_cast (Shapes[i]);

for (int j=0; j

{

if (Shapes[j]->type==1) //сравниваСм с ΠΊΡ€ΡƒΠ³ΠΎΠΌ

{

Circle *Temp=dynamic_cast (Shapes[j]);

float dist=sqrt (pow (Main->LTX-Temp->CenterX, 2)+pow (Main->LTY-Temp->CenterY, 2))+Temp->Radius; //поиск расстояния

if (dist>r) //Ссли большС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ радиуса, Ρ‚ΠΎ Π±Π΅Ρ€Ρ‘ΠΌ Π΅Π³ΠΎ

{

//вычисляСм Ρ†Π΅Π½Ρ‚Ρ€

r=dist;

float vectx=((Main->LTX-Temp->CenterX));

float vecty=((Main->LTY-Temp->CenterY));

float vecl=sqrt (vectx*vectx+vecty*vecty);

float prx=vectx*Temp->Radius/vecl;

float pry=vecty*Temp->Radius/vecl;

cx=Temp->CenterX-prx+((vectx+prx)/2.0);

cy=Temp->CenterY-pry+((vecty+pry)/2.0);

}

//Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ³Π»ΠΎΠ² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

dist=sqrt (pow (Main->LDX-Temp->CenterX, 2)+pow (Main->LDY-Temp->CenterY, 2))+Temp->Radius;

if (dist>r)

{

r=dist;

float vectx=((Main->LDX-Temp->CenterX));

float vecty=((Main->LDY-Temp->CenterY));

float vecl=sqrt (vectx*vectx+vecty*vecty);

float prx=vectx*Temp->Radius/vecl;

float pry=vecty*Temp->Radius/vecl;

cx=Temp->CenterX-prx+((vectx+prx)/2.0);

cy=Temp->CenterY-pry+((vecty+pry)/2.0);

}

dist=sqrt (pow (Main->RDX-Temp->CenterX, 2)+pow (Main->RDY-Temp->CenterY, 2))+Temp->Radius;

if (dist>r)

{

r=dist;

float vectx=((Main->RDX-Temp->CenterX));

float vecty=((Main->RDY-Temp->CenterY));

float vecl=sqrt (vectx*vectx+vecty*vecty);

float prx=vectx*Temp->Radius/vecl;

float pry=vecty*Temp->Radius/vecl;

cx=Temp->CenterX-prx+((vectx+prx)/2.0);

cy=Temp->CenterY-pry+((vecty+pry)/2.0);

}

dist=sqrt (pow (Main->RTX-Temp->CenterX, 2)+pow (Main->RTY-Temp->CenterY, 2))+Temp->Radius;

if (dist>r)

{

r=dist;

float vectx=((Main->RTX-Temp->CenterX));

float vecty=((Main->RTY-Temp->CenterY));

float vecl=sqrt (vectx*vectx+vecty*vecty);

float prx=vectx*Temp->Radius/vecl;

float pry=vecty*Temp->Radius/vecl;

cx=Temp->CenterX-prx+((vectx+prx)/2.0);

cy=Temp->CenterY-pry+((vecty+pry)/2.0);

}

}

else //Ссли сравниваСм с ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ/ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ

{

if (i<=j) //ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ²

{

Rectangle *Temp=dynamic_cast (Shapes[j]);

//ΠΈΡ‰Π΅ΠΌ расстояния ΠΎΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅

float dist=sqrt (pow (Main->LTX-Temp->LTX, 2)+pow (Main->LTY-Temp->LTY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->LTX-Temp->LTX));

float vecty=((Main->LTY-Temp->LTY));

cx=Temp->LTX+(vectx/2.0);

cy=Temp->LTY+(vecty/2.0);

}

dist=sqrt (pow (Main->LTX-Temp->LDX, 2)+pow (Main->LTY-Temp->LDY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->LTX-Temp->LDX));

float vecty=((Main->LTY-Temp->LDY));

cx=Temp->LDX+(vectx/2.0);

cy=Temp->LDY+(vecty/2.0);

}

dist=sqrt (pow (Main->LTX-Temp->RTX, 2)+pow (Main->LTY-Temp->RTY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->LTX-Temp->RTX));

float vecty=((Main->LTY-Temp->RTY));

cx=Temp->RTX+(vectx/2.0);

cy=Temp->RTY+(vecty/2.0);

}

dist=sqrt (pow (Main->LTX-Temp->RDX, 2)+pow (Main->LTY-Temp->RDY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->LTX-Temp->RDX));

float vecty=((Main->LTY-Temp->RDY));

cx=Temp->RDX+(vectx/2.0);

cy=Temp->RDY+(vecty/2.0);

//cout<<" «<

}

//———;

dist=sqrt (pow (Main->LDX-Temp->LTX, 2)+pow (Main->LDY-Temp->LTY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->LDX-Temp->LTX));

float vecty=((Main->LDY-Temp->LTY));

cx=Temp->LTX+(vectx/2.0);

cy=Temp->LTY+(vecty/2.0);

}

dist=sqrt (pow (Main->LDX-Temp->LDX, 2)+pow (Main->LDY-Temp->LDY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->LDX-Temp->LDX));

float vecty=((Main->LDY-Temp->LDY));

cx=Temp->LDX+(vectx/2.0);

cy=Temp->LDY+(vecty/2.0);

}

dist=sqrt (pow (Main->LDX-Temp->RTX, 2)+pow (Main->LDY-Temp->RTY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->LDX-Temp->RTX));

float vecty=((Main->LDY-Temp->RTY));

cx=Temp->RTX+(vectx/2.0);

cy=Temp->RTY+(vecty/2.0);

}

dist=sqrt (pow (Main->LDX-Temp->RDX, 2)+pow (Main->LDY-Temp->RDY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->LDX-Temp->RDX));

float vecty=((Main->LDY-Temp->RDY));

cx=Temp->RDX+(vectx/2.0);

cy=Temp->RDY+(vecty/2.0);

}

//———;

dist=sqrt (pow (Main->RDX-Temp->LTX, 2)+pow (Main->RDY-Temp->LTY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->RDX-Temp->LTX));

float vecty=((Main->RDY-Temp->LTY));

cx=Temp->LTX+(vectx/2.0);

cy=Temp->LTY+(vecty/2.0);

}

dist=sqrt (pow (Main->RDX-Temp->LDX, 2)+pow (Main->RDY-Temp->LDY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->RDX-Temp->LDX));

float vecty=((Main->RDY-Temp->LDY));

cx=Temp->LDX+(vectx/2.0);

cy=Temp->LDY+(vecty/2.0);

}

dist=sqrt (pow (Main->RDX-Temp->RTX, 2)+pow (Main->RDY-Temp->RTY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->RDX-Temp->RTX));

float vecty=((Main->RDY-Temp->RTY));

cx=Temp->RTX+(vectx/2.0);

cy=Temp->RTY+(vecty/2.0);

}

dist=sqrt (pow (Main->RDX-Temp->RDX, 2)+pow (Main->RDY-Temp->RDY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->RDX-Temp->RDX));

float vecty=((Main->RDY-Temp->RDY));

cx=Temp->RDX+(vectx/2.0);

cy=Temp->RDY+(vecty/2.0);

}

//———;

dist=sqrt (pow (Main->RTX-Temp->LTX, 2)+pow (Main->RTY-Temp->LTY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->RTX-Temp->LTX));

float vecty=((Main->RTY-Temp->LTY));

cx=Temp->LTX+(vectx/2.0);

cy=Temp->LTY+(vecty/2.0);

}

dist=sqrt (pow (Main->RTX-Temp->LDX, 2)+pow (Main->RTY-Temp->LDY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->RTX-Temp->LDX));

float vecty=((Main->RTY-Temp->LDY));

cx=Temp->LDX+(vectx/2.0);

cy=Temp->LDY+(vecty/2.0);

}

dist=sqrt (pow (Main->RTX-Temp->RTX, 2)+pow (Main->RTY-Temp->RTY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->RTX-Temp->RTX));

float vecty=((Main->RTY-Temp->RTY));

cx=Temp->RTX+(vectx/2.0);

cy=Temp->RTY+(vecty/2.0);

}

dist=sqrt (pow (Main->RTX-Temp->RDX, 2)+pow (Main->RTY-Temp->RDY, 2));

if (dist>r)

{

r=dist;

float vectx=((Main->RTX-Temp->RDX));

float vecty=((Main->RTY-Temp->RDY));

cx=Temp->RDX+(vectx/2.0);

cy=Temp->RDY+(vecty/2.0);

}

}

}

}

}

else //Ссли Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΊΡ€ΡƒΠ³ΠΎΠΌ

{

Circle *Main=dynamic_cast (Shapes[i]);

for (int j=0; j

{

if ((Shapes[j]->type==1) && (i<=j)) //ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ²; ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΊΡ€ΡƒΠ³Π°ΠΌΠΈ

{

if (i==j) //ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для сравнСния с ΡΠ°ΠΌΠΈΠΌ собой

{

float dist=Main->Radius*2; //Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ ΠΊΡ€ΡƒΠ³Π°

if (dist>r)

{

r=dist;

cx=Main->CenterX; //Ρ†Π΅Π½Ρ‚Ρ€ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ

cy=Main->CenterY; //Ρ†Π΅Π½Ρ‚Ρ€ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ

continue; //Π½Π° Π½ΠΎΠ²ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ

}

}

Circle *Temp=dynamic_cast (Shapes[j]);

float dist=(sqrt (pow (Main->CenterX-Temp->CenterX, 2)+pow (Main->CenterY-Temp->CenterY, 2))+Temp->Radius+Main->Radius);

if (dist>r)

{

r=dist;

float vectx=((Main->CenterX-Temp->CenterX));

float vecty=((Main->CenterY-Temp->CenterY));

float vecl=sqrt (vectx*vectx+vecty*vecty);

float prx=vectx*(Main->Radius)/vecl;

float pry=vecty*(Main->Radius)/vecl;

cx=Main->CenterX+((prx));

cy=Main->CenterY+((pry));

cx-=((dist*vectx/vecl)/2.0);

cy-=((dist*vecty/vecl)/2.0);

}

}

}

}

}

r/=2.0; //Π±Ρ‹Π» Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€, стал радиус.

cout<<" Радиус="<<" Π¦Π΅Π½Ρ‚Ρ€: «<<» ;" <<" ;" <

}

}

system («PAUSE»);

Shapes.clear ();

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ