Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.039 c
1-1094806737
hgd
2004-09-10 12:58
2004.09.26
Как очитстить Canvas Image?


14-1094812557
savva
2004-09-10 14:35
2004.09.26
Нужна помощь от людей, планирующих поездку в Германию...


1-1095061651
kukuikar
2004-09-13 11:47
2004.09.26
Как FlashGet или Net Transport


14-1094173306
Mutilator
2004-09-03 05:01
2004.09.26
Оплачиваемая работа - ищу программиста


1-1094711126
EthernalWonderer
2004-09-09 10:25
2004.09.26
Перехват клавиши мыши, когда курсор над любым элементом окна





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский