Задача определение дня+квартала+недели
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
Помогите кто знает программу на Turbo Pascale Определите дату следующего дня+квартал+день недели!Кто знает,кому не трудно,реально надо!Заранее спасибо!
В библиотеках Turbo/Object Professional есть модуль TpDate (OpDate). Там для несложно делается.zAra писал(а):Помогите кто знает программу на Turbo Pascale Определите дату следующего дня+квартал+день недели!Кто знает,кому не трудно,реально надо!Заранее спасибо!
Ну а по подробнее можно,пожалуйста!К завтра надо!
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
а что - "подробнее"???? ну вот, выложил Tpdate.rar
Если я правильно понял вам нужно три отдельные подзадачи решить.
1) прибавить день к текущей дате
в модуле TPDate это делается через работу с Юлианской датой (это число дней с
Юлианские дни (юлианские даты) - система непрерывной нумерации дней. Юлианский день равен числу суток прошедших с гринвичского полудня (12:00 GMT) 1 января 4713 г. до нашей эры до заданного момента.)
там прибавить день (или любое число дней - это просто inc(Число, КоличествоДней)
подробоности - смотри в tpdate.pas
но, мне кажется, в вашем случае будет проще использовать
банально day := day + 1;
if day > DaysInMonth then begin
day := 1
Month := Month + 1;
if Month > 12 then begin
Month := 1;
Year := Year + 1;
end
end;
а вот функцию DaysInMonth можно взять из TPDate
2) по дате определить квартал:
получаете месяц,
потом Квартал = Int((Month - 1) / 3) + 1
3) задача по дате определить день недели:
например, так:
Если я правильно понял вам нужно три отдельные подзадачи решить.
1) прибавить день к текущей дате
в модуле TPDate это делается через работу с Юлианской датой (это число дней с
Юлианские дни (юлианские даты) - система непрерывной нумерации дней. Юлианский день равен числу суток прошедших с гринвичского полудня (12:00 GMT) 1 января 4713 г. до нашей эры до заданного момента.)
там прибавить день (или любое число дней - это просто inc(Число, КоличествоДней)
подробоности - смотри в tpdate.pas
но, мне кажется, в вашем случае будет проще использовать
банально day := day + 1;
if day > DaysInMonth then begin
day := 1
Month := Month + 1;
if Month > 12 then begin
Month := 1;
Year := Year + 1;
end
end;
а вот функцию DaysInMonth можно взять из TPDate
Код: Выделить всё
function IsLeapYear(Year : Integer) : Boolean;
{-Return True if Year is a leap year}
begin
IsLeapYear := (Year mod 4 = 0) and (Year mod 4000 <> 0) and
((Year mod 100 <> 0) or (Year mod 400 = 0));
end;
function DaysInMonth(Month, Year : Integer) : Integer;
{-Return the number of days in the specified month of a given year}
begin
if Word(Year) < 100 then
Inc(Year, 1900);
case Month of
1, 3, 5, 7, 8, 10, 12 :
DaysInMonth := 31;
4, 6, 9, 11 :
DaysInMonth := 30;
2 :
DaysInMonth := 28+Ord(IsLeapYear(Year));
else
DaysInMonth := 0;
end;
end;
получаете месяц,
потом Квартал = Int((Month - 1) / 3) + 1
3) задача по дате определить день недели:
например, так:
Код: Выделить всё
function DayOfWeek(Day, Month, Year: Integer) : Integer;
var
century, yr, dw: Integer;
begin
if Month < 3 then
begin
Inc(Month, 10);
Dec(Year);
end
else
Dec(Month, 2);
century := Year div 100;
yr := year mod 100;
dw := (((26 * month - 2) div 10) + day + yr + (yr div 4) +
(century div 4) - (2 * century)) mod 7;
if dw < 0 then DayOfWeek := dw + 7
else DayOfWeek := dw;
if (dw = 0) or ((dw+7)=0) then DayOfWeek:=7
end;
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
вдогонку..
текущую дату можно получить так:
GetDate (procedure) (WinDos unit)
Returns the current date set in the operating system.
например,
GetDate(Year,Month,Day,DayOf);
таким образом завтрашний день недели можно определить БЕЗ ВСЯКИХ заморочек чисто по DayOf (если сегодня среда, завтра будет четверг вне зависимости от месяца, года и високосности!!!) ;-))))
удачи.
текущую дату можно получить так:
GetDate (procedure) (WinDos unit)
Returns the current date set in the operating system.
например,
GetDate(Year,Month,Day,DayOf);
таким образом завтрашний день недели можно определить БЕЗ ВСЯКИХ заморочек чисто по DayOf (если сегодня среда, завтра будет четверг вне зависимости от месяца, года и високосности!!!) ;-))))
удачи.