Вопрос жизни и смерит.Помогите пожалуйста решить задачу ** типы данных(я совсем не...

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

Вопрос жизни и смерит.Помогите пожалуйста решить задачу на типы данных(я совсем не понимаю,как с ними работать)
Дано:
type
число = 1..31;
месяц = 1..12;
год = 1..2000;
дата = record
ч : число;
м : месяц;
г : год
end;
ДеньНедели = (пн, вт, ср, чт, пт, сб, вс);

Считая, что все даты даются по григорианскому календарю (по «новому стилю»), описать:функцию Пятница13(d), которая определяет количество дней до даты d, которые были пятницами 13-ого числа.

45 страница , задание 6.5



image

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

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

0

Есть алгоритм перехода межу календарями. Если его использовать, жизнь опять станет светлой))

0

тогда не нужно быдет писать все те функции

0

в общем ,помогите пожалуйста...Какую давали задачу до этого, я решил сам с помощью ваших наводок,а тут...Тут я правда бессилен, не то что я даже не имею понятия как работать с пользоват.типами данных, а тут вот какая жесть.Я конечено делал примитивные функции, но тут...Буду очень благодарен,если решите((

0

Могу только через Юлианский календарь сделать. Остальное - это рабский труд... я к нему не готов

0

Делать?

0

да любым вам удобным способом,я потом посмотрю ваш код, может пойму что,и напишу "этот рабский труд"

0

100% не напишите

0

Т.е. что-то напишите, но оно будет давать не такой ответ

0

ну хоть посмотрю,как это работать должно на примере с юлианским календарем

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

Type
  td = 1..31;
  tm = 1..12;
  ty = 1..2000;
  Date = record
    d: td;
    m: tm;
    y: td
  end;
  dw = (Pn, Vt, Sr, Cht, Pt, Sb, Vs);

function jday(pd: Date): longint;
{
Алгоритм 199б
"Переход от календарной даты к порядковому номеру дня и обратно"
Взят из сборника "Библиотека алгоритмов 151б-200б",
М.И.Агеев и др., М.: Радио и связь, 1981

Алгоритм возвращает порядковый номер дня по Юлианскому календарю.
Работает для дат, начиная с 01.01.4713 до н.э.
Переработан с языка Algol-60 на Паскаль.
}
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 IsFriday(pd: Date): boolean;
{
Возвращает true, если день - пятница
Использует формулу Ж.Скалигера - С.Дроздова,
получающую номер дня в неделе по номеру юлианского дня.
}
var
  n: integer;
begin
  n := jday(pd);
  n := jday(pd) mod 7;
  IsFriday := (n = Ord(Pt))
end;

function nBlackFridayYear(n: integer): integer;
{ Возвращает количество "черных пятниц" в заданном году }
var
  i, s: integer;
  dt: Date;
begin
  dt.d := 13; dt.y := n;
  s := 0;
  for i := 1 to 12 do
  begin
    dt.m := i;
    if IsFriday(dt) then s := s + 1
  end;
  nBlackFridayYear := s
end;

function nBlackFridayYearC(d, m, y: integer): integer;
{
Возвращает количество "черных пятниц" в заданном году для дат,
не превышающих заданной.
}
var
  i, s: integer;
  dt: Date;
begin
  d := dt.d; dt.d := 13;
  s := 0;
  for i := 1 to m - 1 do
  begin
    dt.m := i;
    if IsFriday(dt) then s := s + 1
  end;
  if d = 13 then
  begin
    dt.m := m;
    if IsFriday(dt) then s := s + 1
  end;
  nBlackFridayYearC := s
end;

{ Основная часть }

var
  d, m, y, i, n, s: integer;

begin
  Write('Введите через пробел день, месяц, год ->');
  Readln(d, m, y);
  { Определим количество "черных" пятниц за предшествующие годы }
  s := 0;
  for i := 1 to y - 1 do s := s + nBlackFridayYear(i);
  { Добавим количество "черных" пятниц в заданном году }
  s := s + nBlackFridayYearC(d, m, y);
  Writeln('Количество "черных" пятниц равно ',s)
end.

Тестовое решение:

Введите через пробел день, месяц, год ->15 6 1987
Количество "черных" пятниц равно 3417

ЗАМЕЧАНИЕ. Поскольку Паскаль по умолчанию не проверяет, находится ли значение интервального типа в заданном интервале, данная программа принимает любые даты и всегда производит правильный подсчет.

(142k баллов)
0

Сумасшедший дом... задавать такое школьникам...

0

Спасибо огромное

0

это не сумасшедший дом,это сумасшедший мок №25 с мат уклоно