سبد خرید

بستن سبد خرید

هیچ محصولی در سبد خرید نیست.

تعداد محصول: 0 کل قیمت: تومان0

کد و الگوریتم مثلث خیام پاسکال به زبان ++C

کد و الگوریتم مثلث خیام پاسکال به زبان ++C که در این آموزش مثلث خیام پاسکال و الگوریتم مثلث خیام را در اختیار شما و دانشجویان قرار می دهیم.

کد و الگوریتم مثلث خیام پاسکال به زبان ++C

مثلث خیام پاسکال چیست؟

مثلث خیام پاسکال یک آرایش مثلثی از ضرایب بسط دو جمله است. یکی از مسائل مهم برنامه نویسی، مسئله‌ مثلث خیام پاسکال است. اکنون در این مطلب، کد و الگوریتم مثلث خیام پاسکال به زبان ++C را به شما ه صورت واضح و قدم به قدم توضیح می دهیم.

روش کار:

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

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

در ابتدای کار سه متغیر n , s , temp از نوع int تعریف می کنیم:

int temp, n, s;

 

متغیر n مرحله ای است که ما میخواهیم تا آن مرحله مثلث خیام پاسکال را رسم کنیم که از کاربر دریافت میشود، متغیر s نقطه ی شروع هر مرحله از رسم مثلث در آرایه است و در آخر که متغیر temp برای نگهداری مقدار فعلی هنگام چاپ آن است.

مشخص است که در این روش نیاز به استفاده از آرایه در برنامه خود دارم زیرا قرار دادن مقادیر در خانه ها و استفاده از آن ها برای ما مهم است. همچنین برای تکرار اعمال مشابه استفاده از دستورات تکرار(حلقه ها) ضروری است.

آرایه‌ی خود را با نام nums از نوع int و مقدار اولیه ی ۰ تعریف میکنیم و اندازه ی آرایه را یک واحد بیشتر از n درنظر می گیریم:

int nums [n+1]={0};

 

این الگوریتم، روش کار به این صورت است که با هر بار اجرای حلقه یک مرحله از مثلث خیام پاسکال چاپ میشود. در مرحله ی اول خانه‌ی شروع را خانه‌ی n – 1 در نظر میگیریم سپس برای چاپ مقدار هر خانه مقدار فعلی را با مقدار خانه ی بعد جمع کرده و پس از چاپ درون خانه ی قبلی می ریزیم و پس از اجرای هر مرحله نقطه ی شروع مرحله ی بعد را (همانطور که در شکل مشخص است) یک خانه به عقب می بریم.

s=n-1;
 nums[s] = 1;
 for( int i=0; i<n; i++)
 {
    cout<<"\n";
    for( int j=0; j<s; j++ )
     cout<<"  ";
    for( int j=0; j<=i; j++){
     temp = nums[s+j] + nums[s+j+1] ;
     cout<<temp<<setw(4);
     Nums[s+j] = temp;
    }
    s--;
 }

 

در کد بالا بعدا از مشخص کردن خانه ی شروع و دادن مقدار ۱ به آن، نوبت به چاپ مثلث میرسد.کار حلقه ی اول شمارش مراحل رسم مثلث و همچنین رفتن به خط بعد، پس از اتمام هر مرحله است.حلقه ی داخلی اول فاصله های قبل از چاپ اعداد را چاپ میکند و در هر مرحله یک واحد کمتر اجرا میشود.حلقه ی داخلی دوم که حلقه ی اصلی ماست انجام عملیات کل الگوریتم را بر عهده دارد بدین صورت که برای چاپ هر یک از ضرایب مقدار خانه ی فعلی را با مقدار خانه ی بعد جمع کرده و درون متغیر temp میریزد و پس از چاپ آن مقدار را درون خانه ی فعلی میریزد تا برای مرحله ی بعد ار آن استفاده کند. این حلقه پس از هر بار اجرای کامل برای دور بعد یک واحد بیشتر اجرا میشود و تکرار آن به گام حلقه ی اصلی بستگی دارد.در آخر هم از مقدار s یک واحد کم میشود تا شروع مرحله ی قبل از یک خانه قبل صورت گیرد.

نکته:
تابع setw() که در کد ها به کار رفته میان ضرایب هر سطر فاصله ی یکسان قرار میدهد تا مثلث به شکلی زیبا نمایش داده شود.همچنین برای استفاده از این تابع نیاز به اضافه کردن کتابخانه ی iomanip داریم.

کد کامل این روش به صورت زیر می باشد:

کد مثلث خیام پاسکال (شماره یک):

#include <iostream>
#include <iomanip>
using namespace std;
 
int main(int argc, char** argv) {
    int temp, n, s;
    cout<<"enter khayam number : ";
    cin>>n;
    int nums [n+1]={0};
    s=n-1;
    nums[s] = 1;
    for( int i=0; i<n; i++){
        cout<<"\n";
        for( int j=0; j<s; j++ )
         	cout<<"  ";
        for( int j=0; j<=i; j++){
            temp = nums[s+j] + nums[s+j+1];
            cout<<temp<<setw(4);
            nums[s+j] = temp;
        }
    	s--;
    }
    return 0;
}

 

و خروجی آن به شکل زیر خواهد بود:

 


چاپ مثلث خیام پاسکال با استفاده از مفهوم جایگشتی (روش دوم)

در این روش برای بدست آوردن ضرایب نیاز به داشتن مقدار ضرایب مرحله ی قبل نیست بلکه مقدار هر ضریب بسته به جایگاه آن در مثلث خیام است. طبق قضیه ضرایب در مثلث خیام پاسکال به صورت زیر بدست می آید:

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

long Fact(int num){
    int fact = 1;
    for(int i = 1 ; i<=num ; i++)
    fact *= i; 
    return fact;
}

 

استفاده از حلقه ها کاملا مشابه به حلقه های روش قبل می باشد و کد این قسمت به صورت زیر است:

for(int i = 0 ; i<=n-1 ; i++){
    for( int j=0; j<n-i; j++ )
         cout<<"  ";
    for(int j = 0 ; j<=i ; j++){
        if(j == 0 || j==i)
        nums = 1;
        else
        nums = Fact(i) / (Fact(j) * Fact(i-j));
        cout << setw(4) << nums;
    }
cout << endl;
}

 

قسمت اصلی این الگوریتم نیز مانند روش قبل حلقه ی درونی ثانویه است. در این حلقه چک میکنیم که اگر در خانه اول یا آخر مرحله بودیم مقدار یک را چاپ کنید در غیر اون صورت با استفاده از تابع فاکتوریل و مقادیر i , j فرمول ترکیب را پیاده سازی کرده و آن را چاپ میکنیم. این روش با فاکتوریل نوشته شده اشت.

کد مثلث خیام پاسکال (شماره دو):

#include <iostream>
#include <iomanip>
using namespace std;
 
long Fact(int num){
    int fact = 1;
    for(int i = 1 ; i<=num ; i++)
    fact *= i; 
    return fact;
}
 
int main(int argc, char** argv) {
    int nums, n;
    cout << "enter khayam number : ";
    cin >> n;
    for(int i = 0 ; i<=n-1 ; i++){
        for( int j=0; j<n-i; j++ )
         	cout<<"  ";
        for(int j = 0 ; j<=i ; j++){
            if(j == 0 || j==i)
            nums = 1;
            else
            nums = Fact(i) / (Fact(j) * Fact(i-j));
            cout << setw(4) << nums;
        }
    cout << endl;
    }
    return 0;
}

 

موفق و پیروز باشید.

پست های مشابه

19تیر 1400

CSS چیست و نقش آن در طراحی وب سایت که در این پست، طراحی و ساخت سایت را توضیح می دهیم، پس با ما همراه باشید. امروزه نرم افزارهایی برای طراحی وب سایت پدید آمده است که این امکان را می دهد که حتی بدون نیاز به دانش برنامه نویسی وب سایتی تولید و توسعه […]

265

0

2اسفند 1399

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

3402

2

3بهمن 1399

این مطلب در باره‌ی محاسبه واریانس و میانگین با زبان ++C نوشته شده است که سورس کد و فایل پروژه را در اختیار شما دوستان عزیز قرار داده ایم.

2385

0

دیدگاه و پرسش


Shervin

27 فروردین 1401

نسبتا مقدمه و زایدگویی قابل تحملی داشت، سی پلاس پلاس رو باید بصورت حرفه ای در مبانی و آماتور در اجرایی؛ بدونی، هندسه تحلیلی رو در حد دبیرستان بیاد داشته باشی…بعدش میتونم تشکر کنم و بله ؛کامل ،مختصر و کافی در حین سادگی ، تعریف تشریح و تدریس شد.موفق باشید به کارم اومد ممنون

    شاه‌کد

    6 اردیبهشت 1401

    سلام بسیار سپاسگزارم