الکترونیک دیجیتال

تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران


بنر - اندازه 60*468

کسب درآمد

الگوریتم تبدیل تاریخ میلادی به تاریخ شمسی :

تبدیل تاریخ میلادی به شمسی بسیار راحتتر از تبدیل تاریخ شمسی به میلادی است. برای نوشتن این الگوریتم به اختلاف روزهای میان اولین روز سال میلادی و اولین روز سال شمسی نیاز داریم که این اختلاف روز (در صورتی که سال کبیسه باشد یا نباشد) "79" روز است. برای تشخیص کبیسه بودن یا نبودن سال از روش زیر استفاده می کنیم:
"اگر سال داده شده بر100و 400 بخشپذیر باشد" یا بر" 100 بخشپذیر نباشد بر 4 بخشپذیر باشد" آنگاه سال کبیسه است، در غیر این صورت سال کبیسه نیست.با توجه به کبیسه بودن یا کبیسه نبودن سال مشخص می کنیم که در کدامین روز سال میلادی قرار داریم.دو حالت پیش می آید:

• روزی که در آن قرار داریم از 79 بیشتر است 
به این معنی است که در ماههای بعد از فروردین قرار داریم.حال باید مشخص کنیم که در 6 ماه اول سال شمسی قرار داریم یا در 6 ماه دوم سال قرار داریم،برای اینکار ابتدا 79 روز از تعداد روزها کم می کنیم تا در اول فروردین قرار بگیریم حال اگر تعداد روزها از "186" (31*6) کمتر باشد یعنی در 6 ماه اول سال شمسی قرار داریم در غیر اینصورت در 6 ماه دوم قرار داریم.

1. اگر در 6 ماه اول سال قرار گرفته باشیم :تعداد روزها را بر "31" تقسیم می کنیم (6 ماه اول در سال شمسی 31 روزه است.)اگر باقیمانده این تقسیم صفر شد خارج قسمت تقسیم برابر با ماه شمسی می شود و روز شمسی برابر با 31 می شود.اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه یک می شود و روز شمسی همان باقیمانده است.

2. اگر در 6 ماه دوم سالقرار گرفته باشیم : "186" روز از تعداد روزها کم می کنیم و آن را بر "30" تقسیم می کنیم .اگرباقیمانده این تقسیم صفر شد خارج قسمت تقسیم باضافه"6" برابر با ماه شمسی می شودو روز شمسی برابر با30 می شود.اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه "7" می شود و روز شمسی همان باقیمانده است. سال شمسی از تفاضل سال میلادی با "621" بدست می آید.

• روزی که در آن قرار داریم کمتر از "79" است :
که این به این معنی است که درروزهایی بین اولین روزسال میلادی تا اولین روز شمسی (ماههای دی ،بهمن و اسفند)قرار داریم.اختلاف روز بین اولین روز سال میلادی داده شده و اولین روز دی ماه در سال شمسی را در نظر می گیریم که این اختلاف برای سال کبیسه"11" و برای غیر کبیسه "10" است.*دقت کنید که در این الگوریتم برای مشخص کردن این اختلاف باید سال قبل از  سال داده شده را در نظر بگیریم زیرا سال قبل بر روی اولین روز سال میلادی تاثیر می گزارد.* 
اختلاف روز با تعداد روز محاسبه شده جمع می کنیم ، آن را بر"30" تقسیم می کنیم(3 ماه آخر سال شمسی 30 روزه است.).
اگر باقیمانده این تقسیم صفر شود خارج قسمت تقسیم باضافه"9" برابر با ماه شمسی می شودو روز شمسی برابر با "30" می شود.اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت  باضافه"10"می شودو روز شمسی همان باقیمانده است.در این حالت سال شمسی از تفاضل سال میلادی با"622" بدست می آید.(زیرا در سال قبل قرار داریم.)

کد کامل تبدیل تاریخ میلادی به شمسی:

Function MiladiToShamsi(var Year, Month, Day: Word): String;
const
  count_days : array[1..12] of Byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
  i: Byte;
  st: String;
  day_year: Integer;
begin
  day_year:= 0;
  for i:= 1 to month - 1 do
    day_year:= day_year + count_days[i];
  day_year:= day_year + day;

  if IsLeapYear(Year) and (month > 2) then
    Inc(day_year);

  if (day_year <= 79) then
  begin
    if ((Year - 1) mod 4 = 0) then
      day_year:= day_year + 11
    else
      day_year:= day_year + 10;

    Year:= Year - 622;

    if (day_year mod 30 = 0) then
    begin
      Month:= (day_year div 30) + 9;
      Day:= 30;
    end
    else
    begin
      Month:= (day_year div 30) + 10;
      Day:= day_year mod 30;
    end;
  end
  else
  begin
    year:= year - 621;

    day_year:= day_year - 79;
    if (day_year <= 186) then
    begin
      if (day_year mod 31 = 0) then
      begin
        Month:= (day_year div 31);
        Day:= 31;
      end
      else
      begin
        Month:= (day_year div 31) + 1;
        Day:= day_year mod 31;
      end;
    end
    else
    begin
      day_year:= day_year - 186;
      if (day_year mod 30 = 0) then
      begin
        Month:= (day_year div 30) + 6;
        Day:= 30;
      end
      else
      begin
        Month:= (day_year div 30) + 7;
        Day:= day_year mod 30;
      end;
    end;
  end;   // else  .

  st:= IntToStr(Year) + '/';
  if (Month < 10) then
    st:= st + '0';
  st:= st + IntToStr(Month) + '/';
  if (Day < 10) then
    st:= st + '0';
  st:= st + IntToStr(Day);

  Result:= st;
end;

دوستانی که بخواهند برنامه کامل تبدیل تاریخ میلادی به شمسی را دریافت کنند می توانند برنامه کامل آنرا از قسمت دانلود وبلاگ دریافت نمایند. همچنین برنامه تبدیل تاریخ شمسی به میلادی هم در بخش دانلود قرار گرفته است.

موافقین ۰ مخالفین ۰ ۹۰/۱۱/۰۱
ekavir ekavir

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">