PDA

View Full Version : مثلث خیام ( کمک به حل مسئله)



x.coder
سه شنبه 17 آذر 1388, 19:13 عصر
با عرض سلام و ادب خدمت همه ی بچه های گل جامعه برنامه نویس:قلب:
من تو مسئله ی مثلث خیام مشکل پیدا کردم اگه میشه کمکم کنید
* - برنامه ای را بنویسید که n جمله را از ورودی خوانده و مثلث خیام را تا n جمله چاپ کندو

مثال: تا 6 جمله


1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

Wayne Rooney
سه شنبه 17 آذر 1388, 21:02 عصر
برنامتون رو بنویسید ، تا اگه اشکال داشت ، مشکل رو دوستان بگن یا من اگه تونستم بگم ...

راهنمایی 1 : می تونید از ترکیب استفاده کنید ... جمله اول ترکیب 1 چاپ میشه ... جمله دوم ترکیب 0 از 1 و ترکیب 1 از 1 ... جمله سوم ترکیب 0 از 2 ، ترکیب 1 از 2 ، ترکیب 2 از 2 ... بقیه هم همین طوری ...

راهنمایی 2 : بهتره که با تابع بازگشتی ترکیب رو بنویسید ...

tdkhakpur
سه شنبه 17 آذر 1388, 21:23 عصر
شما اگر در نحوه تحلیل شکل از روش خود خیام استفاده می کردید راحت تر به نتیجه می رسیدید.


#include <iostream.h>
#include <conio.h>
#include <stdio.h>
/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
*/
int main()
{
int Nums [200]={0}, tmp, n, c;
clrscr();
cout<<"enter khayam number : ";
cin>>n;
c=n-1;
Nums[c] = 1;
for( int i=0; i<n; i++)
{
cout<<"\n ";
for( int j=0; j<c; j++ )
cout<<" ";
for( int j=0; j<=i; j++){
tmp = Nums[c+j] + Nums[c+j+1] ;
cout<<tmp<<" ";
Nums[c+j] = tmp;
}
c--;
}
return 0;
}

emadfa
چهارشنبه 18 آذر 1388, 12:07 عصر
مثلث خیام بدون استفاده از آرایه و با استفاده از مفهوم جایگشتی:





#include <iostream>
#include <iomanip>
using namespace std;
int Fact(int);
void main(void)
{
int num, n;
cout << "Enter the number of rows: " << endl;
cin >> n;
for(int i = 0 ; i<=n-1 ; i++)
{
for(int j = 0 ; j<=i ; j++)
{
if(j == 0 || j==i)
num = 1;
else
num = Fact(i) / (Fact(j) * Fact(i-j));
cout << setw(6) << num;
}
cout << endl;
}
}
// Factorial /function
int Fact(int num)
{
int fact = 1;
for(int i = 1 ; i<=num ; i++)
fact *= i;
return fact;
}

emadfa
چهارشنبه 18 آذر 1388, 12:30 عصر
مبنای اصلی الگوریتم فوق:



http://upload.wikimedia.org/math/2/c/2/2c21499ae4eea72d1be19608805c9c14.png






http://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Pascal%27s_triangle_5.svg/250px-Pascal%27s_triangle_5.svg.png

sajjadrad
شنبه 28 آذر 1388, 19:10 عصر
مونش در هفت سطر:




http://daugerresearch.com/vault/PascalsTriangle.gif
رابطه ریاضی بین اعداد:

(a+b)0 = 1 (1)
(a+b)1 = a+b (1,1)
(a+b)2 = a2+2ab+b2 (1,2,1)
(a+b)3 = a3+3a2b+3ab2+b3 (1,3,3,1)
(a+b)4 = a4+4a3b2+6a2b2+4a2b3+b4 (1,4,6,4,1)


این برنامه رو من در زبان پاسکال نوشتم و به درستی کار میکنه.البته طبق طول میدانی که بهش دادم تا عدد 12 اعداد قاطی نمیشن!
به احتمال قوی کمکت نمیکنه اما رویه کارم اینجوی بود:
اول یه آرایه دو بعدی تعریف کردم
بعد از تولید هر عدد اون رو در آرایه خودش ذخیره کردم و در لاین بعدی از این دستور استفاده کردم:
a[i,j]:=a[i-1,j-1]+a[i-1,j];

اینطور که دو تا آرایه کنار هم رو جمع کنه و در آرایه لاین پایینی قرار بده.
درصورت نیاز بهم بگو تا سورس ها رو بهت بدم.

اینم لینک دانلود مثلث خیام در زبان پاسکال
http://myprograms.persiangig.com/oth...cal/PasTra.zip (http://myprograms.persiangig.com/other/Pascal/PasTra.zip)

پسورد:www.myprograms.blogsky.com (http://www.myprograms.blogsky.com)

من این برنامه رو با استفاده از آرایه ها و حلقه for نوشتم.

بانوی ایران
پنج شنبه 03 دی 1388, 23:56 عصر
سلام دوستان
من مثلث خيام رو با ماتريس پايين مثلثي نوشتم ولي
اگر بخوايم با اريه هاي يه بعدي بنويسيم بايد چي كار كنيم
من به ذهنم رسيده كه مثلا وقتي كاربر وارد ميكنه 4(4 خط داشته باشه)
ارايه مون 4 بار چاپ بشه يعني خط اول a0خط دومa0,a1خط سوم a0,a1,a2تا اخر
يعني به اين شكل
A0=1
A0=1 , a1=1
A0=1 , a1=a0+a1=2 , a2=1
A0=1, a1=a0+a1=3, a2=a1+a2=3, a3=1
كه البته اول a2محاسبه ميشه بعد a1
اين جوري بايد بنويسم؟
اگه اره چيكارش كنم
در واقع مشكلم اينه كه حلقه foرو چجوري بزارم كه همش رو هي چاپ كنه

amir-yeketaz
جمعه 04 دی 1388, 00:15 صبح
اینم من نوشتم با یه راه حل دیگه (بدون تابع)
مال خیلی وقت پیشه و خیلی مبتدیانه نوشته شده
نه از آرایه نه از تابع و نه از راه حل توابع بازگشتی در نوشتن این برنامه استفاده شده!!!!


#include <stdio.h>
int main(){
int i,j,a,b,sum,poa,pob,factn,factm,factnm,n,m;
a=1;b=1;n=1;
printf("tedade satrhaye mosollas khayam=");scanf("%d",&m);
printf("1\n");
while(n<=m){
i=0;
while(i<=n){
j=1;
factn=1;
while(j<=n){
factn=factn*j;
j=j+1;
}
j=1;
factm=1;
while(j<=n-i){
factm=factm*j;
j=j+1;
}
j=1;
factnm=1;
while (j<=i){
factnm=factnm*j;
j=j+1;
}
poa=1;
j=0;
while ( j<n-i){
poa=poa*a;
j=j+1;
}
pob=1;
j=0;
while (j<i){
pob=pob*b;
j=j+1;
}
sum=factn/(factm*factnm)*poa*pob;
printf("%d ",sum);
i=i+1;
}
n=n+1;
printf("\n");
}
return 0;
}

راه حل این برنامه بر اساسه واقعیته خو مثلث خیامه یعنی (a+b) به توان n که در مثلث خیام
a=1,b=1 میباشد و توان هم از صفر شروع میشود که عدد به توان صفر، یکه که من اول پرینتش کردم یعنی شما باید راه حل نوشتن (a+b) به توان n رو باید بلد باشید وبقیش هم که آسونه

بانوی ایران
جمعه 04 دی 1388, 00:33 صبح
اينم به صورت ارايه دوبعديه

#include <stdio.h>
#include <conio.h>
void khayyam(int array[][100],int row)
{
int i,j;
for(i=0;i<row;i++)
{
for (j=0;j<row;j++)
{
if (j==0)
{
array[i][0]=1;
}
else if(i==j)
{
array[i][j]=1;
}
else if(j>i)
{
array[i][j]=0;
}
else
{
array[i][j]=array[i-1][j]+array[i-1][j-1];
}
}
}
}
void print(int array[][100], int row)
{
int i,j;
for (i=0;i<row;i++)
{
for(j=0;j<row;j++)
{
printf ("%4d", array[i][j]);
}
printf ("\n");
}
}
int main()
{
int n, i, j, A[100][100];
printf("enter number of row\n");
scanf ("%d", &n);
khayyam(A,n);
print(A,n);
getch();
return 0;
}




ولي كسي راهي كه من گفتم رو بلد نيست؟

qwerty11
جمعه 04 دی 1388, 03:04 صبح
سلام،
با استفاده از دو تا آرایه ی یه بعدی میشه اینکارو انجام داد. واسه ی به دست آوردن عناصر خیام توی سطر n ام فقط به عناصر آرایه توی سطر n-1 ام نیاز هست... هر دفعه عناصر سطر n-1 رو بریز تو یه آرایه ی کمکی و از اون آرایه ی کمکی عناصر سطر n ام رو به دست بیار.

البته راهی بود که فقط با استفاده از یه دونه آرایه ی یه بعدی میشد اینکارو انجام داد که من یادم نمیاد متاسفانه.

#Elahe#
جمعه 04 دی 1388, 21:24 عصر
بانوی ایران (http://barnamenevis.org/forum/member.php?u=119578) عزیز
فکر کنم اگه در قسمت بالای مثلث به جای صفرها کاراکتر فاصله تعریف میکردید بهتر میشد .

بانوی ایران
شنبه 05 دی 1388, 00:59 صبح
سلام الهه خانم
من ارايه رو به صورت intتعريف كردم و بايد توي شرطي كه چك ميكنه" i " از" j "بزرگتره يه مقداري رو انتصاب بدم به ارايه
نميشه كه spaceبزارم