واضح آرشیو وب فارسی:سایت ریسک: mhentezari24-12-2005, 10:36 PMسلام آقا من يك متغير float يا double تعريف مي كنم مثل x . بعدش ميگم x=5/12 . اما pc در جواب اين معادله ساده مي نويسه x=0 !!!!!!!!! peyman_joojoo25-12-2005, 12:04 AMاگه مقدار ثابتی هست از کانست استفاده کن من که با این مشکا مواجه نشدم mhentezari25-12-2005, 12:13 AMنه ثابت نيست. اين كل برنامست: #include <iostream> #include <conio.h> #include <math.h> #include <vector> using namespace std; int main(void) { double x,y; //position of the dot int cir=0,sqr=0,counter=0; float result; do { x=(2*rand()/RAND_MAX)-1; //random numbers between [-1,1] y=(2*rand()/RAND_MAX)-1; if ( pow(x,2)+pow(y,2) <1) //the dot is in circle and square { cir++; sqr++; } else //the dot is just in square sqr++; counter++; }while (counter <=20000000); result = (cir/sqr)*4; cout <<result; getch(); return 0; } اگر اين برنامه درست اجرا بشه بايد عدد پي رو بده. x,y دو عدد بين -1 تا 1 خواهند بود اما توي اينجا هميشه يا صف ميشه يا يك. در واقع با اونها مثل يك int بر خورد ميكنه. كمك كنيد!! mhentezari25-12-2005, 12:15 AMاما x= 5/12 رو هم كه تست كردم بازم صفر شد! _LOVE_CODER_25-12-2005, 12:19 AM#include <iostream> #include <conio.h> #include <math.h> #include <vector> using namespace std; int main(void) { double x,y; //position of the dot int cir=0,sqr=0,counter=0; float result; do { x=(2*rand()/RAND_MAX)-1; //random numbers between [-1,1] y=(2*rand()/RAND_MAX)-1; if ( pow(x,2)+pow(y,2) <1) //the dot is in circle and square { cir++; sqr++; } else //the dot is just in square sqr++; counter++; }while (counter <=20000000); result = (float)cir/sqr*4; printf("%f ",result); getch(); return 0; } mhentezari25-12-2005, 12:44 AMلطفا با cout بنويسيد نه با printf .ممنون hamidreza_buddy25-12-2005, 01:56 PMخب مشخصه. ما دو نوع تقسیم داریم.: 1- تقسیم int بر int که حاصل آن حتما یک int است ( 0=5/12 یا 3=10/3) اگر دقت کردید حاصل جواب فقط خارج قسمت تقسیم است. (یعنی یک عدد صحیح) 2- یک یا دو طرف آن double یا float باشد. که در این صورت حاصل تقسیم به صورت اعشاری و دقیق خواهد بود. ببینید توی این تقسیم ای ن اتفاق ها می افتد. 1- 5 از نوع int در نظر گرفته می شود. 2- 12 هم از نوع int در نظر گرفته می شود. 3- پی تقسیم از نوع تقسیم int بر int است. 4- پس حاصل صفر می شود. 5- int به float تبدیل می شود و به صورت صفر در float ذخیره می شود. پس نتیجه صفر است. ولی اگر این کار را کنی: float a=5; float b=12; float c; c= a/b; c در آخر به صورت یک عدد اعشاری ذخیره می شود. c = 0.4166 hamidreza_buddy25-12-2005, 02:01 PMبرای اینکه مقدار واقعی ذخیره بشه این کارو بکن: float c; c = (float)5 / (float) 12; پس دو طرف را به صورت float ذخیره کرده و حاصل تقسیم بهصورت 0.41666 در c ذخیره می شود. mhentezari25-12-2005, 05:20 PMممنونم. كارم راه افتاد. البته به روش ديگه. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 271]