چه طور ميشه يه ثانيه شمار ايجاد كرد ؟
چه طور ميشه يه ثانيه شمار ايجاد كرد ؟
این برنامه رو یا بار امتحان کنین ببینین نتیجه دلخواه شما برآورده میشه .
اینو من قبلا نوشته بودم . از یه ترفند استفاده کردم که زیاد علمی نیست . ولی هر وقت می بینمش حال می کنم . (!)
این برنامه ساعت جاری سیستم رو نشون میده تو کنسول که هر لحظه هم حرکت می کنه . یعنی هر ثانیه که می گذره این برنامه هم میره جلو . از هیچ کامپوننت آماده ای استفاده نشده .
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
جالبه.
ولي يه جاهاييش رو سر در نميارم. اگه ميشه if به بعد رو توضيح بديد.
ببینین یه بار time رو بیرون از حلقه while گرفتیم و تو t1 ذخیره کردیم . حالا داخل یه حلقه بی نهایت هم یه بار دیگه time رو می گیریم و در t2 ذخیره می کنیم . سرعت اجرای حلقه while خیلی خیلی زیاده و تو یک ثانیه احتمالا بتونه چند صد بار لوپ بزنه . (مثلا حالا) ما اونقدر داخل حلقه while زمان رو می گیریم و در t2 ذخیره می کنیم که اختلافش با قبلی حدود یک ثانیه بشه . حالا چرا داخل شرط if عدد 1 نذاشتیم و 1.001 گذاشتیم ؟ برای اینکه احتمالش خیلی خیلی پایینه که اختلاف دو مقدار بیاد و یک بشه . پیرامون عدد یک میشه . حالا چرا i و یک نه ؟ برای اینکه این مقدار هر بار یکی افزایش می یابه و باید دفعه بعد دو ثانیه باید اختلاف داشته باشه و دفعه بعد 3 ثانیه و الی آخر بنابراین یه counter گذاشتیم . جالا چرا در 45 ضرب کردیم ؟ تو ایکس پی که من این برنامه رو می نوشتم وقتی به 35 ضرب کردم دیدم یه ساعت اینور و اونور شد . (3.5 همون اختلاف ساعت تهران از لندن است) بنابراین 45 گذاشتم . ولی حالا تو 7 باز هم یه ساعت اینور و اونوره بنابراین اگه برای شما هم همچین مشکلی هست اونو 35 کنین . حالا چرا 3600 رو در 4.5 ضرب نکردم و 360 رو تو 45 ضرب کردم ؟ برای اینکه کامپایلر warning نده . والا هیچ فرقی نداره . داخل شرط if هم به شکل استاندارد زیر در آوردیم که زمان رو با فرمت زیر نشون بده :
می دونین که (time(0 تابعی هست که تعداد ثانیه های گذشته شده از اول ژانویه سال 1970 میلادی رو به مبدا گرینویچ لندن برمیگردونه .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به این زمان که نسبت به GMT داده میشه system time می گن.می دونین که (time(0 تابعی هست که تعداد ثانیه های گذشته شده از اول ژانویه سال 1970 میلادی رو به مبدا گرینویچ لندن برمیگردونه .
برای گرفتن local time که همون ساعت گوشۀ پایین ویندوز هست میشه از APIی
استفاده کرد.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یه چیز دیگه. فکر میکنم
به خاطر اختلاف ساعت ایرانو انگلیس باشه. اما این اختلاف الآن فکر میکنم 3.5 ساعت باشه نه 4.5 ساعت. چون تا اونجایی که من میدونم GMT یه ساعت عقب یا جلو کشیده نمیشه.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یه نکته اینه که اگه Windows Update فعال بوده باشه ممکنه نرم افزرای روی ویندوز نصب کنه که اختلاف ساعت ایران روupdate میکنه برای همین ممکنه بعضی ویندوزها اختلاف رو 4.5 ساعت و بعضیا 3.5 ساعت بدونن.
به همین خاطره که حتما باید از local time استفاده کرد. البته برای timer (که مثل کرونومتر کار میکنه) مشکل زیادی نیست!
Last edited by CppBuilder2006; 24-11-2009 at 21:40.
در اینجور موارد میتوان از تابع Sleep استفاده کرد و در هر لوپ 1000 میلی ثانیه وقفه ایجاد کرد
تابع sleep در هدر windows.h می باشد
بله اگه دقت کنین توضیح دادم :
می دونم اختلاف ساعت اینور و اونور نمی ره .حالا چرا در 45 ضرب کردیم ؟ تو ایکس پی که من این برنامه رو می نوشتم وقتی به 35 ضرب کردم دیدم یه ساعت اینور و اونور شد . (3.5 همون اختلاف ساعت تهران از لندن است) بنابراین 45 گذاشتم . ولی حالا تو 7 باز هم یه ساعت اینور و اونوره بنابراین اگه برای شما هم همچین مشکلی هست اونو 35 کنین .![]()
من کی گفتم نمی دونید!می دونم اختلاف ساعت اینور و اونور نمی ره.
من نقل قول میکنم که راحت تر توضیح بدم نه این که طرف صحبتو مشخص کنم
ولی اینو که مایکرو سافت اختلاف ساعت ویندوزو طبق قوانین هر کشور update میکنه و ممکنه اختلاف ساعت تغییر کنه همه نمی دونن![]()
Last edited by CppBuilder2006; 24-11-2009 at 23:25.
اينم يه ثانيه شمار خيلي ساده با حلقه تاخيري:
int y=0,z=0;
float x;
while(1){
for(x=0;x<=32099;x+=0.001);
clrscr();
if(y%3==0)
printf("%d",z++);
y++;
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)