Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

количество дней   Найти похожие ветки 

 
denis_stell ©   (2010-04-08 19:55) [0]

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


 
И. Павел ©   (2010-04-08 20:22) [1]

Просто вычитайте из даты дня рождения текущую дату, привордите к типу int и все готово :)


 
И. Павел ©   (2010-04-08 20:25) [2]


> И. Павел ©   (08.04.10 20:22) [1]

При этом даты должны иметь тип TDateTime


 
Kerk ©   (2010-04-08 20:29) [3]

В цикле от 0 до 365 вызывай эту функцию для текущей даты и сравнивай результат с датой дня рожденья. Как раз получишь разницу.

function IncDay(const DateTime: TDateTime;  NumberOfDays: Integer): TDateTime;
{Функция предназначена для изменения даты (DateTime) путем добавления  количества дней (NumberOfDays). Значение NumberOfDays может быть отрицательным.}
var
 Y, M, D, CountDays: Word;
 N: Integer;
 Sign, NoBreak: Boolean;
begin
 Sign := NumberOfDays >= 0;
 DecodeDate(DateTime, Y, M, D);
 N := NumberOfDays;
 NoBreak := True;
 if Sign then   //Прибавить
 begin
   while(NoBreak) do
   begin //Количество дней в месяце
     CountDays := MonthDays[IsLeapYear(Y), M];
     if (N + D) <= CountDays then //Если в пределах данного месяца
     begin
       Inc(D, N);
       NoBreak := False;
     end
     else
     begin
       if M < 12 then
         Inc(M, 1)
       else
       begin
         M := 1;
         Inc(Y, 1);
       end;
       N := N - (CountDays - D);
       D := 0;
     end;
   end;
 end
 else  //Отнять
 begin
   N := -N;
   while(NoBreak) do
   begin
     if D > N then  //Если в пределах данного месяца
     begin
       Dec(D, N);
       NoBreak := False;
     end
     else
     begin
       if M > 1 then
         Dec(M, 1)
       else
       begin
         M := 12;
         Dec(Y, 1);
       end;
       //Количество дней в месяце
       CountDays := MonthDays[IsLeapYear(Y), M];
       N := N - D;
       D := CountDays;
     end;
   end;  
 end;
 Result := EncodeDate(Y, M, D);
 //Установить время из старой даты
 ReplaceTime(Result, DateTime);
end;


 
_Юрий ©   (2010-04-09 00:28) [4]


> Kerk ©   (08.04.10 20:29) [3]


Вариант [1] проще


 
Германн ©   (2010-04-09 01:42) [5]


> _Юрий ©   (09.04.10 00:28) [4]
>
>
> > Kerk ©   (08.04.10 20:29) [3]
>
>
> Вариант [1] проще
>

Ничего-то ты не понял :)


 
turbouser ©   (2010-04-09 02:06) [6]


> Kerk ©   (08.04.10 20:29) [3]

Надо все-таки распечатать как-нибудь и на стенку повесить :) Шедевр, все-таки :)


 
Германн ©   (2010-04-09 02:08) [7]


> turbouser ©   (09.04.10 02:06) [6]
>
>
> > Kerk ©   (08.04.10 20:29) [3]
>
> Надо все-таки распечатать как-нибудь и на стенку повесить
> :) Шедевр, все-таки :)
>

У Ёжки уже всё распечатано и всё висит на стенке.


 
turbouser ©   (2010-04-09 02:12) [8]


> Германн ©   (09.04.10 02:08) [7]

И что? Теперь к нему как в эрмитажЪ ходить?


 
Германн ©   (2010-04-09 02:17) [9]


> turbouser ©   (09.04.10 02:12) [8]
>
>
> > Германн ©   (09.04.10 02:08) [7]
>
> И что? Теперь к нему как в эрмитажЪ ходить?
>

А почему бы и нет?
К тому же бумагу надо экономить. Лес не растёт так быстро. :)


 
Германн ©   (2010-04-09 02:23) [10]

Ну и вдобавок.
Правоприемникам Борланда стоит ввести в модуль DateUtils ещё одну функцию/процедуру. Типа DateTimeBetween. Чтобы любой нормальный пацан-кодер мог бы выводить в TLabel время, которое осталось до 00:00 12 декабря 2012 года. В годах, месяцах, днях, часах, минутах. Для особо озабоченных и в секундах.
:)


 
test ©   (2010-04-09 04:30) [11]

Германн ©   (09.04.10 02:23) [10]
Функция  DaysBeetween. Кроме нее есть остальные которые считают разницу в милисекундах.


 
boriskb ©   (2010-04-09 12:09) [12]

> [3] Kerk ©   (08.04.10 20:29)


:)

Черная Королева покачала головой: --
    Вы, конечно, можете называть это чушью,
    но я-то встречала чушь такую, что в сравнении с ней
    эта кажется толковым словарем.
Л. Кэрролл, "Алиса в Зазеркалье"


 
Anatoly Podgoretsky ©   (2010-04-09 12:16) [13]


> Надо все-таки распечатать как-нибудь и на стенку повесить
> :) Шедевр, все-таки :)

До шедевра не хватает sleep(86400000) в цикле Пока


 
картман ©   (2010-04-09 12:31) [14]

вот, существенно лучше Аватара



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.072 c
2-1271223708
Дмитрий С
2010-04-14 09:41
2010.08.27
Как вернуть Скролл на прежнее место.


2-1268837432
Berger
2010-03-17 17:50
2010.08.27
Как скопировать число из памяти в переменную


15-1273125258
oxothuk
2010-05-06 09:54
2010.08.27
Точки останова


2-1267195273
картман
2010-02-26 17:41
2010.08.27
Узнать раскраску фона RichEdit


2-1267766469
lady
2010-03-05 08:21
2010.08.27
Как получить все вероятные значения Bin