PDA

View Full Version : سوال: جمع فاکتوریل اعداد با حداکثر چند تابع امکان پذیر است؟



irpersian20
پنج شنبه 25 آذر 1389, 02:10 صبح
سلام
من یک سوال رو دارم حل میکنم.
میخوام بدون با حداکثر چند تا تابع میشه این سوال رو حل کرد؟
سوال مثلا این هست که این رو حساب کنه

1!+2!+3!+....

خوب این یک تایع main داریم برای چاپ کردن و ورودی گرفتن تعدادش و یک تابع Fact برای حساب کرن فاکتوریل و جمع زدن آن. من با 2 تا تابع حلش کردم . یکی main و یکی fact که توش فاکتوریل حساب میکنه و جمع میزنه.
آیا میشود یک تابع sum جدا برای جمع کردن داشته باشیم؟ یعنی یک تابع فاکتوریل حساب کنه و تابع بعدی اون جمع اونها رو؟ اگر بله لطفا راهنمایی کنید.
یا امکانش نیست و باید جمع زدن و حساب فاکتوریل را در یک جا انجام داد؟

Topcoding
پنج شنبه 25 آذر 1389, 05:06 صبح
سلام دوست عزیز
این که چرا می خواهی تعداد تابع هاتو زیاد کنی رو نمی دونم ولی یه راه به نظرم می رسه که می تونی از اون استفاده کنی
شما یه آرایه به تعداد اعدادت تعریف می کنی که خروجی تابع Fact را توی خونه هاش یکی یکی پر کنه بعد این آرایه را به تابع sum می فرستی و تک تک خانه هایش را با هم جمع می کنی و جواب رو می فرستی برای چاپ .
موفق باشی

irpersian20
پنج شنبه 25 آذر 1389, 10:58 صبح
سلام دوست عزیز
این که چرا می خواهی تعداد تابع هاتو زیاد کنی رو نمی دونم ولی یه راه به نظرم می رسه که می تونی از اون استفاده کنی
شما یه آرایه به تعداد اعدادت تعریف می کنی که خروجی تابع Fact را توی خونه هاش یکی یکی پر کنه بعد این آرایه را به تابع sum می فرستی و تک تک خانه هایش را با هم جمع می کنی و جواب رو می فرستی برای چاپ .
موفق باشی
دوست عزیز سلام.
من هم اصراری بر ازیاد تابع ها ندارم.اما استاد گفت برنامه را بنویسید و این تابع ها مورد نیاز هست. main fact sum
الان sum نداریم.بعید هم میدونم منظورش این بود که از آرایه هم کمک بگیرید. برنامه ای که من نوشتم فاکتوریل و جمع اون ها رو در خود تا بع fact انجام میده.من گیچ شده ام.
منتظر کمک دوستان هستم

BeginnerProgrammer
پنج شنبه 25 آذر 1389, 11:49 صبح
سلام
خب شما میتونی یه تابع سام با یک آرگومان ورودی که تعداد جمله هاس. بعد داخل تابع سام یه حلقه for بذار که شمارندش از یک تا آرگومان ورودیش حالا داخل این حلقه تابع فاکتوریل رو برای شمارنده فراخونی کن و هر بار حاصل جمع مرحله قبل رو با مرحله جدید جمع کن :
majmu+=fact(i)

BeginnerProgrammer
پنج شنبه 25 آذر 1389, 15:06 عصر
اینم کدش


#include <stdio.h>
int tfact(int);
int sum(int s);
int sumFact=0;
int main ()
{
int a,t,s;
while(1){
printf ("(enter 0 to exit),Enter Number: ");
scanf ("%d",&a);
if(a==0)
break;
t=tfact(a);
s=sum(t);
printf ("fact of %d is %d",a,t);
printf(" sum of them is %d",s);

}
return 0;
}
int tfact (int p)
{
int f=1,t=0;
for (int i=1;i<=p;i++)
{
f=f*i;
t=t+f;
}
return t;
}
int sum(int s){
sumFact+=s;
return sumFact;
}

اگه جایی از کدو مشکل دارین بگین توضیح بدم

irpersian20
پنج شنبه 25 آذر 1389, 16:35 عصر
سلام
داداش یک جای کار داره می لنگه.
ببینید من منظورم این هست که مجموع ها رو در یک تایع حساب کنه.
الان شما مثل خودم
t=t+f;
را در تابع فاکتوریل انجام دادید.
ما میخواهیم
t=t+f که مجموع فاکتوریل سری ما هست رو در تایع دیگری حساب کنیم.
اصلا میشه؟ :متفکر:
یعنی فاکتوریل اولی رو حساب کنه و بره تو تابع sum ما و جمع بزنه
برگرده و فاکتوریل بعدی رو حساب کنه و بره تو تایع sum و جمع بزنه و همین طور.

BeginnerProgrammer
پنج شنبه 25 آذر 1389, 16:43 عصر
حق با شماست من منظور شما رو دقیق متوجه نشدم این کد به نظرم درست هست:


#include <stdio.h>
int fact(int);
int sum(int s);
//int sumFact=0;
int main ()
{
int a,t,s;
printf ("Enter Number: ");
scanf ("%d",&a);
s=sum(a);
printf(" sum of them is %d\n",s);
return 0;
}
int fact (int p)
{
int f=1,t=0;
for (int i=1;i<=p;i++)
{
f=f*i;
}
return f;
}
int sum(int s){
int sumFact=0;
for(int i=1;i<=s;i++)
{
sumFact+=fact(i);
}
return sumFact;
}