كنترل پنل             جستجو               پرسشهای متداول            .:: آخرین پست‌های انجمن ::.            لیست اعضا            مدیران سایت             درجات        ورود
فهرست انجمن‌ها -> عمومي برنامه‌نويسي -> زبان برنامه‌نويسي C و مشابه
پاسخ دادن به این موضوع
یکی به دادم برسه
پست تاریخ: یکشنبه 17 آبان 1388 - 15:30    
arkco
خوب داره پيش مي‌ره
خوب داره پيش مي‌ره


پست: 43
عضو شده در: 24 فروردین 1387
محل سکونت: آران و بیدگل
blank.gif


امتياز: 699

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

برنامه زیر را در محیط سی پلاس پلاس نوشته ام . این برنامه باید عملیات زیر را محاسبه کند.
کد:
P(k,p)=k! / (k-p)!



کد:

#include<iostream.h>
#include<conio.h>
int main ()
{int k,p,e,a,j,f=1,b=1  ;
cout << "\nPlease enter a number : " ;
cin >> k;
cout<<"\nPlease enter a number again :" ;
cin>> p ;
for (e=1 ; e>=k ; e++)
f=f*e ;
for (a=1 ; a>=k-p ; a++)
b=b*a ;
j=f/b ;
cout << "\nP("<<k<<","<<p<<")="<<f   ;
getch();
return 0 ; }


اما هرعددی را که به عنوان ورودی وارد می کنم خروجی 1 می شود . چرا ؟
البته این برنامه را به صورت زیر هم نوشته ام ولی باز مشکل نرم افزار بالایی را دارد .
کد:

#include<iostream.h>
#include<conio.h>
int main ()
{int k,p,e,a,j,f=1,b=1  ;
cout << "\nPlease enter a number : " ;
cin >> k;
cout<<"\nPlease enter a number again :" ;
cin>> p ;
for (e=k ; e<=1 ; e++)
f=f*e ;
for (a=k-p ; a<=1 ; a++)
b=b*a ;
j=f/b ;
cout << "\nP("<<k<<","<<p<<")="<<f   ;
getch();
return 0 ; }

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: یکشنبه 17 آبان 1388 - 21:03    
Hamid
مدیريت كل سایت
مدیريت كل سایت


پست: 5505
عضو شده در: 31 اردیبهشت 1384
محل سکونت: -::ساوه::-
iran.gif


امتياز: 47855

عنوان: پاسخ به «یکی به دادم برسه» خواندن مشخصات فردی ارسال پیام شخصی

سلام؛
به نظر می‌رسه هنوز توی تعیین شرط پایانی برای حلقه for مشکل داری Razz
ببین، مثلاً حلقه for زیر رو ببین:
کد:
for (i=0 ; i<100 ; i++)

این حلقه رو باید اینطوری به فارسی بخونی:
از i=1 شروع کن و تا زمانی که شرط وسط برقرار است، (یعنی i کوچک‌تر است از 100) حلقه رو تکرار کن...

حالا حلقه for اولت رو بخون، می‌بینی که شرط غلطی تعیین کردی:
کد:
for (e=1 ; e>=k ; e++)

از e=1 شروع کن و تا زمانی که شرط وسط برقرار است، مقدار e رو یک واحد اضافه کن و حلقه رو تکرار کن.
خوب، حالا e اول می‌شه 1، آیا 1 بزرگ‌تر از k هست؟ (مثلاً اگر کاربر k رو وارد کرده باشه 2 ) ‌طبیعتاً بزرگ‌تر نیست. یعنی شرط برقرار نیست و حلقه هیچ وقت اجرا نمی‌شه!! و این یعنی اینکه f همون 1 باقی می‌مونه.

حلقه دوم هم همینطور! حلقه با اون شرط هیچ وقت اجرا نمی‌شه...
برنامه دوم هم همین ایراد رو داره و به همین دلیل هست که می‌گم توی تعیین شرط کمی مشکل داری.

موضوع دیگه اینه که شما f رو به خروجی می‌فرستی. در حالی که نتیجه نهایی در j ذخیره شده. Wink
پس، سه تا مشکل وجود داره.
درست برنامه:
کد:
#include<iostream.h>
#include<conio.h>
int main ()
{int k,p,e,a,j,f=1,b=1  ;
cout << "\nPlease enter a number : " ;
cin >> k;
cout<<"\nPlease enter a number again :" ;
cin>> p ;
for (e=1 ; e<=k ; e++)
f=f*e ;
for (a=1 ; a<=k-p ; a++)
b=b*a ;
j=f/b ;
cout << "\nP("<<k<<","<<p<<")="<<j   ;
getch();
return 0 ; }


تست کن، اگر مشکلی داشت، بگو.

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: سه‌شنبه 19 آبان 1388 - 16:02    
arkco
خوب داره پيش مي‌ره
خوب داره پيش مي‌ره


پست: 43
عضو شده در: 24 فروردین 1387
محل سکونت: آران و بیدگل
blank.gif


امتياز: 699

عنوان: پاسخ به «یکی به دادم برسه» خواندن مشخصات فردی ارسال پیام شخصی

حمید عزیز
سلام
برنامه ای که نوشته بودی را در سه نرم افزار زیر تست کردم .
dev c++
turbo c++
borland c++
ولی فقط در برنامه اول جواب درست بود و در دو برنامه بعدی جواب همچنان 1 بود . چرا ؟

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست: arkco (سه‌شنبه 19 آبان 1388 - 16:06)

پست تاریخ: سه‌شنبه 19 آبان 1388 - 19:51    
Hamid
مدیريت كل سایت
مدیريت كل سایت


پست: 5505
عضو شده در: 31 اردیبهشت 1384
محل سکونت: -::ساوه::-
iran.gif


امتياز: 47855

عنوان: پاسخ به «یکی به دادم برسه» خواندن مشخصات فردی ارسال پیام شخصی

arkco, جان،
الگوریتم و کدها که ایرادی نداره، نمی‌دونم، شما دقت کن که یک پروژه جدید بسازی و تست کنی. توی پروژه قبلی که مربوط به کدهای خودت بوده، تست نکنی یه وقت... چون احتمالاً همون خروجی قبلی رو نشون می‌ده.

اگر مشکل از این نیست، من واقعاً نمی‌دونم مشکل چیه.
(الان توربو ندارم، فقط Dev دارم که جواب می‌ده...)

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:

پست تاریخ: سه‌شنبه 19 آبان 1388 - 21:50    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: پاسخ به «یکی به دادم برسه» خواندن مشخصات فردی ارسال پیام شخصی ارسال email

سلام به همهاین طور که معلوم می خوای برنامه ای بنویسی که عبارت ریاضی زیر رو برات حساب کنه ؟ اره؟
کد:

K! / (k-p)!

خوب حالا چرا از تابع بازگشتی استفاده نمی کنی اونا رو اگه بهتون درس دادن و می تونی از اونا استفاده کنی کارت راحت تر هستش من برنامه رو با زبان C برات می نویسم خودت به C++ تبدیلش کن کاری نداره تبدیلش راحته Embarassed
بیا اینم کد برنامه که تست کردم با turbo C که کار کردش

کد:

#include<conio.h>
#include<stdio.h>
int fact (int);
int main()
{
int k,p,sorat,makhraj;
float ans;
clrscr();
printf("pleas enter tow number :\n");
printf("First number :");
scanf("%d",&k);
printf("\nSecond number :");
scanf("%d",&p);
sorat=fact(k);
makhraj=fact(k-p);
ans=sorat/makhraj;
printf("\n\nP(%d,%d)=%d!/%d!=%3.2f",k,p,k,k-p,ans);
getch();
return 0;
}
int fact (int a)
{
if((a==1)||(a==0))
 return 1;
return(a*fact(a-1));
}


امید وارم به کارت بیادش

[ وضعيت كاربر: ]

تشکر کردن از پست  پاسخگویی به این موضوع بهمراه نقل قول 
تشکرها از این پست:


نمایش پستها:                 مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
پاسخ دادن به این موضوع
 

صفحه 1 از 1

تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
 Related Topics 


 information 

 

پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید


Copyright 2004-2024. All rights reserved.
© by Aftabgardan Cultural Center : Aftab.cc