Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Пример выполнения задания d

Пример выполнения задания d (Задания для самостоятельного выполнения), страница 3

PDF-файл Пример выполнения задания d (Задания для самостоятельного выполнения), страница 3 Информатика (8414): Другое - 2 семестрПример выполнения задания d (Задания для самостоятельного выполнения) - PDF, страница 3 (8414) - СтудИзба2017-06-17СтудИзба

Описание файла

Файл "Пример выполнения задания d" внутри архива находится в папке "Задания для самостоятельного выполнения". PDF-файл из архива "Задания для самостоятельного выполнения", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "информатика" в общих файлах.

Просмотр PDF-файла онлайн

Текст 3 страницы из PDF

Этап 3 На этом этапе мы добавим в класс Тгсап91 е метод, обеспечивающий сравнение треугольников по их площади, а в основной модуль — реализацию функции ЕтпбМахО. Внесите следующие изменения в тексты модулей проекта: 1. Модуль Тг1 ап91 е. Ь: добавьте объявление функции-операции: Ьао] орега1ог >(сопзб Тг(ап91е$) сопзщ 2. Модуль Тг1ап91е.срр: добавьте код реализации функции-операции: // Сравнить обьект (по.площади) с обьектон ьг1а Ьоо1 Тг1ап91е::орегаьог >(сопвс Тгтап91ед тг1а) салат ( баоЫе р - (а + Ь .

с) / 2; баиЫе з - загс(р * (р - а) * (р — Ы * (р - с)); баиЫЕ р1 - (СГ)а.а + СГ(а.Ь и СГ)а.С) / 2; боиЫе з1 - загс(р1 * (р! - Сша.а) * (р1 - тгта.Ы * (р1 - Сг(а.с)); 1[ (з > з1) гесигп Сгие: е1зе гегогп Та)зе; ) ' Жирным шрифтом выделена та, что вводилось с клавиатуры, 3. Модуль Ма п. срр: замените заглушку функции ГтпбМах() следующим кодом: 3 == Поиск нанснналького треугольника == Сспзтгцсъог 2 Гог: Ъг!анах 1Треугольннк 5) Максинальный треугольнин: Треугольник 2 Нашните Еп1ег. Как видите, максимальный треугольник найден правильно.

Повинуясь указанию, нажмите Еп1ет. Появится текст: Ъг1аВ Главное пеню==-=- — -=--= объекты 3 - найти наксинальный 4 — определить отношение включения - выход Оезсгцстог Гог 1 — вывести все 2 - леренестить 5 Чтобы завершить работу, введите цифру 5 и нажмите Еп(ет. Что за ... — полу- чили?77 Ха-ха-ха! П Программа вылетела! Если это происходит в Ъ'!зпа] Яцт][о, то вас порадует нагло выскочившая на передний план диалоговая панель с жир- ным белым крестом на красном кружочке и с сообщением об ошибке: Оебцц Аззе»ъ!оп Га)1есН Ргоогав: С:!. .

. МА!М.ЕХЕ Г!1е: бпббе1.срр (1пе 47 А далее добрый совет, смысл которого в переводе на русский язык следующий: «Если вас интересует, по каким причинам могут выскакивать такие диалоговые панельки, обратитесь к разделу документации по ъг!зла! С++, посвященному макросу авзегь». Попробуйте обратиться. Скорее всего, вы будете разочарованы...

// поиск нансинальното треугольника чо!б Гтпбиах(Тг!ап01е* р 1гта[]. 1пъ 'х) [ соцъ « " — Поиск нансинального треугольника ==" « епб1: // Создаен объект тг1анах, который по завершении поиска будет // идентичен наксинальнону объекту. // Инициализируен его значениен 1-то объекта из пассива объектов. Тш апо1е ъг! анахГ'1г1анах" ); (г)анан = *р ъг1а[0]: // Поиск Гог (1пъ т = 1; 1 < 4; +-1) !Г (*р [г!а[1] > 1г1аМах) Ъг!анан = »р ъг!а[!]: соцт « "Максинальный треугольнин; " « тг)анан.ВетйавеО « епб): Ех1тВасКО: Откомпилируйте программу и запустите. Выберите третий пункт меню. На экране должно появиться: Давайте лучше посмотрим на нашу отладочную печать. Перед тем как так некра- сиво умереть,, программа успела вывести на экран следующее: 5 Конец работы.

Оезтгцсьог Гог: Сг1аР Оез(гисьог тог; ъг1аС Оезсгцстог Гог: ННННННННННззззЭЭЭЭЭЭЭЭЭЭО Пришло время для аналитической работы нашим серым клеточкам. Вспомните, как выглядела отладочная печать при завершении нормально работающей первой версии программы? Деструкторы вызывались в порядке, обратном вызову конструкторов. Значит, какая-то беда случилась после вызова деструктора для объекта Ъгт аВ! Почему7 Всмотримся внимательней в предыдущий вывод нашей программы. После того как функция Г1пбнах() выполнила основную работу и вывела на экран сообщение Максииальный треугольник: Треугольник 2 программа пригласила пользователя нажать клавишу Ептет. Это приглашение выводится функцией Ех1СВасх(). А вот после нажатия клавиши Еп1ег на экране появился текст: Резъгцсъог тог: сг!аВ после которого опять было выведено главное меню.

Значит, деструктор для объекта ъг1аВ был вызван в момент возврата из функции Гтпбнах(). Но почему? Ведь объект Ъгтай создается в оснОвной функции ватп(), а значит, там же должен и уничтожаться! Что-то нехорошее происходит, однако, в теле функции Г1пбМах(). Хотя внешне вроде все прилично... Стоп! Ведь внутри функции объявлен объект ъг)анах, и мы даже видели работу его конструктора: Сопзсгцсьог 2 Тог: ъг!аиах (Треугольник 5) А где же вызов деструктора, который по идее должен произойти в момент возврата из функции Г1пбнах()? Кажется, мы нашли причину ненормативного поведения нашей программы. Объект сгтанах после своего объявления неоднократно модифицируется с помощью операции присваивания.

Последняя такая модификация происходит в цикле, причем объекту сгтамах присваивается значение объекта ъг1аВ. А теперь давайте вспомним, что если мы не перегрузили операцию присваивания для некоторого класса, то компилятор сделает это за нас, но в такой «операции присваивания по умолчанию» будут позлементно копироваться все поля объекта.

При наличии же полей типа указателей возможны проблемы, что мы н получили. В поля оЬЭ!О и паве объекта ъг!анан были скопированы значения одноименных полей объекта сгтаВ. В момент выхода из функции ГтпФахО деструктор объекта освободил память, на которую указывали эти поля. А при выходе нз основной функции ли1 п() деструктор Ьбъекта тг! аВ попытался еще раз освободить эту же память. Это делать нельзя, потому что этого делать нельзя никогда.

Займемся починкой нашей программы. Нужно добавить в класс Тгтапц)е перегрузку операции присваивания, а заодно и конструктор копирования. Внесите следующие изменения в тексты модулей проекта: 1. Модуль Тгтапц!е.л. О Добавьте объявление конструктора копирования: Тг1апд1е(сопяС Тгтапд)еа); // конструктор копирования О Добавьте объявление операции присваивания: Тг1апд1ей арегасог -(сопяС Тг1апд1еа); 2, Модуль Тгтапд1е.срр. О Добавьте реализацию конструктора копирования: // Конструктор копирования Тг!апд)е::Тг1апд)е(сопяС Тг!апд1еа Сг1а) : чИСг!а.ч1). ч2(Сгта.ч2), чЗССгта.чЗ) ( саиС « "Сору сопясгисСог Тог: " « Сгта.оо]10 « епа); // отладочный вывод оЬЗ!О - пеы слаг[яСг1еп(Сгта.оЬ]10) + яСг1еп("(копия)") + 1]: яСгсру(оЬ]10.

Сг!а.оЬ]10): яСгсаС(аЬ310, "(копия)"); паве = псы слаг[яСг1еп(Сг!а.папе) + Ц; ятгсру(паве. Сгта.папе),' а - Сг1а.а: Ь - Сг1а.Ь; с - Сгта.с; О Добавьте реализацию операции присваивания: // Присвоить значение обьекта Сг1а Тгтапд1еа Тг1апц1е::орегаСог =(сопяС Тгтапд1ей Сг!а) ( соиС « "Яяя!дп орегаСог: " « оЬ]10 « " - " « Сг!а.оЬ)10 « епб); // отладочный вывод 11 (5Сгта - СЬ1я) гесигп Ой!я; ае)еСе П папе; паве - псы слаг[ясг1еп(Сг!а.пале) + 1]; ясгсру(пмяе. Сг1а.папе); а = Сгта.а: Ь = Сгта.Ь; с Сгта.с; гесигп +СП!я: ется новая память. Обратите внимание, что в конструкторе копирования после переписи поля аЬ]10 мы добавляем в конец этой строки текст «(копия)». А в операции присваивания это поле, идентифицирующее объект, вообще не затрагивается и остается в своем первоначальном значении.

Все это полезно для целей отладки. Откомпилируйте и запустите программу. Выберите третий пункт меню. На экране должен появиться текст: 3 === Поиск иаксинального треугольника— Сапясгиссаг 2 Гаг: Сг1аыах (Треугольник 5) Яяятдп орегатог: сг!айах = Сгтад Яяятдп арега(ог: Сг1айах - СгтаВ )(аксииальный треугольник: Треугольник 2 )(акните Ептег. Обратите внимание на отладочный вывод операции присваивания. Продолжим тестирование. Нажмите Еп1ег. Программа выведет: Оеясгис(ог Гог: Сг!аь)ах — — =-=-- Г л а в н о е н е н ю -==-==--=-==-=- 1 - вывести все объекты 3 - найти иаксинальный 2 - гереиестить 4 - определить отношение включения 5 - выход Обратите внимание на то, что был вызван деструктор для объекта Сгтайах, а не Спай.

Продолжим тестирование. Введите цифру 5, Программа выведет: 5 Конец работы. ОеяСгистог Тог: Сгта0 ОеяСгиссог Гог: СгтаС ОеяСгисСог Тог: СгтаВ ОеяйгисСог Таг: Сгтад Все. Программа работает, как часы. Но, однако, мы еще не все сделали. Нам осталось решить самую сложную подзадачу — определение отяон/виня включения одного треугольника в другой. Этап 4 Из многочисленных подходов к решению 'этой подзадачи наш выбор остановился на алгоритме, в основе которого лежит определение относительного положения точки и вектора на плоскости'. Вектор — это направленный отрезок прямой линии, начинающийся в точке Ьед р и заканчивающийся в точке епа р.

При графическом изображении конец вектора украшают стрелкой. Теперь призовите И в конструкторе копирования, и в операторе присваивания перед копированием содержимого полей, на которые указывают поля типа слег:", для них выделя- ' Известен другой алгоритм решения этой задачи, основанный на использовании формулы Герана. Нши выбор обоснован тем, чта это решение гармонично вписывается в технологию «ннсходяшего проектирования». ваше пространственное воображение или вооружитесь карандашом и бумагой, чтобы проверить следующее утверждение. Вектор (Ьед р, епг) р) делит плоскость на пять непересекающихся областей: 1) все точки слева от воображаемой бесконечной прямой', на которой лежит наш вектор (область 1.ЕЕТ), 2) все точки справа от воображаемой бесконечной прямой, на которой лежит наш вектор (область ИОНТ), 3) все точки на воображаемом продолжении прямой назад от точки Ьедр в бесконечность (область ВЕНВч1)), 4) все точки на воображаемом продолжении прямой вперед от точки еп1р в бесконечность (область АНЕА1)), 5) все точки, приггадлвлсащив самому вектору (область ВЕТд(гЕЕ)ч().

Для выяснения относительного положения.точки, заданной некоторым объек- том класса Ро1п2, добавим в класс Ро1 п2 перечисляемый тип: ения Ой1ЕМТ ( СЕЕТ. й16НТ, АНЕАО. ВЕН!ИО. ВЕТИЕЕМ ): а также метод С1аьз)Ту(Ьед р, епг) р), возвращающий значение типа Ой1ЕМТ для данной точки относительно вектора (Ьед р, епг) р). Обладая этим мощным методом, совсем нетрудно определить, находится ли точ- ка внутри некоторого треугольника.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5232
Авторов
на СтудИзбе
424
Средний доход
с одного платного файла
Обучение Подробнее