Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2015, 19:05   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар
А вообще по хорошему времени мало - нужна и дата
Вот именно, я же про это и говорю!!!

Откуда взялся циферблат, я что-то проглядел в исходном вопросе?
Кроме того, наличие циферблата подразумевает, что часы находятся в пределах 12 часов, а не 24-х, как вроде бы подразумевается в данной задаче, не так ли?

Впрочем, это всё неважно. Ответ Аватар'а автора топика удовлетворил, проблема решена. Можно не продолжать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.01.2015, 20:04   #12
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Код:

// Вычисление попадания времени суток ATime в период между AFrom и ATo
function TimeInPeriod(const ATime, AFrom, ATo: TTime): Boolean;
var
  X, F, T: TTime;
begin
  X:= Frac(ATime); // На всякий случай
  F:= Frac(AFrom); // На всякий случай
  T:= Frac(ATo);   // На всякий случай

  if T >= F
    then Result:= (X >= F) and (X <= T)
    else Result:= (X >= F) and (X < 1.0) or (X >= 0.0) and (X <= T);
end;

// Вычисление длительности периода между временами суток AFrom и ATo
function TimeSpan(const AFrom, ATo: TTime): TTime;
var
  F, T: TTime;
begin
  F:= Frac(AFrom); // На всякий случай
  T:= Frac(ATo);   // На всякий случай

  if T >= F
    then Result:= Frac(T - F)
    else Result:= Frac(1 - (F - T));
end;

// Вычисление попадания периода времени суток [ASpanFrom...ASpanTo]
// целиком в период [AFrom...ATo]
function TimeSpanInPeriod(const ASpanFrom, ASpanTo, AFrom, ATo: TTime): Boolean;
begin
  Result:= TimeInPeriod(ASpanFrom, AFrom, ATo) and TimeInPeriod(ASpanTo, AFrom, ATo);
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.01.2015, 20:51   #13
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h> 

int avatar(int a, int b, int c)
{
    if (c < a)
        c += 24;
    if (b < a)
        b += 24;
    return ((a <= b) && (b <= c));
}

int my(int a, int b, int c)
{
    if (a > c)
        return (1 ^ ((c < b) && (b < a)));
    else
        return ((a <= b) && (b <= c));
}

int main(void) {
    srand(time(NULL));
    int i;
    for (i = 0; i < 10000; ++i) {
        int a = rand() % 24;
        int b = rand() % 24;
        int c = rand() % 24;
        int t1, t2;
        if ((t1 = avatar(a, b, c)) != (t2 = my(a, b, c)))
            printf("a=%d b=%d c=%d avatar=%d my=%d\n", a, b, c, t1, t2);
    }
    return 0;
}
Сначала неверно учитывал границы интервалов (когда описывал словами). Вариант Аватар'а лучше тем, что допускает 0 и 24. Циферблат допридумывал Да, раз удовлетворил, не буду продолжать.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод записей в промежутке Nenado SQL, базы данных 6 25.01.2013 00:30
x на промежутке... NohnaimeR Помощь студентам 2 08.06.2011 15:41
random(На промежутке [-40;20])+array TheCross94 Помощь студентам 8 18.10.2010 19:26
Генерация даты в заданном промежутке zver777 Общие вопросы Delphi 6 09.04.2010 09:33
Выборка записей в промежутке нескольких минут ssdm SQL, базы данных 4 29.01.2010 15:47