Разработать проект, запрашивающий дату рождения пользователя и рассчитывающий, в какой...

0 голосов
70 просмотров

Разработать проект, запрашивающий дату рождения пользователя и рассчитывающий, в какой день им было прожито 5000 дней.


Информатика (27 баллов) | 70 просмотров
0

Обычно такие задачи решают, переводя дату рождения в юлианскую, затем выполняют сложение и результат переводят снова в григорианскую дату. Для этого используют известные алгоритмы, оформляя их в виде пользовательских процедур.

Дан 1 ответ
0 голосов
Правильный ответ

Type
  Dat = record
    d: integer;
    m: integer;
    y: integer
  end;

function jday(pd: Dat): longint;
// Алгоритм 199б
// "Переход от календарной даты к порядковому номеру дня и обратно"
// взят из сборника // "Библиотека алгоритмов 151б-200б", М.И.Агеев и др.,
// М.: Радио и связь, 1981
//
// Алгоритм возвращает порядковый номер дня по Юлианскому календарю.
// Работает для дат, начиная с 01.01.4713 до н.э.
var
  c, ya: longint;
begin
  with pd do
  begin
    if m > 2 then m := m - 3
    else
    begin
      m := m + 9;
      y := y - 1
    end;
    c := y div 100;
    ya := y mod 100;
    Result := ((146097 * c) div 4) + ((1461 * ya) div 4) +
      ((153 * m + 2) div 5) + d + 1721119
  end;
end;

function jdate(j: longint): Dat;
// Алгоритм 199б
// "Переход от календарной даты к порядковому номеру дня и обратно"
// взят из сборника // "Библиотека алгоритмов 151б-200б", М.И.Агеев и др.,
// М.: Радио и связь, 1981
//
// Алгоритм возвращает дату григорианского календаря по
// порядковому номеру дня Юлианского календаря.
// Работает для дат, начиная с 01.01.4713 до н.э.
var
  dd, mm, yy: integer;

begin
  j := j - 1721119;
  yy := (4 * j - 1) div 146097;
  dd := (4 * j - 1 - 146097 * yy) div 4;
  j := (4 * dd + 3) div 1461;
  dd := (4 * dd + 7 - 1461 * j) div 4;
  mm := (5 * dd - 3) div 153;
  dd := (5 * dd + 2 - 153 * mm) div 5;
  yy := 100 * yy + j;
  if mm < 10 then mm := mm + 3
  else begin mm := mm - 9; yy := yy + 1 end;
  Result.d := dd;
  Result.m := mm;
  Result.y := yy
end;

var
  d1,d2: Dat;
begin
  Writeln('Введите дату рождения в формате <день месяц год>: ');
  Read(d1.d, d1.m, d1.y);
  d2:=jdate(jday(d1)+5000);
  Writeln('5000 дней прожито ',d2.d,'.',d2.m,'.',d2.y)
end.

Тестовое решение:
Введите дату рождения в формате <день месяц год>:
9 10 1997
5000 дней прожито 18.6.2011

(142k баллов)