Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2011, 13:54   #1
BigBen
 
Регистрация: 12.01.2011
Сообщений: 5
Сообщение Календарь, задача

Задание
Если 7-ое число месяца приходится на вторник, то этот день является счастливым.Сколько счасливых дней будет между заданными датами. Нужно написать программу, которая подсчитает количество счастливых дней между начальной и конечной датами. Известно, что начальная дата приходится на понедельник.
Формат входных данных:
Первая строка входного файла содержит начальную дату в следующем формате: dd/mm/yyyy, где dd-день, mm-месяц, уууу-год(01<=dd<=31,01<=mm<=12, 0001<=yyyy<=9999). Год Y является високосным, если Y делится на 4 и не делится на 100, или делится на 400.
Во второй строке задаётся конечная дата в таком же формате. Гарантируется, что начальная дата хронологически меньше конечной даты.
BigBen вне форума Ответить с цитированием
Старый 12.01.2011, 17:15   #2
like-nix
Форумчанин
 
Регистрация: 09.11.2009
Сообщений: 104
По умолчанию

Функция Си time знает о високосных годах. С помощью этой функции определяем количество дней между датами. вычитаем разницу между начальной датой и первым счастливым днем из количества полученных дней. оставшеиеся дни делим на 7 и прибавляем 1. Все.
like-nix вне форума Ответить с цитированием
Старый 12.01.2011, 17:42   #3
BigBen
 
Регистрация: 12.01.2011
Сообщений: 5
Сообщение Функция Си time

А как она записывается в Паскале?? Мне такого даже близко не объясняли, напишите пожалуйста.
BigBen вне форума Ответить с цитированием
Старый 12.01.2011, 22:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Известно, что начальная дата приходится на понедельник.
если опираться на это условие (без всяких проверок),
то тогда задача упрощается.

вот пара функций, которые Вам пригодятся в Паскале:
Код:
  function IsLeapYear(Year : Integer) : Boolean;
    {-Return True if Year is a leap year}
  begin
    IsLeapYear := (Year mod 4 = 0) and (Year mod 4000 <> 0) and
      ((Year mod 100 <> 0) or (Year mod 400 = 0));
  end;
    
  function DaysInMonth(Month, Year : Integer) : Integer;
    {-Return the number of days in the specified month of a given year}
  begin
    if Word(Year) < 100 then begin
      Inc(Year, 1900);
      if Year < Threshold2000 then
        Inc(Year, 100);
    end;

    case Month of
      1, 3, 5, 7, 8, 10, 12 :
        DaysInMonth := 31;
      4, 6, 9, 11 :
        DaysInMonth := 30;
      2 :
        DaysInMonth := 28+Ord(IsLeapYear(Year));
    else
      DaysInMonth := 0;
    end;
  end;
ну дальше просто. вводите начальную дату.
и отсчитваете вторники (учитывая переходы на следующий месяц) пока не превысите конечную дату.
в процессе отсчёта проверяете, если вторник - 7-е число - увеличиваете счётчик.
всё.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Календарь mineralkaaa Общие вопросы Delphi 5 11.09.2010 01:28
КАЛЕНДАРЬ В С++ ange11o Общие вопросы C/C++ 0 02.06.2010 14:18
календарь mineralkaaa Помощь студентам 6 20.05.2010 13:21
Календарь seriousMalish JavaScript, Ajax 2 12.05.2010 05:01