2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Как вычислить день недели?
Сообщение01.01.2009, 06:28 
Код:
program dae;
var
  g1,g2,m1,m2,d1,d2,n:longint;
  day:byte;
const
  Cm: array[3..14] of integer=(0,31,61,92,122,153,184,214,245,275,306,337);

begin
  writeln('enter data: d m g');
  readln(d2,m2,g2);
  d1:=29;m1:=12;g1:=2008;
  {29 декабря 2008 был ПН. т.е. = 0(mod 7)}
 
  {делаем март первым месяцем}
  if m1<=2 then
  begin
    m1:=m1+12;
    g1:=g1-1;
  end;
  if m2<=2 then
  begin
    m2:=m2+12;
    g2:=g2-1;
  end;

  n:=(g2-g1)*365+((g2 div 4)-(g1 div 4))+Cm[m2]-Cm[m1]+d2-d1;
  {n=разность между введенной датой и известной}

  if n<0 then
  begin
    n:=-n;
    day:=(n mod 7);
    if day<>0 then day:=7-day;
  end
  else
    day:=(n mod 7);

  case day of
    0:writeln('day=pn');
    1:writeln('day=vt');
    2:writeln('day=sr');
    3:writeln('day=cht');
    4:writeln('day=pt');
    5:writeln('day=sb');
    6:writeln('day=vs');
  end;
  readln;
end.
Проверял по календарю -выдает неправильный ответ. Где ошибка? :cry:

 
 
 
 
Сообщение01.01.2009, 06:50 
Вы високосный год не учитываете. Как минимум.

 
 
 
 
Сообщение01.01.2009, 13:29 
Рекомендую для подобной задачи книгу (ее без проблем найдете в Интернете):

Касаткин В.Н. Логическое программирование в занимательных задач.

Там есть алгоритм получения индекса даты, на основе которого можно легко вычислить день недели григорианского калндаря.

 
 
 
 
Сообщение01.01.2009, 17:23 
Усталый писал(а):
Вы високосный год не учитываете. Как минимум.
Учитываю. ((g2 div 4)-(g1 div 4)) и есть поправка.

 
 
 
 
Сообщение01.01.2009, 19:35 
Условие является ли год високосным на самом деле чуть более сложное.
Код:
( year mod 4 = 0 and year mod 100 <> 0 ) or year mod 400 = 0


Потом, наврядли выйдет отделаться такой поправкой. Между датами может быть несколько високосных лет.

 
 
 
 
Сообщение02.01.2009, 09:52 
Усталый писал(а):
Потом, наврядли выйдет отделаться такой поправкой. Между датами может быть несколько високосных лет.


Любите книгу, источник знаний! У Касаткина все эти проблемы разрешены.

 
 
 
 
Сообщение02.01.2009, 13:47 
Цитата:
Любите книгу, источник знаний! У Касаткина все эти проблемы разрешены.

Верю.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group