PDA

نسخه کامل مشاهده نسخه کامل : ثانيه شمار



p d
23-11-2009, 13:12
چه طور ميشه يه ثانيه شمار ايجاد كرد ؟

sin2x=2sinxcosx
24-11-2009, 00:32
این برنامه رو یا بار امتحان کنین ببینین نتیجه دلخواه شما برآورده میشه .
اینو من قبلا نوشته بودم . از یه ترفند استفاده کردم که زیاد علمی نیست . ولی هر وقت می بینمش حال می کنم . (!)
این برنامه ساعت جاری سیستم رو نشون میده تو کنسول که هر لحظه هم حرکت می کنه . یعنی هر ثانیه که می گذره این برنامه هم میره جلو . از هیچ کامپوننت آماده ای استفاده نشده .


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

p d
24-11-2009, 12:13
جالبه.
ولي يه جاهاييش رو سر در نميارم. اگه ميشه if به بعد رو توضيح بديد.

sin2x=2sinxcosx
24-11-2009, 13:29
ببینین یه بار 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 میلادی رو به مبدا گرینویچ لندن برمیگردونه .

CppBuilder2006
24-11-2009, 20:37
می دونین که (time(0 تابعی هست که تعداد ثانیه های گذشته شده از اول ژانویه سال 1970 میلادی رو به مبدا گرینویچ لندن برمیگردونه .
به این زمان که نسبت به GMT داده میشه system time می گن.
برای گرفتن local time که همون ساعت گوشۀ پایین ویندوز هست میشه از APIی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
استفاده کرد.

CppBuilder2006
24-11-2009, 21:09
یه چیز دیگه. فکر میکنم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به خاطر اختلاف ساعت ایرانو انگلیس باشه. اما این اختلاف الآن فکر میکنم 3.5 ساعت باشه نه 4.5 ساعت. چون تا اونجایی که من میدونم GMT یه ساعت عقب یا جلو کشیده نمیشه.
یه نکته اینه که اگه Windows Update فعال بوده باشه ممکنه نرم افزرای روی ویندوز نصب کنه که اختلاف ساعت ایران روupdate میکنه برای همین ممکنه بعضی ویندوزها اختلاف رو 4.5 ساعت و بعضیا 3.5 ساعت بدونن.
به همین خاطره که حتما باید از local time استفاده کرد. البته برای timer (که مثل کرونومتر کار میکنه) مشکل زیادی نیست!

IP007
24-11-2009, 21:54
در اینجور موارد میتوان از تابع Sleep استفاده کرد و در هر لوپ 1000 میلی ثانیه وقفه ایجاد کرد

تابع sleep در هدر windows.h می باشد

sin2x=2sinxcosx
24-11-2009, 22:07
یه چیز دیگه. فکر میکنم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبه خاطر اختلاف ساعت ایرانو انگلیس باشه. اما این اختلاف الآن فکر میکنم 3.5 ساعت باشه نه 4.5 ساعت. چون تا اونجایی که من میدونم GMT یه ساعت عقب یا جلو کشیده نمیشه.
یه نکته اینه که اگه Windows Update فعال بوده باشه ممکنه نرم افزرای روی ویندوز نصب کنه که اختلاف ساعت ایران روupdate میکنه برای همین ممکنه بعضی ویندوزها اختلاف رو 4.5 ساعت و بعضیا 3.5 ساعت بدونن.
به همین خاطره که حتما باید از local time استفاده کرد. البته برای timer (که مثل کرونومتر کار میکنه) مشکل زیادی نیست!

بله اگه دقت کنین توضیح دادم :


حالا چرا در 45 ضرب کردیم ؟ تو ایکس پی که من این برنامه رو می نوشتم وقتی به 35 ضرب کردم دیدم یه ساعت اینور و اونور شد . (3.5 همون اختلاف ساعت تهران از لندن است) بنابراین 45 گذاشتم . ولی حالا تو 7 باز هم یه ساعت اینور و اونوره بنابراین اگه برای شما هم همچین مشکلی هست اونو 35 کنین .


می دونم اختلاف ساعت اینور و اونور نمی ره . :20:

CppBuilder2006
24-11-2009, 23:14
می دونم اختلاف ساعت اینور و اونور نمی ره.
من کی گفتم نمی دونید!
من نقل قول میکنم که راحت تر توضیح بدم نه این که طرف صحبتو مشخص کنم:31:
ولی اینو که مایکرو سافت اختلاف ساعت ویندوزو طبق قوانین هر کشور update میکنه و ممکنه اختلاف ساعت تغییر کنه همه نمی دونن:46:

p d
25-11-2009, 21:49
اينم يه ثانيه شمار خيلي ساده با حلقه تاخيري:

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++;

CppBuilder2006
25-11-2009, 23:31
اما این ثانیه شمار خیلی دقیق نیست و در کامپیوترای مختلف ممکنه متفاوت عمل کنه. همین طور دو بار اجرا در یه کامپیوتر هم ممکنه متفاوت باشه! امتحان کنید! مثلا 20 ثانیه رو با اون اندازه بگیرید.

p d
26-11-2009, 18:54
حق با شماست, فكر اونجاشو نكردم!
يعني راهي نداره كه بدون استفاده از توابع مثل time و .., خودمون بنويسيم ؟

CppBuilder2006
27-11-2009, 05:20
حق با شماست, فكر اونجاشو نكردم!
يعني راهي نداره كه بدون استفاده از توابع مثل time و .., خودمون بنويسيم ؟
نه هیچ راهی نداره.
یکی دیگه از چیزایی که ظاهرا هیچ راهی نداره نوشتن یه تابع برای انتخاب تصادفی اعداده. یعنی بدون داشتن یه منبع تصادفی مثل زمان یا بایت هایی از RAM که نمیدونیم چین نمیتونیم برنامه ای بنویسیم که از بین حتتا دو چیز یکشونو به تصادف انتخاب کنه! من که هر چی فکر کردم راهی پیدا نکردم! علتش اینه که برنامه هر بار یه جور اجرا میشه.:13:
میشه برای تصادف از هزارم ثانیه ساعت ویندوز استفاده که که موقع اجرا کاملا یه عدد تصادفیه یا یک بایت که نمیدونیم چه مقداری داره از RAM بگیریم یا از کاربر بخوایم یه عدد تصادفی وارد کنه راه دیگه ای نیست!

sanaz ashtari
28-11-2009, 23:10
سلام من برنامه ی ساعت دیجیتال با زنگ نیاز دارم 8051 برای درس ریز پردازنده .البته کد این برنامه در انجمن برق دیدم ولی چون توضیح نداره متوجه نمی شم ،میشه این کد برام توصیح بدین یا یک کد جدید ارائه کنین :19:

ar.constantine
09-12-2009, 10:16
salam
man feker mikonam ravesh pd behtare
ba tashakor az pd