Пример выполнения задания d (Задания для самостоятельного выполнения)
Описание файла
Файл "Пример выполнения задания d" внутри архива находится в папке "Задания для самостоятельного выполнения". PDF-файл из архива "Задания для самостоятельного выполнения", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "информатика" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
Реализация класса треугольников Дтя некоторого множества заданных координатами своих вершин треугольников найти треугольник максимальной площади (если максимальную площадь имеют нвскагько треугольников, то найти первый из них). Предусмотреть возможность перемещения треугольников и проверки включения одного треуголышка в другой. Для реализации этой задачи составить описание класса треугольников на плоскости. Предусмотреть возможность объявления в клиентской программе (яз1 и) экземпляра треугольника с заданными координатами вершин. Предусмотреть наличие в классе методов, обеспечивающих: !). перемещение треугольников на плоскости; 2) определение отношения > для парь) заданных треугольников (мера сравнения — площадь треугсотьников); 3) определение отношения включения типа: «Треугольник ! входит в (не входит в) Треугольник 2».
Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. Отметим, что сейчас мы еще не готовы провести полномасштабную объектноориентированную декомпозицию программы. Для этого нам не хватает знаний, которые будут получены на втором семинаре. Поэтому применим гибридный подход: разработку главного клиента яа1п() проведем по технологии функциональной декомпозиции, а функции-серверы, вызываемые из на1п(), будут использовать объекты.
Начнем с выявления основных понятий/классов для нашей задачи. Первый очевидный класс Тг! апд1 е необходим для представления треугольников. Из нескольких способов определения треугольника на плоскости выберем самьгй простой— через три точки, задающие его вершины. Сделанный выбор опирается на новое понятие, отсутствующее в условии задачи, — понятие точки, Точку на плоскости можно представить различными способами; остановимся на наиболее популярном — с помощью пары вещественных чисел, задающих координаты точки по осям х и у. Таким образом, с понятием точки связывается как минимум пара атрибутов.
В принципе, этого уже достаточно, чтобы подумать о создании класса Ро1пг. Если же представить, что можно делать с объектом типа точки — например, перемещать ее на плоскости или определять ее вхождение в заданную фигуру,— то становится ясным, что такой класс Ро) пг будет полезен. Итак, объектно-ориентированная декомпозиция дала нам два класса: Тг) зпц1е и Ро)пс. Как зти два класса должны быть связаны друг с другом? На втором семинаре мы будем более подробно рассматривать взаимоотношения между классами.
Пока же отметим, что наиболее часто для двух классов имеет место одно из двух: О отношение наследования (отношение Й а); С3 отношение агрегации нли включения (отношение Ьаз а). Если класс В является «частным случаем» класса А, то говорят, что В Ь а А (например, класс треугольников есть частный внд класса многоугольников: Тг1 апд!е В а Ро1удоп). Если класс А содержит в себе объект класса В, то говорят, что А Ьаз а В (напрнмер, класс треугольников может содержать в себе объекты класса точек: Тг1 апц1 е Бал а Рогпс). Теперь уточним один вопрос: в какам порядке мы будем перечислять точки, задавая треугольник? Порядок перечисления вершин важен для нас потому, что в дальнейшем, решая подзадачу определения отношения включения одного треугольника в другой, мы будем рассматривать стороны треугольника как векторы.
Условимся, что вершины треугольника перечисляются в направлении яо часовой стрелке. Займемся теперь основным клиентом — яа)п(). Здесь мы применяем функциональную декомпозицию, или технологию нисходящего проектирования. В соответствии с данной технологией основной алгоритм представляется как последовательность нескольких подзадач. Каждой подзадаче соответствует вызываемая серверная функция. На' начальном этапе проектирования тела этих функций могут быть заполнены «заглушками» вЂ” отладочной печатью.
Если при этом в какой-то серверной функции окажется слабое сцепление, то она в свою очередь разбивается на несколько подзадач. То же самое происходит и с классами, используемыми в программе: по мере реализации подзадач они пополняются необходимыми для этого методами. Такая технология облегчает отладку и поиск ошибок, сокращая общее время разработки программы.
В соответствии с описанной технологией мы представим решение задачи 1.2 как последовательность нескольких этапов. Иногда как бы по забывчивости мы будем допускать некоторые «ляпы», поскольку в процессе поиска ошибок можно глубже понять нюансы программирования с классами. На первом этапе мы напишем код для начального представления классов Ро) пс и Тг1 апц1 е, достаточный для того, чтобы создать несколько объектов типа Тг) апд) е и реализовать первый пункт меню — вывод всех обьектов на экран.
Этап 1 /(((((((!/(/(((/(((!(((/(((((((/((!(((//(((((((((((((!((!(/ П Проект ТззК1 2 !/////////////////////////////!//////////////////////////// /! Ро1пг.П 1)!гпоег Р01МТ Н Жег!пе Р01НТ Н с)авз Ро(п( ( роЫ (с: 1/ Конструктор Ротпъ[бооЫе х = О. боиЫе у = 0): х( х), у( у) [) // Другие нетоды чо!б 5доы() сопят: роЫ (с: бооЬ)е х. у; ((епб!Т /* Р01МТ Н */ 1/1/(1(111(1/1/1/(//11111(11//1//11111/111(1///1/11111(/111 1/ Ро!пс.срр (т!пс!ибе <!озсгеав (Нпс)обе "РотпС.Ы' из!ад павезрасе звб: чотб Ро(пс::5поы() сапзь ( саит ( « х ", " « у ')": ) 1!I(///1!/1(1/1(1(11(111(ll/I/(1/1(1/I(111(1/1111(///1(l/1/ // Тгтапд)е.п У(Тобе( ТК1АК6[Е Н Фбе(тпе ТК!АИ6[Е Н Фтпс1ибе "Ратпъ.Ы' ) сапзс с1авв Тг!ап91е ( риЫтс: Тг!апд1е(Ротпг, Ротпт.
Тг!апд1е(сопзв спаг*); -Тгтап91е(); Ра(пъ 6ет ч1() сопзь ( Ро(пс 6е1 ч2() сопзс [ Ро!пт 6ев чЗ() сопят ( спаг" 6е1Йаве() салат чотб 5бои() сопзс; чотб 5паи5тбеАпбдгеа( роЫтс: асад!с (пъ соилс: рг!часе: сбег* ОЬ110; спаг* паве; Ро!пв ч1, ч2, чЗ; бооЫе а: боиЫе Ь; боиЫе с: Фепб(Т /* ТК1АЙ6[Е Н "/ лотос. сопзд спаг*); // конструктор // конструктор пустота (нулевого) треугольника // деструктор гесигп ч1; ) (1 Получить значение ч'( геъигп ч2; ) // Получить значение ч2 гевогп чЗ; ) /! Получить значение чЗ ( ге:игп паве: ) // Получить иня объекта // Показать объект // Показать стороны и площадь объекта // количество созданных объектов 1/ идентификатор объекта 11 наименование треугольника // вершины l( сторона.
соединяющая ч1 и ч2 /1 сторона. соедикяющая ч2 и чЗ // сторона. соединяющая ч1 и чЗ 11//1!1/111///1/1//!111(111//1(1/11/1//1/1/11(/((1!(1//((/1 //Тгтап91е.срр // Реализаиия класса Тгтапд)е (/тпс)ибе ваЬЬ.Ь> ((!пс)ибе <тазсгеав> ((!пс)ибе <!оваир> Фтпс1ибе свтгтпд> //(/!пс)ибе "Суг105.Ь" В пс1ибе "Тгтапд1е.л" из!п9 павеврасе зтб; // Тог чтзиа1 С+и б.О оЬЗ10 - пеи спаг[зсг)еп(!бепв) + Ц; зСгсру(оЬ110, !бель); соиле++; зрг!пст(Ьи(, "Треугольник $6", соипъ); паве - пеы сбаг[зсг)еп(Ьи() + Ц; загс(у(паве. Ьо[); а = ъцгв((ч1.х - ч2 х) * (ч1.х - ч2.х) + Ь = зцгъ((ч2.х - чЗ.х) * (ч2.х - чЗ.х) ч с зцгъ((ч1.х - чЗ.х) * (ч1.х - чЗ.х) + саит « "Сапзсгисъог 1 Тог: " « оЬ110 " (" « паве « ")" « епб); (ч1.у - ч2.у) * (ч1.у - ч2 у)); (ч2.у - чЗ.у) * (ч2.у - чб.у)); (ч).у - чЗ.у) * (ч1.у - чЗ.у)): // отладочный вывод // Конструнтор пустого (нулевого) треугольника Тг(апд)е::Тгтапд1е(сопзд сдаг* !аеас) ( сбаг бы[[163; оЬЗ10 - пеи спаг[зъг)еп(!бель) + Ц: всгсру(оЬЗ!0, !бенд); соопд++; зрг(пст(биТ.
"Треугольник зб", соопъ); .паве пеы спаг[в<бг)еп(Ьив) + Ц: зсгсру(паве. ЬиТ): а = Ь = с = О: сонь « "Сопзвгиссаг 2 Тог: " « об)10 « " (" « паве « ")" « епб): // отладочный вывод 11 Деструктор Тг(апд)е::-Тгтапд)е() ( саид « "Оезтгиссог Тог: " оЬЗ!0 « епб1; l/ Конструктор Тг(апд!е::Тгтапд1е(Ро!пъ ч1, Ро(пъ ч2, Ро!пс чЗ, слазь спаг* !беп() : ч1( чЦ, ч2( ч2). чЗ( чЗ) ( спаг ба[[16]: бе!есе П аЬ310; бе)есе П папе: ч3.5поы(): // Показать объект чотб Тгтащ)е::5поы() сопвС ( соцС « лаше « " "; ч1.5иаы(); ч2.5поы(): соцС епб1; // Определения треугольников Тг1апд1е Сгтад(р1, р2, рЗ, "сг!ад"): Тг!апд1е Сг1аВ(р), р4. р8, "СгтаВ"): Тг!апд1е Сг1аС(РЛ, р5, рб, "СгтаС"): Тг!апд1е Сгта0(р1. рт, рВ.
"Сгта0"): // Определение массива указателей на треугольники Тг1апд1е" рТг1аП = ( ВСгтад, ВСгтаВ. ВСг1аС. ВСгта0 ); тиС п = з!зеог (ртг)а) / в1зеот (ртгта[01); 1пт. Мело(): 1пС ВеСМцшоег(1пС. 1пС); чотб Ех!СВасп(): чо!б 5иоы(Тг1апд1е* П, тпС): чо1б Моче(Тг1ащ1е* П, 1пС): чо1б Р1ибмах(Тг!апд1е П, 1пС): чотб 1в1пс1цбеб(Тгтащ1еь П, 1пС); !! Инициализация глобальных лерененных 1пС Тгтапд1е::соцпС - О; главная Функция // !пС пю1п() ( // Определения точек Ро!пС р1(0. О): Ро1пС рЗ(1. 0); Ротпс р5(2. 1): Ро1пС рт(2. 2): Ро1пС р2(0.5. 1): Ро1пС р4(О, 4.5): РотпС рб(2, О): РотиС РВ(3. О): // Показать стороны и площадь обьекта чо1б Тгтапд1е::5поы51бедпбдгеа() сопвС ( боцЬ)е р - (а + Ь + с) / 2; боцЬ)е в « зцгС(р * (р - а) * (р - Ь) * (р - с)); .