А406

Задача

С помощью [latex]x_{ij}, i=1,2; j=1,\ldots,n.[/latex] — действительной матрицы на плоскости задано n точек так, что [latex]x_{1j}, x_{2j}[/latex] — координаты [latex]j[/latex] — точки. Точки попарно соединены отрезками. Найти длину наибольшего отрезка.

Тест

n Матрица [latex]x_{ij}, i=1,2.[/latex] Длина наибольшего отрезка  Комментарий
3  

2 8 4

9 1 5

10 Пройдено
4  

6 14 2 1

9 3 8 0

13.3417 Пройдено
5  

1 8 4 3 7

2 9 5 0 11

11.7047 Пройдено

Код программы:

Ход решения:

  1. Вводим матрицу построчно (не очень удобно).
  2. Находим длину наибольшего отрезка.
    С помощью вложенных циклов мы находим длины всех отрезков по формуле
    [latex] AB=\sqrt{(x_{2}-x_{1})^{2}+(y_{2}-y_{1})^{2}}, A(x_{1},y_{1}), B(x_{2},y_{2}). [/latex]
  3. По алгоритму нахождения максимума находим длину наибольшего отрезка.
  4. Выводим матрицу.
  5. Выводим длину наибольшего отрезка.
    Ссылка на код

Related Images:

8 thoughts on “А406

  1. Хорошо. Теперь разберёмся с отступами.
    При наборе текста Вы иногда пользуетесь клавишей табуляции, иногда ставите сколько-то пробелов. Оба способа хороши. Но их нельзя комбинировать в одном файле. Это связано с тем, что количество пробелов в табуляции зависит от настроек редактора или вьювера.
    Посмотрите как у Вас пляшут строчки. Исправьте, пожалуйста.

    • Спасибо за замечание, исправил. Впредь буду с этим аккуратнее.

  2. Хорошо. Теперь программа хорошо читается, давайте смотреть на код.
    Если переменная цикла u равна 0, то в какой строке искать элемент D[u-1][y]. Вопрос риторический. Он просто намекает на ошибку в логике программы. Второй вопрос будет про D[u-1][y-1] тем более для у=0.

    Стоит поговорить и о тестах. Обычно программист их готовит до того, как напишет программу. В Вашем случае нужно было нарисовать несколько точек на плоскости и найти длины отрезков их соединяющих. Максимальное из полученных значений ввести в тест в качестве ответа. Наверное Вы так и сделали?
    Но я не могу понять из трёх точек Вашего теста (2;9) (8;1) (4;5) между какими расстояние равно 10? Я не нашёл. Удивительно, но Ваша программа тоже считает, что должно быть 10.
    У меня даже закралось сомнение, что Вы всё сделали честно.

    По оформлению.
    — Вы пишите «Вводим матрицу построчно (не очень удобно)». Что Вы имеете в виду, что именно неудобно? Как было бы удобно?
    — «С помощью циклов мы из координат одной точки вычитаем координаты другой точки.» Смысла этого текста не согласуется с кодом программы. Вычитать с помощью цикла, это что-то другое. Вы совершенно верно вычитает при помощи операции вычитания. Сформулируйте мысль как-то иначе.
    — Вы пишите «Точки должны быть соседними, т.к. по условию они соединены попарно». Попарно, означает, что нужно рассмотреть пары точек. У отрезка два конца, вот и выходит пара (т.е. два).
    И не придумывайте, в условии не говорится ничего про соседние точки — нужно проверить все сочетания пар точек.

    • Расстояние 10 между первой и второй точкой.
      sqrt((2-8)*(2-8)+(9-1)*(9-1))=sqrt(36+64)=10.

    • Все исправил. Алгоритм проверяет все пары точек.

  3. Засчитано.
    Только поправьте «С помощью вложенных циклов мы находим длины всех отрезков по формуле …»
    «По алгоритму нахождения максимума находим длину наибольшего отрезка.»

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