PDA

مشاهده نسخه کامل : برنامه اي براي يافتن فاكتوريل اعداد با هر سايز



farid-a
دوشنبه 23 آبان 1384, 23:06
سلام.
اولش يكي نوشتم فقط تا !12 جواب داد.
ميشه راهنمائيم بكنيد؟
ممنون.

saalek110
سه شنبه 24 آبان 1384, 00:45
من زياد برنامه نويسي بلد نيستم. ولي با چه زباني مي خواهي؟
چه جوري ميشه كه تا 12 بشه بقيه اش نشه. شايد نوع متغيرهاتو بد انتخاب كردي.
يك ندا بده.
.

***UNIQUE***
سه شنبه 24 آبان 1384, 07:58
من نمیدونم شما برا چه زبانی میخواید اما این کد ++c این برنامه است
(این کد تا فاکتوریل عدد 30 رو محاسبه میکنه شما میتونید برای اعداد بیشتر یا برای اینکه از کاربر ورودی بگیره این کد رو تغییر بدید)
موفق باشید

saalek110
سه شنبه 24 آبان 1384, 11:14
من دانلود كردم تا كار كنم روش. ممنون.

saalek110
سه شنبه 24 آبان 1384, 12:41
#include <iostream>
#include <conio.h>
#include <iomanip>

unsigned long factorial( unsigned long ); // function prototype

int main()
{
// Loop 10 times. During each iteration, calculate
// factorial( i ) and display result.
for ( int i = 0; i <= 30; i++ )
cout << setw( 2 ) << i << "! = "
<< factorial( i ) << endl;

getch();
return 0; // indicates successful termination

} // end main

// recursive definition of function factorial
unsigned long factorial( unsigned long number )
{
// base case
if ( number <= 1 )
return 1;

// recursive step
else
return number * factorial( number - 1 );

} // end function factorial

من توضيح مي دهم ببينيد درست مي گم. قسمت قرمز ، ميگه كه در برنامه يك تابع تعريف شده. سئوال : ما هر چند تا تابع بسازيم ، بايد بالاي مين(برنامه اصلي) بگيم؟
قسمت آبي هم خود تابع است كه ورودي ميگيره و خروجي اش را با ريترن برميگردونه. ولي من نفهميدم ضربهاي متوالي چه طور انجام ميشه. حالا مهم نيست بعدن سر درميارم. سئوال من اينه كه من ديروز مي خواستم يك تابع مثل تابع شما بسازم بلد نبودم. و امروز اين برنامه به دستم رسيد . آيا در مقالات شما راجع به تابع كامل توضيح داده شده؟ منظورم چگونه تابع ساختنه.

***UNIQUE***
سه شنبه 24 آبان 1384, 15:18
- شما هر تابعی که مینویسید باید پیش نمونه تابع رو بالا تعریف کنید(مگر اینکه قبل از اولین استفاده تابع خود تابع تعریف شده باشه یعنی مثلا" در اینجا , خود تابع (خطوط آبی رنگ) رو اون بالا بجای پیش نمونه تابع(خط قرمز رنگ) مینوشتم. دراین صورت دیگه احتیاجی به نوشتن پیش نمونه تابع (خط قرمز رنگ در اینجا) نبود.
- این تابع به روش بازگشتی نوشته شده و مقالات من راجع به توابع هنوز تموم نشده (ببخشید که نوشتن مقالات کند پیش میره راستش بیشتر از این فرصت نمیکنم)در این مقاله یا مقاله بعدی حتما" توابع بازگشتی رو بررسی میکنیم
موفق باشید

saalek110
سه شنبه 24 آبان 1384, 22:16
منظوزتون را فهميدم. منظور تابعي است كه خودش را احضار مي كنه. در ويژوال بيسيك هم داشت.
.

***UNIQUE***
سه شنبه 24 آبان 1384, 23:20
خوشحالم سوالاتون حل شد
موفق باشید

GodMaster
جمعه 30 فروردین 1387, 10:52
اگه ميشه برنامه اصلاح شدش رو كه فاكتوريل 1000 رو چاپ كنه رو بزاريد

خيلي ممنون

the_king
جمعه 30 فروردین 1387, 12:27
اگه ميشه برنامه اصلاح شدش رو كه فاكتوريل 1000 رو چاپ كنه رو بزاريد

خيلي ممنون

یک نکته، فاکتوریل عدد 1000 یک عدد 2576 رقمی است با این مقدار (ناچار به شکستن سطر ها شدم تا ارقام جا بشوند) :



402,387,260,077,093,773,543,702,433,923,003,985,71 9,374,864,
210,714,632,543,799,910,429,938,512,398,629,020,59 2,044,208,
486,969,404,800,479,988,610,197,196,058,631,666,87 2,994,808,
558,901,323,829,669,944,590,997,424,504,087,073,75 9,918,823,
627,727,188,732,519,779,505,950,995,276,120,874,97 5,462,497,
043,601,418,278,094,646,496,291,056,393,887,437,88 6,487,337,
119,181,045,825,783,647,849,977,012,476,632,889,83 5,955,735,
432,513,185,323,958,463,075,557,409,114,262,417,47 4,349,347,
553,428,646,576,611,667,797,396,668,820,291,207,37 9,143,853,
719,588,249,808,126,867,838,374,559,731,746,136,08 5,379,534,
524,221,586,593,201,928,090,878,297,308,431,392,84 4,403,281,
231,558,611,036,976,801,357,304,216,168,747,609,67 5,871,348,
312,025,478,589,320,767,169,132,448,426,236,131,41 2,508,780,
208,000,261,683,151,027,341,827,977,704,784,635,86 8,170,164,
365,024,153,691,398,281,264,810,213,092,761,244,89 6,359,928,
705,114,964,975,419,909,342,221,566,832,572,080,82 1,333,186,
116,811,553,615,836,546,984,046,708,975,602,900,95 0,537,616,
475,847,728,421,889,679,646,244,945,160,765,353,40 8,198,901,
385,442,487,984,959,953,319,101,723,355,556,602,13 9,450,399,
736,280,750,137,837,615,307,127,761,926,849,034,35 2,625,200,
015,888,535,147,331,611,702,103,968,175,921,510,90 7,788,019,
393,178,114,194,545,257,223,865,541,461,062,892,18 7,960,223,
838,971,476,088,506,276,862,967,146,674,697,562,91 1,234,082,
439,208,160,153,780,889,893,964,518,263,243,671,61 6,762,179,
168,909,779,911,903,754,031,274,622,289,988,005,19 5,444,414,
282,012,187,361,745,992,642,956,581,746,628,302,95 5,570,299,
024,324,153,181,617,210,465,832,036,786,906,117,26 0,158,783,
520,751,516,284,225,540,265,170,483,304,226,143,97 4,286,933,
061,690,897,968,482,590,125,458,327,168,226,458,06 6,526,769,
958,652,682,272,807,075,781,391,858,178,889,652,20 8,164,348,
344,825,993,266,043,367,660,176,999,612,831,860,78 8,386,150,
279,465,955,131,156,552,036,093,988,180,612,138,55 8,600,301,
435,694,527,224,206,344,631,797,460,594,682,573,10 3,790,084,
024,432,438,465,657,245,014,402,821,885,252,470,93 5,190,620,
929,023,136,493,273,497,565,513,958,720,559,654,22 8,749,774,
011,413,346,962,715,422,845,862,377,387,538,230,48 3,865,688,
976,461,927,383,814,900,140,767,310,446,640,259,89 9,490,222,
221,765,904,339,901,886,018,566,526,485,061,799,70 2,356,193,
897,017,860,040,811,889,729,918,311,021,171,229,84 5,901,641,
921,068,884,387,121,855,646,124,960,798,722,908,51 9,296,819,
372,388,642,614,839,657,382,291,123,125,024,186,64 9,353,143,
970,137,428,531,926,649,875,337,218,940,694,281,43 4,118,520,
158,014,123,344,828,015,051,399,694,290,153,483,07 7,644,569,
099,073,152,433,278,288,269,864,602,789,864,321,13 9,083,506,
217,095,002,597,389,863,554,277,196,742,822,248,75 7,586,765,
752,344,220,207,573,630,569,498,825,087,968,928,16 2,753,848,
863,396,909,959,826,280,956,121,450,994,871,701,24 4,516,461,
260,379,029,309,120,889,086,942,028,510,640,182,15 4,399,457,
156,805,941,872,748,998,094,254,742,173,582,401,06 3,677,404,
595,741,785,160,829,230,135,358,081,840,096,996,37 2,524,230,
560,855,903,700,624,271,243,416,909,004,153,690,10 5,933,983,
835,777,939,410,970,027,753,472,000,000,000,000,00 0,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,00 0,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,00 0,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,00 0,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,00 0,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,00 0,000,000, 000



برای نگهداری چنین عددی به متغیر های 8800 بیتی یا به عبارتی 1100 بایتی نیاز دارید، مقایسه کنید با متغیر های 80 بیتی
(10 بایتی) که در کمک پردازنده های ریاضی بکار می روند.

saalek110
جمعه 30 فروردین 1387, 19:11
همان طور که استاد عزیز فرمودند متغیری به این بزرگی نداریم. یک راه حل شبیه سازی چنین متغیر بزرگی است. به پستهای زیر توجه کنید به نقل از :
http://www.forum.iranled.com/showthread.php?tid=4878

سلام
من میخوام فاکتوریل را با آرایه ها پیاده سازی کنم که اعداد بزرگ هم حساب کنه(در c++)

با سلام. ببينيد اين طوري ميشه:

يك آرايه از جنس اينتيجر بگيريد. به اندازه كافي بزرگ.
بعد عدد اينپوت را بگيريد و در همه خانه ها ضرب كنيد. اگر دو رقمي شد نتيجه ضرب،، رقم دهگان را با خانه بعدي آرايه جمع بزنيد. با عملگر باقيمانده و تقسيم بر ده ميشه اين كار را كرد.

در كل هر خانه آرايه چون اينتيجر است مي تواند اعداد تا چند هزار را قبول كند ولي شما فرض بگيريد كه فقط اعداد يك رقمي را مي تواند قبول كند. در آخر هم ، همه خانه هاي آرايه را پشت سر هم چاپ كنيد تا عدد نهايي چاپ شود.
من هيچ كدي براي امتحان ننوشتم. ولي ممكنه اين ايده عملي باشه.

pa_darya
دوشنبه 02 اردیبهشت 1387, 11:32
اين برنامه واسه !N
#include <iostream.h>
int main() {
int i,n,a;
long int p;
cout<<"structur is p=n! . enter n : "<<endl;
cin>>n;
p=1;
i=1;
if(n==0)
cout<<" 0! is 1 ";
else
{
while (i<=n) {
p=p*i;
i++;
}
cout<<n<<"! is "<<p;
}
return 0;