задачка_в_С++
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
помогите решитьhttp://frbb.ru/zadachka.zip
текст сюда
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Надо написать программу,к-ая проверяет явл. ли год высокостным.
abs(год-2000)/4==0 то исакосный
Вот как это сделано в модуле OpDate:
Если переводить на C, то получим:
Код: Выделить всё
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;
Код: Выделить всё
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 */
Вот как это сделано в модуле OpDate:
Если переводить на C, то получим:
Код: Выделить всё
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;
Код: Выделить всё
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 */
На Си это вообще элементарно...
Или можно так...
Дополнительные условия сравнения применяются видимо для годов до нашей эры или каких-то других календарей.
А это вообще полный бред...
Код: Выделить всё
bool IsLeapYear (int iYear)
{
return ((iYear%4) == 0);
}
Код: Выделить всё
bool IsLeapYear (int iYear)
{
return ((iYear&3) == 0);
}
А это вообще полный бред...
судя по этому коду 4000 год не будет високосным. Почему? К тому же все годы, кратные 100 и не кратные 400, тоже не были и не будут високосными. Чушь полная!return (bool)
(((iYear & 0x03)==0) &&
((iYear % 4000)!=0) &&
( ((iYear % 100)!=0) || ((iYear % 400)==0) ) );
Это не чушь полная, это так и есть. 1700, 1800, 1900 года в Григорианском календаре не были високосными. И 2100 не будет. Странно, если Вы это впервые слышите.WinMain писал(а):К тому же все годы, кратные 100 и не кратные 400, тоже не были и не будут високосными. Чушь полная!
Видимо, это еще более тонкая корректировка. Ведь Земля совершает оборот вокруг Солнца не за 365 и 1/4 суток, а чуть меньше. Поэтому разница и накапливается.WinMain писал(а):судя по этому коду 4000 год не будет високосным. Почему?
Про то, что каждый 4000-й - не високосный я про это также не слышал. Но, возможно, про это просто очень редко упоминают (если упоминают вообще), потому что "каждый 4000-й год" - это ОЧЕНЬ уж редкое явление.
Это не чушь полная, это "так и есть на самом деле" (c). 1700, 1800, 1900 года в Григорианском календаре не были високосными. И 2100 не будет. Странно, если Вы это впервые слышите.WinMain писал(а):К тому же все годы, кратные 100 и не кратные 400, тоже не были и не будут високосными. Чушь полная!
Видимо, это еще более тонкая корректировка. Ведь Земля совершает оборот вокруг Солнца не за 365 и 1/4 суток, а чуть меньше. Поэтому разница и накапливается.WinMain писал(а):судя по этому коду 4000 год не будет високосным. Почему?
Про то, что каждый 4000-й - не високосный я про это также не слышал. Но, возможно, про это просто очень редко упоминают (если упоминают вообще), потому что "каждый 4000-й год" - это ОЧЕНЬ уж редкое явление.
PS. Не думаю, что в фирме "TurboPower Software" (разработчики Object Professional) полные идиоты сидели. К тому же, я еще понимаю, что можно упустить в коде какую-то деталь. Но чтобы ПРИДУМАТЬ "от балды" что-то лишнее...
Я столкнулся с этой проблемой, когда разрабатывал проекты, и решил ее так: 2000 год был високосным, а до 2100 уже из употребления выйдет либо программа, либо программист, либо заказчик. Так что если программа не предназначена для расчета дней недели на десять веков вперед, можно забить на эту проверку.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.