Ю4.36

Задача: Гидрологами исследовано течение реки в некотором сечении: произведена серия замеров от одного берега до другого перпендикулярно фарватеру, полученные данные: [latex]{s}_{i}[/latex]  — расстояние от левого берега, м; [latex]{h}_{i}[/latex]  — глубина реки, м; [latex]{v}_{i}[/latex]  — скорость течения, м/с, [latex]i=1,2…,n[/latex] . Каков расход воды в секунду? То есть сколько кубометров воды протекает через сечение в секунду?

Тесты:  (сначала вводятся все данные одного массива, а не поочерёдно)

Ввод Ответ Комментарий
3
[2 4 6] [4 5 5] [3 7 2]
 88 Работает
2
[13 42] [17 18] [3.14 2.71]
1409.85 Работает

Объяснение переменных:

int n - количество замеров int area = 0 - площадь поперечного сечения (требуется для формулы расхода воды) int velocity = 0 - cумма скоростей, позже будет делится на количество замеров (тоже для формулы) double s[n], h[n], v[n]; - массивы с данными о замере

Код: проверить на ideone.

Алгоритм выполнения описан в комментариях в коде.

Используется формула расхода воды:  [latex]Q=Av[/latex]  , где [latex]A[/latex]  — площадь поперечного сечения, а [latex]v[/latex]  — среднее арифметическое скорости течения всех замеров. Метод подсчета площади сечения реки описан по ссылке.

Для понимания метода:

270

 

Первый и последний «замер» на картинке образуют треугольники (относительно берега). Между ними —  прямоугольные трапеции (  [latex]S=\frac { a+b }{ 2 } h[/latex], где [latex]a[/latex], например, линия 2-го замера (по картинке), а  [latex]b[/latex]  линия 3-го замера соответственно, [latex]h[/latex]  — расстояние от 2-го замера до 3-го (нынешнее расстояние от берега отнять прошлое). Суммируем площади фигур — это и будет площадь сечения реки.

Замечание:

Данные должны вводится последовательно относительно удаления от левого берега. Подразумевается, что гидрологи обязательно замеряли всю реку (от левого до правого берегов) минимум 2-мя замерами.

 

Божик Семен
Божик Семен

Latest posts by Божик Семен (see all)

12 thoughts on “Ю4.36

  1. — Прочитайте внимательно условие задачи.
    — Добавьте в метки ключевые слова из условия задачи.
    — Введите из стандартного потока число n и все три массива.
    — Выполните вычисления.
    — В отчёте напишите формулу по которой Вы провели вычисления.

      • 1. не уверен, что Вы ВНИМАТЕЛЬНО прочитали условие и то, что написал Игорь Евгеньевич.
        2. да
        3. нет, задача этого требует (пусть и неявно) и главное этого требуем и я и Игорь Евгеньевич, а Вы не вводите массивы со стандартного ввода
        4. допустим какие-то вычисления проводятся, но те ли
        5. формула расхода воды верная, уже хорошо, «делают они это периодичностью в метр» — это почему? Мне кажется Вы неправильно поняли, что такое s, s -должно быть массивом, на сколько текущее измерение удалено от левого берега. У Вас почему-то есть rashod2 и rashod — в чем разница? что-то тут не так.

        В общем, повторю первый совет Игоря Евгеньевича «Прочитайте внимательно условие задачи». Честно скажу, мне помогло только повторное внимательное прочтение условия задачи понять, что же хочет от нас Юркин.

  2. «Введите из стандартного потока число n и все три массива.»
    Что за «int tAsk (teachersAsk) — для дополнительного задания (введите из стандартного потока число и все три массива)»??? Оно у Вас никак не используется и абсолютно лишнее — удалите его из программы и отчета. В качестве числа предполагалось n, которое у Вас и так есть.

    Как это Вы просуммировали скорость? Почему? Мне кажется нужно было суммировать расход воды: если через часть сечения 1 протекает Q_1 кубометров воды в секунду, а через часть 2 протекает Q_2 кубометров воды в секунду, то через них суммарно протекает Q_1 + Q_2 кубометров воды в секунду. Отмечу, что суммировать площади частей сечения тоже можно — таким образом получив общую площадь сечения — но это в задаче не спрашивается. А вот суммарная скорость здесь не имеет никакого смысла.

    Теперь разобрался — Вы считаете среднюю скорость по всем замерам и общую площадь сечения умножаете на среднюю скорость, ОК.

    Теперь насчет площади — сомневаюсь, что s[i]*h[i] верная формула. Если употребление h[i] в произведении еще как-то уместно, то s[i] — это расстояние от левого берега до очередного замера, а не ширина очередного участка. Задача непростая — теперь нужно выбрать как мы аппроксимируем сечение реки — прямоугольниками или трапециями. Вроде как классически сечение реки аппроксимизируется трапециями и на крайних участках треугольниками — см. здесь. Значит вроде как Вам нужно знать дополнительный параметр — ширину реки (вместо Вашего tAsk ) — чтобы посчитать площадь последнего треугольника.

  3. Почему (h[i-1]*h[i])/2 умножить? Зачем суммируем s[i], ведь s[i] — это расстояния от берега и длина участка просто s[i]-s[i-1].

    Вы подразумеваете, что при ( i == n — 1 ) указаны данные правого берега? Тогда h[n-1] нулевое и в формуле наверное нужно использовать предыдущее h (если я правильно Вас понял). Тогда с тестами беда. Да и вообще с таблицей у Вас проблемы: две строчки слились в одну почему-то.

    Хорошо, что нашли картинку, правда мне не все в ней понятно. Но лучше пусть будет такая картинка, чем без нее.

    Пока засчитать задачу не могу.

    • Описался в формуле, спасибо. С расстояниями намудрил.
      Исправил код, в отчете подробнее описал нахождение площади сечения.

      Не до конца понял замечание «h[n-1]». Если и подобное есть в коде, то только тогда, когда h[n-1] (h[i-1]) имеет присвоенное значение, то есть начиная со второго замера.

  4. Задача (как и многие у Юркина) сформулирована не очень строго. В этой задаче, например, совсем не ясно где начинается сечение реки и где оно заканчивается, какая глубина и скорость у берегов. Естественно, что река начинается на расстоянии 0 от берега. Но какая там глубина и скорость? Если предположить, что среди измерений обязательно будут встречаться измерения у берегов, то достаточно их отсортировать по возрастанию и применить аналог формулы трапеций для соседних измерений. Получится что-то вроде этого:

    Ссылка для запуска

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