برای مشاهده مفیدترین ارسال در این موضوع اینجا کلیک کنید

نمایش نتایج: از شماره 1 تا 3 از مجموع 3
Like Tree1نفر پسندیدند
  • 1 ارسال توسط mahtabrkh

موضوع: برنامه تبديل تاريخ شمسي به ميلادي و بلعکس در سی++

  1. #1
    بنیانگذار
    تاریخ عضویت
    2010 January
    محل سکونت
    زیر سایه خدا
    سن
    30
    ارسال ها
    1,306
    تشکر
    2,918
    تشکر شده 2,193 بار در 884 پست
    نوشته های وبلاگ
    37


    2 امتياز مثبت از 2 راي
    آيا اين پست براي شما سودمند بود؟ بله | خیر

    برنامه تبديل تاريخ شمسي به ميلادي و بلعکس در سی++

    بسم الله الرحمن الرحیم
    خب اینم از برنامه تبدیل تاریخ شمسی به میلادی و تبدیل تاریخ میلادی به شمسی .
    برنامه هم در ویژوال استودیو قابل استفاده است و هم در توربو سی . اگه قصد دارید برنامه رو در توربو سی اجرا کنید چند نکته زیر رو رعایت کنید .
    1.بجای هدرهای فایل . اونهایی که کامنت کردم رو قرار بدید
    و 2.std:: رو از پشت عبارتهای cout و endl بردارید.

    اگه میخوایید برنامه رو تبدیل به معادلش به زبان سی کنید . کافیه بجای cout از printf استفاده کنید ( من کامنت کردم ) . و بعد stdio.h رو به برنامه تون اضافه کنید. همین
    امیدوارم مثمر ثمر واقع بشه
    برنامه هم در قالب پروژه ویژوال سی++ 2008 برای دانلود قرار داده شده میتونید دنلود و استفاده کنید .



    //In the name of GOD
    //برنامه تبديل تاريخ شمسي به ميلادي در سي++
    //برنامه تبديل تاريخ ميلادي به شمسي در سي++
    //Source: Forum.Ustmb.Ir
    //Master.huricane@gmail.com
    //MainSource: http://www.farsiweb.info/jalali/jalali.c

    void gregorian_to_jalali(/* output */ int *j_y, int *j_m, int *j_d, /* input */ int g_y, int g_m, int g_d);
    void jalali_to_gregorian(/* output */ int *g_y, int *g_m, int *g_d,/* input */ int j_y, int j_m, int j_d);

    //age az TC++ estefade mikonin header haye comment shode ro estefade konid
    #include <iostream>//<iostream.h>
    #include <cstdlib>//<stdlib.h>
    #include <ctime>//<time.h>

    int g_days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int j_days_in_month[12] = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};
    const char *j_month_name[13] = {"",
    "Farvardin", "Ordibehesht", "Khordad",
    "Tir", "Mordad", "Shahrivar",
    "Mehr", "Aban", "Azar",
    "Dey", "Bahman", "Esfand"};
    //تابع تبديل تاريخ ميلادي به شمسي
    void gregorian_to_jalali(int *j_y, int *j_m, int *j_d,
    int g_y, int g_m, int g_d)
    {
    int gy, gm, gd;
    int jy, jm, jd;
    long g_day_no, j_day_no;
    int j_np;

    int i;

    gy = g_y-1600;
    gm = g_m-1;
    gd = g_d-1;

    g_day_no = 365*gy+(gy+3)/4-(gy+99)/100+(gy+399)/400;
    for (i=0;i<gm;++i)
    g_day_no += g_days_in_month[i];
    if (gm>1 && ((gy%4==0 && gy%100!=0) || (gy%400==0)))
    /* leap and after Feb */
    ++g_day_no;
    g_day_no += gd;

    j_day_no = g_day_no-79;

    j_np = j_day_no / 12053;
    j_day_no %= 12053;

    jy = 979+33*j_np+4*(j_day_no/1461);
    j_day_no %= 1461;

    if (j_day_no >= 366) {
    jy += (j_day_no-1)/365;
    j_day_no = (j_day_no-1)%365;
    }

    for (i = 0; i < 11 && j_day_no >= j_days_in_month[i]; ++i) {
    j_day_no -= j_days_in_month[i];
    }
    jm = i+1;
    jd = j_day_no+1;
    *j_y = jy;
    *j_m = jm;
    *j_d = jd;
    }
    //تبديل تاريخ شمسي به ميلادي
    void jalali_to_gregorian(int *g_y, int *g_m, int *g_d,
    int j_y, int j_m, int j_d)
    {
    int gy, gm, gd;
    int jy, jm, jd;
    long g_day_no, j_day_no;
    int leap;

    int i;

    jy = j_y-979;
    jm = j_m-1;
    jd = j_d-1;

    j_day_no = 365*jy + (jy/33)*8 + (jy%33+3)/4;
    for (i=0; i < jm; ++i)
    j_day_no += j_days_in_month[i];

    j_day_no += jd;

    g_day_no = j_day_no+79;

    gy = 1600 + 400*(g_day_no/146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
    g_day_no = g_day_no % 146097;

    leap = 1;
    if (g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
    {
    g_day_no--;
    gy += 100*(g_day_no/36524); /* 36524 = 365*100 + 100/4 - 100/100 */
    g_day_no = g_day_no % 36524;

    if (g_day_no >= 365)
    g_day_no++;
    else
    leap = 0;
    }

    gy += 4*(g_day_no/1461); /* 1461 = 365*4 + 4/4 */
    g_day_no %= 1461;

    if (g_day_no >= 366) {
    leap = 0;

    g_day_no--;
    gy += g_day_no/365;
    g_day_no = g_day_no % 365;
    }

    for (i = 0; g_day_no >= g_days_in_month[i] + (i == 1 && leap); i++)
    g_day_no -= g_days_in_month[i] + (i == 1 && leap);
    gm = i+1;
    gd = g_day_no+1;

    *g_y = gy;
    *g_m = gm;
    *g_d = gd;
    }

    int main(void)
    {
    int y, m, d;
    time_t bin_time;
    struct tm *br_time;

    time(&bin_time);
    br_time = localtime(&bin_time);

    gregorian_to_jalali(&y, &m, &d,1900+br_time->tm_year, 1+br_time->tm_mon, br_time->tm_mday);

    //printf("Current Jalali date: %d %s %d\n", d, j_month_name[m], y); //age moadele C mikhaeed, kafie hamin khat ro uncomment kond va khate ziri ro hazf konid

    //age az TC++ estefade mikonid std:: ro bardarid.
    std::cout<<"Tarikhe Emrooz: "<< d<<" "<< j_month_name[m] <<" "<<y<<std::endl;
    getchar();
    return 0;
    }


    موضوعات مشابه:
    فایل های پیوست شده
    توکل بخدا
    http://DeepLearning.ir
    اولین و تنها مرجع یادگیری عمیق ایران


    هرکس از ظن خود شد یار من
    از درون من نجست اسرار من




  2. #2
    عضو تازه وارد
    تاریخ عضویت
    2016 November
    ارسال ها
    1
    تشکر
    0
    تشکر شده 2 بار در یک پست


    آيا اين پست براي شما سودمند بود؟ بله | خیر
    با سلام
    ابتدا از کد خوبتون تشکر می کنم من در پروژه ام ازش استفاده کردم خدا خیرتون بده. فقط نکته ایی که وجود داره اینه که شما کبیسه بودن سال میلادی رو که باعث تغییر تعداد روزهای ماه دوم میلادی میشه رو در نظر نگرفتین و این موضوع باعث میشه در سالهای کبیسه میلادی مخصوصا تو روزهای اول ماه یک روز پس و پیش بشه که کافیه کدی که من زیر نوشتم رو به پروژه اتون اضافه کنین بعد از خط 40 یعنی همونجاییکه بر اساس آرایه روزهای ماه میاد روزهای تاکنون گذشته از اول سال رو داره جمع میبنده.

    if ( (int32uGre_YearLeap)%4U == 0U )
    {
    if ( (int32uGre_YearLeap)%100U == 0U )
    {
    if ( (int32uGre_YearLeap)%400U == 0U )
    {
    if gm > 0U)
    {
    g_day_no =g_day_no + 1U;
    }
    }
    }
    else
    {
    if (gm > 0U)
    {
    g_day_no = g_day_no + 1U;
    }
    }
    }


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

    Hossein این نویسه را میپسندد.

  3. #3
    بنیانگذار
    تاریخ عضویت
    2010 January
    محل سکونت
    زیر سایه خدا
    سن
    30
    ارسال ها
    1,306
    تشکر
    2,918
    تشکر شده 2,193 بار در 884 پست
    نوشته های وبلاگ
    37


    آيا اين پست براي شما سودمند بود؟ بله | خیر
    نقل قول نوشته اصلی توسط mahtabrkh نمایش پست ها
    با سلام
    ابتدا از کد خوبتون تشکر می کنم من در پروژه ام ازش استفاده کردم خدا خیرتون بده. فقط نکته ایی که وجود داره اینه که شما کبیسه بودن سال میلادی رو که باعث تغییر تعداد روزهای ماه دوم میلادی میشه رو در نظر نگرفتین و این موضوع باعث میشه در سالهای کبیسه میلادی مخصوصا تو روزهای اول ماه یک روز پس و پیش بشه که کافیه کدی که من زیر نوشتم رو به پروژه اتون اضافه کنین بعد از خط 40 یعنی همونجاییکه بر اساس آرایه روزهای ماه میاد روزهای تاکنون گذشته از اول سال رو داره جمع میبنده.

    if ( (int32uGre_YearLeap)%4U == 0U )
    {
    if ( (int32uGre_YearLeap)%100U == 0U )
    {
    if ( (int32uGre_YearLeap)%400U == 0U )
    {
    if gm > 0U)
    {
    g_day_no =g_day_no + 1U;
    }
    }
    }
    else
    {
    if (gm > 0U)
    {
    g_day_no = g_day_no + 1U;
    }
    }
    }


    واسه توضیحشم باید بگم اول یه متغییر تعریف کنین که عدد سال میلادی کنونی رو بدون اینکه از 1600 کم بشه نگه داره (در اینجا من از int32uGre_YearLeap استفاده کردم). براساس توضیحاتی که ویکیپدیا درباره محاسبه کبیسه بودن سال میلادی داره، اگر عدد سال تقسیم بر 4 باقیمانده صفر بود و تقسیم بر 100 صفر نبود (یعنی سال آخر سده نبود) حتما کبیسه است و باید به تعداد روزهای ماه دوم یه روز اضافه کرد که در اینجا یعنی اگر عدد کنونی ماه هم از صفر بیشتر شد یعنی از ماه دوم گذشتیم پس یه یک اضافه کن. ولی اگر هم بر 4 بخش پذیر بود هم بر 100، اگر بر 400 هم بخشپذیر باشد سال کبیسه هست وگرنه خیر. امیدوارم توضیحات واضح باشه.
    موفق باشید
    خیلی ممنون بابت وقتی که گذاشتین و قطعه کدتون رو با بقیه به اشتراک گذاشتید.
    این پست مربوط به خیلی سال پیشه خیلی زیاد! 5 6 سال پیش
    خیلی خوبه که بعد این همه سال هنوز استفاده داره

    توکل بخدا
    http://DeepLearning.ir
    اولین و تنها مرجع یادگیری عمیق ایران


    هرکس از ظن خود شد یار من
    از درون من نجست اسرار من




 

 

کاربران برچسب خورده در این موضوع

کلمات کلیدی این موضوع

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  


Powered by vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0
Persian Language By Ustmb.ir
این انجمن کاملا مستقل بوده و هیچ ارتباطی با دانشگاه علوم و فنون مازندران و مسئولان آن ندارد..این انجمن و تمامی محتوای تولید شده در آن توسط دانشجویان فعلی و فارغ التحصیل ادوار گذشته این دانشگاه برای استفاده دانشجویان جدید این دانشگاه و جامعه دانشگاهی کشور فراهم شده است.لطفا برای اطلاعات بیشتر در رابطه با ماهیت انجمن با مدیریت انجمن ارتباط برقرار کنید
ساعت 10:23 PM بر حسب GMT +4.5 می باشد.