من یه پروژه دارم که این شکلیه :
برنامه ای بنویسید که یک سال شمسی را گرفته و تقویم آنرا چاپ کند
حالا من دنباله الگوریتمشم . یعنی کلا چجوری می تونم بفهم که مثلا یک روز مثله 22 بهمن چند شنبه هستش؟
کلا چیزایی که لازمه چیه؟
من یه پروژه دارم که این شکلیه :
برنامه ای بنویسید که یک سال شمسی را گرفته و تقویم آنرا چاپ کند
حالا من دنباله الگوریتمشم . یعنی کلا چجوری می تونم بفهم که مثلا یک روز مثله 22 بهمن چند شنبه هستش؟
کلا چیزایی که لازمه چیه؟
سلام
حتماً میدانید که تقویم ایرانی موسوم به جلالی است.
(((
متاسفانه من در کتابها برای جلالی یک الگوریتم و در اینترنت یک الگوریتم دیگر دیده ام ولی هر دو الگوریتم خیلی کامل هستند و تا سال 140X جواب یکسانی میدهند.
بحرحال من روی الگوریتم ساده تر را که در اینترنت خواهید یافت و تقویم شمسی داخلی Microsoft .Net Framework هم بر همان اسا کار میکند، را توضیح کوتاهی خواهم داد
)))
متاسفانه اگر در اینترنت جستجو کنید کدهای زیادی برای تقویم شمسی خواهید یافت که معمولاً سرشار از If و Select یا Switch هستند و مدام اعداد 20 و 21 و 22 در انها تکرار شده !!!!
کل این الگوریتم و روش ها از اول و تا اخر اشتباه محضو هستند! و فقط در یک بازه 4 یا حداکثر 5 ساله صحیح کار خواهند کرد.
این کدها و الگوریتم ها مطلقاً فاقد ارزش علمی و کاری عملی هستند.
در محاسبات تقویم در نظر گرفتن سالهای کبیسه خیلی خیلی مهم است.
ما هر 4 سال یک کبیسه داریم که سال 366 روز میشود و هر 33 سال یک کبیسه 5 ساله داریم که یعنی سال 32 دوم باید کبیسه باشد ولی سال 33 کبیسه میشود و تا کبیسه قبلی 5 سال فاصله می افتد.
شما برای محاسبه و تاریخ و تبدیل و... در برنامه نویسی ... روش صحیح ان است که هر تاریخی به تعداد روز خالص گذشته از اول هجرت یا اول میلاد حضرت مسیح (ص) تبدیل کنید.
یعنی یک کد کوچک که روز سال را به تعداد روز سال تبدیل میکند
و
یک کد دیگر که سر سال را به تعداد روز تبدیل میکند.
(سال * 365 + تعداد کل کبیسه های رخ داده)
در نهایت بعد از جمع و تبدیل تاریخ به تعداد روز گذشته از اول هجرت با یک دستور باقیمانده میتوانید روز هفته (چند شنبه) را محاسبه کنید و با تبدیل تعداد روز به تاریخ میلادی میتوانید تبدیل به میلادی را هم انجام دهید.
خیلی ممنون , خب مشکل من اینه که 0/0/0 رو شنبه بگیرم یا نه ؟
حالا یه چیز دیگه , خوده شما این برنامه رو داری به زبان c یا c++ ؟
اگه داری به من میل کن چون بدجور لازم دارم و باید روش کار کنم و با 5 تا پروژه دیگه تحویل استاد بدم تا 1 هفته دیگه
اینم email :
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام
تاریخ 0/0/0 برای مبنای محاسبه بودن کمی ایهام دارد و شاید آدم را منحرف کند.
بهتر است 1/1/1 را تاریخ مبنای محاسبه قرار دهید.
این تاریخ ایهام کمتری دارد! ضمن اینکه مهم یک تاریخ ثابت برای مبنا است و مقدارش مهم نیست!
==============
اگر تاریخ 1/1/1 مبنا باشد این تاریخ پنجشنبه بوده.
اولین کبیسه 5 ساله (پایان یک دوره 33 ساله) در سال 22 هجری بوده و اخرین کبیسه 5 ساله تا حالا در تاریخ 1375 بوده.
(((
یعنی سال 1370 کبیسه عادی بوده و چون در پایان دوره 33 ساله بودیم بجای 1374 سال 1375 کبیسه شده.
همینطور سال 17 شمسی کبیسه عادی بوده و به جای سال 21 سال 22 اولین کبیسه 5 ساله بعد از هجرت روی داده.
)))
یعنی با خود سال 22 شش بار کبیسه رخ داده (1,5,9,13,17,22)
از سال 22 تا خود سال 1375 جمعاً 328 کبیسه رخ داده!
از سال 1375 تا سال 1388 هم باز سه کبیسه رخ داده (1379,1383,1387)کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پس در اول روز عید 1388 چند روز از تاریخ مبنا گذشته؟
یعنی 506592 روز گذشته!کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
عدد 1 همان سال مبنا است و عدد 3و6و328هم کبیسه های رخ داده هستند که هر کدام یک روز به سال و زمان اضافه کرده بودند!
حل است؟
==============
مثلاً امروز 22 دیماه 1388 ...
298 امین روز سال جاری است.
(((
امین! یعنی خودش هم حساب است
در واقع 297 روز اول اول عید گذشته با خود روزی که در ان هستیم میشود 298 امین روز سال
)))
و اول فروردین 1388 برابر 506592 روز از تاریخ مبنا سپری شده گذشته.
(((
در واقع آخرین روز اسفند 1387 برابر 506592 امین روز هجرت بوده.
و خود روز عید 506593 امین روز هجرت بوده.
)))
در نهایت تاریخ 22 دیماه 1388 در کل 506592+298 امین روز برابر 506890 امین روز هجرت است.
==============
حالا امروز چند شنبه و چندمین روز هفته است؟
days برابر تاریخ گذشته از روز مبنا با خود روز مبنا و خود روزی که در آن هستیم میباشد.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(((
عدد 5 به خاطر روزهفته در تاریخ مبنا است و عدد 1 به خاطر ان است که خود روزمبنا را هم در شمارش لحاظ کرده بودیم.
)))
موفق باشید.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خیلی عالی بود , کارت بیسته
سلام
دو مطلب دیگر ...
1)
حتما دقت کنید که کبیسه بودن سالی که در ان هستیم مهم نیست و نباید محاسبه شود.
یعنی اگر به فرض سال 1388 کبیسه هم میبود باز جواب فوق فرقی نمیکرد.
چون قرار است آخر سال کبیسه یک روز اضافه شود و طبیعتاً تاثیری در محاسبه تاریخ های داخل همان سال ندارد.
پس حتماً تعداد کبیسه ها از سال 1 تا یکسال قبل سالی که میخواهید محاسبه کنید.
2)
یک نمونه برنامه که بر اساس همین الگوریتم کار میکند را میتوانید در زیر دانلود کنید.
exe پروزه در مسیر دایرکتوری bin قرار دارد و در Vista و Win7 چیزخاصی برای اجرا نمیخواهد ولی در سیستم عامل قدیمی تر XP باید Framework2.0 روی سیستم نصب باشد تا exe کار کند.
میتوانید از این برنامه کوچک و ساده برای تست کارتان و صحت کدی که نوشته اید استفاده کنید.
support.h02.ir/fwlink/?LinkId=1002125877
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
من دنبال الگوریتم تقویم شمسی میگردم ،میخوام واسسه هر روز داشته باشم که چند شنبس،و تاریخ اون به میلادی و قمری چی میشه!!! کسی میتونه به من کمک کنه !خواهش میکنم باید برنامشو این هفته تحویل بدم
سلام
گمانم برای روز هفته توضیحات قبلی کامل و کافی ب.ده ....من دنبال الگوریتم تقویم شمسی میگردم ،میخوام واسسه هر روز داشته باشم که چند شنبس،و تاریخ اون به میلادی و قمری چی میشه!!! کسی میتونه به من کمک کنه !خواهش میکنم باید برنامشو این هفته تحویل بدم
نمیدانم چه باید به آن اضافه کنم
برای تبدیل به/از میلادی هم فرق خاصی ندارد ...
مهم محاسبه تعداد روز گذشته از اول سال مبنا است، همان عدد 506890 در توضیحات قبلی ...
این عدد که محاسبه شد منهای اختلاف تعداد روز در سال مبنا بین تاریخ میلادی و شمسی میشود و تعداد روز گذشته از اول مبنای میلادی (میلاد حضرت مسیح) به دست می آید.
بعد هم کافی است تعداد روز گذشته از میلاد را تبدیل به تاریخ کنید که خیلی مشابه روند شمسی است و فقط در کبیسه هایشان تفاوت دارد که روند کبیسه های میلادی هم اینچنین است که هر 4 سال یک کبیسه دارند و هر 100 سال یک کبیسه 4 ساله را نمیگیرند (یعنی کبیسه شان 8 ساله میشود) و هر 400 سال مجدد کبیسه را دارند.
=====
اگر توضیح خواستید باز در خدمت هستم ولی اگر منظورتان از کمک، گذاشتن کد باشد شرمنده تان میشوم ...
موفق باشید.
سلام من الان ی سوال برام \یش اومد.
الان اینجا اگه ی روزی در سالهای قبلی ۱۳۷۵ را بخواهیم چطوری محاسبه میشود؟
ممنون میشم چواب بدین
سلام
فرقی ندارد، توضیحات کلی بود
مشکل شما فقط فرمول خط اول است؟!
بفرمائید این هم فرمول جایگزین بدون دانستن سال 1375 !
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)