ورود

نسخه کامل مشاهده نسخه کامل : کمک برای نوشتن برنامه فاکتوریل



gooogh
22-12-2012, 11:00
سلام به همه دوستان

من یه برنامه برای محاسبه فاکتوریل نوشتم و می خوام که در textbox اولی یه عدد وارد کنم و وقتی روی ذکمه count کلیک می کنم جواب رو در textbox دومی نمایش بده.

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

در زیر کدهایی که برای دکمه count نوشتم:




int fact = 1;


string number = textBox1.Text;

Int32 n = Int32.Parse(number);

int a = 1;

{

if (a > n)

textBox2.Text = fact.ToString;

else

{

fact = fact * a;

a++;

}


}

ببخشید که برعکس شده اگه کپی کنید درست می شه.
از دوستان خواهش می کنم که کمکم کنند.
با تشکر

senaps
22-12-2012, 12:18
سلام.... شما دو جا اشتباه کردین.... اول اونجایی که از شرط IF استفاده کردین! در صورتی که باید از حلقه استفاده بکنین....
دوم شرطی هست که گذاشتید! اشتباه هستش....


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

حالا من چیکار کردم، از باکس txt_GetNumber عددی رو گرفتم و داخل num قرار دادم... و بعد روی دگمه‌ی Count کلیک کردم...
تابع میاد بررسی میکنه با حلقه که ایا a از عددی که من دادم کوچیکتره؟! بله کوچیکتره پس میره داخل حلقه...
fact رو که مقدارش 1 هست ضرب در a میکنه که مقدارش 1 هست و میره بیرون برای مرحله‌ی بعدی حلقهa++ و a رو برابر 2 مکینه!! و هیمنجوری میره جلو....

میتونین برای دیدن روش کار، روی حلقه یک بریک پوینت بگذارید تا اتفاق افتادنش رو کاملا مشاهده بکنین....
(کدها رو یه بار توی نوت پد پیست کنین و بعد از اونجا ببرید توی ویژوال اوستودیو!)...

gooogh
22-12-2012, 18:25
با سلام
به خاطر لطفی که کردید و وقتی که گذاشتید سپاسگزارم.
موفق و پیروز باشید

mhmm_1360
08-02-2013, 12:43
در قسمت حلقه for باید به جای a < num , بنویسید: a<=num تا فاکتوریل عدد وارد شده به تکست باکس محاسبه شود نه فاکتوریل یکی کمتر از آن.
در کل بهتر است از روش بازگشتی برای محاسبه فاکتوریل استفاده کنید.

Msba
08-02-2013, 13:46
در کل بهتر است از روش بازگشتی برای محاسبه فاکتوریل استفاده کنید.

هرگز!
لازم به یادآوری است که در زبان های برنامه نویسی غیر محاسباتی نظیر زبان های رایج برنامه نویسی مانند C,C# و... فراخوانی هر تابع زمانی را مصرف می کند که در پیوستگی پیاپی قابل چشم پوشی نیست. از طرفی حجم استفاده از استک نیز برای اعداد بالا نیز دیگر مورد پسند نیست. از یک دید دیگر نیز شما پیوسته در حال پاس دادن مقداری هستید که ممکن است چند بایت باشد و این عمل بار ها و بارها می بایست توسط CPU هندل شود. اما فرض کنید که از یک حلقه استفاده کنید:
1- تابعی فراخوانی نمی گردد
2-حافظه برای پاس دادن مقادیر از خروجی توابع درگیر نمی شود
3-استک مصرف نمی شود. (با اینکه حجم بسیار بالایی دارد اما استفاده بیهوده از منابع خواهد بود.)
4- آنالیز و دیباگ برنامه های مستقیم بسیار ساده تر و کم زمان بر تر از Recursive است.
پیشنهاد برنامه نویسان عدم استفاده از توابع بازگشتی تا حد امکان است.
اینگونه توابع به طور مثال مناسب حرکات در بعد ها هستند: 2 نظیر درخت یا 3 نظیر کارنو 5 متغیره و ....

موفق باشید.