- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
function fnGetWeekDay:integer;
//функция fnGetWeekDay возвращает день недели
var
CurDate: date;
dd,mm,yy: word;
cent, month, iRes : integer;
Begin
CurDate = CurrentDate;
DecodeDate(CurDate,yy,mm,dd);
month = mm;
if mm < 3 then mm = mm + 10
else mm = mm - 2;
if mm > 10 then yy = yy - 1;
cent = yy div 100;
yy = yy mod 100;
iRes = ((2.6*mm-0.2) div 1) + dd + yy + (yy div 4) + (cent div 4) - 2*cent;
iRes = ((iRes+777) mod 7);
if (month == 5) or (month == 7) or (month == 10) or (month == 12) then iRes = iRes - 1;
if iRes == -1 then result = 6
else if iRes == 0 then result = 7
else result = iRes;
End; // fnGetWeekDay
Это не совсем Delphi. Это нечто с крайне похожим синтаксисом.
Почему нельзя было использовать (CurrentDate - <какое-нибудь воскресенье>) mod 7 я не знаю.
3.14159265 19.05.2010 13:16 # 0
вот это труЪ-Говно - крайне кривая реализация кривой идеи
причем в данном случае крайне замудренная и сложная, а потому сто пудов тут еще и ошибки в логике есть. мне просто лень вникать в это Г
((2.6*mm-0.2) div 1) - говорит само за себя
3.14159265 19.05.2010 13:20 # 0
типа каждую неделю чтобы можно было давать какому-то особенно вонючему или уникальному говну +2
в данном клиническом случае я бы воспользовался этой фичей.
TarasB 19.05.2010 20:32 # 0
Не понял. Это ж не компилится.
rat 19.05.2010 13:19 # +1
Код написан до 2000 года и с 29 февраля 2000 года ошибается на 1.
haskell 19.05.2010 13:24 # 0
Oxygene?
rat 19.05.2010 13:39 # 0
Слишком редко используемый язык - не хочу палиться.
Говногость 19.05.2010 14:00 # 0
guest 19.05.2010 14:47 # 0
TarasB 19.05.2010 20:34 # 0
guest 20.05.2010 05:49 # −1
фуу, ламер
guest 21.05.2010 15:04 # +2
TarasB 21.05.2010 15:47 # 0
Проблема в том, что очень легко облажаться, написав = вместо ==, хорошо хоть, компилятор предупреждает. В нормальном синтаксисе возможностей лажануться не должно быть.
guest 21.05.2010 22:26 # 0
Есть сотни способов облажаться; только на си, чтобы выстрелить себе в ногу, никаких особых навыков не надо.
guest 21.05.2010 22:30 # 0
Lure Of Chaos 19.05.2010 13:22 # 0
rat 19.05.2010 13:27 # +1
Это не просто говнокод. Это говнокопипаста говнокода.
Коллега вспомнил, что видел этот пример в учебнике для вузов по Турбо Паскалю за авторством Фаронова. И даже пруфлинк на несколько переделанную версию накопал: http://miit.bsu.edu.ru/resources/tp_faronov/gl2/gl2_7_1.html
И это уже больше десятка лет работает в довольно распространенной системе.
3.14159265 19.05.2010 14:48 # 0
но там хотя бы trunc(2.6*m-0.2) а не деление по модулю 1
TarasB 19.05.2010 20:31 # 0
Но почему не написать (26*m-2) div 10, действительно непонятно.
3.14159265 20.05.2010 10:19 # 0
если бы я писал алгоритм, а тем более книгу, которая обучает хорошему стилю кодинга
1. то создал бы Enum месяцев или на крайняк массив и задал бы количество дней в каждом из них (февраль - 28 )
и константу YEAR_DAYS=365
2. написал функции вычисляющие количество дней в конкретном году, и конкретном месяце конкретного года (пара if) используя константу и тот массив месяцев, что заготовили раньше
3. сначала посчитал количество целых лет от какого-нить известного дня (желательно 1 января - воскресенье) и нашел количество дней за эти годы
4. аналогично для месяцев
5. потом посчитал бы отсавшиеся дни и сложил с днями по месяцам и годам
6. сложил и mod 7. Все
код читаем, краток, понятен и самое главное его можно быстро изменить для других нужд.
зачем же лепить кучу непонятного говна да еще и писать это в учебник остается неясным
Lure Of Chaos 20.05.2010 10:51 # 0
когда то давно баловался такими штучками
3.14159265 20.05.2010 11:46 # 0
http://ru.wikipedia.org/wiki/Вечный_календарь
по крайней мере эта формула логична и легко догадатся что к чему