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

شروع موضوع توسط farid-a ‏14 نوامبر 2005 در انجمن برنامه‌نویسی C و هم خانواده‌هایش

  1. farid-a

    farid-a Member

    ارسال‌ها:
    39
    تشکر شده:
    0
    امتیاز دستاورد:
    6
    سلام.
    اولش يكي نوشتم فقط تا !12 جواب داد.
    ميشه راهنمائيم بكنيد؟
    ممنون.
     
    نوشته شده توسط farid-a در ‏14 نوامبر 2005
  2. saalek110

    saalek110 Active Member

    ارسال‌ها:
    2,428
    تشکر شده:
    1,265
    امتیاز دستاورد:
    36
    من زياد برنامه نويسي بلد نيستم. ولي با چه زباني مي خواهي؟
    چه جوري ميشه كه تا 12 بشه بقيه اش نشه. شايد نوع متغيرهاتو بد انتخاب كردي.
    يك ندا بده.
    .
     
    نوشته شده توسط saalek110 در ‏15 نوامبر 2005
  3. ***UNIQUE***

    ***UNIQUE*** Active Member

    ارسال‌ها:
    1,049
    تشکر شده:
    134
    امتیاز دستاورد:
    36
    من نمیدونم شما برا چه زبانی میخواید اما این کد ++c این برنامه است
    (این کد تا فاکتوریل عدد 30 رو محاسبه میکنه شما میتونید برای اعداد بیشتر یا برای اینکه از کاربر ورودی بگیره این کد رو تغییر بدید)
    موفق باشید
     

    پیوست ها:

    • CH03.rar
      اندازه فایل:
      کیلوبایت 32.2
      نمایش ها:
      129
    نوشته شده توسط ***UNIQUE*** در ‏15 نوامبر 2005
  4. saalek110

    saalek110 Active Member

    ارسال‌ها:
    2,428
    تشکر شده:
    1,265
    امتیاز دستاورد:
    36
    من دانلود كردم تا كار كنم روش. ممنون.
     
    نوشته شده توسط saalek110 در ‏15 نوامبر 2005
  5. saalek110

    saalek110 Active Member

    ارسال‌ها:
    2,428
    تشکر شده:
    1,265
    امتیاز دستاورد:
    36

    #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

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

    ***UNIQUE*** Active Member

    ارسال‌ها:
    1,049
    تشکر شده:
    134
    امتیاز دستاورد:
    36
    - شما هر تابعی که مینویسید باید پیش نمونه تابع رو بالا تعریف کنید(مگر اینکه قبل از اولین استفاده تابع خود تابع تعریف شده باشه یعنی مثلا" در اینجا , خود تابع (خطوط آبی رنگ) رو اون بالا بجای پیش نمونه تابع(خط قرمز رنگ) مینوشتم. دراین صورت دیگه احتیاجی به نوشتن پیش نمونه تابع (خط قرمز رنگ در اینجا) نبود.
    - این تابع به روش بازگشتی نوشته شده و مقالات من راجع به توابع هنوز تموم نشده (ببخشید که نوشتن مقالات کند پیش میره راستش بیشتر از این فرصت نمیکنم)در این مقاله یا مقاله بعدی حتما" توابع بازگشتی رو بررسی میکنیم
    موفق باشید
     
    نوشته شده توسط ***UNIQUE*** در ‏15 نوامبر 2005
  7. saalek110

    saalek110 Active Member

    ارسال‌ها:
    2,428
    تشکر شده:
    1,265
    امتیاز دستاورد:
    36
    منظوزتون را فهميدم. منظور تابعي است كه خودش را احضار مي كنه. در ويژوال بيسيك هم داشت.
    .
     
    نوشته شده توسط saalek110 در ‏15 نوامبر 2005
  8. ***UNIQUE***

    ***UNIQUE*** Active Member

    ارسال‌ها:
    1,049
    تشکر شده:
    134
    امتیاز دستاورد:
    36
    خوشحالم سوالاتون حل شد
    موفق باشید
     
    نوشته شده توسط ***UNIQUE*** در ‏15 نوامبر 2005
  9. GodMaster

    GodMaster Member

    ارسال‌ها:
    69
    تشکر شده:
    38
    امتیاز دستاورد:
    6
    اگه ميشه برنامه اصلاح شدش رو كه فاكتوريل 1000 رو چاپ كنه رو بزاريد

    خيلي ممنون
     
    نوشته شده توسط GodMaster در ‏18 آوریل 2008
  10. the_king

    the_king مدیرکل انجمن

    ارسال‌ها:
    9,975
    تشکر شده:
    9,871
    امتیاز دستاورد:
    113
    یک نکته، فاکتوریل عدد 1000 یک عدد 2576 رقمی است با این مقدار (ناچار به شکستن سطر ها شدم تا ارقام جا بشوند) :
    کد (Text):

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

    saalek110 Active Member

    ارسال‌ها:
    2,428
    تشکر شده:
    1,265
    امتیاز دستاورد:
    36
    همان طور که استاد عزیز فرمودند متغیری به این بزرگی نداریم. یک راه حل شبیه سازی چنین متغیر بزرگی است. به پستهای زیر توجه کنید به نقل از :
    http://www.forum.iranled.com/showthread.php?tid=4878
     
    نوشته شده توسط saalek110 در ‏18 آوریل 2008
  12. pa_darya

    pa_darya Member

    ارسال‌ها:
    127
    تشکر شده:
    10
    امتیاز دستاورد:
    16
    اين برنامه واسه !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;
     
    نوشته شده توسط pa_darya در ‏21 آوریل 2008
    GodMaster از این پست تشکر کرده است.

به اشتراک بگذارید