رفتن به مطلب
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal

عضویت ویژه طلایی گارد ایران با تخفیف 50%

برای عضویت کلیک کنید

Bijan

آموزش برنامه نویسی فاکتوریل با تابع بازگشتی و حلقه

Recommended Posts

سلام دوستان امروز با آموزش یک برنامه کاربردی مخصوصا برای دانش آموزان عزیز همراهتون هستم


امیدوارم که لذت ببرید


 


موارد لازم :


1) برنامه ی Code Blocks و یا هز IDE دیگر برای برنامه نویسی به زبان C++


2) آشنایی اجمالی با حلقه ها در برنامه نویسی ( مهم نیست با چه زیان برنامه نویسی )


3) آشنایی اجمالی با توابع  ( مهم نیست با چه زیان برنامه نویسی )


 


 


با ادامه ی آموزش در پست بعدی همراه باشید


به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

آموزش برنامه نویسی فاکتوریل با حلقه ی While ( نوع آسان برنامه )

 

 

خب دوستان همونطور که میبینید من ترجیه دادم آموزشمون رو با حلقه ی While شروع کنم شما میتونید از هر نوع حلقه ی دیگه ای که دوست دارید استفاده کنید چون اساس کار همشون یکیه و فقط ورودی هاشون باهم فرق داره پس توی انتخاب نوع حلقه شما مختارید اما چون حلقه While از نطر من ساده ترین حلقه برای یادگیریه بنابراین ترجیه دادم برای قسمت آسان برنامه از این حلقه استفاده کنم

 

خب قبل از هرچیزی IDE خودتون رو اجرا کنید و یک پروژه ی جدید ایجاد کنید

 

من در این آموزش از Code Blocks استفاده کردم اما همونطور که گفتم شما میتونید از هر IDE دیگری استفاده کنید محل کدی هست که قراره اجرا بشه

 

اگر با این بخش  و بخش ایجاد پروژه مشکلی دارید و یا سوالی دارید به این تاپیک مراجعه کنید

آموزش کامل همراه با عکس توسط بنده داده شده امیدوارم مشکلتون حل یشه

خب حالا که پروژه ی جدید ایجاد کردید میریم سراغ ادامه ی آموزش

 

اساس کار فاکتوریل خیلی ساده است

برای کسانی که نمیدونن فاکتوریل چی هست یه توضیح کوتاه اما کامل میدم و بعد میریم سراغ بخش بعدی

 

 

خب فاکتوریل درواقع یک عملیات بسیار ساده است مانند ضرب و جمع و درواقع ترکیبی از این دو عملیات ریاضی است

فاکتوریل یک جمله ی عمومی داره که به صورت زیر تعریف میشه :

Fact n = n * ( n - 1 ) * ( n - 2 ) * ( n - 3 ) * ... * 3 * 2 * 1

توضیح فارسیش به این صورته که فاکتوریل هر عدد ، برابرِ حاصل ضرب اون عدد در تمام اعداد طبیعی قبل از خودش است

 

برای اینکه بهتر متوجه بشید فاکتوریل چند عدد رو براتون حساب میکنم :

Fact 1 = 1

Fact 2 = 2 * 1 = 2

Fact 5 = 5 * 4 * 3 * 2 * 1 = 120

Fact 100 = 100 * 99 * 98 * 97 * ... * 4 * 3 * 2 * 1

 

توقع نداشته باشید که بتونم فاکتوریل 100 رو حساب کنم خیلی عدد بزرگی میشه خیلی زیاد ولی اشکال نداره توی آموزش های بعدی بهتون آموزش میدم چجوری حتی اعدادی با تعداد ارقام بالا مثل اعداد دویست رقمی رو بتونید به کاربر نشون بدید و بهتون آموزش میدم که چجوری میتونید فاکوریل اعداد بزرگ رو هم حساب کنید پس منتظر آموزش های بعدی باشید

دلیلی که توی این آموزش این کار رو انجام نمیدم به دلیل اینه که این آموزش بیشتر جنبه ی آشنایی با حلقه ها و توابع رو داره و واقعا اینجا جاش نیست که بخوام این آموزش ها رو قرار بدم

اما حتما در آینده این کار رو انجام میدم

 

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

ولی حالا یه سوال پیش میاد : چجوری این برنامه رو بنویسیم؟

پس میریم سراغ کد زنی

 

من اول کد کامل رو برای شما مینویسم بعدش توضیح میدم که هر خط چه کاری انحام میده

 

 کد:

 

 

 

#include <iostream>
#include <conio.h>
using namespace std;
main()
{
int n;
cout << "Enter Your Number : ";
cin >> n;
 
int temp = n;
int fact = 1;
 
while ( temp >= 1 )
{
fact *= temp;
temp--;
}
 
cout << "The Factorial of " << n << " is " << fact << endl;
 
    getch();
}
 

 

 

خب میریم سراغ بررسی خط به خط :

 

1) کتابخونه ی iostream رو به برنامه معرفی میکنیم تا بتونیم از بعضی از توابع اسفاده کنیم

2) کتابخونه ی conio رو به برنامه معرفی میکنیم تا بتونیم از بعضی از توابع استفاده کنیم

     *این کتابخنه فقط برای اون getch آخر استفاده شده اگر نخواستید از getch ستفده کنید میتونید این کتابخونه رو هم از کدتون حذف کنید

3) برای اینکه در کدزنی راحت تر باشیم این خط رو اضافه میکنییم که بهمون این امکان رو میده که دیگه لازم نباشه برای بعضی از توابعی که میخوایم استفاده کنیم کلاسش رو قبلش بنویسیم مثلا برای cin و cout

4) تابع اصلی که به هنگام اجرای برنامه اولین تابعی که فراخوانی میشه این تابع است و هرکاری که توی برنامه نیازه انجام بشه باید توی این تابع نوشته بشه در عیر اینصورت اجرا نمیشه

5)

6) یه متغیر به اسم n از نوع int یا همون عدد صحیح ایجاد کردیم که درواقع عدد مدنظر کاربر رو ازش میگیره

7) به خروجی یک عبارت میفرستیم مبنی بر اینکه عدد مورد نظرتو نرو وارد کنید

8) عددی که کاربر وارد میکنه رو در n ذخیره میکنیم

     *حتما به جهت قرار گرفتن >> و همینطور << دقت کنید که در cout و cin فرق داره و اگر اشتباه وارد کنید با ارور مواجه میشید

9)

10) یک متغیر جدید به اسم temp ایجاد میکنیم و مقدار n رو بهش اختصاص میدیم و به جای اینکه از این به بعد n رو تغییر بدیم temp رو تغییر مییدیم برای اینکه بعدا به مقدار n نیاز داریم

     *توجه کنید که اگر مقدار temp از این به بعد عوض بشه هیچ تغییر در متغیر n بوجود نمیاد

11) یک متغیر جدید تعریف میکنیم که مقدار فاکتوریل عدد رو دراون ذخیره میکنیم

12) یک حلقه ی جدید ایجاد میکنیم مبنی بر این که تا وقتی که مقدار درون متغیر temp بزرگتر ویا مساوی یک باشه دستوارت درون {} دوباره و دوباره اجرا بشن

13) عدد درون temp رو ضربدر عدد درون fatc میکنیم و بعد مقدار حاصل رو به جای مقدار فعلی fact قرار میدیم

     *مثلا اگر عددی که کاربر وارد کرده 3 باشه در ای تکرار حلقه ، سه در یک ضرب میشه و در fact قرار داده میشه ( یک هم که همون مقدار اولیه ی fact هست )

     *دقت کنید که با اجرای بعدی حلقه دیگر مقدار fact ، یک نیست بلکه مقدار جدید آن است که اگر عدد وارد کرده ی کاربر 3 بوده باشد اینبار مقدار فعلی fatc ، سه میشود

14) عدد داخل temp را به مقدار یک واحد کم میکند

     *هرموقع که عدد داخل temp به صفر رسید از حلقه خارح میشود در غیر این صورت مراحل 13 و 14 دوباره تکرار میشوند

15)

16) در خروجی یک متن چاپ میکند که میگوید مقدار فاکتوریل عدد مورد نظر چند است

     *دقت داشته باشد که متنی که درون "" قرار دارد دقیقا به صورت متنی و همان صورت در خروجی به نمایش در می آید اما اگر "" را در دو طرف آن نگذاریم مقداری که درون متغیر به آن نام است به خروجی فرستاده میشود

     *برای درک بهتر در آخر این پست یک مثال ساده مبزنم

17) تا زمانی که کاربر دکمه ای را فشار ندهد از برنامه خارج نمیشود

     *این کار خیلی مهمه اگر این کار رو نکنید فرصت کافی پیدا نمیکنید تا نتیجه ی کارتون رو ببینید

 

 

مثال برای خط شماره ی 16 :

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

cout << "Fact";

خروجی به این شکل است :

Fact

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

cout << Fact;

خروجی مقدرای است که در متغیر Fact ذخیره شده است

 

خب آموزش فاکتوریل با حلقه تمام شد

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

1) فرستادن خروجی

2) خواندن ورودی

3) حلقه

4) متغیرها

5) تخصیص یک عدد به یک متغیر

6) تخصیص عدد داخل یک متغیر به یک متغیر دیگر

 

 

 

خب امیدوارم لذت برده باشید

در پست بعدی کد فاکتوریل رو قرار میدم اما ایندفعه با حلقه ی for

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

آموزش برنامه نویسی فاکتوریل با حلقه ی For ( نوع متوسط برنامه )

 

 

خب چون آموزش قبلی بسیار کامل داده شد و کد while با کد for فقط در یک چیز تفاوت دارن پس فقط همان یک چیز را توضیح میدم

اگر احساس کردید در جایی دچار مشکل شدید حتما مطرح کنید ،خوشحال میشم کمکی کرده باشم

در پست قبلی به صورت کامل فاکتوریل توضیح داده شده حتما یک بار اول اون پست رو بخونید

 

 

خب میریم سراغ کد نویسی

ابتدا کد رو براتون مینوسیم

بعدش یه توضیح راجع به تفاوت حلقه ی For با While میدم

 

کد :

#include <iostream>
#include <conio.h>
using namespace std;
main()
{
    int n;
    cout << "Enter Your Number : ";
    cin >> n;
 
    int fact = 1;
 
    for ( int temp = n ; temp >= 1 ; temp-- )
    {
        fact *= temp;
    }
 
    cout << "The Factorial of " << n << " is " << fact << endl;
 
getch();
}
 
خب همونطور که میبینید دو خط از کد ما کم شد
دو خطی که کم شدن یکی int temp = n بود که قبل از For بود
یکی دیگه هم temp-- بود که درون حلقه بود و آخرین خط حلقه بود
 
خب اگر کدها رو با هم مقایسه میکنید مبینید که یه اتفاق جالب افتاده
درواقع دوخطی که حذف شدن به ورودی های for اضافه شدن
پس تفاوت for با while در اینه که به جای اینکه در بدنه ی حلقه متغیر هر بار در متغیر یک تغییری بوجود بیاریم ،در ورودی تابع این تغییر رو لحاظ میکنیم همچنین تعریف و مقدار اولیه ی متغیرمون رو به جای اینکه قبل از حلقه انجام بدیم در خود حلقه اینکار رو انجام میدیم
مزیّت حلقه for نسبت به while در اینه که تعداد خط های کدتون کمتر میشه و اینکه نیازی نیست که در کدتون بپرخید تا تشخیص بدید متغیر بررسیتون کدومه بلکه با یک نگاه میتونید تشخیص بدید
 
البته حتما الان میگید دیگه دو خط کد چیه که به خاطرش یه حلقه ساختن؟
خب چون مثال ما ساده است تنها دو خط کم شد اما در پروژه های بزرگتر که چندین حلقه و همینطور حلقه های تو در تو وجود داره گاهی وقت ها تعداد خط های بسیار زیادی کم میشه
و البته این رو هم بگم چون اینجا متغیر مورد بررسی ما یعنی همون temp فقط همین یک متغیر بود ، فقط دو خط از کد ما کم شد
درصورتی که بعدا یاد میگیرید چجوری میتونید به جای یک متغیر بررسی ،از چند متغیر استفاده کنید که به ازای هر کدوم از اونها دو خط از کدتون کم میشه
مثلا در پروژه های دیگه شاید تعداد متغیر ها به ده عدد هم برسه که خودش یعنی جلوگیری از سردرگمی در پیدا کردنشون و بیست خط کد کمتر
 
امیدوارم لذت برده باشید
در ادامه با ما باشید تا ببینید چجوری در تعداد خط های بسیار کمتر هم میتونید از تابع فاکتوریل استفاده کنید
منتطر فاکتوریل با تابع بازگستی باشید

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

آموزش برنامه نویسی فاکتوریل با تابع بازگشتی ( نوع سخت برنامه )

 

خب بالاخره رسیدیم سر قسمت سخت ماجرا

 

کد رو براتون مینویسم اگر سوالی داشتید حتما بپرسید

 

#include <iostream>

#include <conio.h>
using namespace std;
 
int factorial ( int number );
 
main()
{
    int n;
    cout << "Enter Your Number : ";
    cin >> n;
 
    cout << "The Factorial of " << n << " is " << factorial(n) << endl;
 
getch();
}
 
int factorial ( int number )
{
    if ( number == 1 )
        return 1;
    return number * factorial( number - 1 );
}
 
تعداد خط های کدمون زیاد فرقی نکرد اما این آموزش خیلی برای یادگیری تابع بازگشتی به دردتون میخوره
 
خب میبینید که قبل از main یک تابع جدید به اسم factorial تعریف کردیم و این فقط تعریفش هست یعنی هیچی کدی فعلا نداره ، همونطور که میبیند اول تعریف تابع نوشتیم int این یعنی اینکه خروجی تابع از نوع عدد صحیحه و میبینید که داخل پرانتز ها نوشتیم int number یعنی تابه حتما باید یک عدد به عنوان ورودی بگیره که از نوع عدد صحیح هست
 
داخل main هم که حلقه رو حذف کردیم همینطور دو متغیر temp , fact رو حذف کردیم چون بهشون احتیاجی نداریم
و در خروجی به جای fact ، تابع factorial رو صدا زدیم و مقدار خروجی ای که این تابع به ما میده رو به عنوان فاکتوریل عدد n به کاربر نشون میدیم
 
بعد از main ما بدنه ی تابع factorial رو نوشتیم
به این شکل که اگر عددی که به عنوان ورودی به تابع فرستاده شده یک بود ، عدد یک رو به عنوان خروجی میفرستیم و دیگر به سراغ ادامه ی کدها نمیرویم
اصطلاحا به این خط میگی شرط پایان تابع
اگر ورودی ما یک نبود ، میریم سراغ ادامه ی کار جایی که حاصل ضرب ورودی در فاکتوریل عدد قبل از خودش رو به خروجی میفرستیم
اگر کمی به تعریف فاکتوریل در ریاضی نگاه کنید میبینید که درواقع همین کار رو میکنه ، هربار عدد رو در فاکتوریل اعداد قبل از خودش ضرب میکنه
خب پس اینجا داخل تابع factorial دوباره خودش رو صدا زدیم اما ایندفعه ورودیمون رو یک واحد کاهش دادیم
این کار انقدر ادامه پیدا میکنه تا مقدار ورودی یک بشه و به شرط پایان حلقه برسیم که بالاخره یک عدد به عنوان خروجی نمایش داده میشه
و تمام
 
معمولا درک تابع بازگشتی برای دانش آموزان خیلی سخته بنابراین اگر مشکلی داشتید حتما مطرح کنید ،خوشحال میشم که کمکتون کنم
اگر دوست داشتید بگید تا مثال های بیشتر و پرکاربرد تری از تابع بازگشتی براتون بزنم

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری

درباره ی ما

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