В связи с участившимися случаями спама, у вновь зарегистрированных пользователей отключена возможность создания сообщений на форуме. Возможность писать сообщения будет включаться администратором вручную — через некоторое время после регистрации пользователя. Для включения этой функции быстрее, пишите личное сообщение администратору сайта (в сообщении напишите кратко о себе и с какой целью регистрировались на сайте).
Обратите внимание: пользователям, нарушающим п.2.1 возможность писать сообщения включаться не будет!
Просим отнестись с пониманием: это вынужденная мера.
Сегодня составил блок-схему будильника, чтобы понять как он работает.
Пока что это будет Будильник 1.0
Но на этапе проектировки замечания будут учитываться.
Также попросил администрацияю создать такой необходимо-важный раздел как "программирование" ибо мы 21м веке
!= это знак неравенства
h1,m1,s1 - переменные времени сигнала будильника _________________
Зачем так сложно?
В сутках 24*60*60 = 86400 = 3 байта число. Те же твои 3 байта как H,M,S, только одним числом.
Каждую секунду +1 к числу и автоматом получаешь увеличение и секунд и минут и часов.
Ставишь не 3 проверки, а одну на переполнение счетчика (типа если Счетчик = 86400 тогда счетчик = 0). Иначе у тебя пойдет 25 час в сутках ))
Да и если введенное время перевести в секунды, то для определения момента сигнала нужно сделать 1 сравнение, а не сравнивать часы с часами, минуты с минутами, секунды с секундами.
да, это всё хорошо, но у меня в это время страничка обновляется (забыл указать в блок-схеме) и выводит текущее время каждую секунду.
поэтому наверное всё же придётся три переменных держать вместо одной, ибо как я из, например, 86400, буду вытягивать текущее время? _________________
Очень как-то заморочено.
Все как Тор писал нужно - так значительно проще, подтверждаю.
Внутри время секундами крутится, а как вывести нужно - преобразование.
Если секунд будет не больше 86400, т.е. счетчик каждые сутки обнуляется, то вот для преобразования код на си (общепризнанный принцип, упомянутый R_Y):
Внутреннее время в секундах - переменная allseс (все секунды)
Код:
int allsec, allmin, second, minute, hour;
second = allsec % 60 ; //остаток от деления - секунды текущего времени
allmin = floor(allsec / 60) ; //все минуты
minute = allmin % 60 ; //остаток от деления - минуты текущего времени
hour = floor(allmin / 60) ; // часы
На вывод (куда там нужно) идут hour, minute, second
А сама программа хода часов намного короче будет:
В цикле каждую секунду прибавляется +1 к переменной allsec.
Сравнивается с 86400, если равно - allsec обнуляется.
Затем производится сравнение с переменной, в которой записано время будильника в секундах.
Если равно, то выполняется, скажем, функция будильника.
Далее выводим время куда надо - 4 строчки кода для расчета + вывод куда нужно.
Конец цикла.
После ввода будильника - сразу нужно преобразовать его в секунды.
Для ввода значений времени и для вывода, для удобства, хорошо бы написать функции с соответствующими преобразованиями.
В разы короче и прозрачнее программа получится, это сто процентов.
Если где можно еще оптимальнее - поправьте, пожалуйста, товарищи.
ПС А для чего этот будильник делается, где предполагается его применять? _________________ "Кто к нам с мечом придет, тот от меча и погибнет!" Александр Невский
ПС А для чего этот будильник делается, где предполагается его применять?
та какое с него может быть применение. просто С++ взялся учить, вот и поставил для себя цель сделать будильник с часами
Max_K писал(а):
Внутреннее время в секундах - переменная allseс (все секунды)
Код:
int allsec, allmin, second, minute, hour;
second = allsec % 60 ; //остаток от деления - секунды текущего времени
allmin = floor(allsec / 60) ; //все минуты
minute = allmin % 60 ; //остаток от деления - минуты текущего времени
hour = floor(allmin / 60) ; // часы
прошу ещё раз ткнуть, ибо опять не понимаю (понятно всё кроме как вытащить из allsec значения )
вот что в моей голове из остатка от деления получается:
и так далее... _________________
всё, дошло, спасибо.
еще один момент, по аське с тором выяснил, я секунды храню в инт, а следует в unsigned int . иначе остаток по делению не тот что надо
сегодня же перечитаю матчасть :)
спасибо, как поправлю - отпишусь! _________________
А еще тебе ТОР сказал, что лучше вообще брать long. Ибо даже в unsigned int все время не влезет.
Unsigned int может по-моему вместить в себя максимум 65536 секунд. А это в пересчете на время 18:12:16. Так что long тебе в помощь.
Скорость вычисления возросла в 8 раз по сравнению с первым моим вариантом.
Все результаты проверены - копируйте код в компилятор (добавьте до вычислений allsec=48137; или другое значение секунд от 0 до 86399) - и убедитесь в корректности вычислений.
Код для перевода часов-минут-секунд в секунды (для ввода будильника):
Для 32-х разрядных приложений (а 16-ти разрядные остались далеко в прошлом) тип int имеет длину 4 байта или 32 бита. Поэтому он может запросто применяться в нашем случае.
Конечно, если будильничек будет компилироваться древними компиляторами под дос, то таковые 16-ти битные компиляторы действительно зарезервируют под int всего 16 бит и наши значения секунд туда не поместятся.
Короче, тип int для этой программы будет корректно работать в современных компиляторах под виндоуз. У меня работает. _________________ "Кто к нам с мечом придет, тот от меча и погибнет!" Александр Невский
Для 32-х разрядных приложений (а 16-ти разрядные остались далеко в прошлом) тип int имеет длину 4 байта или 32 бита. Поэтому он может запросто применяться в нашем случае.
Конечно, если будильничек будет компилироваться древними компиляторами под дос, то таковые 16-ти битные компиляторы действительно зарезервируют под int всего 16 бит и наши значения секунд туда не поместятся.
Короче, тип int для этой программы будет корректно работать в современных компиляторах под виндоуз. У меня работает.
Засада, что компилятор у Делиаса именно досовский.
А по поводу моего кода - это вычисления на калькуляторе. Код я не набирал. Результат сообщил Делиас, у него тоже не получилось. Ибо взяли int (тупо цифры в разрядную сетку не влезали). После исправления на long, вроде все заработало.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах