Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Задачи для начинающих

5160   12 13 14 15 16 17 18 19 20 21 22 все
koder патриот20.02.21 06:50
koder
NEW 20.02.21 06:50 
в ответ koder 20.02.21 06:45

И еще. Если код для начинающих, то он должен чему то учить. Цель не научить рисовать светофоры. Поэтому во-первых не нужно усложнять задание задержками включения кнопки. Слишком много деталей. Во-вторых на примере должно быть видно, насколько код устойчив к изменениям. Небольшие изменения в техзадании - насколько нужно переписывать код? Насколько легко код понимают и могут воспроизвести коллеги? Насколько легко колеги могут код допилить?

Программист коренной житель20.02.21 09:55
NEW 20.02.21 09:55 
в ответ anly 19.02.21 21:33
Если бабушка подошла к светофору за 2 секунды до отключения зелёного, то на светофоре не написано что 2 секунды осталось, поэтому бабушка даже об это не узнает, а пойдет через дорогу.

Бабушка зрячая и видит, что зеленый уже долго горит. Так что даже если нет таймера, бабушка все равно трезво оценивает ситуацию и понимает, что перейти в зеленую фазу она не успеет.

Программист коренной житель20.02.21 10:03
NEW 20.02.21 10:03 
в ответ anly 19.02.21 21:37
красной фазе чего? ежели он нажмет когда машинам красный - то флаг ему в руки, все его потуги пойдут в игнор.

Красной фазе пешеходам и соответственно зеленой фазе машинам.


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

Так это ради бога. Вопрос в том, как кнопку интерпритирует программист. Ее (кнопку) удобно представлять в виде простого триггера, который умеет делать всего 2 вещи: 1) сообщать о своем состоянии (на важно как) и 2) сбрасывать состояние в "неактивное".


это программой предусмотренно.

Да? В каком месте? Я у тебя в диаграмме вижу "пешеход отжал кнопку". Так вот уверяю тебя, что ни один пешеход никогда в жизни не будет отжимать кнопку. Так что твоя диаграмма заведомо нерабочая.

anly патриот20.02.21 10:04
anly
NEW 20.02.21 10:04 
в ответ Программист 20.02.21 09:55
Так что даже если нет таймера, бабушка все равно трезво оценивает ситуацию и понимает, что перейти в зеленую фазу она не успеет.
какая умная бабушка! видимо годы свои не зря прожила, а светофорный опыт всю жизнь оттачивала.улыб

Но почему бабушка не знает, что ежели она хоть шаг на дорогу сделала (как положено, когда ей зеленый горел), то машины обязаны ее подождать?


Впрочем, чего спорить, если логику поменять - раз плюнуть?!

Какие у тебя предложения? Никогда не игнорировать кнопку?

Проклят нарушающий межи ближнего своего (Втор.27:17)
anly патриот20.02.21 10:11
anly
20.02.21 10:11 
в ответ Программист 20.02.21 10:03
Так вот уверяю тебя, что ни один пешеход никогда в жизни не будет отжимать кнопку. Так что твоя диаграмма заведомо нерабочая.
так кнопки на светофорах вроде суперклеем не мажутулыб. Достаточно убрать руку чтоб кнопку отжать. Конечно это от устройства кнопки завсит.

........

в диаграме указано что кнопка замыкает контакт и размыкает его. Сейчас светофор реагирует на размыкание, но можно сделать реакцию на замыкание.

Важно реагировать именно на изменение состояния кнопки, а не на само состояние.

Проклят нарушающий межи ближнего своего (Втор.27:17)
Программист коренной житель20.02.21 10:24
NEW 20.02.21 10:24 
в ответ anly 20.02.21 10:04
Но почему бабушка не знает, что ежели она хоть шаг на дорогу сделала (как положено, когда ей зеленый горел), то машины обязаны ее подождать?

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


Какие у тебя предложения? Никогда не игнорировать кнопку?

Логика простая - когда пешеходам красный - можно опрашивать кнопку. Когда пешеходам зеленый - сбрасывать состояние кнопки. Все :) Во всех остальных состояниях кнопка никого не интересует.

anly патриот20.02.21 10:35
anly
NEW 20.02.21 10:35 
в ответ Программист 20.02.21 10:24
когда пешеходам красный - можно опрашивать кнопку.
так именно так и есть.
Когда пешеходам зеленый - сбрасывать состояние кнопки.
когда зеленый - нажатия игнорируются, как будто их и не было.

Всё работает как ты желаешь.

Проклят нарушающий межи ближнего своего (Втор.27:17)
anly патриот20.02.21 13:52
anly
NEW 20.02.21 13:52 
в ответ AlexNek 19.02.21 23:56
Сегодня, хочу что нажатие кнопки сокращало зелёный машинам на какое то время. Завтра, что бы следующее сокращение могло происходило только после одного полного цикла. Послезавтра, что бы машины ездили не менее 15 секунд до срабатывания следующего запроса. Через неделю может еще, что захочется. И каждый раз надо думать как "собрать" все условия и где это всё разместить.
так это просто смещение логики.

Если я рассматриваю сейчас всё устройство, как светофор(лампочки и логику) с кнопкой, то ты сейчас думаешь о кнопке с логикой, а сам светофор - одни лампочки.

Если очень хочется, то разделить логику лампочек и логику кнопки.

Но по-моему, плодить классы в задаче светофора уже одержимостью попахивает.

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

И если нужна какая-то логика для работы с лампочкой или кнопкой, то это должно быть сделано в других классах.

Но класс светофора от этого вообще не зависит. Ибо ему всё равно: пришел сигнал непосредственно с кнопки или из класса обслуживающего кнопку. Тоже - и о лампочках.

Проклят нарушающий межи ближнего своего (Втор.27:17)
koder патриот20.02.21 15:10
koder
NEW 20.02.21 15:10 
в ответ anly 20.02.21 13:52, Последний раз изменено 20.02.21 15:12 (koder)
плодить классы в задаче светофора уже одержимостью попахивает.


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


мой взгляд тут один класс,


На твой взгляд тут классов нет. Ты пытаешься всунуть код в какой то контейнер , который ты считаешь классом и по количеству кода прикидывает, не нужен ли ещё один пвсевдокласс, а то первый великоват получается. Или не получается. Количество кода не критерий для инкапсуляции его в класс.

anly патриот20.02.21 15:22
anly
NEW 20.02.21 15:22 
в ответ koder 20.02.21 15:10
Количество кода не критерий для инкапсуляции его в класс.
а кто выдвинул тут такой критерий?
Твой код рабочий, но читать его очень тяжело. Там то кода один метод, но не хотел бы я править баги в таком коде.
а его читать и не надо. Это код автоматически сгенерированный из диаграммы. Читать и править надо диаграмму.
Проклят нарушающий межи ближнего своего (Втор.27:17)
Программист коренной житель21.02.21 08:53
NEW 21.02.21 08:53 
в ответ anly 20.02.21 10:11
так кнопки на светофорах вроде суперклеем не мажутулыб. Достаточно убрать руку чтоб кнопку отжать. Конечно это от устройства кнопки завсит.

В таком случае у меня 2 замечания:

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

2) сейчас кнопки делаются в виде сенсора, а не в виде кнопки, т.е. там нет действия "нажать" или "отжать" :)


Важно реагировать именно на изменение состояния кнопки, а не на само состояние.

В этом твоя ошибка :) Потому что на самом деле все как раз наоборот. Изменение состояния кнопки - не интересно. Интересно состояние. При этом состояние интересно только в одной фазе светофора - когда машинам зеленый. Во всех остальных случаях состояние кнопки тоже не интересно :) (единственный момент - надо не забыть "скинуть" состояние, когда пешеходам будет зеленый).

anly патриот21.02.21 10:14
anly
NEW 21.02.21 10:14 
в ответ Программист 21.02.21 08:53, Последний раз изменено 21.02.21 10:22 (anly)
1) если для того, чтобы отжать кнопку достаточно убрать руку, то не понятно, почему это действие присутствует в диаграмме. Ведь по-сути действия "отжать кнопку" не существует. 2) сейчас кнопки делаются в виде сенсора, а не в виде кнопки, т.е. там нет действия "нажать" или "отжать" :)
Серсор вырабатывает два события: переход из FALSE в TRUE, и назад в FALSE. Это соответствует нажатию и отжатию кнопки. Т.е. он вырабатывает импульс, а у импульса есть передний и задний фронт сигнала.

Программа ничего не знает об устройстве кнопки, и даже о ее существовании. У программы есть только булевский вход: сигнал запроса зеленого пешеходам. Сейчас программ реагирует на задний фронт сигнала, но можно отреагировать и на передний - принципиально ничего не поменяется.


В этом твоя ошибка :)
да нет, всё правильно. Именно событие надо ловить - изменение состояния кнопки, и запомнить его до применения (которое может быть сразу, а может чуть позже).
динственный момент - надо не забыть "скинуть" состояние,
это и делается: запомненное событие забывается после применения.
Проклят нарушающий межи ближнего своего (Втор.27:17)
koder патриот21.02.21 11:20
koder
NEW 21.02.21 11:20 
в ответ Программист 21.02.21 08:53
При этом состояние интересно только в одной фазе светофора - когда машинам зеленый. Во всех остальных случаях состояние кнопки тоже не интересно :) (единственный момент - надо не забыть "скинуть" состояние, когда пешеходам будет зеленый).


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

anly патриот21.02.21 11:56
anly
NEW 21.02.21 11:56 
в ответ koder 21.02.21 11:20
Если мы говорим о светофоре на перекрестке. Состояние кнопки интересно, когда нужно включать состояние "машинам красный". В этом случае есть 2 варианта - включать пешеходам зелёный, если состояние кнопки "нажата". Или не включать и тогда у всех красный.по окончании состояния "машинам красный, пешеходам зелёный" состояние кнопки сбросить.
мне вообще не понятно зачем НЕ включать зелёный пешеходам, когда машинам - красный?

Простая противофаза - лучшее решение.

Проклят нарушающий межи ближнего своего (Втор.27:17)
koder патриот21.02.21 17:55
koder
NEW 21.02.21 17:55 
в ответ anly 21.02.21 11:56, Последний раз изменено 21.02.21 18:35 (koder)
мне вообще не понятно зачем НЕ включать зелёный пешеходам, когда машинам - красный?

Не знаю. Дебильная система, которая везде у нас установлена. Но так работают все светофоры на перекрестке с кнопкой. Я симулировал реальную систему

AlexNek патриот21.02.21 23:30
AlexNek
NEW 21.02.21 23:30 
в ответ anly 20.02.21 13:52
то ты сейчас думаешь о кнопке с логикой, а сам светофор - одни лампочки

В данный момент были именно размышления о кнопке с логикой.

Светофор и его логика как бы отдельная вещь и именно эти две вещи хочется иметь раздельными.


А лампочки были отделены еще на самой первой стадии смущ При этом получился объект с тремя фиксированными состояниями.

Еще есть логика переключения состояний.


А к этому есть кнопка которая должна как то изменить логику переключений. При этом необходимо знать актуальное состояние и возможно предыдущие.


На мой взгляд тут один класс

Один класс не может быть даже при обычном светофоре. Так как у нас есть по крайней мере, две задачи: включение/выключение лампочек и логика их смены.

Любая система должна делится на простейшие части.

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


то это должно быть сделано в других классах

именно так, один класс никак не катит. Дело тут никак не в одержимости.

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

Murr патриот22.02.21 01:47
Murr
NEW 22.02.21 01:47 
в ответ anly 21.02.21 11:56

не понятно зачем НЕ включать зелёный пешеходам, когда машинам - красный?

-----

Вообще-то, при отсутствии пешеходов на проезжей части машинки проезжают быстрее.

AlexNek патриот22.02.21 14:07
AlexNek
NEW 22.02.21 14:07 
в ответ Murr 22.02.21 01:47
машинки проезжают быстрее

Даже если им красный?

Murr патриот23.02.21 03:01
Murr
NEW 23.02.21 03:01 
в ответ AlexNek 22.02.21 14:07

Там где можно под красный - да, тоже... бебе

AlexNek патриот23.02.21 12:34
AlexNek
NEW 23.02.21 12:34 
в ответ Murr 23.02.21 03:01

Что то я ПДД уже подзабыл, не подскажешь, где там написано в каких случаях нормальному водиле можно ехать на красный?