int SimpleDate::dayOfWeek() {
	int daysElapsed = 0;
	for (int y = MIN_YEAR; y < year; y++)
		daysElapsed += daysInYear(y);

	daysElapsed += ordinalDate();
	return daysElapsed % 7;
}
Beispiel #2
0
int msToYear(double ms)
{
    int approxYear = static_cast<int>(floor(ms / (msPerDay * 365.2425)) + 1970);
    double msFromApproxYearTo1970 = msPerDay * daysFrom1970ToYear(approxYear);
    if (msFromApproxYearTo1970 > ms)
        return approxYear - 1;
    if (msFromApproxYearTo1970 + msPerDay * daysInYear(approxYear) <= ms)
        return approxYear + 1;
    return approxYear;
}
Beispiel #3
0
static inline int msToYear(double ms)
{
    int y = static_cast<int>(floor(ms / (msPerDay * 365.2425)) + 1970);
    double t2 = msFrom1970ToYear(y);
    if (t2 > ms) {
        y--;
    } else {
        if (t2 + msPerDay * daysInYear(y) <= ms)
            y++;
    }
    return y;
}
int main(){
	setlocale(LC_ALL, "RUS");
		
		/*1.Ввести длину отрезка с указанием шкалы измерения(c – сантиметры, i – дюймы), напечатать результат в обеих шкалах : например,
		при вводе «2i» напечатать «2” = 5.08 cm»
		при вводе «5.08c» напечатать «5.08 cm = 2”»*/
	converterInchesSantimeters();
		
		/*2.Ввести два числа, напечатать знак сравнения между ними*/
	twoNumbersAndSymbolMoreLessOrEqual();
		
		/*3.Ввести три числа, напечатать максимальное из них*/
	findMaxNumOfThree();
		
		/*4.Образуют ли цифры четырехзначного числа арифметическую прогрессию*/
	arifmeticProgressOrNot();
		
		//5.Введите экзаменационные оценки студента по 3 предметам и напечатайте его статус : «отличник», «хорошист», «троечник», «двоечник»
	statusOfStudent();
		//6.Ввести два значения времени в формате чч : мм : сс, проверить корректность ввода и напечатать знак сравнения между ними
	checkFormatOfTwoTimesAndSignOfEqual();
		
		//7.Ввести номер года, напечатать количество дней в этом году(справка : год является високосным, если он делится на 4 и на 400 в том случае, если оканчивается на два нуля, например, 2000)
	daysInYear();
		
		//8.Ввести две даты в формате дд.мм.гггг, напечатать знак сравнения между ними
		
	//аналогичное 6 заданию жалко время.
		
		//9.Ввести дату в формате дд.мм.гггг, проверить корректность ввода и напечатать следующую дату
	checkDateAndGetNext();
		
		//10.К введенному числу(от 0 до 99) приписать слово «копеек» в правильном падеже
	addKopeck();//добавление копеек
		
		//11.К введенному числу(от 0 до 1000) приписать слово «рублей» в правильном падеже
		//такое же как и 10 жалко время
		
		//12.К введенному числу(от 0 до 10…0.99) приписать слова «рублей» и «копеек» в правильном падеже
	addRublesAndKopeck();
		
		//13.Три числа являются длинами трех отрезков.Могут ли эти отрезки быть сторонами треугольника и, 
	//если да, то какой это будет треугольник(остро - прямо - или тупоугольный, равнобедренный, равносторонний и т.д.).
	canBeTriangleAndWhichOne();
		
		//14.Даны две тройки чисел, являющихся длинами отрезков.Образует ли каждая тройка стороны треугольника и будут ли эти треугольники подобными
	similarTriangles();



	getch();
	return 0;
}
Beispiel #5
0
// ISO compliant week numbering, not traditional number, rename in KDE5 to isoWeekNumber()
// JPL still need to fully clean up here
int KCalendarSystem::weekNumber( const QDate &date, int *yearNum ) const
{
    if ( isValid( date ) ) {
        QDate firstDayWeek1, lastDayOfYear;
        int y = year( date );
        int week;
        int weekDay1, dayOfWeek1InYear;

        // let's guess 1st day of 1st week
        setDate( firstDayWeek1, y, 1, 1 );
        weekDay1 = dayOfWeek( firstDayWeek1 );

        // iso 8601: week 1  is the first containing thursday and week starts on monday
        if ( weekDay1 > 4 /*Thursday*/ ) {
            firstDayWeek1 = addDays( firstDayWeek1 , daysInWeek( date ) - weekDay1 + 1 ); // next monday
        }

        dayOfWeek1InYear = dayOfYear( firstDayWeek1 );

        // our date in prev year's week
        if ( dayOfYear( date ) < dayOfWeek1InYear ) { 
            if ( yearNum ) {
                *yearNum = y - 1;
            }
            return weeksInYear( y - 1 );
        }

        // let's check if its last week belongs to next year
        d->setAnyDate( lastDayOfYear, y + 1, 1, 1 );
        lastDayOfYear = addDays( lastDayOfYear, -1 );
        // if our date is in last week && 1st week in next year has thursday
        if ( ( dayOfYear( date ) >= daysInYear( date ) - dayOfWeek( lastDayOfYear ) + 1 )
             && dayOfWeek( lastDayOfYear ) < 4 ) {
            if ( yearNum ) {
                * yearNum = y + 1;
            }
             week = 1;
        } else {
            // To calculate properly the number of weeks from day a to x let's make a day 1 of week
            if( weekDay1 < 5 ) {
                firstDayWeek1 = addDays( firstDayWeek1, -( weekDay1 - 1 ) );
            }

            week = firstDayWeek1.daysTo( date ) / daysInWeek( date ) + 1;
        }

        return week;
    }

    return -1;
}
int KCalendarSystemHebrew::weekNumber(const TQDate& date, int * yearNum) const
{
  TQDate firstDayWeek1, lastDayOfYear;
  int y = year(date);
  int week;
  int weekDay1, dayOfWeek1InYear;

  // let's guess 1st day of 1st week
  setYMD(firstDayWeek1, y, 1, 1);
  weekDay1 = dayOfWeek(firstDayWeek1);

  // iso 8601: week 1  is the first containing thursday and week starts on
  // monday
  if (weekDay1 > 4 /*Thursday*/)
    firstDayWeek1 = addDays(firstDayWeek1 , 7 - weekDay1 + 1); // next monday

  dayOfWeek1InYear = dayOfYear(firstDayWeek1);

  if ( dayOfYear(date) < dayOfWeek1InYear ) // our date in prev year's week
  {
    if ( yearNum )
      *yearNum = y - 1;
    return weeksInYear(y - 1);
  }

  // let's check if its last week belongs to next year
  setYMD(lastDayOfYear, y + 1, 1, 1);
  lastDayOfYear = addDays(lastDayOfYear, -1);
  if ( (dayOfYear(date) >= daysInYear(date) - dayOfWeek(lastDayOfYear) + 1)
       // our date is in last week
       && dayOfWeek(lastDayOfYear) < 4) // 1st week in next year has thursday
    {
      if ( yearNum )
        *yearNum = y + 1;
      week = 1;
    }
  else
  {
   if( weekDay1 < 5 ) // To calculate properly the number of weeks
                     //  from day a to x let's make a day 1 of week
      firstDayWeek1 = addDays( firstDayWeek1, -( weekDay1 - 1));

   week = firstDayWeek1.daysTo(date) / 7 + 1;
  }

  return week;
}
Beispiel #7
0
void DateUtils::convertAbsolute2DMY(MAPM absolute, MAPM& day, MAPM& month, MAPM& year)
{
  absolute += 1;

  bool bc = absolute.sign() <= 0;
  bool fix = false;

  MAPM div, rem;
  absolute.integer_div_rem(days_in_400_years, div, rem);
  year = div * 400;
  absolute = rem;

  absolute.integer_div_rem(days_in_100_years, div, rem);
  if(div <= -4) fix = true;
  if(div >= 4) {
    div -= 1;
    rem += days_in_100_years;
  }
  year += div * 100;
  absolute = rem;

  absolute.integer_div_rem(days_in_4_years, div, rem);
  year += div * 4;
  absolute = rem;

  absolute.integer_div_rem(days_in_1_years, div, rem);
  if(div <= -4) fix = true;
  if(div >= 4) {
    div -= 1;
    rem += days_in_1_years;
  }
  year += div;
  absolute = rem;

  if(bc) {
    if(fix && absolute.sign() == 0) {
      // Correct off by one error in year calculations
      // due to negative leap years
      absolute += 1;
    }
    else {
      --year;
      absolute += daysInYear(year);
    }
  }
  else {
    if(absolute.sign() != 0) {
      ++year;
    }
  }

  month = 12;
  day = 31;
  int *days = isLeapYear(year) ? days_before_month_leap : days_before_month;
  for(int i = 11; i >= 0; --i) {
    if(absolute > days[i]) {
      month = i + 1;
      day = absolute - days[i];
      break;
    }
  }
}