تبليغاتX
برنامه نویسی با دلفی

برنامه نویسی با دلفی

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

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

تبديل تاريخ ميلادي به شمسي بسيار راحتتر از تبديل تاريخ شمسي به ميلادي است. براي نوشتن اين الگوريتم به اختلاف روزهاي ميان اولين روز سال ميلادي و اولين روز سال شمسي نياز داريم که اين اختلاف روز (در صورتي که سال کبيسه باشد يا نباشد) "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;

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

لطفا نظرات خود را در این مورد ارائه دهید تا اگر کمی و کاستی وجود داشت آن را برطرف نمائیم.


نوشته شده توسط ابراهیم خدائی در یکشنبه دوم اردیبهشت 1386 ساعت 11:41 | لینک ثابت |

منوی اصلی

صفحه نخست
آرشيو وبلاگ
پروفایل مدیر وبلاگ
عناوین مطالب وبلاگ
درباره دلفی
نكات مفيد براي كار در محيط دلفي
دلفی NET.
مقدمات دلفی
برنامه ها‎ ‏و مثالهای‎ دلفی
کامپوننتهای دلفی

درباره ی ما


این وبلاگ برای توسعه برنامه نویسی دلفی با ارائه ابزارها و مثالها و توضیحات کامل شروع به کار کرده که امیدواریم دوستان عزیز با ارائه نظرات و پیشنهادات خود ما را در این راه یاری نمایند تا بتوانیم قدم کوچکی در توسعه این زبان برنامه نویسی قدرتمند اما راحت داشته باشیم.

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

پیوند های روزانه

آرشیو

پیوند های وبلاگ

دانشگاه نبی اکرم (ص)
سايت اختصاصي كامپيوتر ورودی 85
سازمان فناوری اطلاعات و ارتباطات
وزارت علوم و تحقیقات و فناوری
سازمان سنجش آموزش کشور
سایت دکتر مهدوی
قالب وبلاگ
جستجوگر قالب وبلاگ

آخرین پست ها

سری جدید کامپوننت برای دلفی 7
کدها ومثالها و ترفندهای دلفی
دانلود کامپوننت
5 کامپوننت برای دانلود
آموزش نصب انواع کامپوننتها در دلفی
کار با تلفن و مودم با استفاده از کامپوننت KDTele
راهنما
الگوريتم تبديل تاريخ ميلادي به تاريخ شمسي همراه با کد کامل آن به زبان دلفی
بخشی از ويژگيهای جديد Borland Developer Studio 2006
Graphics Device Interface
Borland Developer Studio 2006 (دلفی 2006)
بورلند استودیو در یک نگاه
فایل های INI در دلفی
ساختار رکوردها در دلفی
آرایه ها در دلفی
استفاده از DLL در دلفی
انواع متغیر ها در دلفی
مدیریت حافظه در دلفی
گزارش از دلفي 9- Delphi 2005
حركت از دلفي به دلفي NET.
تكنولوژي NET.
تاریخچه دلفی
نكات مفيد براي كار در محيط دلفي
سال خوک

RSS

POWERED BY
BLOGFA.COM

کلیه ی حقوق مادی و معنوی وبلاگ ebrahimkhodaei محفوظ می باشد.
طراحی شده توسط یاس تم