PDA

View Full Version : سوال: برنامه ی ترکیبیات(فاکتوریل)



mrsh1372
پنج شنبه 15 دی 1390, 16:21 عصر
کسی می تونه منو راهنمایی کنه که اشکال کارم چیه؟
من میخوام برنامه ی ترکیبیات دو عدد مثلا n,r رو بنویسم.فرمولم اینه.

n!/r!(n-r)!


البته فاکتوریل رو اینطوری کردم این در اومد.لطفا کمک کنید.


int n;
int r;
int factn=1;
int factr=1;
int fact;

cout<<"Enter n,r\n";
cin>>n>>r;

for(;n>1;--n)
for(;r>1;--r)

factn*=n;
factr*=r;
fact=factn/factr*(factn-factr);
cout<<fact;

shahmohammadi
پنج شنبه 15 دی 1390, 17:56 عصر
برای محاسته فاکتور یل از این روش استفاده کنید تا مقدار خود عدد هم بمونه. (در کد شما مقدار عدد آخرسر به 1 می رسه. )
factn=1;
for(i=1;i<=n;i++)
{
factn*=i;
}

fact=factn/factr*(factn-factr);
اینجا رو هم اشتباه نوشتین. آخرش (n-r)! رو باید به دست بیارید. نه (n!-r!).
موفق باشید.

mrsh1372
پنج شنبه 15 دی 1390, 18:25 عصر
ممنون از پاسختون.اما منظور من ترکیبیات ریاضی بود که مانند فاکتوریل است اما فرمول آن مانند فرمولی که بالا نوشتم است.اگر برنامه ی ترکیبیات را می دانید ممنون می شوم برایم بنویسید.

quiet_programmer
پنج شنبه 15 دی 1390, 18:32 عصر
با سلام.

در مواقعی که نیاز به تکرار یک کد با پارامترهای مختلف دارین بهتره از تابع یا رویه استفاده کنید. شما یه تابع تعریف کن که عددی رو به عنوان ورودی(پارامتر) بگیره و فاکتوریل رو برات حساب کنه و برگشت بده بعد تو داخل برنامه اصلی هرجا که خواستی از اون تابع استفاده کن. مثل کد زیر:

unsigned int Fact(int n)
{
unsigned int F=1;
for(int i=1;i<=n;i++)
F*=i;
return F;
}

void main()
{
int r,n;
float Result;
r=2;
n=5;
Result=Fact(n)/(Fact(r)*Fact(n-r));
}

ببین چقد خشگل شد:خجالت:. تر تمیز و قابل فهم و ساده و خوشمزه.:چشمک:

یاحق.
موفق باشید/

omid.r
شنبه 10 فروردین 1392, 00:59 صبح
سلام
من تازه دارم زبان ++c رو یاد میگیرم می خواستم یه برنامه بنویسم که ترکیبیات رو حساب کنه ولی مثلا تعدادی حروف بگیره و روش هایی رو که می شه کبار هم گذاشت رو بنویسه مثل دو حرف A , B که می شه :AB , BA
ممنون.

omid.r
شنبه 10 فروردین 1392, 18:08 عصر
کسی نیست !!!!!!

hadi0x7c7
یک شنبه 11 فروردین 1392, 02:51 صبح
این برنامه میاد از قضیه پاسکال استفاده میکنه:

C(n,m) = C(n, m - 1) + C(n - 1 , m - 1)

روش های گفته شده در بالا واسه حالت های مثل C(50,10) درست جواب نمیدهند ! دلیلش هم معلومه.

#define MAXN 100 /* largest n or m */

long binomial_coefficient(n,m)
int n,m; /* computer n choose m */
{
int i,j; /* counters */
long bc[MAXN][MAXN]; /* table of binomial coefficient values */

for (i=0; i<=n; i++) bc[i][0] = 1;

for (j=0; j<=n; j++) bc[j][j] = 1;


for (i=1; i<=n; i++)
for (j=1; j<i; j++)
bc[i][j] = bc[i-1][j-1] + bc[i-1][j];

return( bc[n][m] );
}

main()
{
int a, b;
long binomial_coefficient();

while (1) {
scanf("%d %d",&a,&b);
printf("%d\n",binomial_coefficient(a,b));
}
}