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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2012, 12:56   #1
naty7773
Пользователь
 
Регистрация: 11.01.2012
Сообщений: 55
Печаль Даны числа A,B,C обозначающие дату.Найти номер этого дня от начала года.

Я не могу точно понять как это делать.Заранее большое спасибо!
naty7773 вне форума Ответить с цитированием
Старый 12.01.2012, 15:13   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

На самом деле, ничего сложного.
Массив из 12 элементов -- количество дней в месяцах.
Проверка на високосность года.
Суммирование.
Все.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 12.01.2012, 16:51   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

неясно, на каком языке программирования.

вот решение на Паскаль, разбирайтесь:
Код:
const
   DaysInMonth: array[1..12] of Byte =
     (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var
  a,b,c : integer;
  i, kDays  : integer;

begin
  WriteLn;
  Write('VVedite datu v vide treh chisel (den` mesac god):');
  Readln(a,b,c);

  {проверка корректности введённой даты!}
  if (c<1700) or (c>3000) then
  begin
    WriteLn('Tokoy god nedopustim!');
    Halt(101)
  end;
  if (b<1) or (b>12) then
  begin
    WriteLn('Net takih mesacev v nashem kalendare!');
    Halt(102)
  end;
  if (a<1) or (a>(DaysInMonth[b] + ord((b=2) and (c mod 4 = 0)))) then
  begin
    WriteLn('Net stolko dney v mesace!');
    Halt(103)
  end;


  kDays := 0;


  for i:=1 to b-1 do
  begin
      Inc(kDays, DaysInMonth[i]);
      {поправка на високосный год} 
      if (i=2) and (c mod 4 = 0) then  Inc(kDays); 
  end;

  Inc(kDays, a);

  WriteLn('Количество дней с 1.01.',c,' равно ', kDays);

  Readln;

end.

Последний раз редактировалось Serge_Bliznykov; 12.01.2012 в 16:54.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2012, 17:22   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Код:
  for i:=1 to b-1 do
  begin
      Inc(kDays, DaysInMonth[i]);
      {поправка на високосный год} 
      if (i=2) and (c mod 4 = 0) then  Inc(kDays); 
  end;
Прошу прощения, проверка не совсем корректна -)
Код:
if (i=2) and (((c mod 4 = 0) and (c mod 100 <> 0)) or (c mod 400 = 0))
вот корректное условие (подчеркнутая часть -- собственно проверка на високосность -- год является високосным, если он кратен 4 и при этом не кратен 100, либо кратен 400)
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062

Последний раз редактировалось Mandrivnyk; 12.01.2012 в 17:25.
Mandrivnyk вне форума Ответить с цитированием
Старый 13.01.2012, 11:01   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Mandrivnyk, вы правы.
если уж быть СОВСЕМ точными, то нужно ещё учесть 4000 цикл:

вот полный текст проверки (выдернул из Turbo Power (Turbo Professional /
Object Professional )
Цитата:
Код:
  {*                    OPDATE.PAS 1.21                    *}
  {*     Copyright (c) TurboPower Software 1988, 1992.     *}

  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;
но упрощенная проверка (которую я использовал) для XX и XXI веков вполне допустима (в настоящий период с 1901 года по 2099 все високосные года - номер года банально кратен 4-м):
Цитата:
Код:
1600  Високосный
1700  не високосный
1800  не високосный
1900  не високосный
2000  Високосный
2100  не високосный
2200  не високосный
2300  не високосный
2400  Високосный
2500  не високосный
2600  не високосный
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2012, 13:35   #6
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Mandrivnyk, вы правы.
если уж быть СОВСЕМ точными, то нужно ещё учесть 4000 цикл:

вот полный текст проверки (выдернул из Turbo Power (Turbo Professional /
Object Professional )


но упрощенная проверка (которую я использовал) для XX и XXI веков вполне допустима (в настоящий период с 1901 года по 2099 все високосные года - номер года банально кратен 4-м):
Убедил! -))
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рейд!Два дня комп все не запущу!!!До этого 2 винта уживались пол года botINOK Компьютерное железо 6 24.08.2011 21:17
Структура. Найти самую раннюю дату указанного времени года imperceptible4462 Помощь студентам 0 03.11.2010 19:31
. Среди всех нецелых элементов этого массива найти наименьший и определить его номер в массиве Паскалька^^ Паскаль, Turbo Pascal, PascalABC.NET 3 19.12.2008 14:18
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49