Весь ХарцызскГлавная Весь Харцызск
Весь Харцызск
Весь Харцызск
   Логин:  Пароль:

14.04.2021 г. 3:53 

Виды Харцызска 

Виды Харцызска

Весь Харцызск 

  Главная
  Новости Харцызска

  Информация о Харцызске
  О городе
  Власти Харцызска
  История города
  Статистика города
  Статьи о городе
  Каталог предприятий
  Карта Харцызска
  Харцызск на карте Google

  Задать вопрос мэру Харцызска
  Юридическая консультация

  Форум
  Чат

  Фотоальбом
  Файлы
  Ссылки

  Телепрограмма 
  Гороскопы
  Анекдоты
  Игры

  Топ-10
  Поиск

  О нас
  Реклама на сайте
  Написать нам
  Рекомендовать нас
  Добавить в Избранное

Кто на сайте: 


В чате: 1


Реклама 


Поиск по сайту 




Реклама 


• 





Весь Харцызск :: Просмотр темы - Блок-схема будильника
 Правила форумаПравила   FAQFAQ   ПоискПоиск   ГруппыГруппы   ПользователиПользователи   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход  


Внимание новичков!

В связи с участившимися случаями спама, у вновь зарегистрированных пользователей отключена возможность создания сообщений на форуме. Возможность писать сообщения будет включаться администратором вручную — через некоторое время после регистрации пользователя. Для включения этой функции быстрее, пишите личное сообщение администратору сайта (в сообщении напишите кратко о себе и с какой целью регистрировались на сайте).
Обратите внимание: пользователям, нарушающим п.2.1 возможность писать сообщения включаться не будет!
Просим отнестись с пониманием: это вынужденная мера.
 

Блок-схема будильника
На страницу 1, 2, 3  След.
 
Начать новую тему   Ответить на тему    Список форумов Весь Харцызск -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
delias
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: May 13, 2006
Сообщения: 5239

СообщениеДобавлено: Чт Июн 25, 2009 9:13    Заголовок сообщения: Блок-схема будильника Ответить с цитатой

Сегодня составил блок-схему будильника, чтобы понять как он работает.
Пока что это будет Будильник 1.0
Но на этапе проектировки замечания будут учитываться.



Также попросил администрацияю создать такой необходимо-важный раздел как "программирование" ибо мы 21м веке

!= это знак неравенства
h1,m1,s1 - переменные времени сигнала будильника
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
TOR
Забанен за спам
Забанен за спам


Зарегистрирован: Nov 21, 2008
Сообщения: 371

СообщениеДобавлено: Чт Июн 25, 2009 11:57    Заголовок сообщения: Ответить с цитатой

Зачем так сложно?
В сутках 24*60*60 = 86400 = 3 байта число. Те же твои 3 байта как H,M,S, только одним числом.
Каждую секунду +1 к числу и автоматом получаешь увеличение и секунд и минут и часов.
Ставишь не 3 проверки, а одну на переполнение счетчика (типа если Счетчик = 86400 тогда счетчик = 0). Иначе у тебя пойдет 25 час в сутках ))

Да и если введенное время перевести в секунды, то для определения момента сигнала нужно сделать 1 сравнение, а не сравнивать часы с часами, минуты с минутами, секунды с секундами.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
delias
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: May 13, 2006
Сообщения: 5239

СообщениеДобавлено: Чт Июн 25, 2009 23:17    Заголовок сообщения: Ответить с цитатой

да, это всё хорошо, но у меня в это время страничка обновляется (забыл указать в блок-схеме) и выводит текущее время каждую секунду.
поэтому наверное всё же придётся три переменных держать вместо одной, ибо как я из, например, 86400, буду вытягивать текущее время?
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
_R_Y_
Старожил
Старожил


Зарегистрирован: May 05, 2006
Сообщения: 355
Откуда: Харцызск, Донецк

СообщениеДобавлено: Чт Июн 25, 2009 23:42    Заголовок сообщения: Ответить с цитатой

Делением на 60 с остатком два раза.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
delias
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: May 13, 2006
Сообщения: 5239

СообщениеДобавлено: Пт Июн 26, 2009 0:12    Заголовок сообщения: Ответить с цитатой

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

#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
int h,m,s,bud,h1,m1,s1,time,timebud;
   cout<<"Vvedite tekushee vremya:\n";
   cout<<"Hours: ";
   cin>>h;
   cout<<"Minutes:";
   cin>>m;
   cout<<"Seconds:";
   cin>>s;
   cout<<"vklu4it` budilnik - nagmite 1\nviklu4it` budilnik - nagmite 0\n";
   cin>>bud;
   
   if (bud)//vkl budilnik
   {
      cout<<"Vvedite vremya zvonka:\n";
      cout<<"Hours: ";
      cin>>h1;
      cout<<"Minutes:";
      cin>>m1;
      cout<<"Seconds:";
      cin>>s1;
      timebud=h1*m1*s1;
         while (1)
         {
            time=h*m*s;
            if (time!=timebud)
            {
                  
            system ("cls");
            cout<<h<<":"<<m<<":"<<s;
            Sleep (100);
            if (s!=60)
            {
               s++;
            }
            else
            {
               if (m!=60)
               {
                  m++;
                  s=0;
               }
               else
               {
                  h++;
                  m=0;
                  s=0;
               } //if m!=60
            
            }//if s!=60
            }
            else
            {
               cout<<"\a\a\a\n";
               break;
            }
         
         }//while
   
   }

}
   

Confused
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Max_K
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: Jan 11, 2009
Сообщения: 3313
Откуда: СССР

СообщениеДобавлено: Пт Июн 26, 2009 2:20    Заголовок сообщения: Ответить с цитатой

Очень как-то заморочено. Shocked
Все как Тор писал нужно - так значительно проще, подтверждаю.
Внутри время секундами крутится, а как вывести нужно - преобразование.
Если секунд будет не больше 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 строчки кода для расчета + вывод куда нужно.
Конец цикла.

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

В разы короче и прозрачнее программа получится, это сто процентов.

Если где можно еще оптимальнее - поправьте, пожалуйста, товарищи.

ПС А для чего этот будильник делается, где предполагается его применять?
_________________
"Кто к нам с мечом придет, тот от меча и погибнет!" Александр Невский
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
delias
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: May 13, 2006
Сообщения: 5239

СообщениеДобавлено: Пт Июн 26, 2009 6:03    Заголовок сообщения: Ответить с цитатой

Max_K писал(а):

ПС А для чего этот будильник делается, где предполагается его применять?

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

Max_K писал(а):

Внутреннее время в секундах - переменная allseс (все секунды)
Код:
int allsec, allmin, second, minute, hour;

second  = allsec % 60 ; //остаток от деления - секунды текущего времени
allmin = floor(allsec / 60) ; //все минуты
minute  = allmin % 60 ; //остаток от деления - минуты текущего времени
hour  = floor(allmin / 60) ; // часы

прошу ещё раз ткнуть, ибо опять не понимаю (понятно всё кроме как вытащить из allsec значения Embarassed )
вот что в моей голове из остатка от деления получается:

и так далее...
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
TOR
Забанен за спам
Забанен за спам


Зарегистрирован: Nov 21, 2008
Сообщения: 371

СообщениеДобавлено: Пт Июн 26, 2009 8:14    Заголовок сообщения: Ответить с цитатой

Delias, время можно извлечь так

allsec - текущее время в секундах.
H = alssec % 3600 - часы
M = (allsec - H*3600) % 60 - минуты
S = (allsec - 3600* H - 60*M) - секунды

Пример.
Время 13:22:17

allsec = 48137
H = 48137 % 3600 = 13
M = (48137 - 13*3600) % 60 = 22
S = (48137 - 3600* 13 - 60*22) = 17
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
delias
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: May 13, 2006
Сообщения: 5239

СообщениеДобавлено: Пт Июн 26, 2009 8:25    Заголовок сообщения: Ответить с цитатой

всё, дошло, спасибо.
еще один момент, по аське с тором выяснил, я секунды храню в инт, а следует в unsigned int . иначе остаток по делению не тот что надо
сегодня же перечитаю матчасть :)
спасибо, как поправлю - отпишусь!
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
TOR
Забанен за спам
Забанен за спам


Зарегистрирован: Nov 21, 2008
Сообщения: 371

СообщениеДобавлено: Пт Июн 26, 2009 11:11    Заголовок сообщения: Ответить с цитатой

А еще тебе ТОР сказал, что лучше вообще брать long. Ибо даже в unsigned int все время не влезет.
Unsigned int может по-моему вместить в себя максимум 65536 секунд. А это в пересчете на время 18:12:16. Так что long тебе в помощь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
delias
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: May 13, 2006
Сообщения: 5239

СообщениеДобавлено: Пт Июн 26, 2009 13:26    Заголовок сообщения: Ответить с цитатой

о, ну раздельчик по программированию мы себе выбили!
тему переношу в него!
после выходных продолжим Drinks or Beer
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Max_K
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: Jan 11, 2009
Сообщения: 3313
Откуда: СССР

СообщениеДобавлено: Пт Июн 26, 2009 20:32    Заголовок сообщения: Ответить с цитатой

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

TOR писал(а):
Пример.
Время 13:22:17

allsec = 48137
H = 48137 % 3600 = 13
M = (48137 - 13*3600) % 60 = 22
S = (48137 - 3600* 13 - 60*22) = 17

В ваш код вкрался глюк (дважды):
H = 48137 % 3600 = равно 1337, а не 13
M = (48137 - 13*3600) % 60 = 17, а не 22


Вот результаты исполнения моего кода для allsec = 48137:

second = allsec % 60 ; // 48137 % 60 = 17
allmin = floor(allsec / 60) ; // floor(48137 / 60) = 802
minute = allmin % 60 ; // 802 % 60 = 22
hour = floor(allmin / 60) ; // floor(802 / 60)= 13

Проверено электроникой!

Вот переписал, чтобы избавиться от несколько тормознутого floor:

Код:
long allsec, allmin, second, minute, hour;

second  = allsec % 60 ; // секунды текущего времени
allmin = (allsec - second) / 60; // промежуточное значение все минуты
minute = allmin % 60 ; //минуты текущего времени
hour  = (allmin - minute) / 60 ; // часы текущего времени


Результаты (прямо из отладки):
second = 48137 % 60 ; // = 17
allmin = (48137 - 17) / 60 ; // = 802
minute = 802 % 60 ; // = 22
hour = (802 - 22) / 60 ; // = 13

Скорость вычисления возросла в 8 раз по сравнению с первым моим вариантом.

Все результаты проверены - копируйте код в компилятор (добавьте до вычислений allsec=48137; или другое значение секунд от 0 до 86399) - и убедитесь в корректности вычислений. Wink

Smile Код для перевода часов-минут-секунд в секунды (для ввода будильника):
Код:
long alarmsec, second, minute, hour;

alarmsec  = hour * 3600 + minute * 60 + second; // все секунды

_________________
"Кто к нам с мечом придет, тот от меча и погибнет!" Александр Невский


Последний раз редактировалось: Max_K (Вс Июн 28, 2009 2:49), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Max_K
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: Jan 11, 2009
Сообщения: 3313
Откуда: СССР

СообщениеДобавлено: Сб Июн 27, 2009 17:54    Заголовок сообщения: Ответить с цитатой

Еще дополнение про тип данных int.

Для 32-х разрядных приложений (а 16-ти разрядные остались далеко в прошлом) тип int имеет длину 4 байта или 32 бита. Поэтому он может запросто применяться в нашем случае.

Конечно, если будильничек будет компилироваться древними компиляторами под дос, то таковые 16-ти битные компиляторы действительно зарезервируют под int всего 16 бит и наши значения секунд туда не поместятся.

Короче, тип int для этой программы будет корректно работать в современных компиляторах под виндоуз. У меня работает.
_________________
"Кто к нам с мечом придет, тот от меча и погибнет!" Александр Невский
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Марьяна
Бессмертный форумчанин
Бессмертный форумчанин


Зарегистрирован: Feb 28, 2007
Сообщения: 2013
Откуда: Украина

СообщениеДобавлено: Вс Июн 28, 2009 6:20    Заголовок сообщения: Ответить с цитатой

По-моему, справа в алгоритме чего-то не хватает Very Happy
Но это так, для порядка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
TOR
Забанен за спам
Забанен за спам


Зарегистрирован: Nov 21, 2008
Сообщения: 371

СообщениеДобавлено: Вт Июн 30, 2009 8:52    Заголовок сообщения: Ответить с цитатой

Max_K писал(а):
Еще дополнение про тип данных int.

Для 32-х разрядных приложений (а 16-ти разрядные остались далеко в прошлом) тип int имеет длину 4 байта или 32 бита. Поэтому он может запросто применяться в нашем случае.

Конечно, если будильничек будет компилироваться древними компиляторами под дос, то таковые 16-ти битные компиляторы действительно зарезервируют под int всего 16 бит и наши значения секунд туда не поместятся.

Короче, тип int для этой программы будет корректно работать в современных компиляторах под виндоуз. У меня работает.


Засада, что компилятор у Делиаса именно досовский.
А по поводу моего кода - это вычисления на калькуляторе. Код я не набирал. Результат сообщил Делиас, у него тоже не получилось. Ибо взяли int (тупо цифры в разрядную сетку не влезали). После исправления на long, вроде все заработало.

А floor разве не для дробных чисел?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Весь Харцызск -> Программирование Часовой пояс: GMT + 2
На страницу 1, 2, 3  След.
Страница 1 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001 phpBB Group

Version 2.0.6 of PHP-Nuke Port by Tom Nitzschner © 2002 www.toms-home.com
Forums ©



Наверх
О нас  :: Контакт с автором  :: Реклама на сайте  :: Рекомендовать Нас
Наверх
Khartsizsk2007 theme by Весь Харцызск
Яндекс цитирования
Все логотипы и торговые марки на этом сайте являются собственностью их соответствующих владельцев. Все материалы на сайте являются собственностью их авторов. Администрация сайта может не разделять точку зрения авторов. Использование материалов сайта без разрешения администрации сайта не допускается
© 2006 - 2016 khartsizsk.com Использование материалов разрешается при условии ссылки (для интернет-изданий - гиперссылки) на сайт «Весь Харцызск»
PHP-Nuke Copyright © 2006 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. The Russiаn localizatiоn - prоjесt РhрNukе.RU
Открытие страницы: 0.11 секунды и 16 запросов к БД