LINUX.ORG.RU

Задача на вычисление расхода воды

 


0

3

Помогите, друзья и коллеги, с решением задачи. Сыну задали в кружке робототехники, сидим голову ломаем.
Имеется датчик уровня воды, доступ к значению, которого осуществляется через переменную int X; То есть в X в любой момент времени будет лежать текущее значение уровня воды в ведре (уже в пересчете на миллилитры).
Предстоит написать код, который бы каждую секунду выводил на экран сколько воды утекло с момента запуска программы. В моем понимании это какой-то бесконечный цикл, внутри которого вычисляется разница между текущим и предыдущим значением, но на этом идеи заканчиваются.
Или нужно сохранять вектор значений, например, за минуту, вычислять среднее значение и т.д. Буду рад любому совету.
В глубине души понимаю, что задача даже не для первого курса института. Но ничего не могу поделать, застопорился и всё тут.



Последнее исправление: podovalov5 (всего исправлений: 1)

В моем понимании это какой-то бесконечный цикл, внутри которого вычисляется разница между текущим и предыдущим значением, но на этом идеи заканчиваются.

Отлично.

//volatile int x;
int startx = x;
while (1) {
        printf("Delta: %dml\n", startx - x);
        sleep(1);
}

Буду рад любому совету.

Будем рады, если удосужитесь сформулировать вопрос.

t184256 ★★★★★
()

При запуске запоминаешь уровень воды в Y. Затем в цикле проверяешь значение Х. Вычитаешь Х из Y. Выводишь результат.

hope13 ★★★
()

не упусти кейс когда в ведро долили воды :) в таком случае тебе нужно будет запомнить новое значение «потолка»

exception13 ★★★★★
()
Ответ на: комментарий от invy

между текущим и предыдущим значением

ничего, что это часть не условия, а растерянно-бесмопощной его интерпретации?

t184256 ★★★★★
()

а конкретно в этой задачке:

1. какая частота дискредизации снятия данных.

2. как предполагается подавлять шумы(и прочие дребежания)

3. сколько и каких держать суммирующих(«интегральных») значений - для модели процесса

:)

qulinxao ★★☆
()
Ответ на: комментарий от invy

Расход воды - изменение объема воды. Расход воды в единицу времени - изменение объема воды в единицу времени. По-моему вполне ясно, о чем идет речь.

t184256 ★★★★★
()
Ответ на: комментарий от invy

Так и быть, перечитал пост.

Предстоит написать код, который бы каждую секунду выводил на экран сколько воды утекло с момента запуска программы.
В моем понимании это...

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Да, если воды стало больше, нужно не брать в расчет прибывшую воду, и продолжать при этом считать «утекающую». Это важное замечание.

podovalov5
() автор топика
Ответ на: комментарий от nezamudich

А еще могут плеснуть сразу пол ведра под большим напором в момент когда с датчика показания не сняты. Так что опрашивать надо чаще чем в раз секунду.

И кулинксяо правильно сказал — хранить более одного значения и каким-то образом их анализировать.

А еще нужно учесть кейс когда датчик может выйти из строя. Значит нужно накапливать неуспешные попытки получения данных или невалидные данные и в какой-то момент выдать что датчик накрылся чем-то волосатым.

deep-purple ★★★★★
()

с момента запуска программы

разница между текущим и предыдущим значением

s/предыдущим/начальным

Алгоритм прост как 3 копейки

Если просто для школы, сойдет вот такой, исходя из того, что нам заранее известен расход, и он постоянен.

устанавливаешь переменную текущего значения current = 0

в цикле раз в секунду current = current + единица расхода и выводишь значение этого current

Это, конечно, демагогия, так как у нас тут нет реального расхода, а счетчик расхода считает идеальный расход в вакууме. Но судя по тому, что ты изложил, это то что нужно:)

Если ближе к реальности, то надо сначала создать абстракцию самого расхода, затем повесить слушателя на этот расход, и выводить уже тогда каждую секунду де-факто значение. Это посложней, но тоже достаточно просто.

newquestion
()

сколько экспертов набежало. задание дано, решено ещё в первом ответе. Но нет, все будут умничать в задаче для детей первого класса и показывать какие они умные. Но почему-то из всех экспертов ещё не предложил учитывать испарение воды и ловить исключения и статистически учитывать колебания точности датчика. Да.

hope13 ★★★
()
Последнее исправление: hope13 (всего исправлений: 1)

В глубине души понимаю, что задача даже не для первого курса института. Но ничего не могу поделать, застопорился и всё тут.

Я, напротив, например, в глубине души понимаю, что эта *задача* даже не для начальной группы детсада, и стыдно становиться, что у нас это дают в кружке робототехники, видимо детей за конченых дебилов считают там, заберите оттуда ребенка, пока не поздно:)

newquestion
()
Ответ на: комментарий от hope13

А твое «решение»

При запуске запоминаешь уровень воды в Y. Затем в цикле проверяешь значение Х. Вычитаешь Х из Y. Выводишь результат.

и вовсе бред сивой кобылы, эксперт хренов.

newquestion
()
Ответ на: комментарий от newquestion

теперь еще и эксперты-педагоги понабежали. разупоритесь все!

t184256 ★★★★★
()

Если вода непрерывно выливается с определенной скоростью, и с такой же скоростью одновременно с этим доливается, уровень воды, измеряемый датчиком, будет неизменным, с какой бы частотой измерения не производились. А количество воды, которая утекла, постоянно будет расти. И что тогда? Как же нам решить задачу? )))

Условие сформулировано просто замечательно.

curufinwe ★★★★★
()
Ответ на: комментарий от newquestion

Я, напротив, например, в глубине души понимаю, что эта *задача* даже не для начальной группы детсада, и стыдно становиться, что у нас это дают в кружке робототехники, видимо детей за конченых дебилов считают там, заберите оттуда ребенка, пока не поздно:)

Хоть такой кружок и то хорошо. Я рос в девяностых вообще ни хера не было, если бы был, то сам задачу решил, а не беспокоил достойных людей.

podovalov5
() автор топика
Ответ на: комментарий от newquestion

Да, но ты предложил «поменять минус на плюс».

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Ф ты подумай, что в переменных будет лежать на каждой итерации, если ты их нигде не меняешь? То что ты намисал, еквивалентно while true print 10 - 10; sleep 1

newquestion
()
Ответ на: комментарий от newquestion

если ты их нигде не меняешь?

а, сорри, ты слил. перечитай условие, почитай, что есть «volatile», подумай, зачем я его упомянул в комментарии.

t184256 ★★★★★
()
Ответ на: комментарий от newquestion

Сказано же в условии, что в x всегда текущие показания датчика. Эту переменную сам контроллер без тебя меняет, согласно условию задачи .

curufinwe ★★★★★
()
Ответ на: комментарий от newquestion

Имеется датчик уровня воды, доступ к значению, которого осуществляется через переменную int X; То есть в X в любой момент времени будет лежать текущее значение уровня воды в ведре (уже в пересчете на миллилитры).

Не переживай ты так, ну слился ты, с кем не бывает.

t184256 ★★★★★
()
Ответ на: комментарий от newquestion

Спроси у ТСа, он писал что надо учесть долив.

Да, если воды стало больше, нужно не брать в расчет прибывшую воду, и продолжать при этом считать «утекающую». Это важное замечание.

А еще объясни, как из условия понятно, что долив исключен. Откуда вода в ведре берется? Ась?

curufinwe ★★★★★
()
Ответ на: комментарий от curufinwe

Эту переменную сам контроллер без тебя меняет, согласно условию задачи .

Сомневаюсь, что это имелось в виду. Если бы это было так, присутствовала бы реализация самого контроллера, либо требование его реализовать, а этого в условии нет.

newquestion
()
Ответ на: комментарий от newquestion

Если это так, то тогда в код надо добавить еще и модель самого ведра и вытекающей воды, чтобы сам код себе переменную x менял. Но в условии про это я вообще в упор ничего не вижу. Это просто задача для детей! А не для страдания фигней.

curufinwe ★★★★★
()
Ответ на: комментарий от curufinwe

он писал что надо учесть долив.

Ага, он писал что нужно учесть долив, которого нет. Это его просто клоуны сбили с толку. Если в условии задачи нет долива, значит его и нет, а так можно нафантазировать еще много чего, например, дополнительный расход, непредвиденные утечки, испарение. Фантазеров тред.

newquestion
()
Ответ на: комментарий от newquestion

присем тут долив?

Реши общюю задачу и получи решение частной бесплатно. ;)

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

Предположим у нас две трубы. Из одной вода вливается в ведро, из другой выливается. С одинаковым потоком в обоих трубах. Расход есть, а уровень в ёмкости неизменен.

Так же и при периодическом доливе. Датчик вдруг покажет -100 l/min, хотя из выходной трубы, как текло 1 l/min, так и течёт.

beastie ★★★★★
()
Ответ на: комментарий от curufinwe

Не нужна там никакая модель ведра

Вот его дебильный алгоритм

current = 0
everySecond display current++
это все.

Если бы было что-то еще, если бы нам надо было выводить какой то реальный расход, то основная задача была бы не в выводе, а в реализации системы расхода, а вывод заключался бы просто в чтении с датчика расхода. Это уже совсем другая история.

newquestion
()
Ответ на: комментарий от beastie

Предположим у нас две трубы. Из одной вода вливается в ведро, из другой выливается. С одинаковым потоком в обоих трубах. Расход есть, а уровень в ёмкости неизменен.

Не факт, что расход в данном случае есть, возможно это замкнутый цикл. Смотря что тут понимать под расходом. Но ТС явно не об этом писал.

newquestion
()

выводил на экран сколько воды утекло с момента запуска программы.

Элементарно, считаешь делту между прошлым Х и текушим Х, плюсуешь в накопитель int Total и этот Total выводишь на экран. При старте программы Total = 0

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.