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

Вниз

Седня препод дал на паре - написать календарь   Найти похожие ветки 

 
Vasya.ru   (2004-09-08 13:23) [0]

чтб по дате день недели выдавал. пришлось считать, чем 1е января 01 года было, оттуда считать. А нет формулы или алгоритма коротенького?


 
Romkin ©   (2004-09-08 13:29) [1]

DayOfTheWeek


 
Drakosha   (2004-09-08 13:35) [2]


function TForm1.DayOfWeekRus(S: TDateTime): string;
begin
 case DayOfWeek(S) of
   1: Result := "Воскресенье";
   2: Result := "Понедельник";
   3: Result := "Вторник";
   4: Result := "Среда";
   5: Result := "Четверг";
   6: Result := "Пятница";
   7: Result := "Суббота";
 end;
end;

взято из Delphi World(рекомендую www.delphiworld.narod.ru)


 
[lamer]Barmaglot ©   (2004-09-08 13:43) [3]

Хм-м-м-м-м, это хорошо, если дельфа 6, в пятой такой функции нет...

Но можно исхитрится, без всяких подсчетов :-)...

В WinAPI есть такая структура SystemTime, так вот заполняешь в ней пункты год, месяц и день. После этого переводишь функцией SystemTimeToFileTime в файловое время (на этом этапе компьютер уже сам подсчитал день недели), теперь чтобы получить число функцией FileTimeToSystemTime переводим файловое время в системное и вуаля... в wDayOfWeek хранится номер дня недели который тебе нужен...

Всего вызов двух функций ВинАПИ, при этом будет работать в любой версии Дельфи(да что там, в С++ тоже будет работать) и в любой версии Виндовс...


 
jack128 ©   (2004-09-08 13:47) [4]

[lamer]Barmaglot ©   (08.09.04 13:43) [3]
в пятой такой функции нет

Да ты гонишь ;-) Все в пятерке есть..


 
Romkin ©   (2004-09-08 13:49) [5]

DayOfWeek есть в Delphi 5 :))


 
NickBat ©   (2004-09-08 13:53) [6]

Такое задание специально дают, чтобы проверить твои навыки построения алгоритмов и т.д.
Умничать с фунцией DayOfWeek не стоит.
Препод все равно заставит сделать это без использования спецфункций.


 
Ega23 ©   (2004-09-08 13:59) [7]

Ну да, это как нам, помню, дали задание: перевод числа в строку и обратно. Без IntToStr, Val и всего остального.


 
Igorek ©   (2004-09-08 14:04) [8]

Даааа уж...
Пара то не по Дельфи и не по ВинАПИ. Все равно придеться самому день высчитывать.


 
Drakosha   (2004-09-08 14:09) [9]


unit datefunc;

interface
function checkdate(date: string): boolean;
function Date2julian(date: string): longint;
function Julian2date(julian: longint): string;
function DayOfTheWeek(date: string): string;
function idag: string;

implementation
uses

 sysutils;

function idag(): string;
{Получает текущую дату и возвращает ее в формате YYYYMMDD для использования
другими функциями данного молуля.}
var

 Year, Month, Day: Word;
begin
 DecodeDate(Now, Year, Month, Day);
 result := IntToStr(year) + IntToStr(Month) + IntToStr(day);
end;

function Date2julian(date: string): longint;
{Получает дату в формате YYYYMMDD.
Если у вас другой формат,
в первую очередь преобразуйте его.}
var

 month, day, year: integer;
 ta, tb, tc: longint;
begin

 month := strtoint(copy(date, 5, 2));
 day := strtoint(copy(date, 7, 2));
 year := strtoint(copy(date, 1, 4));
 if month > 2 then
   month := month - 3
 else
 begin
   month := month + 9;
   year := year - 1;
 end;
 ta := 146097 * (year div 100) div 4;
 tb := 1461 * (year mod 100) div 4;
 tc := (153 * month + 2) div 5 + day + 1721119;
 result := ta + tb + tc
end;

function mdy2date(month, day, year: integer): string;
var

 y, m, d: string;
begin

 y := "000" + inttostr(year);
 y := copy(y, length(y) - 3, 4);
 m := "0" + inttostr(month);
 m := copy(m, length(m) - 1, 2);
 d := "0" + inttostr(day);
 d := copy(d, length(d) - 1, 2);
 result := y + m + d;

end;

function Julian2date(julian: longint): string;
{Получает значение и возвращает дату в формате YYYYMMDD}
var

 x, y, d, m: longint;
 month, day, year: integer;
begin

 x := 4 * julian - 6884477;
 y := (x div 146097) * 100;
 d := (x mod 146097) div 4;
 x := 4 * d + 3;
 y := (x div 1461) + y;
 d := (x mod 1461) div 4 + 1;
 x := 5 * d - 3;
 m := x div 153 + 1;
 d := (x mod 153) div 5 + 1;
 if m < 11 then
   month := m + 2
 else
   month := m - 10;
 day := d;
 year := y + m div 11;
 result := mdy2date(month, day, year);
end;

function checkdate(date: string): boolean;
{Дата должна быть в формате YYYYMMDD.}
var

 julian: longint;
 test: string;
begin
 {Сначала преобразовываем строку в юлианский формат даты.
 Это позволит получить необходимое значение.}
 julian := Date2julian(date);
 {Затем преобразовываем полученную величину в дату.
 Это всегда будет правильной датой. Для проверки делаем обратное преобразование.
 Результат проверки передаем как выходной параметр функции.}
 test := Julian2date(julian);

 if date = test then

   result := true
 else

   result := false;
end;

function DayOfTheWeek(date: string): string;
{Получаем дату в формате YYYYMMDD
и возвращаем день недели.}
var

 julian: longint;
begin
 julian := (Date2julian(date)) mod 7;

 case julian of
   0: result := "Понедельник";
   1: result := "Вторник";
   2: result := "Среда";
   3: result := "Четверг";
   4: result := "Пятница";
   5: result := "Суббота";
   6: result := "Воскресенье";
 end;
end;

end.


источник всё тот же Delphi World

ps Не подумайте что реклама ... ну просто хорошая весч.


 
Igorek ©   (2004-09-08 14:11) [10]

Если б я был преподом, то заставил бы студентов на листике сначала проги составлять - безо всяких Интернетов, МСДНов и ДельфиВорлдов.


 
megabyte ©   (2004-09-08 14:14) [11]

4Игорек: А компилить тоже на листочке бы давал? :)
Как он бы на баги прогу проверял?

з.ы. А вообще там несложный алгоритм вычисления можно сделать. Единственно, надо поправку на високосный год делать и все.


 
Igorek ©   (2004-09-08 14:17) [12]


> megabyte ©   (08.09.04 14:14) [11]
> 4Игорек: А компилить тоже на листочке бы давал? :)
> Как он бы на баги прогу проверял?

Проверять можно тоже на листике. Это учит думать преде чем что-то писать.
А то сплошь и рядом народ еще не вникнув в задачу уже тарабанит по клаве во-всю. Ну и рефакторит потом до опупения.


 
Vasya.ru   (2004-09-08 14:54) [13]

да реализовать то я её реализовал. Ток надо было на  турбо Си 3.0,


 
Семен Сорокин ©   (2004-09-08 15:03) [14]

Drakosha   (08.09.04 14:09) [9]

function idag(): string;
{Получает текущую дату и возвращает ее в формате YYYYMMDD для использования
другими функциями данного молуля.}
var

Year, Month, Day: Word;
begin
DecodeDate(Now, Year, Month, Day);
result := IntToStr(year) + IntToStr(Month) + IntToStr(day);
end;

И Что-же вернет сия мудрая ф-я в случае 1-го января?


 
Fay ©   (2004-09-08 15:09) [15]

Код DecodeDate(Now, Year, Month, Day); вАщЕ безумный.
Дотаточно GetSystemTime


 
Drakosha   (2004-09-08 15:41) [16]


> И Что-же вернет сия мудрая ф-я в случае 1-го января?

200411


 
Prohodil Mimo ©   (2004-09-08 16:23) [17]

a u menja jest" na excele kalendar" :o)


 
Mim1 ©   (2004-09-08 17:45) [18]


> [17] Prohodil Mimo ©   (08.09.04 16:23)


А я умею писать по русски а не в стремном транслите. (может и вы попробуете)


 
Vasya.ru   (2004-09-08 19:59) [19]

Drakosha   (08.09.04 14:09) [9]
у меня вся программа меньше получилась, чем твой пример с Delphi World + работает правильно


 
kaZaNoVa   (2004-09-09 09:30) [20]

[19] Vasya.ru   (08.09.04 19:59)
поделись :)


 
Drakosha   (2004-09-10 12:43) [21]

я ж не говорю что DelphiWord это панацэя от программирования.
Более того я никогда не использую коды от туда. Но  как справочник где можно найти пути решения и вообще идеи как подойти к задаче ичитаю лучшим (ну кроме этого форума конечно :) ).



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

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

Наверх




Память: 0.52 MB
Время: 0.044 c
4-1092046294
a123
2004-08-09 14:11
2004.09.26
новое сетевое соединение и настроить свойства ТСP/IP


14-1093296071
Ded Moroz
2004-08-24 01:21
2004.09.26
C++


1-1094400230
Ok
2004-09-05 20:03
2004.09.26
Как узнать координаты курсора мыши в KOL ???


14-1094536623
Леван
2004-09-07 09:57
2004.09.26
Лазерный принитер


1-1094647438
Garfunkel
2004-09-08 16:43
2004.09.26
Распределение строк по captions