Mif 8

Задача

Условие взято отсюда

Четырёхугольник [latex]ABCD[/latex] задан на плоскости целочисленными координатами вершин. Определите тип четырёхугольника: квадрат, ромб, прямоугольник, параллелограмм, трапеция, произвольный четырёхугольник. Из характеристик указать наиболее частную.

Тесты

[latex]a_1[/latex]   [latex]a_2[/latex] [latex]b_1[/latex] [latex]b_2[/latex] [latex]c_1[/latex][latex]c_2[/latex] [latex]d_1[/latex] [latex]d_2[/latex]                                                   Ответ
0 0 1 0 1 1 0 1   квадрат
0 -3 2 0 0 3 -2 0 ромб
0 0 4 0 4 1 1 4 прямоугольник
0 0 10 0 12 4 2 4 пaраллелограмм
0 0  2 0  1 1  0 1 трапеция
0 0  0 2  1 1  1 0 трапеция
-4 -5 -15 7 5 8 6 -7 произвольный
 0 0 1 0 10 20  -5 7 произвольный

 

Код

 

Решение

Для начала стоит найти длины всех сторон:

[latex]AB^{2}=((a1-b1)^{2}+(a2-b2)^{2})[/latex]. (аналогично для остальных сторон)

Затем можно найти длины диагоналей четырёхугольника

[latex]AC^{2}=((a1-c1)^{2}+(a2-c2)^{2})[/latex]. (аналогично для [latex]BD[/latex]).

Через условие задаем равность противоположных сторон [latex]AB=CD[/latex] и  [latex]BC=DA[/latex]:

  1. У ромба смежные стороны равны, но если у ромба диагонали равны, то это квадрат;
  2. Если четырёхугольник не является квадратом, но диагонали равны, то это прямоугольник;
  3. В противном случае — параллелограмм.

Если одна из пар противополижных сторон параллельны, то данный четырёхугольник — трапеция. Впротивном случае — произвольный четырёхугольник.

Код на ideone

Related Images:

4 thoughts on “Mif 8

  1. — Нет ссылки на код в ideone.com. Если код не работает, то лучше работу оставлять в состоянии черновика. Зачем публиковать если пока не решили задачу? Вопросы мне можно задавать по почте.
    — Должно быть [latex]a_1[/latex], а не [latex]a_1[/latex]. А ещё лучше [latex]a_x[/latex] и [latex]a_y[/latex].
    — В программе находятся не длины, а квадраты длин. Впрочем если проверять на равенство, то так даже лучше — равны квадраты неотрицательных величин, значит равны и сами эти величины.
    — Вы ведь в курсе, что квадрат это частный случай ромба и они оба частный случай параллелограмма, который частный случай трапеции , которая частный случай произвольного четырёхугольника. Тут еще примешивается прямоугольник, как частный случай параллелограмма. А квадрат не только вариант ромба, но и прямоугольника. Естественно, нужно выводить только наиболее частную характеристику. Т.е. для квадрата, нужно написать «квадрат». Хотя условия для трапеции тоже будут выполнены.
    — Вы пишите «Через условие задаем равность противоположных сторон». Лучше так: «Проверяем условие равенства противоположных сторон». Тогда в предложении появится смысл.
    — Вы пишите: «Ромб: смежные стороны равны, противоположные стороны параллельны». А потом в программе условие параллельности, Вы будете проверять с использованием деления и получать иногда деление на ноль. Зачем? У ромба все стороны равны. Это единственное условие легко проверить через квадраты длин сторон, которые Вы уже нашли.
    — Вы пишите «Параллелограмм: смежные стороны и диагонали между собой не равны». Это не свойство параллелограмма и не признак его.

    Что нужно сделать.
    — Разобраться «кто чей частный случай».
    — Найти (вспомнить) простые признаки для каждого вида четырёхугольников.
    — Написать программу с проверкой от более общих к частным случаям. Учтите, что квадрат является и ромбом и прямоугольником — его можно проверять на любой из этих двух веток вложенности условных операторов.
    — Добавьте такие два теста для трапеции
    0 0 2 0 1 1 0 1
    0 0 0 2 1 1 1 0

  2. 24-я строка. Проверка на прямоугольник . Зачем так сложно? Просто проверить равенство диагоналей.
    32-я строка. Как всё было хорошо и тут опять вставили возможность деления на ноль. Зачем? Нужно использовать Обобщённую теорему Фалеса. Параллельные прямые, пересекающие стороны угла, отсекают от сторон угла пропорциональные отрезки. Т.е. противоположные стороны образуют пропорцию.

    • Я исправила деление на умножение.
      Я немножко не понимаю как использовать теорему Фалеса, но программа работает нормально.

  3. Программа работает нормально. Согласен. Но такой стиль называется «эклектика». В программировании это не приветствуется.
    Что я имею в виду? Вы отлично управились со всеми типами четырёхугольников виртуозно манипулируя длинами сторон и диагоналей. Но когда дело доходит до трапеций, Вы спотыкаетесь и переходите на координаты вершин.
    Что делать? Продолжить фразу «Диагонали трапеции связаны со сторонами соотношением…»

Добавить комментарий