PDA

View Full Version : سوال: درخواست توضیح در مورد Floor



irpersian20
دوشنبه 28 مرداد 1392, 18:50 عصر
سلام
مساله ای هست که من اصلا نمیفهمم منظور چیست
متد Math.Floor را میتوان برای گرد کردن عددی تا تعداد مشخصی رقم اعشار به کار برد.
دستور:

y=Math.Floor(x*10+.0.5)/10


مقدار موجود در متغیر x را تا رقم یک دهم (اولین رقم در سمت راست ممیز) گرد میکند .
یا دستور:

y=Math.Floor(x*100+.0.5)/100


مقدار موجود در متغیر x را تا رقم اعشار یک صدم (دومین رقم در سمت راست ممیز) گرد میکند.

خواستم بدانم این که جمع میزنه با عدد 0.5 چرا؟ و چرا ضرب میکنه بعد جمع بعد تقسیم>؟

pooyan.a
دوشنبه 28 مرداد 1392, 22:03 عصر
به خاطر تقدم عملگرهاست.
یعنی اول عبارت داخل پرانتز حساب میشه ( اگر چند تا پرانتز تو در تو داشته باشیم ابتدا عبارت پرانتز داخلی تر ارزیابی می شود ولی اگر چند تا پرانتز در یک سطح باشند به ترتیب از چپ به راست ارزیابی می شوند)
بعد از پرانتز * و / و % ارزیابی میشوند ( اگر چند تا از این اعمال داشته باشیم به ترتیب از چپ به راست ارزیابی می شوند)
و سپس + یا - ارزیابی می شوند ( اگر چند تا از این اعمال داشته باشیم به ترتیب از چپ به راست ارزیابی می شوند)
در این مثال نیز اول عبارت داخل تابع محاسبه میشود سپس عدد محاسبه شده به تابع فرستاده میشود و عدد برگشت داده شده از تابع تقسیم میشود.

irpersian20
سه شنبه 29 مرداد 1392, 09:21 صبح
به خاطر تقدم عملگرهاست.
یعنی اول عبارت داخل پرانتز حساب میشه ( اگر چند تا پرانتز تو در تو داشته باشیم ابتدا عبارت پرانتز داخلی تر ارزیابی می شود ولی اگر چند تا پرانتز در یک سطح باشند به ترتیب از چپ به راست ارزیابی می شوند)
بعد از پرانتز * و / و % ارزیابی میشوند ( اگر چند تا از این اعمال داشته باشیم به ترتیب از چپ به راست ارزیابی می شوند)
و سپس + یا - ارزیابی می شوند ( اگر چند تا از این اعمال داشته باشیم به ترتیب از چپ به راست ارزیابی می شوند)
در این مثال نیز اول عبارت داخل تابع محاسبه میشود سپس عدد محاسبه شده به تابع فرستاده میشود و عدد برگشت داده شده از تابع تقسیم میشود.
سلام
بله حق با شماست
اما خوب چرا اول میاد ضرب میکنه در 10 بعد جمع میکنه با 0.5 بعد تابع جوابش برگشت داد دوباره تقسیم به 10 میکنه

pooyan.a
سه شنبه 29 مرداد 1392, 09:56 صبح
به خاطر تقدم عملگرهاست. به طور پیش فرض زبان های برنامه نویسی عملیات را طبق اولویتی که در بالا نوشتم انجام میدن.
ببینید در دستور باید یک عدد را بر 10 یا 100 تقسیم کند ولی معلوم نیست چ عددیه، پس اول میاد تابع رو فراخوانی میکنه تا یه عدد به دست بیاد برای تقسیم.
تابع نیز یک عدد دریافت میکند برای پردازش، پس ابتدا میاد عملیات داخل پرانتز را انجام میدهد تا یه عدد به دست بیاره.
برای به دست آوردن عددی که میخواد به تابع بفرسته باید عملیات رو پردازش کنه و طبق پیش فرض اول میاد عمل ضرب رو انجام میده و سپس عمل جمع(زیرا عمل ضرب تقدم بیشتری نسبت به جمع داره)
سپس عدد به دست اومده رو به تابع میفرسته و تابع نیز یک عدد برمیگردونه سپس این عدد تقسیم بر 10 میشه.
امیدوارم خوب توضیح داده باشم:خجالت:
نه تنها در برنامه نویسی بلکه در ریاضی هم این تقدم برقرار است و کاریش نمیشه کرد مگه اینکه به ترتیب عملیاتی که خودتون میخواهید رو جدا جدا بنویسید

Mahmoud.Afrad
سه شنبه 29 مرداد 1392, 09:57 صبح
سلام
بله حق با شماست
اما خوب چرا اول میاد ضرب میکنه در 10 بعد جمع میکنه با 0.5 بعد تابع جوابش برگشت داد دوباره تقسیم به 10 میکنه
تمرین دانشچوییه؟!

در هر صورت روی کاغذ برای یک عدد این کارها رو انجام بده متوجه میشی.

irpersian20
سه شنبه 29 مرداد 1392, 10:43 صبح
تمرین دانشچوییه؟!

در هر صورت روی کاغذ برای یک عدد این کارها رو انجام بده متوجه میشی.
سلام
داداش همه جا این موقع سال تعطیل هست.نه والا خودم دارم میخونم

Mahmoud.Afrad
سه شنبه 29 مرداد 1392, 11:27 صبح
والا بستگی داره داشنجوی چه دانشگاهی باشی.


اگر داری یاد میگیری توی همین کلاس Math متد Round هست میتونی استفاده کنی. پارامتر دوم تعداد رقم اعشار هست
Math.Round(x , 1)



اگر هم میخوای بفهمی کد خودت چه کار میکنه:
برای گرد کردن تا یک رقم اعشار ، رقم دوم اعشار مهمه(تا هر رقمی بخواهی گرد کنی رقم اعشار بعدی مهمه). اگر رقم دوم اعشار بزرگتر مساوی 5 باشه باید به رقم اول اعشار یکی اضافه کنید وگرنه نیاز نیست . سپس از رقم دوم اعشار به بعد رو باید حذف کنید.

1- چون برای از بین بردن ارقام اعشار بدون اهمیت از Floor استفاده خواهد شد و این متد فقط قسمت صحیح عدد رو برمیگردونه ، باید کل ارقام مورد نیاز رو به سمت چپ ممیز منتقل کنید که با ضرب در 10 انجام میشه.
2- حالا رقم دوم اعشار تبدیل شده به رقم اول اعشار. حالا عدد 5 رو باید به این رقم اعشار اضافه کنید یعنی 0.5 رو به کل عدد اضافه کنید. با این کار اگر این رقم بزرگتر مساوی 5 باشه یک واحد به قسمت صحیح اضافه میشه و اگر رقم اعشار کوچکتر از 5 باشه با اضافه کردن 5 به این رقم اعشار تغییری در رقم ماقبل بوجود نمیاد.
3- حالا با متد Floor ارقام اعشار بدون نیاز رو حذف میکنه.
4- از اونجایی که با ضرب در ضریب(10) ارقام اعشار به رقم صحیح تبدیل شدند باید حاصل بر همون ضریب تقسیم بشه تا ارقام اعشار مورد نیاز بدست بیان.

مثال به ترتیب اجرای الگوریتم; گردکردن تا یک رقم اعشار:

2.15

1-
2.15 * 10 = 21.5

2-
21.5 + 0.5 = 22.0

3- حذف ارقام بدون اهمیت
22

4-
22 / 10 = 2.2