Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Количестов дней в месяце 
:(
    Опции темы
Rutti
Дата 7.4.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 25.7.2004

Репутация: нет
Всего: нет



Как средствами стандартной библиотеки определить количество дней в месяце по порядковому номеру месяца (типа Builder'овской DaysInMonth)?
PM MAIL   Вверх
codelord
Дата 7.4.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



напиши сам делов 5-10 мин, а в стандартной похоже нет.


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Darhazer
Дата 7.4.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 2
Всего: 29



Код

#include <stdio.h>

int main()
{
    int Monts[] = { -1, 31,28,31,30,31,30,31,31,30,31,30,31 };
    int year = 2000;
    if ( year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ) )
    {
        ++Monts[2];
    }

    printf("%d", Monts[2]);
}



--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Rutti
Дата 7.4.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 25.7.2004

Репутация: нет
Всего: нет



Хм... А как же високоные года учитывать?

А где можно посмотреть как DaysInMonth реализовано у Borland'а?
PM MAIL   Вверх
_hunter
Дата 7.4.2006, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



похоже так же и реализованно:
Код

{ The MonthDays array can be used to quickly find the number of
  days in a month:  MonthDays[IsLeapYear(Y), M]      }

const
  MonthDays: array [Boolean] of TDayTable =
    ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
     (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));

function DaysInMonth(const AValue: TDateTime): Word;
var
  LYear, LMonth, LDay: Word;
begin
  DecodeDate(AValue, LYear, LMonth, LDay);
  Result := DaysInAMonth(LYear, LMonth);
end;

function DaysInAMonth(const AYear, AMonth: Word): Word;
begin
  Result := MonthDays[(AMonth = 2) and IsLeapYear(AYear), AMonth];
end;



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Darhazer
Дата 7.4.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 2
Всего: 29



Цитата(Rutti @ 7.4.2006, 16:27)
Хм... А как же високоные года учитывать?

Код
if ( year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ) )

Конечно можеш этот код поставить в bool isLeapYeat( int year), а остальную часть в int DaysInMonth(...)
Но в общем код этот


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
LesnoyChelovek
Дата 7.4.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


странник Интернета
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 27.2.2006
Где: Русь

Репутация: нет
Всего: 10



Есть один и очень просто способ определения количества дней. Берем номер месяца и делим на два. Если есть остаток, то в месяце 31 день; если остатка нет, то 30.
Кончено, есть ещё февраль... Берём год, если он делиться на 4, то в феврале 29 дней.
Вот и всё...


--------------------
Делай добро и бросай его в воду... оно не утонет.. добром к тебе вернеться.
http://picasaweb.google.com/LesnoyChelovek/Photo
PM MAIL   Вверх
Fin
Дата 7.4.2006, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



LesnoyChelovek, По твоей логике, в Сенябре и в Ноябре 31 день. А в Августе, в Октябре, и в Декабре 30 дней. Открой календарь и убедись в обратном.
Также, ну не сушествовало даты 29 февраля 1900 года.


--------------------
Пролетал мимо.
PM MAIL   Вверх
Rutti
Дата 11.4.2006, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 25.7.2004

Репутация: нет
Всего: нет



А как красиво проверить диапазон (точнее, входит ли введённая дата в требуемый диапазон)? У меня кроме как на простой перебор через for(...) ума не хватает.
PM MAIL   Вверх
Partizan
Дата 11.4.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



=) а чо там ) сначала месяцы сравниваеш, а потом дни ) и фсё )


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Neitron
Дата 11.4.2006, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 2
Всего: 5



Таймстампы рулят.


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
threef
Дата 11.4.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



преобразовать первую, последнюю и проверяемую даты к time_t , а тогда можно и if применить

а насчет первого вопроса - преобразуешь дату год-месяц-31 к time_t, если че, преобразователь ругнется. И с февралем также. А потом - в оболочку типа DayIsMonth. И не хуже Борланда.

Это сообщение отредактировал(а) threef - 11.4.2006, 20:45
PM MAIL   Вверх
sgrey
Дата 15.4.2006, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



описание функции....
Код

int checkDay(int tDay) const
{
   static const int PerMonth[ 13 ] = 
      { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

   // determine whether testDay is valid for specified month
   if ( tDay > 0 && tDay <= PerMonth[month] )
      return tDay;
   
   // February 29 check for leap year 
  if ( month == 2 && tDay == 29 &&
      ( year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)))
      
      return tDay;
  
  
   return 1;  // leave object in consistent state if bad value

} // end function checkDay

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.