1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

شروع موضوع توسط minaaa ‏10/11/11 در انجمن C #C++

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]دستورات ورودی و خروجی[/h]
    دستورات ورودی و خروجی
    واحد ورودی که ما در اينجا استفاده می کنيم صفحه کليد می باشد و واحد خروجی مورد استفاده نيز صفحه نمايش خواهد بود.


    برای دريافت اطلاعات از صفحه کليد ، زبان ++C دستوری به نام cin را در اختيار ما قرار داده است، و برای ارسال اطلاعات به صفحه نمايش دستور cout موجود می باشد. توسط اين دو دستور شما می توانيد با نمايش اطلاعات بر روی صفحه نمايش و دريافت اطلاعات از صفحه کليد با کاربری که از برنامه شما استفاده می کند، در ارتباط باشيد.


    دستور خروجی cout
    دستور cout همراه علامت >> به کار می رود.
    کد:

    cout << "This is a test";

    دستور فوق عبارت This is a test را بر روی صفحه نمايش چاپ می کند.
    کد:

    cout << 5120;

    دستور فوق عدد 5120 را بر روی صفحه نمايش ظاهر می سازد.
    کد:

    cout << x;

    دستور فوق محتويات متغير x را به صفحه نمايش می فرستد.


    علامت >> با نام عملگر درج شناخته می شود و اطلاعاتی که بعد از اين علامت قرار می گيرند به واحد خروجی منتقل می شوند. در مثال های فوق يک عبارت رشته ای (This is a test) يک عدد (5120) و يک متغير (x) به واحد خروجی ارسال شدند. توجه داشته باشيد که در اولين مثال عبارت This is a test بين دو علامت (") قرار گرفت ، چون اين عبارت حاوی رشته ای از حروف می باشد؛ هرگاه که بخواهيم رشته ای از حروف را به کار ببريم بايد آنها را بين دو علامت (") قرار دهيم تا با نام متغيرها به اشتباه گرفته نشوند.

    به عنوان مثال، دستور زير:
    کد:

    cout << " Hello";

    عبارت Hello را بر روی صفحه نمايش ظاهر می سازد ولی دستور زير:
    کد:

    cout << Hello;

    محتويات متغيری با نام Hello را بر روی صفحه نمايش چاپ می کند.
    عملگر درج ممکن است بيش از يک بار در يک جمله به کار رود،

    به عنوان مثال دستور زير:
    کد:

    cout << "Hello," << "I am" << "new in C++";

    پيغام ++Hello, I am new in C را بر روی صفحه نمايش نشان می دهد.
    تکرار استفاده از عملگر درج در يک دستور به ما اين امکان را می دهد که ترکيبی از متغير و رشته حروف را در کنار هم استفاده کنيم.

    کد:

    cout << "Hello, my code is" << code ​
    << "and I am" << age << "years old.";​

    به عنوان مثال دستور فوق با فرض اينکه متغير code حاوی عدد 116223 و متغير age حاوی عدد 16 باشد عبارت زير را در صفحه نمايش ظاهر می سازد:
    Hello, my code is 116223 and I am 16 years old.

    توجه داشته باشيد که دستور cout عبارات را به صورت خودکار به خط بعد منتقل نمی کند، به عنوان مثال دستورهای زير:

    کد:

    cout << "This is a text.";​
    cout << "This is another text.";​

    علارقم اينکه از دستور cout در دو خط استفاده شده است، به صورت زير در صفحه نمايش نشان داده خواهد شد:
    This is a text. This is another text.

    برای اينکه عبارتی را در چند خط نمايش دهيم، برای انتقال به هر خط جديد از علامت n\ استفاده می کنيم. به عنوان مثال دستورات زير:

    کد:

    cout << "First sentence.\n";​
    cout << "Second sentence.\n Third sentence.";​

    به شکل زير در صفحه نمايش ديده خواهد شد:
    First sentence.
    Second sentence.
    Third sentence.

    علاوه بر علامت n\ می توان از دستور endl برای انتقال به خط جديد استفاده کرد به عنوان مثال دستورات :


    c کد:

    out << "First sentence." << endl;
    کد:

    cout << "Second sentence." << endl;​

    در صفحه نمايش به صورت زير ديده می شوند:
    First sentence.
    Second sentence.



    دستور ورودی cin
    دستور cin همراه علامت << به کار می رود.

    کد:

    int age;​
    cin >> age;​


    دستورات فوق ابتدا فضايی در حافظه برای متغير
    age در نظر می گيرند، سپس برنامه منتظر وارد کردن عددی از صفحه کليد می ماند تا عدد وارد شده را در متغير age قرار دهد. cin هنگامی قادر به دريافت اطلاعت از صفحه کليد خواهد بود که، کليد Enter بر روی صفحه کليد فشرده شود. به عنوان مثال اگر بخواهيم عدد 16 در متغير age قرار گيرد ابتدا عدد 16 را تايپ کرده سپس دکمه Enter را فشار می دهيم.
    علامت >> با نام عملگر استخراج شناخته می شود، و اطلاعاتی که از واحد ورودی دريافت می شود در متغيری که بعد از اين علامت می باشد، قرار می گيرند. ضمناً شما می توانيد توسط يک دستور cin بيش از يک متغير را مقدار دهی کنيد.


    به عنوان مثال دستورات زير معادل يکديگر می باشند:

    کد:

    cin >> a >> b;​
    cin >> a;​
    cin >> b;​

    گردآورنده :طه - TAHA

     
    2 نفر از این پست تشکر کرده اند.
  2. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]برنامه ساده چاپ و بررسی اجزای آن[/h]
    برنامه چاپ يک متن
    در مباحث قبلی با مفاهيم حافظه و انواع داده، اعمال محاسباتی، عبارات منطقی ودستورات ورودی وخروجی آشنا شديم. با اين مقدمات می توان نوشتن اولين برنامه را آغاز کرد و با اين برنامه نحوه اجرا و ساير جزئيات را مورد بررسی قرار خواهيم داد.

    کد:

    //first program in C++​
    #include ​
    int main ()​
    {​
    cout << "Hello, This is a C++ program.";​
    return 0;​
    }​

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

    پس از اين که برنامه را نوشتيد يک بار ديگر آن را بررسی کنيد تا مطمئن شويد اشتباهی ندارد، سپس دکمه Ctrl را از صفحه کليد فشار داده و آن را نگه داريد ، سپس همزمان دکمه F9 از صفحه کليد را فشار دهيد( Ctrl + F9). با اين کار برنامه اجرا خواهد شد.
    همانطور که ديديد صفحه نمايش به سرعت دوباره به صفحه ويرايشگر زبان ++
    C بر می گردد. برای اينکه خروجی برنامه خود را ببينيد دکمه Alt را همراه با F5 را فشار دهيد (Alt + F5) . با اين کار به محيط خروجی برنامه خواهيد رفت و پيغام:
    Hello, This is a C++ program.

    را در يک صفحه سياه خواهيد ديد. تبريک می گوئيم ، شما اولين برنامه خود با زبان ++C را با موفقيت به مرحله اجرا گذاشتيد؛ به همين سادگی.
    اگر به ياد داشته باشيد در مبحث معرفی ساختاری زبان ++C روال رسيدن به مرحله اجرا را شش مرحله ذکر کرديم، در اينجا مرحله اول را که نوشتن برنامه در ويرايشگر بود، شما به اجرا گذاشتيد و با فشار کليد (Ctrl + F9) مراحل دوم تا ششم به صورت خودکار انجام گرفت، پس شش مرحله ذکر شده همچنان برقرار است و ما نيز نيازی نداريم خود را با جزئيات مراحل دوم تا ششم درگير کنيم.
    پس برای اجرای هر برنامه کافی است برنامه را در محيط ويرايشگر زبان
    C++ بنويسيم سپس دکمه (Ctrl + F9) را فشار دهيم.
    برنامه ای که ما در اينجا نوشتيم يکی از ساده ترين برنامه هايی است که می توانيم به زبان ++
    C بنويسيم ، ضمن اينکه شامل دستوراتی است که تقريباً هر برنامه ++Cبه آنها نياز دارد. در اينجا به بررسی تک به تک دستورات برنامه فوق می پردازيم.
    کد:

    //first program in C++​

    دستور فوق شامل توضيحات می باشد و تأثيری بر نحوه اجرای برنامه نخواهد داشت. هر نوشته ای که بعد از علامت // در زبان ++C قرار گيرد به عنوان توضيحات در نظر گرفته می شود. توضيحی که در اينجا مورد استفاده قرار گرفته به ما می گويد که اين اولين برنامه ما به زبان ++C می باشد. علاوه بر علامت // ، توضيحات را می توان بين */ و /* قرار داد. از شيوه جديد هنگامی استفاده می کنيم که توضيحات ما بيش از يک خط باشد.
    کد:

    /* This is a comment line.
    کد:

    This is another comment line. */ ​



    قرار دادن دستورات فوق در برنامه تأثيری بر خروجی ندارد و تنها توضيحاتی برای فهم بهتر برنامه می باشد.
    کد:

    #include

    خطوطی که با علامت پوند # شروع می شوند دستوراتی برای پيش پردازنده می باشند. اين دستورات جزء خطوط اجرايی برنامه نمی باشند و نشانه هايی برای کامپايلر می باشند. در اينجا دستور فوق به پيش پردازنده می گويد که تعدادی از دستورات مورد استفاده در اين برنامه در فايل کتابخانه ای iostream.h قرار دارند. در اين مورد خاص فايل iostream.h شامل دستورات ورودی و خروجی ( مانند cin و cout) می باشد.
    کد:

    int main( )

    اين دستور شروع بدنه اصلی برنامه را مشخص می کند. تابع main اولين جايی از برنامه است که زبان ++C شروع به اجرای آن می کند. فرقی ندارد که تابع main را در کجا مورد استفاده قرار دهيم. ابتدا وسط يا انتهای کدهای برنامه نويسی، در هر کجا که تابع main را قرار دهيم ، زبان ++C ابتدا به اين تابع مراجعه می کند. بعد از کلمه main يک جفت پرانتز ( ) قرار می دهيم، چون main يک تابع است. در زبان ++C تمام توابع دارای يک جفت پرانتز می باشند( در مبحث توابع به طور مفصل در باره نحوه ايجاد تابع و آرگومانها و ... صحبت خواهيم کرد). محتويات تابع main همانطور که در برنامه ديديد بين دو علامت { } قرار می گيرند.
    کد:

    cout << "Hello, This is a C++ program.";

    اين دستور کار اصلی مورد نظر در اين برنامه را که چاپ عبارت داخل کوتيشن " " بر روی صفحه نمايش است را انجام می دهد. همانطور که گفته شد هنگامی که می خواهيم از دستورات ورودی و خروجی استفاده کنيم بايد در ابتدای برنامه از دستور #include استفاده کنيم. توجه داشته باشيد که بعد از هر دستور زبان ++C ملزم به استفاده از علامت ( ; ) می باشيم.
    کد:

    return 0;

    اين دستور باعث می شود که تابع main به پايان برسد و عدد صفر را به عنوان خروجی تابع بر می گرداند. اين مرسوم ترين روش برای پايان دادن به برنامه بدون دريافت هيچگونه پيغام خطا می باشد. همانطور که در برنامه های بعدی خواهيد ديد، تقريباً همه برنامه های زبان ++C با دستوری مشابه دستور فوق به پايان می رسند.


    نکته: بهتر است هر دستور زبان ++c را در يک خط جداگانه بنويسيم. البته در انجام اينکار الزامی نداريم ولی برای خوانايی بيشتر برنامه توصيه می شود از اين شيوه استفاده کنيد.


    طه - TAHA: گردآورنده
     
    یک شخص از این تشکر کرد.
  3. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]برنامه جمع دو عدد[/h]
    برنامه جمع دو عدد
    در مبحث قبلی برنامه ای را نوشتيم که در آن تنها از دستور cout استفاده شده بود و رشته ای را بر روی صفحه نمايش چاپ می کرد. برای اينکه با نحوه کاربرد متغيرها و شيوه مقدار دهی به آنها و نيز دستور cin آشنا شويد، در اينجا برنامه جديدی را می نويسيم که دو عدد را از ورودی دريافت کرده و سپس آنها را جمع نموده و حاصل را در خروجی نمايش می دهد. کد:

    // Addition program.​
    #include ​
    // function main begins program execution​
    int main()​
    {​
    int integer1; // first number to be input by user​
    int integer2; // second number to be input by user​
    int sum; // variable in which sum will be stored​
    cout << "Enter first integer\n"; // prompt​
    cin >> integer1; // read an integer​
    cout << "Enter second integer\n"; // prompt​
    cin >> integer2; // read an integer​
    sum = integer1 + integer2; //assignment result to sum​
    cout << "Sum is " << sum << endl; // print sum​
    return 0; // indicate that program ended successfully​
    } // end function main​

    همانطور که در اين برنامه نيز می بينيد، تعدادی از دستورات برنامه قبلی تکرار شده اند. در اينجا به بررسی و توضيح دستورات جديد می پردازيم: کد:

    int integer1; // first number to be input by user​
    int integer2; // second number to be input by user​
    int sum; // variable in which sum will be stored​

    سه دستور فوق وظيفه تخصيص حافظه به سه متغير integer1 و integer2 و sum از نوع عدد صحيح را دارند. در ضمن به جای استفاده از سه دستور فوق می توانستيم از دستور زير نيز استفاده کنيم:
    کد:

    int integer1, integer2, sum;

    نکته :
    ·بعضی از برنامه نويسان ترجيح می دهند که هر متغير را در يک خط تعريف کنند و توضيحات لازم را در جلوی آن بنويسند.
    ·متغير را می توان در هر جايی از برنامه تعريف کرد، ولی حتماً اين کار بايد قبل از اولين استفاده از متغير صورت گيرد، به عنوان مثال برنامه فوق را می توان به صورت زير نوشت: کد:

    ·#include ​
    ·​
    ·int main()​
    ·{​
    · cout << "Enter first integer\n";​
    ·​
    · int integer1; ​
    · cin >> integer1;​
    ·​
    · cout << "Enter second integer\n";​
    ·​
    · int integer2;​
    · cin >> integer2;​
    ·​
    · int sum;​
    · sum = integer1 + integer2;​
    ·​
    · cout << "Sum is " << sum << endl;​
    ·​
    · return 0;​
    ·}​

    ·اگر تعريف متغير را در بين دستورات اجرايی برنامه انجام می دهيد، يک خط خالی قبل از آن بگذاريد تا تعريف متغير مشخص باشد. اينکار به وضوح برنامه کمک می کند.
    ·اگر تعريف متغيرها را در ابتدای برنامه انجام می دهد، يک خط خالی بعد از آنها بگذاريد تا از دستورات اجرايی جدا شوند. اينکار نيز به وضوح برنامه و سهولت اشکال زدايی کمک می کند.
    کد:

    cout << "Enter first integer \n";

    دستور فوق رشته Enter first integer را بر روی صفحه نمايش نشان می دهد و به ابتدای سطر جديد می رود.
    کد:

    cin >> integer1;

    دستور فوق با وارد کردن هر عدد و فشردن کليد Enter عدد وارد شده را در متغير integer1 قرار می دهد.
    کد:

    cout << "Enter second integer \n";​
    cin >> integer2;​

    دو دستور فوق نيز ابتدا عبارت Enter secondinteger را بر روی صفحه نمايش چاپ کرده و سپس در خط بعد عدد وارد شده از صفحه کليد را پس از فشردن کليد Enter در متغير integer2 قرار می دهد.
    کد:

    sum = integer1 + integer2;

    دستور فوق حاصل جمع متغيرهای integer1 و integer2 را محاسبه و نتيجه را توسط عملگر انتساب (=) در متغير sum قرار می دهد.
    کد:

    cout << "Sum is " << sum << endl;

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

    گردآورنده :طه - TAHA
     
    یک شخص از این تشکر کرد.
  4. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]ساختار انتخاب شرطي if[/h]
    ساختار انتخاب if
    در برنامه نويسی مواردی پيش می آيد که بخواهيم دستور يا دستوراتی، هنگامی که شرط خاصی برقرار است، توسط برنامه به اجرا در آيد. اين مورد در زندگی روزمره نيز ديده می شود؛ به عنوان مثال " اگر فردا باران نيايد، من به کوه خواهم رفت." شرط مورد نظر نيامدن باران است و عملی که قرار است انجام شود رفتن به کوه می باشد. شيوه پياده سازی ساختار انتخاب if به صورت زير می باشد: کد:

    if ( شرط مورد نظر )​
    دستور مورد نظر ;​

    به مثال زير توجه کنيد: کد:

    if (x == 50)​
    cout << "x is 50";​

    اگر از دستور فوق در برنامه استفاده کنيم، اگر مقدار متغير x قبل از رسيدن به شرط فوق برابر 50 باشد عبارت "x is 50" بر روی صفحه نمايش ظاهر خواهد شد وگرنه دستور cout << "x is 50" ; ناديده گرفته می شود و برنامه خط بعدی را اجرا می کند.
    توجه داشته باشيد که شرط مورد استفاده در دستور if هر عبارت منطقی می تواند باشد.
    اگر بخواهيم هنگامی که شرط برقرار می شود، بيش از يک دستور اجرا شود، بايد دستورات مورد نظر را با علامت { } دسته بندی کنيم، به مثال زير توجه کنيد:
    کد:

    if ( x==50 )​
    {​
    cout << "x is ";​
    cout << x;​
    }​

    قطعه کد فوق هنگامی که مقدار x عدد 50 باشد، عبارت "x is 50" را در صفحه نمايش چاپ می کند.
    ولی در دستورات زير: کد:

    if ( x == 50)​
    cout << "x is ";​
    cout << x ;​

    خط آخر برنامه به هر جهت اجرا می شود. به عنوان مثال اگر فرض کنيم x برابر 50 است برنامه به درستی عبارت "x is 50" را چاپ می کند، اما اگر مثلاً x برابر 20 باشد عدد 20 بر روی صفحه نمايش ظاهر خواهد شد. چون عبارت ;cout <<x جز دستورات if قرار ندارد و يک دستور مجزا می باشد.
    مورد اخير که توضيح داده شد يکی از مواردی است که بعضی از برنامه نويسان به اشتباه مرتکب آن می شوند. پس در هنگام نوشتن برنامه های خود به دسته بندی دستورات دقت کنيد.



    ساختار انتخاب if/else گاهی اوقات نياز داريم که در صورت برقرار بودن شرط خاصی يک سری دستورات اجرا و در صورت برقرار نبودن شرط دسته ای ديگر از دستورات اجرا گردند. به عنوان مثال اگر فردا باران بيايد من به کوه نمی روم در غير اين صورت من به کوه خواهم رفت؛ زبان ++C برای پياده سازی چنين ساختاری شيوه زير را در اختيار ما قرار داده است. کد:

    if (شرط مورد نظر)​
    دستور1 ;​
    else​
    دستور2 ;​

    اگر شرط برقرار باشد دستور1 اجرا می گردد و در غير اين صورت دستور2 اجرا می شود. به مثال زير توجه کنيد: کد:

    if ( x = = 50 )​
    cout << "x is 50";​
    else​
    cout << "x is not 50";​

    اگر مقدار متغير قبل از رسيدن به شرط فوق برابر 50 باشد عبارت "x is 50" برروی صفحه نمايش چاپ می شود در غير اين صورت عبارت "x is not 50" چاپ می شود.
    بياد داشته باشيد اگر می خواهيد از بيش از يک دستور استفاده کنيد، حتماً آنها را با { } دسته بندی نماييد. به عنوان مثال:
    کد:

    if ( x > 50 )​
    { ​
    cout << x;​
    cout << "is greater than 50";​
    }​
    else​
    { ​
    cout << x;​
    cout << "is less than 50";​
    }​

    اگر متغير x حاوی عدد 100 باشد خروجی به صورت زير می باشد:
    100 is greater than 50

    و اگر متغير x عدد 10 باشد خروجی به صورت زير است:
    10 is less than 50

    از ساختارهای if/else های تو در تو می توان برای بررسی حالتهای چندگانه استفاده کرد. برنامه زير در همين رابطه است کد:

    :
    #include ​
    int main( )​
    { ​
    int x;​
    cout << "Please enter a number:";​
    cin >> x;​
    if ( x > 0 )​
    cout << x << "is positive.";​
    else​
    if ( x < 0 )​
    cout << x << "is negative.";​
    else​
    cout << "The number that you entered is 0.";​
    return 0;​
    }​

    برنامه فوق را سه بار با سه عدد مختلف اجرا می کنيم. خروجی ها به صورت زير می باشند:
    Please enter a number : 10
    10 is positive.
    Please enter a number : -5
    -5 is negative.
    Please enter a number : 0
    The number that you entered is 0.

    نکته : برای وضوح برنامه پيشنهاد می شود همانند برنامه فوق هنگام استفاده از if يا if/else و يا ديگر ساختارهای کنترلی از تورفتگی های مناسب استفاده کنيد. يعنی به عنوان مثال دستور if را به صورت زير:
    کد:

    if ( x > 0 )​
    cout << x << "is positive.";​

    بنويسيم و نه به صورت زير : کد:

    if ( x > 0 )​
    cout << x << "is positive​

    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  5. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]ساختار چند انتخابی switch[/h]
    ساختار چند انتخابی switch
    در دو مبحث قبلی ساختارهای if و if/else را بررسی کرديم. در برنامه نويسی گاهی به الگوريتمی نياز پيدا می کنيم که در آن متغيری به ازای هر مقدار صحيح ثابتی، باعث اجرای يک دستور خاص شود و به ازای هر مقدار اعمال مختلف انجام پذيرد. برای نيل به اين هدف ++C ساختار چند انتخابی switch را که به صورت زير می باشد در اختيار ما قرار داده است: کد:

    switch (عبارتی که بايد مورد بررسی قرار گيرد )​
    { ​
    case مقدار ثابت 1 :​
    مجموعه دستورات 1​
    break;​
    case مقدار ثابت 2 :​
    مجموعه دستورات 2​
    break;​
    .​
    .​
    .​
    case n مقدار ثابت :​
    n مجموعه دستورات​
    break;​
    default :​
    مجموعه دستورات حالت پيش فرض​
    }​

    ساختار switch به شيوه زير عمل می کند:
    switch ابتدا عبارت داخل پرانتز را مورد ارزيابی قرار می هد و سپس آن را با مقدار ثابت 1 مورد مقايسه قرار می دهد. اگر برابر بودند مجموعه دستورات 1 را اجرا خواهد شد، تا هنگامی که برنامه به دستور break برسد، هنگامی که برنامه به دستور break رسيد از ساختار چند انتخابی switch خارج می شود. اگر عبارت داخل پرانتز با مقدار ثابت 1 برابر نبود ساختار switch عبارت داخل پرانتز را با مقدار ثابت 2 مورد مقايسه قرار می دهد، در صورت برابر بودن مجموعه دستورات 2 اجرا می گردد. اين روال همينطور ادامه پيدا می کند. در صورتی که عبارت داخل پرانتز با هيچ يک از مقادير ثابت برابر نباشد، مجموعه دستورات حالت default (پيش فرض) اجرا می گردد. به برنامه زير توجه کنيد: کد:

    #include ​
    int main( )​
    { ​
    int x;​
    cout << "Please enter a number:";​
    cin >> x;​
    switch (x) {​
    case 1:​
    cout << "x is 1";​
    break;​
    case 2:​
    cout << "x is 2";​
    break;​
    default:​
    cout << "Unknown value";​
    }​
    return 0;​
    }​

    برنامه فوق را سه بار با سه عدد مختلف اجرا می کنيم. خروجی ها به صورت زير می باشند:
    Please enter a number:1
    x is 1
    Please enter a number:2
    x is 2
    Please enter a number:5
    Unknown value

    توجه داشته باشيد که ساختار switch را می توان با ساختار if/else نيز پياده سازی کرد. به عنوان مثال ساختار switch به کار رفته در مثال فوف معادل ساختارif/elseزير می باشد:
    کد:

    if (x == 1)​
    cout << "x is 1";​
    else ​
    if (x == 2) ​
    cout << "x is 2";​
    else ​
    cout << Unknown value";​

    ما الزامی به استفاده از حالت default در ساختار switch نداريم ولی توصيه می شود که حالت پيش فرض را به کار ببريم چون معمولاً امکان دارد که عبارت برابر با هيچ يک از مقادير ثابت نباشد و با به کار بردن حالت پيش فرض می توانيد پيغام مناسبی در اين رابطه به صفحه نمايش بفرستيد.
    توجه داشته باشيد اگر دستور break بعد از هر مجموعه از دستورات استفاده نکنيم برنامه از ساختار switch خارج نخواهد شد و مجموعه دستورات بعدی اجرا می گردد تا به اولين دستور break برسد. اين مورد به ما امکان ايجاد حالتهای ترکيبی را می دهد. البته در به کار بردن اين تکنيک دقت لازم را بکنيد. کد:

    #include ​
    int main( )​
    { ​
    int x;​
    cout << "Please enter a number:";​
    cin >> x;​
    switch (x) {​
    case 1:​
    case 2:​
    case 3:​
    cout << "x is (1 or 2 or 3)";​
    break;​
    default:​
    cout << "x is not (1 or 2 or 3)";​
    }​
    return 0;​
    }​

    برنامه فوق را سه بار با سه عدد مختلف اجرا می کنيم. خروجی ها به صورت زير می باشند:
    Please enter a number:1
    x is (1 or 2 or 3)
    Please enter a number:2
    x is (1 or 2 or 3)
    Please enter a number:5
    x is not (1 or 2 or 3)


    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  6. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]ساختار تکرار do/while[/h]
    ساختار تکرار do/while
    ساختار تکرار do/while مشابه ساختار تکرار while می باشد. در ساختار تکرار while شرط حلقه در ابتدا بررسی می شود ولی در ساختار تکرار do/while شرط در انتهای حلقه مورد بررسی قرار می گيرد، بدين ترتيب در ساختار تکرار do/while دستورات حلقه حداقل يکبار اجرا خواهند شد. ساختار تکرار do/while به صورت زير می باشد: کد:

    do {​
    مجموعه دستورات ​
    }while ( شرط مورد نظر );​

    به عنوان مثال به برنامه زير توجه نماييد: کد:

    #include ​
    int main()​
    {​
    int counter = 1;​
    do {​
    cout << counter << " ";​
    }while ( ++counter <= 10 );​
    cout << endl;​
    return 0;​
    }​

    در اين برنامه اعداد 1 تا 10 با فاصله بر روی صفحه نمايش چاپ خواهند شد. دقت کنيد که متغير counter در قسمت شرط حلقه ، يک واحد اضافه می گردد سپس مقدارش با عدد 10 مقايسه می گردد.
    1 2 3 4 5 6 7 8 9 10

    مثال: برنامه ای بنويسيد که ليست نمرات يک کلاس را دريافت کرده و تعداد قبولی ها و مردودی ها را مشخص کند. ضمنا در ابتدای برنامه تعداد نمرات ليست پرسيده شود. کد:

    #include ​
    int main( )​
    {​
    float mark;​
    int howmany,counter=1;​
    int passes=0,failures=0;​
    cout << "How many marks : ";​
    cin >> howmany;​
    do {​
    cout << "Enter mark "<<<" : ?; cin>>mark;​
    if (mark>=10)​
    ++passes;​
    else​
    ++failures;​
    }while (++counter <= howmany);​
    cout<<"Passed : "<<​
    cout<<"Failed : "<<​
    return 0;​
    }​

    خروجی برنامه به صورت زير می باشد :
    How many marks : 10
    Enter mark 1 : 18
    Enter mark 2 : 15
    Enter mark 3 : 9
    Enter mark 4 : 17.5
    Enter mark 5 : 9.75
    Enter mark 6 : 8
    Enter mark 7 : 11
    Enter mark 8 : 13
    Enter mark 9 : 5
    Enter mark 10 : 13
    Passed : 6
    Failed : 4

    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  7. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]ساختار تکرار for[/h]
    ساختار تکرار for
    ساختار تکرار for نيز مانند دو ساختار قبلی يک حلقه تکرار می سازد. از ساختار تکرار for معمولاً هنگامی که دفعات تکرار حلقه براساس يک شمارنده می باشد استفاده می شود. ساختار تکرار for به صورت زير می باشد: کد:

    for ( افزايش يا کاهش ; شرط حلقه ; تعريف متغير )​
    مقدار شمارنده شمارنده و تعيين​
    مقدار اوليه ​
    {​
    مجموعه دستورات​
    }​

    ساختار تکرار for را با ساختار تکرار while نيز می توان پياده سازی کرد به عنوان مثال دو برنامه زير اعداد 1 تا 5 را بر روی صفحه نمايش چاپ می کنند: کد:

    #include ​
    int main()​
    {​
    int counter = 1; ​
    while ( counter <= 5 ) { ​
    cout << counter << endl; ​
    ++counter;​
    }​
    return 0;​
    }​

    برنامه فوق با حلقه while نوشته شده بود. در برنامه زير معادل حلقه while فوق را با حلقه for پياده سازی می کنيم: کد:

    #include ​
    int main()​
    {​
    for ( int counter = 1; counter <= 5; counter++ )​
    cout << counter << endl;​
    return 0;​
    }​

    در برنامه فوق هنگامی که دستور for اجرا می شود متغير کنترلی counter تعريف می گردد و عدد 1 در آن قرار می گيرد. سپس شرط حلقه مورد بررسی قرار می گيرد (counter<=5) چون مقدار counter ، عدد 1 می باشد پس شرط درست است و دستور حلقه، يعنی دستور cout اجرا می گردد و اولين عدد يعنی 1 نمايش داده می شود. پس از آن دستور ++counter اجرا می گردد و مقدار متغير counter يک واحد اضافه می شود. سپس مجدداً شرط حلقه بررسی و در صورت برقرار بودن شرط دستور cout اجرا می گردد. اين روال تا وقتی که شرط برقرار باشد ادامه می يابد و به محض برقرار نبودن شرط يعنی هنگامی که counter حاوی عدد 6 شود خاتمه می يابد و برنامه به پايان می رسد.
    1 2 3 4 5

    در برنامه قبلی اگر حلقه for را به صورت زير بازنويسی کنيم:
    کد:

    for(int counter=10; counter>=1; counter=counter-2)​

    خروجی برنامه اعداد زوج 10 تا 1 به صورت معکوس می باشد، يعنی :
    10 8 6 4 2

    توجه داشته باشيد که در حلقه فوق به جای استفاده از دستور counter=counter-1 می توانستيم از دستور counter -= 2 استفاده کنيم.
    مثال : برنامه ای بنويسيد که مجموع اعداد زوج 1 تا 100 را محاسبه کند. کد:

    #include ​
    int main ( )​
    { int sum = 0;​
    for (int num = 2; num <= 100; num += 2)​
    sum += num;​
    cout << "2 + 4 + 6 + ... + 100 =" <<​
    return 0;​
    }​

    2 + 4 + 6 + ... + 100 =2550

    توجه داشته باشيد که حلقه for در برنامه فوق را با کمک عملگر کاما ( , ) می توانيم به صورت زير نيز بنويسيم: کد:

    for (int num = 2;​
    num <= 100;​
    sum += num, num +=2);​

    ضمناً شکستن حلقه به چند خط نيز مشکلی ايجاد نمی کند. البته دو مورد اخير توصيه نمی شوند، چون از خوانايی برنامه می کاهند.
    مثال : برنامه ای بنويسيد که عددی را از ورودی دريافت کرده و 2 به توان آن عدد را محاسبه و در خروجی چاپ نمايد. کد:

    #include ​
    int main( )​
    {​
    unsigned long int x=1;​
    int power;​
    cout << "Enter power:";​
    cin >>power;​
    for (int counter=1;counter<=power;counter++)​
    x*=2;​
    cout << "2 ^ " << power << " = " << x <​
    return 0;​
    }​

    Enter power:25
    2 ^ 25 = 33554432

    در مثال های فوق، دستورات حلقه for را داخل { } قرار نداديم چون حلقه for تنها شامل يک دستور بود، توجه داشته باشيد که اگر بيش از يک دستور در حلقه به کار رود ملزم به استفاده از { } می باشيم.
    مثال : برنامه ای بنويسيد که جدول ضرب 5X5 را ايجاد کند. کد:

    #include ​
    int main( )​
    {​
    for (int x=1;x<=5;x++)​
    {​
    for (int y=1;y<=5;y++)​
    cout <<<"\t";​
    cout<​
    }​
    return 0;​
    }​

    خروجی برنامه به صورت زير خواهد بود:
    1 2 3 4 5
    2 4 6 8 10
    3 6 9 12 15
    4 8 12 16 20
    5 10 15 20 25

    در برنامه فوق حلقه شامل متغير x ، دارای دو دستور for و cout بود، به همين علت از { } استفاده شد. اما حلقه شامل متغير y تنها دارای يک دستور cout بود. اگر دقت کرده باشيد دستور ;"cout<<x*y<<"\t دارای علامت t\ بود. به کار بردن t\ باعث جدول بندی و مرتب شدن خروجی می شود. در حقيقت مکان نمای صفحه نمايش را در محل جدول بندی قرار می دهد. ضمناً در مثال فوق يک ساختار for در دل ساختار for ديگری استفاده شد به اين شيوه استفاده حلقه های تودرتو گفته می شود که در برنامه نويسی ها به کرات از آنها استفاده می شود. در ضمن توجه داشته باشيد که اگر از دستور ;cout <<endl استفاده نشود، خروجی به صورت نا مرتب زير خواهد بود:
    1 2 3 4 5 2 4 6 8 10
    3 6 9 12 15 4 8 12 16 20
    5 10 15 20 25

    نکته : در حلقه های تکرار ممکن است شرط حلقه را به اشتباه بنويسيم يا به عنوان مثال شمارنده حلقه را افزايش ندهيم در چنين حالاتی ممکن است پس از اجرای برنامه، برنامه به اتمام نرسد و حلقه همچنان تکرار شود. در صورت بروز چنين مشکلی با فشردن کليد Ctrl همراه با Break (Ctrl+Break) اجرای برنامه به صورت ناگهانی قطع می شود و به محيط ويرايشگر ++C باز می گرديد و می توانيد کد اشتباه را درست کنيد. سپس برنامه را مجدداً اجرا کنيد.


    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  8. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]توابع بازگشتی در ++c[/h]
    توابع بازگشتی
    برنامه هايی که تا کنون نوشتيم يک تابع، تابع ديگری را فراخوانی می کرد. در برنامه نويسی ممکن است نياز پيدا کنيم که تابعی خودش را به صورت مستقيم يا غير مستقيم فراخوانی کند. به چنين توابعی، توابع بازگشتی گفته می شود . ابتدا از ديد رياضياتی توابع بازگشتی را بررسی می کنيم. دنباله اعداد زير را در نظر بگيريد :
    2 , 5 , 11 , 23 , ...
    جمله پنجم دنباله اعداد فوق چه عددی می باشد؟ حدس شما چيست؟ اگر کمی دقت کنيد متوجه خواهيد شد که هر جمله از دنباله فوق برابر است با دو برابر جمله قبلی بعلاوه يک. پس جمله پنجم برابر است با 2*23+1=47 دنباله فوق را توسط فرمول زير نيز می توان مشخص کرد :
    d1 = 2
    dn = 2*dn-1+1

    همانطور که متوجه شده ايد در اين دنباله هر جمله به جملات قبلی خود وابسته است و برای بدست آوردن آن نياز به بازگشت روی جملات قبلی داريم تا اينکه سرانجام به جمله اول که عدد 2 می باشد برسيم. فرمول فوق را به صورت تابعی زير بازنويسی می کنيم :
    d(1) = 2
    d(n) = 2*d(n-1)+1

    همانطور که در تابع فوق می بينيد يک حالت پايه وجود دارد که همان d(1)=2 می باشد و يکه حالت بازگشتی که تابع با يک واحد کمتر دوباره فراخوانی می شود d(n) = 2*d(n-1)+1 . توابع بازگشتی به طور کلی دارای يک يا چند حالت پايه و يک بخش بازگشتی می باشند. که معمولاً در بخش بازگشتی تابع با مقداری کمتر مجدداً فراخوانی می شود. تابع بازگشتی فوق به زبان ++C به صورت زير می باشد : کد:

    long int d(long int n)​
    {​
    if (n == 1) ​
    return 2;​
    else ​
    return 2*d(n-1)+1;​
    }​

    در زير برنامه ای می نويسيم تا با استفاده از تابع فوق 20 جمله اول دنباله مذکور را نمايش دهد. کد:

    #include <iostream.h>​
    long int d(long int);​
    int main( )​
    { ​
    for (int i=1;i<=20;i++)​
    {​
    cout<<d(i)<<"\t";​
    if (i%5==0) cout<<endl;​
    }​
    return 0;​
    }​
    long int d(long int n)​
    {​
    if (n == 1) ​
    return 2;​
    else ​
    return 2*d(n-1)+1;​
    }​

    2 5 11 23 47
    95 191 383 767 1535
    3071 6143 12287 24575 49151
    98303 196607 393215 786431 1572863


    تابع، بازگشت را تا رسيدن به حالت پايه ادامه می دهد و به محض رسيدن به حالت پايه محاسبات بازگشتی پی در پی موجب رسيدن به جواب مورد نظر می شود.

    مسئله برجهای هانوی (Towers of Hanoi)
    [​IMG]

    هر برنامه نويسی بايد به نحوی با مسائل کلاسيک دست وپنجه نرم کرده باشد . يکی از معروفترين مسائل کلاسيک ، مسئله برجهای هانوی می باشد. طبق افسانه ای در معبدی در شرق دور، کاهنان معبدی تعدادی ديسک را از يک ستون به ستون ديگر جا به جا می کردند . ستون اول در ابتدا دارای 64 ديسک با اندازه های مختلف می باشد، که بزرگترين ديسک در پايين ستون و کوچکترين ديسک در بالای ستون قرار دارد. کاهنان بايد همه ديسکها را از يک ستون به ستون دوم منتقل می کردند. با اين شرط که در هر بار جا به جايی تنها يک ديسک منتقل شود و نيز ديسک بزرگتری روی ديسک کوچکتر قرار نگيرد. ضمناً ستون سومی به عنوان ستون کمکی در اختيار آنها می باشد. گويند هنگامی که کاهنان معبد همه 64 ديسک را با روش گفته شده از ستون اول به ستون دوم منتقل کنند جهان به پايان می رسد.
    برای راحتی کار کاهنان و برای اينکه دچار اشتباه و دوباره کاری در انتقال نشوند می خواهيم برنامه ای بنويسيم که ترتيب انتقال ديسکها را چاپ کند.
    برای نوشتن اين برنامه ، مسئله را بايد با ديد بازگشتی نگاه کنيم . انتقال n ديسک را به شيوه زير انجام می دهيم :
    1- ابتدا n-1 ديسک را از ستون اول به ستون دوم به کمک ستون سوم منتقل کن.
    2- ديسک آخر (بزرگترين ديسک) را از ستون اول به ستون سوم منتقل کن.
    3-
    n-1 ديسک قرار گرفته در ستون دوم را به کمک ستون اول به ستون سوم منتقل کن.
    مراحل انجام کار هنگام انتقال آخرين ديسک يعنی وقتی که n=1 می باشد، يعنی حالت پايه به اتمام می رسد. در حالت n=1 يک ديسک بدون کمک ستون کمکی به ستون ديگر منتقل می شود.
    تابع بازگشتی مورد استفاده برای حل مسئله برجهای هانوی را با چهار آرگومان می نويسيم.
    1- تعداد ديسکها
    2- ستون مبدأ
    3- ستون کمکی
    4- ستون مقصد

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

    #include <iostream.h>​
    int hanoi(int, char, char, char);​
    int main( )​
    { int disks;​
    cout<<"Moving disks form tower A to C."<<endl;​
    cout<<"How many disks do you want to move?";​
    cin>>disks;​
    cout<<hanoi(disks,'A','B','C')<<endl;​
    return 0;​
    }​
    int hanoi(int n, char first, char help, char second) ​
    {​
    if (n == 1) {​
    cout << "Disk " << n << " from tower " << first​
    << " to tower " << second << endl;​
    } ​
    else {​
    hanoi(n-1, first, second, help);​
    cout << "Disk " << n << " from tower " << first​
    << " to tower " << second << endl;​
    hanoi(n-1, help, first, second);​
    }​
    return 0;​
    }​

    خروجی برنامه با فرض اينکه می خواهيم مراحل انتقال چهار ديسک را ببينيم به صورت زير می باشد :
    Moving disks form tower A to C.
    How many disks do you want to move?4
    Disk 1 from tower A to tower B
    Disk 2 from tower A to tower C
    Disk 1 from tower B to tower C
    Disk 3 from tower A to tower B
    Disk 1 from tower C to tower A
    Disk 2 from tower C to tower B
    Disk 1 from tower A to tower B
    Disk 4 from tower A to tower C
    Disk 1 from tower B to tower C
    Disk 2 from tower B to tower A
    Disk 1 from tower C to tower A
    Disk 3 from tower B to tower C
    Disk 1 from tower A to tower B
    Disk 2 from tower A to tower C
    Disk 1 from tower B to tower C
    0

    روال فراخوانی تابع هانوی به صورت شکل زير می باشد:
    [​IMG]

    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  9. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]توليد اعداد تصادفی[/h]
    توليد اعداد تصادفی
    يکی از کاربردهای اساسی کامپيوتر، استفاده از آن در کارهای شبيه سازی می باشد. در اينجا به بررسی نحوه توليد اعداد تصادفی می پردازيم. اعداد تصادفی در مسائل شبيه سازی کاربرد فراوانی دارند، به عنوان مثال شبيه سازی پرتاب سکه، پرتاب تاس و مسائلی از اين قبيل.
    برای توليد اعداد تصادفی زبان ++C تابعی با نام rand() را که در فايل کتابخانه ای stdlib.h قرار دارد، در اختيار ما گذاشته است. به عنوان مثال دستور زير :
    کد:

    i = rand();

    يک عدد تصادفی بين 1 تا 32767 را در متغير i قرار می دهد . تابعrand()اعداد را با احتمال مساوی در اين بازه انتخاب می کند پس شانس انتخاب هر عددی در اين بازه با اعداد ديگر برابر است.
    معمولاً بازه اعدادی که توسط تابع rand توليد می شود، با آنچه که مورد نياز ماست متفاوت می باشد. به عنوان مثال برای شبيه سازی پرتاب سکه به دو عدد تصادفی و برای تاس به شش عدد تصادفی نياز داريم. فرض کنيد که می خواهيد عدد 31250 را به عددی بين 1 تا 6 تبديل کنيد. چه راه کاری را در نظر می گيريد؟ راهی که برای اين تبديل وجود دارد استفاده از باقيمانده صحيح می باشد، همانطور که می دانيد باقيمانده صحيح تقسيم هر عددی بر 6 يکی از اعداد 0 تا 5 می باشد. پس با اضافه کردن 1 واحد به باقيمانده ، عددی بين 1 تا 6 خواهيم داشت.


    حال اگر به جای متغير a ، تابع rand() را قرار دهيم عبارت rand()%6+1 عددی تصادفی بين 1 تا 6 به ما می دهد به طور کلی برای بدست آوردن عددی تصادفی در بازه [a,b] می توانيم از فرمول زير استفاده کنيم.
    کد:

    rand()%(b-a+1)+a​

    به عنوان مثال خروجی قطعه برنامه زير عدد صحيحی در بازه [20,100] می باشد. کد:

    int a = 20 , b = 100;​
    cout<< rand()%(b-a+1)+a;​

    برنامه زير 20 عدد تصادفی بين 1 تا 6 را ايجاد می کند. که اين برنامه را می توان 20 بار پرتاب يک تاس در نظر گرفت : کد:

    #include <iostream.h>​
    #include <stdlib.h>​
    int main()​
    {​
    for (int i = 1; i<= 20; i++ )​
    {​
    cout << rand() % 6 + 1<<"\t";​
    if ( i % 5 == 0 )​
    cout << endl;​
    }​
    return 0;​

    }

    خروجی برنامه فوق به صورت زير می باشد :
    5 5 3 5 5
    2 4 2 5 5
    5 3 2 2 1
    5 1 4 6 4

    يک بار ديگر برنامه فوق را اجرا کنيد و خروجی را مجدداً بررسی کنيد. خواهيد ديد خروجی دقيقاً همان اعداد قبلی می باشد. خروجی تابع rand() اعداد تصادفی می باشد ولی با اجرای دوباره برنامه همان اعداد مجدداً به همان ترتيب قبلی تکرار می شوند. اين تکرار يکی از قابليتهای تابع می باشد ودر اشکال زدايی برنامه کاربرد دارد.
    اگر بخواهيم که تابع rand() اعداد کاملاً تصادفی ايجاد کند بايد از تابع srand() استفاده کنيم. اين تابع ورودی از نوع اعداد صحيح بدون علامت می گيرد و باعث تصادفی شدن تابع rand() بر اساس مقدار ورودی تابع srand() می شود. تابعsrand() نيز در فايل کتابخانه ای stdlib.h قرار دارد. در برنامه زير به نحوه استفاده از تابع srand() پی خواهيد برد.
    کد:

    #include <iostream.h>
    کد:

    #include <stdlib.h>​
    int main()​
    {​
    unsigned int num;​
    cout<<"Enter a number: ";​
    cin>>num;​
    srand(num);​
    for (int i = 1; i<= 20; i++ )​
    {​
    cout << rand() % 6 + 1<<"\t";​
    if ( i % 5 == 0 )​
    cout << endl;​
    }​
    return 0;​
    }​

    خروجی برنامه به صورت زير می باشد.
    Enter a number: 251
    3 4 1 4 6
    6 4 6 2 5
    5 3 1 4 5
    1 6 6 6 1
    Enter a number: 350
    1 4 3 4 1
    2 6 2 6 2
    4 2 5 3 5
    4 4 5 2 3
    Enter a number: 251
    3 4 1 4 6
    6 4 6 2 5
    5 3 1 4 5
    1 6 6 6 1

    همانطور که می بينيد بر اساس ورودی های مختلف خروجی نيز تغيير می کند. توجه داشته باشيد که ورودی های يکسان خروجی های يکسانی دارند.
    اگر بخواهيم بدون نياز به وارد کردن عددی توسط کاربر، اعداد تصادفی داشته باشيم می توانيم از تابع time که در فايل کتابخانه ای time.h قرار دارد استفاده کنيم . تابع time ساعت کامپيوتر را می خواند و زمان را بر حسب ثانيه بر می گرداند ، به اين ترتيب دستور زير:
    کد:

    srand(time(0));​

    باعث می شود که تابع rand() در هر بار اجرای برنامه اعداد متفاوتی را ايجاد کند. اگر برنامه فوق را به صورت زير باز نويسی کنيم با هر بار اجرای برنامه اعداد تصادفی متفاوتی خواهيم داشت.


    مثال : برنامه ای بنويسيد که پرتاب سکه ای را شبيه سازی کند ، بدين صورت که سکه را 2000 بار پرتاب کند و دفعات رو يا پشت آمدن سکه را چاپ کند.
    کد:

    #include <iostream.h>
    کد:

    #include <stdlib.h>​
    #include <time.h>​
    int main()​
    {​
    int back=0,front=0,face;​
    srand(time(0));​
    for (int i = 1; i<= 2000; i++ )​
    {​
    face=rand()%2+1;​
    switch(face)​
    {​
    case 1:​
    ++back;​
    break;​
    case 2:​
    ++front;​
    break;​
    default:​
    cout<<"Error!";​
    }​
    }​
    cout<<"Front: "<< front<<endl;​
    cout<<"Back : "<< back<<endl;​
    return 0;​
    }​

    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.
  10. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش جامع و مرحله به مرحله زبان برنامه نويسي ++c (سي پلاس پلاس)

    [h=2]نوع داده ای enum[/h]
    نوع داده ای enum
    enum يک نوع داده ای تعريف شده توسط برنامه نويس را که به آن نوع داده شمارش می گويند، ايجاد می کند. نحوه ايجاد يک نوع داده شمارش به صورت زير می باشد.
    کد:

    enum {ثابت n و ... و ثابت 2 و ثابت 1} نام نوع داده

    اين دستور به ترتيب در ثابت 1 ، ثابت 2 و ... و ثابتn اعداد صحيح متوالی 0 تا n را قرار می دهد . به صورت پيش فرض مقداردهی متغيرها در اين دستور از صفر شروع می شود.
    کد:

    enum TrueFalse {FALSE , TRUE}

    دستور فوق به ثابت FALSE ، عدد صفر و به ثابت TRUE عدد 1 را تخصيص می دهد. حال اگر بخواهيم مقداردهی از عددی غير از صفر شروع شود بايد عدد مورد نظر را مشخص کنيم :
    کد:

    enum Days {SAT = 1, SUN, MON, TUE, WED, THU, FRI}

    دستور فوق به روزهای هفته به ترتيب اعداد 1 تا 7 را نسبت می دهد. توصيه می شود که نام ثابت های شمارشی را با حروف بزرگ بنويسيد ، بدين صورت اين ثابتها با متغيرهای برنامه ، اشتباه نمی شوند. ضمناً enum را در ابتدای برنامه به کار ببريد.
    در حقيقت اين نوع داده به هر يک از موارد ليستی از اعداد نامی را نسبت می دهد. به عنوان نمونه در مثال روزهای هفته هر يک از اعداد 1 تا 7 را با يکی از روزهای هفته نام گذاری کرديم.
    مقدار دهی موارد ليست به صورت های مختلف امکان پذير می باشد.
    کد:

    enum Days { MON, TUE, WED, THU, FRI, SAT , SUN = 0}

    دستور فوق SUN را با عدد صفر و SAT را با عدد 1- و ... و MON را با عدد -6 مقدار دهی می کند. کد:

    enum Colors {BLACK = 2, GREEN = 4, RED = 3,​
    BLUE = 5, GRAY,WHITE = 0}​

    در دستور فوق هر يک از موارد با عدد نسبت داده شده مقدار دهی می شوند و GRAY با عدد 6 مقدار دهی می شود چون بعد از BLUE = 5 آمده است.
    به محض ساخته شدن ليست ، نوع داده نوشته شده توسط برنامه نويس قابل استفاده می گردد و می توان متغيرهايی را از نوع داده نوشته شده توسط برنامه نويس به همان شيوه ای که ساير متغيرها را تعريف می کرديم، تعريف کرد. به عنوان مثال :
    کد:

    TrueFalse tf1,tf2;​
    Days day1, day2 = SUN;​
    Colors color1 = BLACK , color2 = GRAY;​

    همچنين متغيرها را می توان هنگام ايجاد نوع داده، تعريف کرد. به عنوان مثال :
    کد:

    TrueFalse {FALSE, TRUE} tf1 ,tf2;

    نکته : تبديل داده ای از نوع enum به عدد صحيح مجاز می باشد ولی بر عکس اين عمل غير مجاز است. به عنوان مثال : کد:

    enum MyEnum {ALPHA, BETA, GAMMA};​
    int i = BETA;​
    int j = 3+GAMMA;​

    دستورات فوق مجاز می باشند، و اين دستورات عدد 1 را در i و 5 را در j قرار می دهند. کد:

    enum MyEnum {ALPHA, BETA, GAMMA};​
    MyEnum x = 2;​
    MyEnum y = 123;​

    ولی دستورات فوق غير مجاز می باشند. البته بعضی از کامپايلرها اين موضوع را ناديده می گيرند و تنها يک پيغام اخطار می دهند ولی توصيه می شود که برای پيشگيری از وقوع خطاهای منطقی در برنامه از به کار بردن دستوراتی مانند کدهای فوق خودداری کنيد.
    برنامه زير نحوه کاربرد نوع داده enum را نشان می دهد. کد:

    #include <iostream.h> ​
    int main()​
    {​
    enum PizzaSize{SMALL,MEDIUM,LARGE,EXTRALARGE};​
    PizzaSize size;​
    size=LARGE;​
    cout<<"The small pizza has a value of "<<SMALL;​
    cout<<"\nThe medium pizza has a value of "<<MEDIUM;​
    cout<<"\nThe large pizza has a value of "<<size;​
    return 0;​
    }​

    خروجی برنامه به صورت زير می باشد:
    The small pizza has a value of 0
    The medium pizza has a value of 1
    The large pizza has a value of 2

    گردآورنده :طه - TAHA
     
    2 نفر از این پست تشکر کرده اند.