Страница 1 из 2

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

Добавлено: 08 дек 2007, 23:44
igoist
помогите решитьhttp://frbb.ru/zadachka.zip

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

Добавлено: 10 дек 2007, 11:40
Хыиуду
текст сюда

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

Добавлено: 14 дек 2007, 21:49
Алеся99
Надо написать программу,к-ая проверяет явл. ли год высокостным.

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

Добавлено: 15 дек 2007, 13:01
ssDev
abs(год-2000)/4==0 то исакосный

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

Добавлено: 17 дек 2007, 09:48
BBB
Вот как это сделано в модуле 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 */

Определение високосного года

Добавлено: 17 дек 2007, 09:50
BBB
Вот как это сделано в модуле 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 */

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

Добавлено: 17 дек 2007, 11:38
WinMain
На Си это вообще элементарно...

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

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, тоже не были и не будут високосными. Чушь полная!

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

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

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

Re: Определение високосного года.

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

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

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

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

Добавлено: 18 дек 2007, 11:33
Хыиуду
Я столкнулся с этой проблемой, когда разрабатывал проекты, и решил ее так: 2000 год был високосным, а до 2100 уже из употребления выйдет либо программа, либо программист, либо заказчик. Так что если программа не предназначена для расчета дней недели на десять веков вперед, можно забить на эту проверку.