:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте ::
Путь: Разное » Проверка високосности года. Вычисление недели
  Проверка, високосный год или нет. Вычисление дня недели



1. Год делится на 400 -> високосный -> конец
2. Год делится на 100 -> не високосный -> конец
3. Год делится на 4 -> високосный -> конец
4. Год не високосный -> конец
5. Всё

А вот моя программка для определения дня недели. Кому надо - разберется. Работает вроде до 2100 года.

(*
Вычисление дня недели в приложениях автоматического вычисления
дня недели в датах от 1996 года и старше.
   
Copyright (C) Sergei Frolov, 1998.                                    
v1.0  Jan, 4, 1998.

Программа ориентирована на применение в приложениях, написанных
на языке ассемблера без использования аппаратного умножения/деления
и операций с плавающей запятой.
*)

program denned;                                                           

const                                                                    

  YEARS  : array[0.. 3] of byte = (0, 2, 3, 4);                        
  MONTHS : array[1..12] of byte = (0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5);  
  DAYOFWEEKS  : array[0..6] of string =                                  
    ('Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг',        
     'Пятница', 'Суббота');                                                

var       
                                                                
  a, b, c, d, e, f, tmp : byte;                                          
  day, month, year      : word;                                            

begin                                                                     

  repeat                                                                  

    write('Число XX -> ');
    readln(day);                                                         
    if day = 0 then break; { выход }                                      
    write('Месяц XX -> ');                                               
    readln(month);                                                        
    write('Год XXXX -> ');                                               
    readln(year);                                                       
    tmp := year - 1996;                                                  
    a := tmp and 3;                                                       
    b := (tmp shr 2) + (tmp and $FC);                                     
    c := MONTHS[month];                                                 
    if (a = 0) and (month > 2) then inc(c);                             
    a := YEARS[a];                                                      
    e := (a + b + c + day) mod 7;                                      
    writeln('Результат: ', DAYOFWEEKS[e]);                           
    writeln;                                                           

  until false;                                                         

end.