Определение дня недели по дате (версия 1)

program day_of_week_version_1;

var
  m: array [1..10] of char;
  d1, m1, i, d: byte;                                                           {d1 - day_1; m1 - month_1; d - day}
  y1, ys, yt, yf, dsNY: integer;                                                {y1 - year_1; ys - years_between_1920_and_1; yt - number_of_true_years_between_1920_and_1; yf - number_of_false_years_between_1920_and_1; dsNY - days_in_year_1_to_NY (NY - новый год)}
  ds: longint;                                                                  {ds - days_between_1920_and_1}
  ty: boolean;                                                                  {ty - type_of_year_1}

begin
  writeln('Данная программа определяет в какой день недели родился человек по заданной дате рождения. Введите дату рождения в формате ДД.ММ.ГГГГ (обозначения формата: Д - день, М - месяц, Г - год): ');
  for i := 1 to 10 do read(m[i]);  
  d1 := (ord(m[1]) - 48) + (ord(m[2]) - 48);
  m1 := (ord(m[4]) - 48) + (ord(m[5]) - 48);
  y1 := (ord(m[7]) - 48) * 1000 + (ord(m[8]) - 48) * 100 + (ord(m[9]) - 48) * 10 + (ord(m[10]) - 48);
  ty := false;                                                                  {False - невисокосный, true - високосный}
  if (y1 mod 4 = 0) then ty := true;
  ys := y1 - 1920;
  yt := ys div 4;
  yf := ys - yt;
  ds := yt * 366 + yf * 365;                                                    {Включая все дни в последнем году, то есть в нашем}
  case m1 of 01: dsNY := 365 - d1;
    02: dsNY := 365 - (d1 + 31);
    03: begin if ty then dsNY := 365 - (d1 + 60) else dsNY := 365 - (d1 + 59) end;
    04: begin if ty then dsNY := 365 - (d1 + 91) else dsNY := 365 - (d1 + 90) end;
    05: begin if ty then dsNY := 365 - (d1 + 121) else dsNY := 365 - (d1 + 120) end;
    06: begin if ty then dsNY := 365 - (d1 + 152) else dsNY := 365 - (d1 + 151) end;
    07: begin if ty then dsNY := 365 - (d1 + 182) else dsNY := 365 - (d1 + 181) end;
    08: begin if ty then dsNY := 365 - (d1 + 213) else dsNY := 365 - (d1 + 212) end;
    09: begin if ty then dsNY := 365 - (d1 + 244) else dsNY := 365 - (d1 + 243) end;
    10: begin if ty then dsNY := 365 - (d1 + 274) else dsNY := 365 - (d1 + 273) end;
    11: begin if ty then dsNY := 365 - (d1 + 305) else dsNY := 365 - (d1 + 304) end;
    12: begin if ty then dsNY := 365 - (d1 + 60) else dsNY := 365 - (d1 + 59) end;
  else writeln( 'Вы ввели неправильно месяц.') end;  
  ds := ds - (dsNY + 3);                                                        {Включая только нужное количество дней в последнем году, то есть в нашем}
  d := ds mod 7;
  case d of 0: writeln('Данный день является понедельником.');
    1: writeln('Данный день является вторником.');
    2: writeln('Данный день является средой.');
    3: writeln('Данный день является четвергом.');
    4: writeln('Данный день является пятницей.');
    5: writeln('Данный день является субботой.');
    6: writeln('Данный день является воскресеньем.')
  end
end.
Добавлено: 10 Апреля 2014 09:51:20 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...