int SimpleDate::dayOfWeek() { int daysElapsed = 0; for (int y = MIN_YEAR; y < year; y++) daysElapsed += daysInYear(y); daysElapsed += ordinalDate(); return daysElapsed % 7; }
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; }
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; }
// 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; }
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; } } }