Гэр / Компьютер эзэмших / Microsoft Excel дээр сард хэдэн өдрийн тоог тодорхойлох. Математикийн нэг томьёогоор доторх өдрийн тоог сарын тоогоор хэрхэн тооцоолох вэ? Хуанлийн 13 хоног

Microsoft Excel дээр сард хэдэн өдрийн тоог тодорхойлох. Математикийн нэг томьёогоор доторх өдрийн тоог сарын тоогоор хэрхэн тооцоолох вэ? Хуанлийн 13 хоног

Хүснэгт үүсгэх үед зарим асуудлыг шийдэхийн тулд та сард хэдэн өдрийн тоог тусдаа нүдэнд эсвэл томьёоны дотор зааж өгөх хэрэгтэй бөгөөд ингэснээр програм зарцуулдаг. шаардлагатай тооцоо. Excel-д энэ үйлдлийг гүйцэтгэх хэрэгслүүд байдаг. авч үзье янз бүрийн арга замуудэнэ боломжийг ашиглах.

Та тусгай ангиллын операторуудыг ашиглан Excel дээр сард хэдэн өдрийн тоог тооцоолж болно "Огноо, цаг". Аль сонголтыг ашиглах нь хамгийн сайн болохыг олж мэдэхийн тулд эхлээд үйл ажиллагааны зорилгоо тодорхойлох хэрэгтэй. Үүнээс хамааран тооцооллын үр дүнг хуудсан дээрх тусдаа элементээр харуулах эсвэл өөр томьёоны дотор ашиглаж болно.

Арга 1: DAY болон EOMONTH операторуудын хослол

Ихэнх энгийн аргаарЭнэ асуудлыг шийдэх нь операторуудын нэгдэл юм ӨДӨРболон EOMONTH.

Чиг үүрэг ӨДӨРоператоруудын бүлэгт хамаарна "Огноо, цаг". Энэ нь тодорхой тоог заадаг 1 өмнө 31 . Манай тохиолдолд даалгавар өгсөн операторАргумент болгон суурилуулсан функцийг ашиглан сарын сүүлийн өдрийг заана EOMONTH.

Операторын синтакс ӨДӨРдараачийн:

DAY(огнооны_тооны_формат)

Энэ нь энэ функцийн цорын ганц аргумент юм "Тоон форматтай огноо". Үүнийг оператор тохируулна EOMONTH. Тоон формат дахь огноо нь ердийн форматаас ялгаатай гэдгийг хэлэх ёстой. Жишээлбэл, огноо 04.05.2017 тоон хэлбэрээр харагдана 42859 . Тиймээс Excel нь энэ форматыг зөвхөн дотоод үйл ажиллагаанд ашигладаг. Энэ нь нүдэнд харуулахад ховор хэрэглэгддэг.

Оператор EOMONTHзаасан өдрөөс хойш буюу өмнөх сарын өгөгдсөн тоо болох сарын сүүлчийн өдрийн дарааллын дугаарыг заах зорилготой. Функцийн синтакс нь:

EOMONTH(эхлэх_огноо, сарын_тоо)

Оператор "эхлэх өдөр"тооллого хийгдсэн огноо, эсвэл түүний байгаа нүдний лавлагааг агуулна.

Оператор "Сарын тоо"өгөгдсөн өдрөөс эхлэн тоолох сарын тоог заана.

Одоо энэ нь тодорхой жишээн дээр хэрхэн ажилладагийг харцгаая. Үүний тулд бид авдаг excel хуудас, аль нэг нүдэнд хуанлийн тодорхой дугаар оруулсан байна. Дээр дурдсан операторуудын багцыг ашиглан энэ тоо хамаарах сарын хугацаанд хэдэн өдөр болохыг тодорхойлох шаардлагатай.


Бидний ерөнхий томъёо дараах хэлбэртэй байна.

ӨДӨР(САР САР(B3,0))

Энэ томъёонд зөвхөн нүдний хаяг нь хувьсагчийн утга ( B3). Тиймээс, хэрэв та дамжуулан процедурыг гүйцэтгэхийг хүсэхгүй байгаа бол Функцийн шидтэнгүүд, та оруулж болно энэ томъёохуудасны аль ч элемент рүү дугаарыг агуулсан нүдний хаягийг тухайн тохиолдолд тохирох хаягаар солино. Үр дүн нь ижил төстэй байх болно.

Арга 2: өдрийн тоог автоматаар илрүүлэх

Одоо өөр нэг асуудлыг авч үзье. Өдрийн тоог өгөгдсөн хуанлийн дугаарын дагуу биш, харин одоогийнх нь дагуу харуулах шаардлагатай. Нэмж дурдахад, хугацааг өөрчлөх нь хэрэглэгчийн оролцоогүйгээр автоматаар хийгдэх болно. Хэдийгээр энэ нь хачирхалтай санагдаж байна, гэхдээ даалгавар өгсөнөмнөхөөсөө хөнгөн. Үүнийг шийдэхийн тулд бүр нээлттэй Функцийн мастершаардлагагүй, учир нь гүйцэтгэгч томъёо энэ ажиллагаа, хувьсах утга эсвэл нүдний лавлагаа агуулаагүй болно. Та хүснэгтийн үр дүнг харуулахыг хүссэн нүдэнд дараах томьёог өөрчлөхгүйгээр зүгээр л бичиж болно.

ӨДӨР(САР САР(ӨНӨӨДӨР();0))

Энэ тохиолдолд бидний ашигласан TODAY функц нь өнөөдрийн дугаарыг харуулах бөгөөд ямар ч аргумент авдаггүй. Тиймээс таны үүрэнд тухайн сард хэдэн өдрийн тоог харуулах болно.

Арга 3: Нарийн төвөгтэй томъёонд хэрэглэх өдрийн тоог тооцоол

Дээрх жишээн дээр бид заасан хуанлийн огнооны дагуу эсвэл тухайн сарын дагуу автоматаар сард хэдэн өдрийн тоог хэрхэн тооцоолохыг харуулсан бөгөөд үр дүнг тусдаа нүдэнд харуулав. Гэхдээ энэ утгыг олох нь бусад үзүүлэлтүүдийг тооцоолоход шаардлагатай байж магадгүй юм. Энэ тохиолдолд өдрийн тоог тооцоолох нь нарийн төвөгтэй томьёо дотор хийгдэх бөгөөд тусдаа нүдэнд харагдахгүй. Үүнийг хэрхэн яаж хийхийг жишээгээр харцгаая.

Бид тухайн сарыг дуустал үлдсэн өдрийн тоог нүдээр харуулах ёстой. Шиг өмнөх арга, энэ сонголт нээх шаардлагагүй Функцийн шидтэнгүүд. Та дараах илэрхийллийг нүдэнд зүгээр л бичиж болно.

ӨДӨР(ӨНӨӨДӨР();0))-ӨДӨР(ӨНӨӨДӨР())

Үүний дараа заасан нүд нь сар дуустал хэдэн өдрийн тоог харуулах болно. Үр дүн нь өдөр бүр автоматаар шинэчлэгдэж, шинэ хугацаа эхэлснээс хойш тооллого дахин эхэлнэ. Энэ нь нэг төрлийн цаг тоологч болж хувирдаг.

Таны харж байгаагаар энэ томъёо нь хоёр хэсгээс бүрдэнэ. Тэдний эхнийх нь сард хэдэн өдрийн тоог тооцоолоход аль хэдийн танил болсон илэрхийлэл юм.

ӨДӨР(САР САР(ӨНӨӨДӨР();0))

Гэхдээ хоёрдугаар хэсэгт өнөөдрийн тоог энэ үзүүлэлтээс хассан болно.

ӨДРӨӨС ӨДӨРТ())

Тиймээс энэ тооцоог хийхдээ өдрийн тоог тооцоолох томъёо нь илүү төвөгтэй томъёоны салшгүй хэсэг юм.

Арга 4: өөр томъёо

Гэвч харамсалтай нь Excel 2007-ээс өмнөх програмын хувилбаруудад оператор байхгүй байна EOMONTH. Програмын хуучин хувилбарыг ашигладаг хэрэглэгчдийн талаар юу хэлэх вэ? Тэдний хувьд энэ боломж нь дээр дурдсанаас илүү том хэмжээтэй өөр томъёогоор бий болдог. Энэ сонголтыг ашиглан өгөгдсөн хуанлийн дугаараас нэг сарын өдрийн тоог хэрхэн тооцоолохыг үзье.

  1. Үр дүнг харуулах нүдийг сонгоод операторын аргументуудын цонх руу очно уу ӨДӨРбидэнд аль хэдийн танил болсон. Бид энэ цонхны цорын ганц талбарт курсорыг тавиад томьёоны мөрний зүүн талд байгаа урвуу гурвалжин дээр дарна уу. Хэсэг рүү оч "Илүү олон функцууд...".
  2. Цонхонд Функцийн шидтэнгүүдбүлэгт "Огноо, цаг"нэрийг онцлон тэмдэглэ "ОН САР ӨДӨР"мөн товчлуур дээр дарна уу БОЛЖ БАЙНА УУ.
  3. Операторын цонх нээгдэнэ ОН САР ӨДӨР. Энэ функцогноог ердийн форматаас тоон утга болгон хувиргадаг бөгөөд оператор үүнийг боловсруулах шаардлагатай болно ӨДӨР.

    Нээгдсэн цонхонд гурван талбар байна. Талбайд "Өдөр"дугаар оруулж болно "нэг". Энэ нь ямар ч нөхцөл байдалд ижил арга хэмжээ байх болно. Харин нөгөө хоёр талбарыг сайтар шийдвэрлэх хэрэгтэй.

    Талбар дээр курсорыг тавь "Жил". Дараа нь бид танил гурвалжингаар дамжуулан операторуудын сонголт руу шилждэг.

  4. Бүгд ижил ангилалд багтдаг Функцийн шидтэнгүүднэрийг онцлон тэмдэглэ "ЖИЛ"мөн товчлуур дээр дарна уу БОЛЖ БАЙНА УУ.
  5. Operator Arguments цонх нээгдэнэ ЖИЛ. Энэ нь заасан тооноос оныг тодорхойлдог. Цонхны цорын ганц талбарт "Тоон форматтай огноо"өдрийн тоог тодорхойлохыг хүсэж буй анхны огноог агуулсан нүдэнд лавлагааг зааж өгнө үү. Үүний дараа товчлуур дээр дарах гэж яарах хэрэггүй БОЛЖ БАЙНА УУболон нэрэн дээр дарна уу "ОН САР ӨДӨР"томъёоны мөрөнд.
  6. Дараа нь бид дахин аргументуудын цонх руу буцна ОН САР ӨДӨР. Талбар дээр курсорыг тавь "Сар"мөн функцүүдийн сонголт руу шилжинэ үү.
  7. AT Функцийн мастернэр дээр дарна уу "САР"мөн товчлуур дээр дарна уу БОЛЖ БАЙНА УУ.
  8. Функцийн аргументуудын цонх нээгдэнэ САР. Түүний даалгавар нь өмнөх оператортой төстэй бөгөөд зөвхөн сарын дугаарын утгыг харуулдаг. Энэ цонхны цорын ганц талбарт бид анхны дугаартай ижил лавлагаа тохируулсан. Дараа нь томьёоны мөрөнд нэр дээр дарна уу "ӨДӨР".
  9. Аргументуудын цонх руу буцах ӨДӨР. Энд бид зөвхөн нэг жижиг мэдрэгчтэй байх ёстой. Өгөгдөл аль хэдийн байрласан цонхны цорын ганц талбарт томъёоны төгсгөлд илэрхийллийг нэмнэ үү "-нэг"хашилтгүй, мөн операторын ард "+1" тавина САР. Үүний дараа товчлуур дээр дарна уу БОЛЖ БАЙНА УУ.
  10. Таны харж байгаагаар урьдчилан сонгосон нүд нь тухайн сард хамаарах хэдэн өдрийн тоог харуулдаг. Ерөнхий томъёо нь дараах байдалтай байна.

    ӨДӨР(ОГНОО(ЖИЛ(D3), САР(D3)+1,1)-1)

Энэ томъёоны нууц нь энгийн зүйл юм. Бид үүнийг дараагийн сарын тэмдгийн эхний өдрийн огноог тодорхойлоход ашигладаг бөгөөд дараа нь түүнээс нэг өдрийг хасч, заасан сард хэдэн өдрийн тоог авдаг. Энэ томьёоны хувьсагч нь нүдний лавлагаа юм D3хоёр газар. Хэрэв та үүнийг тухайн тохиолдлынхоо огноо байгаа нүдний хаягаар сольсон бол энэ илэрхийллийг хуудасны аль ч элемент рүү тусламжгүйгээр оруулах боломжтой. Функцийн шидтэнгүүд.

Таны харж байгаагаар Excel дээр сард хэдэн өдрийн тоог мэдэх хэд хэдэн сонголт байдаг. Аль нь ашиглах нь хэрэглэгчийн эцсийн зорилго, мөн програмын аль хувилбарыг ашиглаж байгаагаас хамаарна.

Contur.Accounting үнэгүй онлайн тооцоолуур танд тусалж, хоёр өдрийн хооронд хэдэн өдөр өнгөрснийг танд хэлэх болно. өгөгдсөн огнооболон. Үүнээс гадна, хэрэв танд хэрэгцээ байгаа бол тухайн жил эсвэл хэдэн жилийн хугацаанд хэдэн хуанли, амралтын өдөр эсвэл ажлын өдөр (цаг) багтахыг тооцоолж болно.

Болзооны хооронд хэдэн өдөр вэ? Заавар

Та зүгээр л тодорхой эхлэх, дуусах өдрийг тогтоож, хэдхэн секундын дотор тооцооллыг гаргана. Онлайн тооцоолуур нь бүх өгөгдлийг бие даан тооцдог. Хэрэв та долоо хоногийн анхны өдрүүдийг өөрчилбөл үр дүн нь үсрэлтийн жилийг харгалзан автоматаар дахин тооцоологддог.

Анхаарах зүйл: Та өмнөх жилүүдийн тооцооноос сар бүрийн ажлын өдөр/цагыг авч, тооцоолол болгон өгөх боломжгүй - өгөгдөл өөр өөр байх болно. Тиймээс тооцоолуур ашиглах нь дээр.

Тиймээс процедур нь:

  1. "Эхлэх огноо" ба "Төгсгөлийн огноо" талбарт 2013 оноос хойш 2018 он хүртэл тооллогын эхлэх ба дуусах өдрүүдийг тус тус сонгоно уу.
  2. Дараагийн талбарт өдөрт ажиллах цагийн тоог тохируулна уу. Анхдагч байдлаар, энэ талбарыг аль хэдийн 8 цаг (40 цагийн ажлын долоо хоног) гэж тохируулсан боловч та энэ тоог өөрчилж болно.
  3. Баннер дээрх дэлгэцийн баруун талд та үр дүнг харах болно: ажлын өдрүүд, хуанлийн өдрүүд, өгөгдсөн огнооны хоорондох ажлын цаг. Үр дүнг хуулж, таны баримт бичигт хадгалах ёстой.

Та тооцоолуурыг юунд ашиглаж болох вэ?

  1. Гэрээний дагуу торгууль, саатлыг тооцох
  2. Нөөцийг ашиглах үр ашиг, түүнийг ашиглах эцсийн хугацааг хэрхэн ойлгох вэ
  3. Амралтын өдрөөр санамсаргүйгээр ажлаа төлөвлөхгүй байх
  4. Хугацаа дуусахад хэр их хугацаа үлдлээ

Жишээ:

Та нягтлан бодогч мэргэжилтэй. Менежер танаас компаний бүх ажилчид 2-р сард ажиллах ёстой ажлын цагийн тоог ойрын хэдэн минутын дотор өгөхийг хүссэн. Та ажилчдын тоог хялбархан тодорхойлж чадна - таны нүдний өмнө тоонууд байна. Гэхдээ цагийг тоолох ёстой .... Тэгээд 2-р сард хэдэн өдөр байдаг вэ? Үсрэнгүй жил яах вэ? Амралтын өдрүүд хэд байсан бэ? Мөн амралтын өдрүүдийн тоог хэрхэн тодорхойлох вэ?

Шийдэл: зүгээр л манай виджетийг ашигла. Та бүх мэдээллийг автоматаар хүлээн авах болно, танд ширээний календарь, тооны машин хэрэггүй.

Энэ тооны машин танд таалагдсан уу? Дараа нь манай бусад функцуудыг туршиж үзээрэй

Тохиромжтой, энгийн вэб үйлчилгээнд нягтлан бодох бүртгэл хөтлөх, тайлан илгээх, тооцоолол хийхийг хүсч байна уу? Kontur.Accounting-г 14 хоног үнэгүй туршаад үзээрэй! Бид танд үйлчилгээг хэрхэн ашиглахыг хурдан зааж, бүх асуултанд хариулах болно!

Анхаарна уу: энэ нийтлэл нь cmcenroe.me/2014/12/05/days-in-month-formula.html нийтлэлийн орчуулга юм. I хэсэг), түүнчлэн зохиогчийн нэмэлт ( II хэсэг). Та материалыг нухацтай авч үзэх ёсгүй, харин сургуулийн арифметикийн мэдлэг, практик хэрэглээгүй байхаас өөр зүйл шаарддаггүй, харин оюун ухаанаа дулаацуулах хэрэгтэй. Бүгдийг уншихад таатай байна!

I хэсэг

Оршил

Саяхан дахиад л нойргүй хоносон хойноо би жилийн сар бүрийн хэдэн өдрийн тоог санах аргын талаар бодож байлаа. Үүнд лангуун дээр тоолох арга ч бий, гэхдээ нэг нь ч, нөгөө нь ч надад тохирохгүй байв. Ийм асуудлыг шийдэх ямар нэгэн математикийн томьёо байна уу гэж би гайхаж, өнгөрөгч судалгаанаас нэгийг нь олоогүй - би өөрөө нэгийг бүтээх гэж оролдсон.

Албан ёсны болгох Өөрөөр хэлбэл функцийг олох шаардлагатай е, ийм үнэ цэнэ f(x)сар бүр x, 1-ээс 12 хүртэлх тоогоор илэрхийлэгдэх нь тухайн сарын өдрийн тоотой тэнцүү байна. Аргумент ба функцийн утгуудын хүснэгт:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Хэрэв та миний шийдлийг уншихаасаа өмнө өөрөө туршиж үзэхийг хүсч байсан бол одоо цаг нь болжээ. Хэрэв та бэлэн хариултыг шууд харахыг хүсч байвал спойлерын доор хараарай.

Хариулт


Шийдлийг олохын тулд миний алхамууд дараах байдалтай байна.

Математикийн төхөөрөмж

Эхлээд энэ асуудлыг шийдвэрлэхэд чухал ач холбогдолтой хоёр операторын тухай санах ойг товчхон сэргээцгээе: бүхэл тоон хуваагдал ба хуваагдлын үлдэгдэл.

Бүхэл тоон хуваагдалхоёр бүхэл тоог хувааж, категориос хасах үед олон програмчлалын хэлэнд ашигладаг оператор юм. бутархай хэсэг. Би үүнийг дүрслэх болно. Жишээлбэл:

Хэсгийн үлдэгдэлнь хуваагдлын үлдэгдлийг олох оператор юм. Олон програмчлалын хэл нь тэмдгийг ашигладаг % , гэхдээ би хэлбэрийн бүтцийг ашиглах болно, жишээ нь:

Хэсгийн үлдсэн хэсэг нь хэлтэстэй ижил ач холбогдолтой гэдгийг би тэмдэглэж байна.

Үндсэн мэдээлэл

Тиймээс бид үндсэн томъёог олж авахын тулд математикийн төхөөрөмжөө ашигладаг. Ердийн сар 30 эсвэл 31 хоногтой байдаг тул бид 1 эсвэл 0-ийг ээлжлэн авч, дараа нь энэ тоонд тогтмолыг нэмж болно:

Бид хүснэгтийг авна, зөв ​​утгыг тодоор тэмдэглэв:
x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 30 31 30 31 30

Муу эхлэл биш! 1-р сар болон 3-аас 7-р сарыг багтаасан зөв утгууд байна. Хоёрдугаар сар бол онцгой тохиолдол бөгөөд бид үүнийг хэсэг хугацааны дараа шийдвэрлэх болно. 7-р сараас хойш үлдсэн саруудад 0 ба 1-ийг авах дарааллыг өөрчлөх хэрэгтэй.
Үүнийг хийхийн тулд бид ногдол ашигт 1-ийг нэмж болно.

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 30 31 30 31 30 31 30 31 30 31 30 31

Одоо 8-р сараас 12-р сар хүртэл зөв утгууд байгаа боловч хүлээгдэж буйчлан бусад саруудын утгууд буруу байна. Эдгээр томъёог хэрхэн нэгтгэж болохыг харцгаая.

Маск түрхэж байна

Энэ нь хэсэгчилсэн функцийг шаарддаг, гэхдээ энэ нь надад уйтгартай мэт санагдаж байсан тул би функцийн нэг хэсгийг нэг интервал дээр, нөгөөг нь нөгөө талдаа ашиглан шийдэх өөр арга замыг бодсон.
Миний бодлоор хамгийн хялбар арга бол нэг хэрэглээнд 1, бусад нь 0 байх илэрхийлэлийг олох явдал юм. Аргументыг илэрхийллээр үржүүлээд бид түүнийг хамрах хүрээнээс нь гадуурх томъёоноос хасдаг аргыг би "маск" гэж нэрлэсэн, учир нь энэ зан үйл нь нэг төрлийн бит масктай төстэй юм.
Энэ аргыг ашиглахын тулд функцийнхээ сүүлийн хэсэгт бид 1-тэй тэнцүү илэрхийллийг олох хэрэгтэй бөгөөд аргументын утгууд нь үргэлж 16-аас бага байдаг тул бүхэл тоог 8-д хуваахад тохиромжтой.
x 1 2 3 4 5 6 7 8 9 10 11 12
x ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

Одоо энэ маскын тусламжтайгаар ногдол ашигт 1-ийн оронд илэрхийлэл ашиглан бид томъёонд 0 ба 1-ийг олж авах дарааллыг өөрчилж болно.

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 31 30 31 30 31

Эврика! Хоёрдугаар сараас бусад бүх зүйл зөв байна. Гэнэтийн гайхшрал.

Хоёрдугаар сар

Аль ч сар 30 эсвэл 31 хоногтой, 2-р сараас бусад нь 28 (өндөр жил энэ даалгаварт хамаарахгүй). Одоогоор манай томьёоны дагуу 30 хоногтой тул 2-той тэнцүү илэрхийллийг -ээр хасвал зүгээр.
Миний бодож олсон хамгийн сайн зүйл бол 2-р сараас хойшхи бүх сарын турш маск хийдэг.
x 1 2 3 4 5 6 7 8 9 10 11 12
2 мод x 0 0 2 2 2 2 2 2 2 2 2 2

Үлдсэн саруудад 2-ыг нэмснээр үндсэн тогтмолыг 28 болгон өөрчилснөөр бид дараах томъёог авна.

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 29 28 31 30 31 30 31 31 30 31 30 31

Харамсалтай нь 1-р сар одоо 2 хоногоор богиноссон. Гэхдээ аз болоход, зөвхөн эхний сард хамаарах илэрхийлэлийг олж авахад маш хялбар байдаг: энэ нь доошоо дугуйрсан тооны эсрэг заалт юм. Үүнийг 2-оор үржүүлснээр бид эцсийн томъёог авна.

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Дараах үг

Энд байна - хамгийн энгийн арифметик ашиглан жилийн аль ч сарын өдрийн тоог олж авах томъёо. Дараагийн удаад та 9-р сард хэдэн өдөр болохыг санахдаа үүнийг JavaScript нэг давхаргын тусламжтайгаар хий.

Функц f(x) ( буцах 28 + (x + Math.floor(x/8)) % 2 + 2 % x + 2 * Math.floor(1/x); )

II хэсэг

Оршил

Эхний хэсэгт богино, бүр бага зэрэг гоёмсог томьёог олж авсан бөгөөд гол давуу тал нь математикийн аппаратын энгийн байдал, салаалсан болон нөхцөлт илэрхийлэл байхгүй, товч юм. Сул тал нь та үүнийг төсөлдөө ашиглахгүй гэдгээс гадна үсрэнгүй болон үсрээгүй жилүүдийг шалгадаггүй.
Тиймээс би функцийг бий болгох ажлыг өөртөө тавьсан е, ийм үнэ цэнэ f(x, y)сар бүр x, 1-ээс 12 хүртэлх тоо болон жилээр илэрхийлэгддэг y 0-ээс их бол тухайн сарын өдрийн тоотой тэнцүү байна xжилд y.
Тэвчээргүй хүмүүст зориулж spoiler дор бэлэн хариулт байгаа ч бусад нь намайг дагаарай.

Хариулт

Хэсгийн үлдэгдэл: модболон ⌊⌋

Тодорхой болгохын тулд зарим томъёонд үлдэгдэлтэй хуваах операторыг доод хаалтаар сольсон нь надад шаардлагатай мэт санагдсантай санал нийлэх болно.

Үсрэнгүй жил

Үсрэнгүй жилд нэмэлт өдөр гарч ирдэг: 2-р сарын 29. Та бүхний мэдэж байгаагаар үсрэнгүй жил гэдэг нь 100-ын үржвэр биш, 4-ийн үржвэр эсвэл 400-ийн үржвэр биш юм. Энэ мэдэгдэлтэй ижил илэрхийлэл бичье.

Энэ илэрхийлэлийг алгебрийн илэрхийлэл болгон хөрвүүлэхийн тулд илэрхийллийн үр дүнд маягтын тарилга хийх шаардлагатай.

Энэ нь сарын хэдэн өдрийн тоог тодорхойлох томъёонд ашиглахын тулд үлдэгдэлгүйгээр хуваахдаа 1, үлдэгдэлтэй хуваахдаа 0-ийг авах боломжийг танд олгоно.

Функц болгон g"Та 1-ийг хасаад үлдсэнийг нь дараахь зүйлд ашиглаж болно.

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) Хязгааргүй байдал 1 0 0 0 0 0 0 0 0 0 0 0 0 0

Ногдол ашиг ба хуваагчийг 1-ээр нэмэгдүүлснээр бид дараах томъёоны зөв томъёог олж авна гэдгийг харахад хялбар байдаг.
x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Тиймээс бид илэрхийллийг дараах байдлаар бичнэ.


Илэрхийлэлийг дараах байдлаар бичье.

Энэ аргыг хэрэглэснээр бид олж авна дараагийн функц g(y), хэрэв он нь өндөр жил бол 1, өөрөөр хэлбэл 0 болно:

y 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
g(y) 0 0 1 0 0 0 1 0 0 0 1
y 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
g(y) 1 0 0 0 1 0 0 0 1 0 0

Үсрэнгүй он жилүүдийг тодоор тэмдэглэв.

Хүлээн зөвшөөрөгдсөн гэрээний хүрээнд хуваагдлаас үлдэгдлийг авах операторыг дүрсэлж болно гэдгийг би танд сануулж байна. мод, болон ⌊⌋.

Маск түрхэж байна

Томъёонд тус хэсэг нь 1-р сар хүртэл 2 хоног нэмсэн тохируулга юм. Хэрэв бид 2-ын хүчин зүйлийг хасч, тоологчийг 1-ээс 2 болгон өөрчилвөл энэ томьёо 1-р сард 2 хоног, 2-р сар 1 өдөр нэмэгдэх бөгөөд энэ нь бидэнд үсрэнгүй жилд нэг өдөр нэмэх түлхүүрийг өгдөг. Тодорхой болгохын тулд бид томъёонд завсрын утгыг ашигладаг g(y)гэх мэт y 2000 (өндөр жил) ба 2001 (өндөр жил) ашиглан:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 30 28 31 30 31 30 31 31 30 31 30 30

Үсрэлтгүй жилийн 1-р сараас бусад бүх сарын утгууд зөв байна.

Энэхүү харамсалтай буруу ойлголтыг засахын тулд бидэнд аль хэдийн мэдэгдэж байсан томъёогоор 1-р сар хүртэл 1 хоног нэмнэ үү.


Эсвэл:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 31 28 31 30 31 30 31 31 30 31 30 30

Дүгнэлт

Үүний үр дүнд илүү төвөгтэй, гэхдээ илүү түгээмэл томъёог олж авсан бөгөөд үүнийг тодорхой жилийн нэг сарын өдрийн тоог олж авахад ашиглаж болно.

Функц f(x, y) ( буцах 28 + ((x + Math.floor(x / 8)) % 2) + 2 % x + Math.floor((1 + (1 - (y % 4 + 2)) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1)) + (1 - (y % 400 + 2) % (y % 400 + 1)) / x) + Math.floor(1/x) - Math.floor(((1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1) )) + (1 - (y % 400 + 2) % (y % 400 + 1)/x); )
C# жишээ ideone.com/fANutz .

1 . Би ийм мнемоникийг хэрхэн ашиглахаа мэдэхгүй байгаа тул интернетээс тэмдэг тагнасан.
2 . Ихэнх дүрмийн нэгэн адил "Үндсэн" эсвэл "Олон үл хамаарах дүрэм".
3 . Анх Ромын хуанлид 2-р сар нь жилийн сүүлчийн сар байсан тул бусад бүх цаг хугацаатай харьцуулахад богино байдаг гэсэн логик байдаг. Яг жилийн эцсээр нэг өдрийг нэмэх, хасах логик байдаг тул урт нь хувьсах боломжтой.

Upd. нэг:
Эхний хэсгийн өөр орчуулга

Огнооны тооцоолуур нь огнооны хоорондох өдрийн тоог тооцоолох, мөн мэдэгдэж буй огноо руу тодорхой тооны өдрийг нэмэх, хасах замаар огноог олоход зориулагдсан.

Болзоонд хоног нэмнэ үү

Тодорхой хэдэн өдрийн дараа ямар огноо болохыг мэдэхийн тулд энэ сонголтыг ашиглана уу. Эхлэх огноо болон түүнд нэмэх өдрийн тоог оруулна уу. Хасахдаа хасах утгыг ашиглана. Тооцоологч нь зөвхөн ажлын өдрүүдийг нэмэх боломжтой.

Огноо хоорондын өдрийн тоог тооцоолох

Энэхүү тооцооны арга нь "огнооноос хойш хэдэн өдөр өнгөрөв" гэсэн асуултанд хариулах болно. Эхлэх огноо, дуусах огноог оруулаад "тооцоолох" товчийг дарна уу. Тооцоологч нь оруулсан огнооны хооронд хэдэн өдөр болохыг харуулах болно. Тус тусад нь тооцоолуур нь ажлын өдрийн тоог харуулах болно.

Энэ сонголтоор та төрсөн өдөр, баяр гэх мэт тодорхой үйл явдал болоход хэдэн өдөр үлдсэнийг тооцоолж болно. Үүнийг хийхийн тулд эхлэх огноо талбарт өнөөдрийн огноо, дуусах огноо талбарт үйл явдлын огноог оруулна уу.

Амралтын өдрүүд

Тооцоологч нь хуанлийн өдрүүд болон ажлын өдрүүдийг тооцоолох, нэмэх, хасах боломжтой. Албан ёсны ажлын бус амралтын өдрүүд нь:

  • 1-р сарын 1,2,3,4,5,6,8 - Шинэ жилийн амралт
  • 1-р сарын 7 - Ортодокс Христийн Мэндэлсний Баяр
  • 2-р сарын 23 - Эх орон хамгаалагчдын өдөр
  • Гуравдугаар сарын 8 - Олон улсын эмэгтэйчүүдийн эрхийг хамгаалах өдөр
  • 5-р сарын 1 - Хавар, хөдөлмөрийн өдөр
  • 5-р сарын 9 - Ялалтын өдөр
  • 6-р сарын 12 - Оросын өдөр
  • Арваннэгдүгээр сарын 4 - Үндэсний эв нэгдлийн өдөр

Хэрэв бүх нийтийн амралтын өдөр бямба, ням гаригт таарвал дараагийн ажлын өдөрт шилжүүлнэ. Гэхдээ заримдаа амралтын өдрүүдийг хуанли дээр огт өөр газар шилжүүлдэг. Тухайлбал, 5-р сарын амралтын өдрийг сунгахын тулд шинэ жилийн амралтын өдөр тохиож буй Бямба, Ням гарагуудыг тавдугаар сар руу шилжүүлж болно.

Өдрүүдийг тооцоолохдоо тооцоолуур нь албан ёсны амралтын өдрүүд болон бүх шилжүүлгийг харгалзан үздэг.

Саяхан нойргүй хоносоны эцэст сарын хэдэн өдрийн тоог нь мэдэж байж яаж мэдэх вэ гэж бодлоо. Энэ сэдвээр хүүхдийн хэллэгүүд байдаг, ясаар тоолох арга байдаг, гэхдээ эдгээр аргууд нь надад тохирохгүй байна - би математикийн томьёо хайж, хэсэг хугацааны дараа гаргасан.

Тиймээс даалгавар

Албан ёсоор Өөрөөр хэлбэл, бид f (x) функцийг авах шаардлагатай бөгөөд энэ нь дараах утгуудын жагсаалтыг өгөх болно (дашрамд хэлэхэд би үүнийг интернетээс хаа нэгтээ олсон бөгөөд мнемоник дүрмийг ашиглан дүгнэлт хийгээгүй):

Бид зөвхөн сарын тоог л аргумент болгон хүлээн авдаг гэдгийг тэмдэглэх нь зүйтэй, i.e. бид үсрэнгүй он жилүүдийг тооцдоггүй, мөн f(2) = 28.

Хэрэв та миний авсан үр дүнг мэдэхийг хүсвэл энэ хуудасны доод хэсэг рүү гүйлгэ. Хүссэн томъёоны гарал үүслийг доор тайлбарлах болно.

Бид юу ашиглах вэ

Нэмэх, хасах, үржүүлэхээс гадна би бүхэл тоо хуваах, үлдэгдлийг авах гэсэн хоёр үйлдлийг ашиглах болно. Энэ нь юу болохыг танд сануулъя:

  • Бүхэл тоон хуваагдал, эсвэл "доошоо хуваах". Миний хувьд энэ нь ердийн хуваагдлаар илэрхийлэгдэх болно: a / b - ⌊a / b⌋ гэсэн утгатай. Жишээлбэл, 5/3 = 1.
  • Үлдсэн модулийг авч байна. Би хуваалтыг үлдэгдлээр нь тэмдэглэнэ: a % b \u003d a - (a / b) * b. Жишээлбэл, 5% 3 = 2.

Тэд ижил давуу эрхтэй бөгөөд нэгдмэл байдлаараа үлддэг.

Суурь, эсвэл олон үл хамаарах дүрэм

Аргументийн аль болох олон утгыг хангах хэв маягийг олохыг хичээцгээе. Ихэвчлэн нэг сарын өдрүүдийн тоо 30-31 хооронд хэлбэлздэг. Үүний зэрэгцээ та энэ тоо нь сарын жигд байдлаас хамааралтай болохыг анзаарч болно - энэ нь бид үлдсэн модулийг 2-ыг авах үйлдлийг ашиглах болно гэсэн үг юм. Энэ нь дараах байдалтай байх ёстой.

f₁(x) = 30 + x%2


Сайн эхлэл! Хоёрдугаар сарыг үл тоомсорлож, зарим нэг заль мэхэнд орох нь ойлгомжтой, бид оны эхний хагаст функцийг тохируулж чадсандаа баяртай байх болно. Тэгээд дараа нь наймдугаар сараас эхлэн паритетыг эсрэгээр нь өөрчлөх ёстой. Үүнийг солих замаар хийж болно x%2томъёоны эхний хувилбарт (x+1)%2:

f₂(x) = 30 + (x + 1) % 2


Хүлээгдэж байсанчлан жилийн эхний хагас одоо зөв утгуудын хүрээнээс гарсан боловч 8-р сараас 12-р сар хүртэлх сарууд бидэнд хэрэгтэй зүйлээ өгсөн. Энэ хоёр хэсгийг нэгтгэх арга замыг хайцгаая.

Маск

Аргумент 8-аас их утгад хүрсэн тохиолдолд л "идэвхжүүлэх"-ийн тулд ногдол ашигт +1 хэрэгтэй, өөрөөр хэлбэл. Бид маск тавих хэрэгтэй. Үүний зэрэгцээ аргументийн утга 12-оос хэтрэхгүй. Тиймээс аргументыг 8-д бүхэл тоогоор хуваах нь бидний хувьд хамгийн тохиромжтой:


Яг бидэнд хэрэгтэй байгаа шиг. Энэ гаралтыг ашиглацгаая:

f₃(x) = 30 + (x + x / 8) % 2


Хөөх! Хоёрдугаар сараас бусад бүх зүйл зөв байна. Ямар гэнэтийн юм бэ.

Хоёрдугаар сар

Бүх саруудад 30 эсвэл 31 хоног байдаг ч 2-р сард 28 байдаг (бид өндөр жил гэж тооцдоггүй гэдгийг сануулъя).

Түүхийн лавлагаа: Ромын хуанлид 2-р сар нь жилийн сүүлчийн сар байсан - хуанлийн төгсгөлд өндөр жилүүдийн нэг өдрийг нэмэх нь илүү ойлгомжтой гэдгийг хүлээн зөвшөөр. Гэсэн хэдий ч бид Григорийн хуанли ашигладаг бөгөөд хамгийн богино сарыг ухаалаг удирдагчдын нэгний тушаалаар эхэнд нь ойртуулдаг.

Дахь Хамгийн сүүлийн үеийн хувилбарМанай хоёрдугаар сарын томъёо 30 хоногтой. Тиймээс бид түүнээс хоёр хоногийн хугацааг таслах хэрэгтэй. Мэдээжийн хэрэг, бусад хэдэн сарууд үүнээс болж зовж шаналах болно: 2-р сарын зүүн талд, эсвэл бидний жагсаалтын баруун талд - гэхдээ баруун талд нь хамаагүй цөөн сар байгаа тул бид 1-р сарыг золиослох хэрэгтэй болно, дараа нь тохируулах хэрэгтэй болно. түүний томъёо. Та илэрхийллийг ашиглан эхний болон хоёр дахь сарын өдрүүдийг таслаж болно 2% х.