PDA

View Full Version : سوال: راهنمايي در مورد برنامه ي فاكتوريل.



آزاد87
سه شنبه 19 آذر 1387, 20:52 عصر
سلام به اساتيد محترم.
من برنامه ي فاكتوريل اعداد 2 رقمي را به شكل زير نوشتم ولي جواب نمي ده . راهنمايي كنيد چه كار كنم.
بايد بگم كه من همين برنامه يا بهتر بگم به همين شكل مي خوام و فقط ايراد ها را بگيريد.



#include "stdafx.h"
#include <conio.h>
#include <iostream>

using namespace std;
using namespace System;

void main()
{
int a[500],b[500],x,i,c,r=0,t=1,p=499,d,s,z,w=0;
cout<<"Please Enter a number (For 0-100): ";
L1:
x=7;
//cin>>x;
if (x>100)
{
if (r==3)
{
cout<<"I'm cannot to answer you.Please enter any key to Exit.";
_getch();
return ;
}
cout<<"Your number out of a reange Please Enter again : ";
r++;
goto L1;
}
if (x==0)
{
cout<<"Your fact is : "<<1;
_getch();
return;
}
for (c=0;c<=501;c++)
a[c]=1;
for (c=0;c<=501;c++)
b[c]=0;
for (i=1;i<=x;i++)
{
s=0;
for (r=499,z=499;p<=z;z--)
{
t=r-1;
a[r]*=i;
for (;10<=a[r];)
{
if (a[r]==10)
{
a[r]/=10;
r--;
s=1;
w++;
}
else
{
d=a[r]%10;
a[t]+=(d-1);
a[r]/=10;
p--;
r--;
z--;
s=1;
w++;
}
}
if (s==0)
r--;
}
for (r=500;0<=r;r--)
if (b[r]==1)
{
a[r]++;
b[r]=0;
}
}
cout<<endl<<"Your Fact is : ";
for (r=0;r<=p;r++)
{
cout<<a[r];
}
_getch();
}
البته اگر برنامه ي ديگري داريد كه بهتر بود بازم بگذاريد.البته اگر شد ايراد همين برنامه را بگيريد.
اگر امكان داشت اشكال انگليسي نگيريد .
پيشاپيش ممنون.

SamaPic
چهارشنبه 20 آذر 1387, 10:15 صبح
با سلام خدمت دوست عزيز.
اين برنامه اي كه شما گذاشتين و اين جوري كه گذاشتين كسي جواب نمي ده چون خيلي طول مي كشه به هر حال من برنامه ي زير را گذاشتم شايد بتوانيد راه خود را اصلاح كنيد.




#include "stdafx.h"
#include<iostream>
#include<conio.h>
using namespace System;
using namespace std;

void main()
{
int a[500],i,f,c=0,x,r=0,t=1;
char ans;
while (t)
{
if (r==1)
cout<<endl;
cout<<"Please Enter a number(0-100) :";
L2:
cin>>x;
if (x==0)
{
cout<<"Your Fcat is 1 ."<<endl;
goto L3;
}
if (x>100)
{
if (r==3)
{
cout<<"I can't answer you Please any key to exit.";
_getch();
return;
}
cout<<"The number out of the range.Please Enter again : ";
r++;
goto L2;
}
a[0]=0;
for (i=2;i<500;i++)
a[i]=0;
a[1]=1;
for (f=1;f<=x;f++)
{
for (i=1;i<500;i++)
a[i]=f*a[i];
for (i=1;i<500;i++)
{
if (a[i]>9)
{
a[i+1]=a[i+1]+a[i]/10;
/ a[i]=a[i]&&percnt;10;
}
}
}
for (i=1499;i>=1;i--)
{
if(a[i]!=0)
{
c=i;
break;
}
}
cout<<"Fct is : ";
for(i=c;i>=1;i--)
cout<<a[i];
L3:
cout<<"Do you want to countinue (Y/N) ?";
r=0;
L1:
if (r==3)
{
cout<<"I can't answer you Please any key to exit.";
_getch();
return;
}

cin>>ans;
switch (ans)
{
case ('Y'):
t=1;
break;
case ('N'):
t=0;
break;
case ('y'):
t=1;
break;
case ('n'):
t=0;
break;
default:
cout<<"Charecter entery not avaibile.Please Enter agin : ";
r++;
goto L1;
}
}
}


خدانگهدا شما.

deopen
پنج شنبه 21 آذر 1387, 16:33 عصر
متاسفانه من کد شما رو مطالعه نکردم, و بسیار تعجب کردم, برنامه ی فاکتوریل چند خط بیشتر نیست , شاید منظور شما فورمول پیچیده تریه .

برنامه ساده فاکتوریل :



#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {
int num=0;
cout<<"Enter I-num : ";cin>>num;

int i=num;
while(i>2) {
i--;
num*=i;
}
cout<<"fact : "<<num;
cin>>num;
return 0;
}

SamaPic
پنج شنبه 21 آذر 1387, 17:04 عصر
با سلام خدمت دوست عزيز.
اين برنامه فاكتوريل اعداد 2 رقمي است و با برنامه ي ساده ي شما حل نمي شود چرا كه int داراي بازه ي كوچكي است (حدود 32 هزار) و اگر از اين مفدار بيشتر شود بطور حتم پاسخ صحيح نخواهد دارد .
با استفاده از long و unsiged هم فقط مي توان تا فاكتوريل 25 پيش رفت و مابقي مي شود همين.
بنابراين بايد بوسيله ي آرايه ها كاري كرد كارستان مطابق نمونه.
اميدوارم قانع شده باشيد .
خدانگهدار.

آزاد87
جمعه 22 آذر 1387, 20:53 عصر
سلام به دوست عزيزم Samapic.
من اين كه شما نوشتي را نمي خوام.
من مي خوام برنامه ي خودم به گونه اي اصلاح بشه لطفا كمكم كنيد چون خيلي عجله دارم.
حالا نشد كامل مشكلش برطرف بشه نشد يكم كه مي شه خطا هاش رو كمتر كرد.

SamaPic
شنبه 23 آذر 1387, 15:29 عصر
با سلام خدمت دوست عزيز.
اين كار نياز مند وقت و حوصله ي ف فراوان است . كسي انقدر بي كار نيست كه براي شما چنين كاري انجام دهد.
از اينكه iostream بدون .h گذاشتيد معلوم است كه از ويژال استفاده مي كنيد.شما مي توانيد برنامه را خط به خط اجرا كنيد تا ايراد آن آشكار شود.
شما مي توانيد از برنامه ي بنده برنامه خود را اصلاح كنيد.
خدانگهدار .

Developer Programmer
شنبه 23 آذر 1387, 16:03 عصر
آزاد جان،
به عنوان یه توصیه واسه برنامه هات ، وقتی میخوای متغییری تعریف کنی، اسمش رو چیزی انتخاب کن که هرکس با دیدن اون متغیر بدونه وظیفه اون متغیر چیه.
استفاده از p , r, s, w ناشیانه است.