# Native Code > برنامه نویسی با C > برنامه نویسی با زبان C و ++C >  مثلث خیام ( کمک به حل مسئله)

## x.coder

با عرض سلام و ادب خدمت همه ی بچه های گل جامعه برنامه نویس :قلب: 
من تو مسئله ی مثلث خیام مشکل پیدا کردم اگه میشه کمکم کنید
* - برنامه ای را بنویسید که 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

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

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

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

----------


## tdkhakpur

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

#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

مثلث خیام بدون استفاده از آرایه و با استفاده از مفهوم جایگشتی: 



#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

مبنای اصلی الگوریتم فوق:

----------


## sajjadrad

مونش در هفت سطر:




رابطه ریاضی بین اعداد:(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

پسورد:www.myprograms.blogsky.com 

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

----------


## بانوی ایران

سلام دوستان
من مثلث خيام رو با ماتريس پايين مثلثي نوشتم ولي
اگر بخوايم با اريه هاي يه بعدي بنويسيم بايد چي كار كنيم
من به ذهنم رسيده كه مثلا وقتي كاربر وارد ميكنه 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

اینم من نوشتم با یه راه حل دیگه (بدون تابع)
مال خیلی وقت پیشه و خیلی مبتدیانه نوشته شده 
نه از آرایه نه از تابع و نه از راه حل توابع  بازگشتی در نوشتن این برنامه استفاده شده!!!!
#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 رو باید بلد باشید وبقیش هم که آسونه

----------


## بانوی ایران

اينم به صورت ارايه دوبعديه
#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

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

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

----------


## #Elahe#

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

----------


## بانوی ایران

سلام الهه خانم
من ارايه رو به صورت intتعريف كردم و بايد توي شرطي كه چك ميكنه" i " از" j "بزرگتره يه مقداري رو انتصاب بدم به ارايه
نميشه كه spaceبزارم

----------

