تقویم جلالی در کیوت ۴٫۹
-
p{direction:rtl; text-align:right}. سلام
نسخهٔ دوم ترجمه با اعمال اصلاحات فرهنگستان، آماده شده و در کیوت ۴٫۹ منتشر خواهد شد.
ترجمه و انتخاب واژهها کار خیلی سخت و طاقتفرسایی بود. سعی شده که کلمات آشنا بهکار برده بشه و بعد از ساعتها بحث و گفتگو چندین مورد رو اصلاح کردیم که امیدوارم درست بوده باشه.p{direction:rtl; text-align:right}. همونطور که میدونید به دلیل مشکلات زیاد و وقت کم نتونستیم تقویم جلالی رو برای کیوت ۴٫۸ آماده کنیم.
قصد داریم هر طور شده تقویم جلالی رو برای نسخهٔ ۴٫۹ برسونیم. طی صحبتهایی که با برخی از دوستان داشتم درنظر دارم هر دو الگوریتم دقیق و نادقیق رو پیادهسازی کنم. (الگوریتم ۳۳ ساله برای کاربردهای عادی و الگوریتم دقیق برای کاربردهای علمی) با وجود این که پیادهسازی بهینهٔ این الگوریتمها کار چندان سختی نیست، برای این کار به یونیتتستها و کد پترنهای خیلی پردردسر (برای قبول شدن کد در ساختار کیوت) نیاز داریم. برای همین کمک و حمایت جامعهٔ فارسی کیوت خیلی اهمیت داره.p{direction:rtl; text-align:right}. کار برنامهنویسی الگوریتمها و تنظیم یونیتها روز ۲۰ام دیماه امسال کلید میخوره. عزیزانی که مایل به همکاری هستند همینجا اعلام کنن. همچنین اگر نظری در مورد مسائل ویژهٔ زبان فارسی در کیوت دارید مطرح کنید تا درصورت امکان در ۴٫۹ پیادهسازی و یا اصلاح بشه.
با تشکر
-
p{direction:rtl; text-align:right}. نه بابا ! چه کارمندی؟ توسعهٔ کیوت رو Community انجام میده. شما میتونید توی سایت gitorious عضو بشید و کد خودتون رو بنویسید. بعد یک درخواست میفرستید و توسط توسعهدهندههای حرفهای بررسی میشه. در صورتی که قبول بشه توی کد اصلی کیوت قرار داده مبشه با توزیع بعدی کیوت منتشر میشه. همین! البته معیارهای خیلی سفت و سختی برای پذیرفته شدن کد در کیوت هست. مثلا برای ترجمه زیاد سختگیر نیستن اما اگر بخوای کد تقویم بنویسی اولا باید سبک کدنویسی و اشتقاقهای کیوت رو رعایت کنی، ثانیاً کد باید بهینه باشه، همچنین MetaObject ها و. Test Unit ها هم باید کامل باشند.... دردسر خیلی زیادی داره. تا الان که بیشتر از ۲۰ تا ایراد گرفتن به کد من :-/
-
[quote author="vahid" date="1341182771"]سلام
یوزر گیتوریوس من اینه
kharazi[/quote]
p{direction:rtl; text-align:right}. علیک سلام
دیر موندی تعطیل شد :P"Iranian people ":http://qt-project.org/forums/viewthread/14206/
-
@
QString JalaliCalendar::jDate()
{
QDate Today;
QDate chkFirst,chkSecound;
Today = QDate::currentDate();
chkFirst.setDate(Today.year(),2,1);
chkSecound.setDate(Today.year(),3,1);
int IsKabisah = (chkFirst.daysTo(chkSecound))==29 ? 1 : 0 ;
QString jsYear,jsMonth,jsDay;
int jYear,jMonth,jDay;
QString space=" / ";if(Today > QDate(Today.year(),3,20-IsKabisah) && Today <=QDate(Today.year(),4,20-IsKabisah)) { jYear = Today.year()-621; jMonth =1;jDay=Today.daysTo(QDate(Today.year(),3,20-IsKabisah));} //فروردین if(Today > QDate(Today.year(),4,20-IsKabisah) && Today <=QDate(Today.year(),5,21-IsKabisah)) { jYear = Today.year()-621; jMonth =2;jDay=Today.daysTo(QDate(Today.year(),4,20-IsKabisah));} //اردیبهشت if(Today > QDate(Today.year(),5,21-IsKabisah) && Today <=QDate(Today.year(),6,21-IsKabisah)) { jYear = Today.year()-621; jMonth =3;jDay=Today.daysTo(QDate(Today.year(),5,21-IsKabisah));} //خرداد if(Today > QDate(Today.year(),6,21-IsKabisah) && Today <=QDate(Today.year(),7,22-IsKabisah)) { jYear = Today.year()-621; jMonth =4;jDay=Today.daysTo(QDate(Today.year(),6,21-IsKabisah));} //تیر if(Today > QDate(Today.year(),7,22-IsKabisah) && Today <=QDate(Today.year(),8,22-IsKabisah)) { jYear = Today.year()-621; jMonth =5;jDay=Today.daysTo(QDate(Today.year(),7,22-IsKabisah));} //مرداد if(Today > QDate(Today.year(),8,22-IsKabisah) && Today <=QDate(Today.year(),9,23-IsKabisah)) { jYear = Today.year()-621; jMonth =6;jDay=Today.daysTo(QDate(Today.year(),8,22-IsKabisah));} //شهریور if(Today > QDate(Today.year(),9,22-IsKabisah) && Today <=QDate(Today.year(),10,22-IsKabisah)) { jYear = Today.year()-621; jMonth =7;jDay=Today.daysTo(QDate(Today.year(),9,22-IsKabisah));} //مهر if(Today > QDate(Today.year(),10,22-IsKabisah) && Today <=QDate(Today.year(),11,21-IsKabisah)) { jYear = Today.year()-621; jMonth =8;jDay=Today.daysTo(QDate(Today.year(),10,22-IsKabisah));} //آبان if(Today > QDate(Today.year(),11,21-IsKabisah) && Today <=QDate(Today.year(),12,21-IsKabisah)) { jYear = Today.year()-621; jMonth =9;jDay=Today.daysTo(QDate(Today.year(),11,21-IsKabisah));} //آذر if(Today > QDate(Today.year(),12,21-IsKabisah) && Today <=QDate(Today.year(),1,20-IsKabisah)) { jYear = Today.year()-621; jMonth =10;jDay=Today.daysTo(QDate(Today.year(),12,21-IsKabisah));} //دی if(Today > QDate(Today.year(),1,20-IsKabisah) && Today <=QDate(Today.year(),2,19-IsKabisah)) { jYear = Today.year()-(Today.day()>11+IsKabisah)?622:621; jMonth =11;jDay=Today.daysTo(QDate(Today.year(),1,20-IsKabisah));} //بهمن if(Today > QDate(Today.year(),2,19-IsKabisah) && Today <=QDate(Today.year(),4,20-IsKabisah)) { jYear = Today.year()-622; jMonth =12;jDay=Today.daysTo(QDate(Today.year(),2,19-IsKabisah));} //اسفند jsYear = QString::number(jYear); jsMonth = QString::number(jMonth); jsDay = QString::number(-jDay); return jsYear +space+ jsMonth +space+ jsDay;
}
@ -
کاملا" وابسته به تاریخ میلادی سیستم هستش
اول چک می کنیم که سال کبیسه هست یا نه
بعد بر اساس این تشخیص ماه های سال مشخص می شن
خیلی ساده و راحت
فقط باید تاریخ خود سیستم درست ست شده باشه
آلگوریتمشو خودم نوشتم
و تستش کردم اگر اشتباهی مشاهده کردید لطفا" بهم اطلاع بدید
توی تستی که کردم خطا نداشت -
p{direction:rtl; text-align:right}. ببخشید ولی اصلا جالب نیست. البته نظر شخصیه منه. 12 بار مقایسه تاریخ، بارگذاری اینهمه آبجکت و استفاده از فانکشن های محاسباتی زیاد فقط برای تبدیل تاریخ! سال های کبیسه با فرمول قابل تشخیص هستند و نیازی به اینکار نیست. به نظرم کمی در مورد الگوریتم های تبدیل تاریخ مطالعه کنید و یک فانکشن تمیز، منطقی و با سرعت بنویسید.
-
ممنون از راهنماییتون . البته می تونستم ساده ترش کنم . فقط بخاطر اینکه گویا باشه اینکارو نکردم . ولی فکر می کنم این سرعتش از بقیه الگوریتم ها بیشتر باشه . چون فقط تو بازه مقایسه ای قرار می گیره. قبول دارم که تکنیکی نیست . اما دلیلی ندیدم که بخوام تاریخی رو محاسبه کنم که پایه اون همون تاریخ میلادی هستش که سیستم رو خودش داره. چون به هر حال همه می دونیم اساسا" تاریخ شمسی روی سیستم ها پایه گذاری نشده.
البته دو سه تا آبجکت بیشتر نیست و فکر نمی کنم زیاد باشه :)
موفق باشید -
p{direction:rtl; text-align:right}. این الگوریتم غلطه. خیلی چیزها درنظر گرفته نشده. مثلاً این که هر سی و سه سال یک بار سال کبیسه نداریم. و این که هر صد و بیست و هفت سال یکبار دو سال کبیسهٔ پشت سر هم داریم. همچنین تداخل این نوع محاسبات با سالهای کبیسهٔ میلادی و روزهای گمشدهٔ گریگوری درنظر گرفته نشده.
p{direction:rtl; text-align:right}. ساده بگم، این الگوریتم برای قبل از سال ۷۵ شمسی و بعد از سال ۲۰۱۷ میلادی یکی دو روز جابجایی خواهد داشت.
-
[quote author="Ramin7000" date="1354184526"]سروش عزیز سلام
این الگوریتم کاملا" به تاریخ تنظیم شده سیستم وابسته هستش!
اگر توی سیستم کبیسه تعریف نشده باشه این الگوریتم هم از خودش تعریفی نخواهد داشت.
به نظرم خیلی توجه نکردید.
ممنون از نظرتون[/quote]p{direction:rtl; text-align:right}. مسأله اینه که توی تاریخ سیستم کبیسهها درنظر گرفته شدن. اگه میخوای یه الگوریتم خوب بنویسی یه همچین کدی نیاز داری:
@
bool QJalaliDate::isLeapYear(const int& year)
{
int a = (year + 2345) % 2820;
if(a == 2819)
return true;
else
{
int b = a8;
int c;
if(b < 29)
c = b;
else
c = (b-29) % 33;
if(c==0)
return false;
else if(c%4 == 0)
return true;
else
return false;
}
}
@ -
تا اونجا که یادمه تقویم هایی که وابسته به میلادی هستند همیشه یه جایی سوتی میدن. خیام طبق یه الگوریتم اومده در مورد تقویم جلالی یه حرفهایی زده که هر ۱۸۲۰ سال تغییر ناپذیره و این حرفها. یه دوست ایرانی که هنوز هم ایرانه چنین کدی رو سالهاست نوشته:
http://savannah.nongnu.org/projects/jcal/
همون دستور cal لینوکسه