задачка_в_С++

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

igoist
Сообщения: 5
Зарегистрирован: 06 дек 2007, 02:39

помогите решитьhttp://frbb.ru/zadachka.zip
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

текст сюда
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Алеся99
Сообщения: 3
Зарегистрирован: 13 дек 2007, 21:41

Надо написать программу,к-ая проверяет явл. ли год высокостным.
ssDev
Сообщения: 50
Зарегистрирован: 20 янв 2005, 14:41

abs(год-2000)/4==0 то исакосный
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Вот как это сделано в модуле OpDate:

Код: Выделить всё

  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;
Если переводить на C, то получим:

Код: Выделить всё

bool IsLeapYear (int iYear)
 /* -Return TRUE if iYear is a leap year */
{
  return (bool)
    (((iYear & 0x03)==0) &&
     ((iYear % 4000)!=0) &&
     ( ((iYear % 100)!=0) || ((iYear % 400)==0) ) );
};  /* IsLeapYear */
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Вот как это сделано в модуле OpDate:

Код: Выделить всё

  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;
Если переводить на C, то получим:

Код: Выделить всё

bool IsLeapYear (int iYear)
 /* -Return TRUE if iYear is a leap year */
{
  return (bool)
    (((iYear & 0x03)==0) &&
     ((iYear % 4000)!=0) &&
     ( ((iYear % 100)!=0) || ((iYear % 400)==0) ) );
};  /* IsLeapYear */
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

На Си это вообще элементарно...

Код: Выделить всё

bool IsLeapYear (int iYear)
{
 return ((iYear%4) == 0);
}
Или можно так...

Код: Выделить всё

bool IsLeapYear (int iYear)
{
 return ((iYear&3) == 0);
}
Дополнительные условия сравнения применяются видимо для годов до нашей эры или каких-то других календарей.

А это вообще полный бред...
return (bool)
(((iYear & 0x03)==0) &&
((iYear % 4000)!=0) &&
( ((iYear % 100)!=0) || ((iYear % 400)==0) ) );
судя по этому коду 4000 год не будет високосным. Почему? К тому же все годы, кратные 100 и не кратные 400, тоже не были и не будут високосными. Чушь полная!
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

WinMain писал(а):К тому же все годы, кратные 100 и не кратные 400, тоже не были и не будут високосными. Чушь полная!
Это не чушь полная, это так и есть. 1700, 1800, 1900 года в Григорианском календаре не были високосными. И 2100 не будет. Странно, если Вы это впервые слышите.
WinMain писал(а):судя по этому коду 4000 год не будет високосным. Почему?
Видимо, это еще более тонкая корректировка. Ведь Земля совершает оборот вокруг Солнца не за 365 и 1/4 суток, а чуть меньше. Поэтому разница и накапливается.

Про то, что каждый 4000-й - не високосный я про это также не слышал. Но, возможно, про это просто очень редко упоминают (если упоминают вообще), потому что "каждый 4000-й год" - это ОЧЕНЬ уж редкое явление.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

WinMain писал(а):К тому же все годы, кратные 100 и не кратные 400, тоже не были и не будут високосными. Чушь полная!
Это не чушь полная, это "так и есть на самом деле" (c). 1700, 1800, 1900 года в Григорианском календаре не были високосными. И 2100 не будет. Странно, если Вы это впервые слышите.
WinMain писал(а):судя по этому коду 4000 год не будет високосным. Почему?
Видимо, это еще более тонкая корректировка. Ведь Земля совершает оборот вокруг Солнца не за 365 и 1/4 суток, а чуть меньше. Поэтому разница и накапливается.

Про то, что каждый 4000-й - не високосный я про это также не слышал. Но, возможно, про это просто очень редко упоминают (если упоминают вообще), потому что "каждый 4000-й год" - это ОЧЕНЬ уж редкое явление.

PS. Не думаю, что в фирме "TurboPower Software" (разработчики Object Professional) полные идиоты сидели. К тому же, я еще понимаю, что можно упустить в коде какую-то деталь. Но чтобы ПРИДУМАТЬ "от балды" что-то лишнее...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Я столкнулся с этой проблемой, когда разрабатывал проекты, и решил ее так: 2000 год был високосным, а до 2100 уже из употребления выйдет либо программа, либо программист, либо заказчик. Так что если программа не предназначена для расчета дней недели на десять веков вперед, можно забить на эту проверку.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить