ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی “ ورود به حساب” کلیک کنید.





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









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمیشود، اینجا را کلیک کنید.





صفحه 2 از 4 نخست 1234 آخرین
نمایش نتایج: از 11 به 20 از 35
  1. #11
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]تبدیل نوع[/B]
    هر داده ای که نرم افزارها استفاده می کنند دارای نوع هستند. نوع تعیین می کند داده چه محتوایی دارد و چه محتوایی می تواند بپذیرد.
    مثلاً داده های نوع int حاوی عددهای صحیح و داده های نوع char حاوی کاراکتر می باشد.

    وقتی داده ای از یک نوع به نوع متفاوت دیگری تغییر می کند، [B]تبدیل نوع[/B] اتفاق می افتد. این تبدیلات به دو روش خودکار یا دستی(توسط دستورات برنامه نویسی) انجام می گیرد. تبدیلاتی که خودکار صورت می گیرند را تبدیل نوع [B]Implicit[/B] و تبدیلاتی که دستی صورت می گیرند را تبدیل توع [B]Explicit[/B] می نامند.

    [B][I]تبدیل نوع Implicit[/I][/B]
    این نوع تبدیلات معمولاً توسط کامپایلر و بیشتر در عملیات ریاضی و محاسبات انجام می گیرند. چنین تبدیلاتی باعث می شوند داده های نوع پایین تر(کم ارزش) به نوع بالاتر(پر ارزش) تبدیل گردند. فایده دیگر این نوع تبدیلات، سازگاری در بررسی عبارات ریاضی می باشد.
    تبدیلات خودکار بصورت های زیر انجام می گیرند:

    نوع char به نوع int: با توجه به نوع char پیشفرض، بایت آخر صفر و یا علامتش گسترده می شود.
    نوع unsigned char به نوع int: بایت آخری از صفر پر می شود.
    نوع signed char به نوع int: علامتش گسترده می شود.
    نوع short int به نوع int: همان مقدار.
    نوع unsigned short به نوع unsigned int: همان مقدار.
    نوع enum به نوع int: همان مقدار.
    نوع long int به نوع int: همان مقدار.
    نوع float به نوع int: مقدارش کسری یا همان می شود.
    نوع double به نوع float: علائم کم می شوند و مقدارش دقیق(گرد) می شود.
    نوع char به نوع signed char: اگر مقدارش بیش از 127 باشد، خروجی منفی می دهد.
    نوع int به نوع char: 8/24 بیت بالا(پر ارزش) از بین می رود.
    نوع int به نوع short int: همان مقدار.
    [B](در اولین مرحله تبدیل نوع، داده های نوع short, char, enum و... به اعداد صحیح تبدیل می شوند.)[/B]

    داده نوع char شامل یک بایت می باشد. اما وقتی که به داده نوع int تبدیل می شود، دو بایت استفاده می گردد. یعنی مقدار بایت پایین(کم ارزش) int جدید، همان مقدار بایت اصلی char می شود و مقدار بالایی(پر ارزش) بستگی به این دارد که نوع داده char علامتدار(signed) باشد یا بدون علامت(unsigned).
    اگر بدون علامت باشد، بایت بالایی(پر ارزش) داده int صفر و اگر علامتدار باشد، بایت بالایی(پر ارزش) داده int -1 می شود.
    [I](اگر در کامپایلر، داده اصلی نوع char باشد، پردازش تبدیل به شیوه Setup کردن کامپایلر بستگی دارد.)[/I]
    [B]
    تبدیل نوع Explicit[/B]
    این نوع تبدیل توسط دستور مبدل نوع صریح(Typecasing) صورت می گیرد. از چنین تبدیلی می توان در تبدیل انواع داده ها با انعطاف پذیری بالایی استفاده نمود:
    کد:

    کد:

    کد:
     (TypeName)Expression
    (TypeName) اسم یک نوع از داده ها می باشد که داخل پرانتز نوشته می شود. این اسم می تواند int, long, float, double و... باشد.
    Expression می تواند دستور، متغیر و... باشد که بعد از بسته شدن پرانتز ها قرار می گیرد.
    مثال:
    کد: کد:
    کد:
     int i; float f= 36.125;  i= (int)f; //  36  float f= 32336.12454545;  printf("%i", (int)f); //  32336  long l; float f= 5554545.33565656565653;  l=  (long)f;  printf("%d", l);  // 5554545  Type MyFunction(int  i) { int j; j= (int)i; }  float z=  22323.22322; MyFunction((int)
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  2. #12
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]دستورات ورودی و خروجی[/B]
    واحد ورودی که ما در اينجا استفاده می کنيم صفحه کليد می باشد و واحد خروجی مورد استفاده نيز صفحه نمايش خواهد بود.



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


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

    کد:
     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 باشد عبارت زير را در صفحه نمايش ظاهر می سازد:
    [B]Hello, my code is 116223 and I am 16 years old.[/B]


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


    کد:

    کد:
    cout << "This is a text.";
    کد:
    cout << "This is another text.";
    علارقم اينکه از دستور cout در دو خط استفاده شده است، به صورت زير در صفحه نمايش نشان داده خواهد شد:
    کد:
    [B]This is a text. This is another text.[/B]
    برای اينکه عبارتی را در چند خط نمايش دهيم، برای انتقال به هر خط جديد از علامت n\ استفاده می کنيم. به عنوان مثال دستورات زير:


    کد:

    کد:
    cout << "First sentence.\n";
    cout << "Second sentence.\n Third sentence.";
    به شکل زير در صفحه نمايش ديده خواهد شد:
    [B]First sentence.[/B]

    [B]Second sentence.[/B]

    [B]Third sentence.[/B]


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


    c کد:

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

    کد:

    کد:
    cout << "Second sentence." << endl;
    در صفحه نمايش به صورت زير ديده می شوند:
    [B]First sentence.[/B]

    [B]Second sentence.[/B]


    [B]
    [/B]

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


    کد:

    کد:
    int age;
    cin >> age;

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


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


    کد:

    کد:
    cin >> a >> b;
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  3. #13
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]برنامه ساده چاپ و بررسی اجزای آن[/B]

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


    کد:

    //
    کد:
    first program in C++
    کد:
     
    #include
    int main ()
    {
    کد:
    cout << "Hello, This is a C++ program.";
    return 0;
    }
    قبل از هر گونه توضيح اضافی به شيوه نوشتن اين برنامه در ويرايشگر زبان [B]++[/B][B]C[/B] و نحوه اجرای آن می پردازيم.
    برای اجرای اين برنامه شما به کامپايلر زبان [B]++[/B][B]C[/B] نياز داريد ، کامپايلر زبان [B]++[/B][B]C[/B] را که در اين دوره آموزشی مورد استفاده قرار گرفته است را می توانيد از آدرس [B]"[برای نمایش لینک باید عضو شوید. ]"[/B] دريافت نماييد.
    پس از دانلود،نصب و اجرای کامپایلر شما محیطی برای نوشتن برنامه های خود در اختیار دارید .حال در اين محيط می توانيد برنامه ذکر شده در ابتدای اين مبحث را بنويسيد. در نوشتن برنامه دقت لازم را به کار ببريد ، چون در صورت وجود اشتباهات تايپی ممکن است اجرای برنامه با مشکل مواجه شود.

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


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

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

    کد:
     /* This is a comment  line.

    کد:

    This is another comment line. */





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

    کد:
     #include


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

    کد:
     int main(  )


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

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


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

    کد:
     return 0;


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


    [B]نکته: [/B]بهتر است هر دستور زبان [B]++c [/B]را در يک خط جداگانه بنويسيم. البته در انجام اينکار الزامی نداريم ولی برای خوانايی بيشتر برنامه توصيه می شود از اين شيوه استفاده کنيد.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  4. #14
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]برنامه جمع دو عدد[/B]

    [B]برنامه جمع دو عدد[/B]
    در مبحث قبلی برنامه ای را نوشتيم که در آن تنها از دستور 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
    همانطور که در اين برنامه نيز می بينيد، تعدادی از دستورات برنامه قبلی تکرار شده اند. در اينجا به بررسی و توضيح دستورات جديد می پردازيم: کد:

    i
    کد:
    nt 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;


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

    کد:
    ·#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;


    و در نهايت دستور فوق باعث نمايش حاصل جمع بر وی صفحه نمايش می شود.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  5. #15
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]ساختار انتخاب شرطي if[/B]

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

    if ( شرط مورد نظر )

    دستور مورد نظر ;


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

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

    کد:
    if ( x==50 )
    {
    cout << "x is ";
    cout << x;
    }
    قطعه کد فوق هنگامی که مقدار [B]x[/B] عدد [B]50[/B] باشد، عبارت "[B]x is 50[/B]" را در صفحه نمايش چاپ می کند.
    ولی در دستورات زير: کد:

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



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

    کد PHP:
    if (شرط مورد نظر)

           
    دستور1  ;
     else
           
    دستور2 
    ;


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

    کد:
    if ( x = = 50 )
    cout << "x is 50";
    else
    cout << "x is not 50";
    اگر مقدار متغير قبل از رسيدن به شرط فوق برابر [B]50[/B] باشد عبارت "[B]x is 50[/B]" برروی صفحه نمايش چاپ می شود در غير اين صورت عبارت "[B]x is not 50[/B]" چاپ می شود.
    بياد داشته باشيد اگر می خواهيد از بيش از يک دستور استفاده کنيد، حتماً آنها را با [B]{ }[/B] دسته بندی نماييد. به عنوان مثال:
    کد:

    کد:
    if ( x > 50 )
    {
    cout << x;
    cout << "is greater than 50";
    }
    else
    {
    cout << x;
    cout << "is less than 50";
    }
    اگر متغير [B]x[/B] حاوی عدد [B]100[/B] باشد خروجی به صورت زير می باشد:
    [B]100 is greater than 50[/B]


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


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

    :
    کد:
    #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;
    }
    برنامه فوق را سه بار با سه عدد مختلف اجرا می کنيم. خروجی ها به صورت زير می باشند:
    [B]Please enter a number : 10[/B]

    [B]10 is positive.[/B]

    [B]Please enter a number : -5[/B]

    [B]-5 is negative.[/B]

    [B]Please enter a number : 0[/B]

    [B]The number that you entered is 0.[/B]


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

    کد:
    if ( x > 0 )
    cout << x << "is positive.";
    بنويسيم و نه به صورت زير : کد:

    کد:
    if ( x > 0 )
    cout << x << "is positive
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  6. #16
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]ساختار چند انتخابی [/B][B]switch[/B]
    در دو مبحث قبلی ساختارهای [B]if[/B] و [B]if/else[/B] را بررسی کرديم. در برنامه نويسی گاهی به الگوريتمی نياز پيدا می کنيم که در آن متغيری به ازای هر مقدار صحيح ثابتی، باعث اجرای يک دستور خاص شود و به ازای هر مقدار اعمال مختلف انجام پذيرد. برای نيل به اين هدف ++C ساختار چند انتخابی [B]switch[/B] را که به صورت زير می باشد در اختيار ما قرار داده است: کد:

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

    کد:
    #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;
    }
    برنامه فوق را سه بار با سه عدد مختلف اجرا می کنيم. خروجی ها به صورت زير می باشند:
    کد PHP:
    Please enter a  number:1

     x is  1
     Please enter a  number
    :2
     x is  2
     Please enter a  number
    :5
     Unknown  value 
    توجه داشته باشيد که ساختار [B]switch[/B] را می توان با ساختار [B]if/else[/B] نيز پياده سازی کرد. به عنوان مثال ساختار [B]switch[/B] به کار رفته در مثال فوف معادل ساختار[B]if/else[/B]زير می باشد:
    کد:

    کد:
    if (x == 1)
    cout << "x is 1";
    else
    if (x == 2)
    cout << "x is 2";
    else
    cout << Unknown value";
    ما الزامی به استفاده از حالت [B]default[/B] در ساختار [B]switch[/B] نداريم ولی توصيه می شود که حالت پيش فرض را به کار ببريم چون معمولاً امکان دارد که عبارت برابر با هيچ يک از مقادير ثابت نباشد و با به کار بردن حالت پيش فرض می توانيد پيغام مناسبی در اين رابطه به صفحه نمايش بفرستيد.
    توجه داشته باشيد اگر دستور [B]break[/B] بعد از هر مجموعه از دستورات استفاده نکنيم برنامه از ساختار [B]switch[/B] خارج نخواهد شد و مجموعه دستورات بعدی اجرا می گردد تا به اولين دستور [B]break[/B] برسد. اين مورد به ما امکان ايجاد حالتهای ترکيبی را می دهد. البته در به کار بردن اين تکنيک دقت لازم را بکنيد. کد:

    کد:
    #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;
    }
    برنامه فوق را سه بار با سه عدد مختلف اجرا می کنيم. خروجی ها به صورت زير می باشند:
    [B]Please enter a number:1[/B]

    [B]x is (1 or 2 or 3)[/B]

    [B]Please enter a number:2[/B]

    [B]x is (1 or 2 or 3)[/B]

    [B]Please enter a number:5[/B]

    [B]x is not (1 or 2 or 3)[/B]
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  7. #17
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]ساختار تکرار do/while[/B]

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

    کد:
    do {
    مجموعه دستورات
    }while ( شرط مورد نظر );
    به عنوان مثال به برنامه زير توجه نماييد: کد:

    کد:
    #include
    int main()
    {
    int counter = 1;
    do {
    cout << counter << " ";
    }while ( ++counter <= 10 );
    cout << endl;
    return 0;
    }
    در اين برنامه اعداد 1 تا 10 با فاصله بر روی صفحه نمايش چاپ خواهند شد. دقت کنيد که متغير [B]counter[/B] در قسمت شرط حلقه ، يک واحد اضافه می گردد سپس مقدارش با عدد 10 مقايسه می گردد.
    [B]1 2 3 4 5 6 7 8 9 10[/B]


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

    کد:
    #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;
    }
    خروجی برنامه به صورت زير می باشد :
    کد PHP:
    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 
    :  
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  8. #18
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]ساختار تکرار for[/B]

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

    for ( افزايش يا کاهش ; شرط حلقه ; تعريف متغير )

    مقدار شمارنده شمارنده و تعيين

    مقدار اوليه

    {

    مجموعه دستورات

    }


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

    کد:
    #include
    int main()
    {
    int counter = 1;
    while ( counter <= 5 ) {
    cout << counter << endl;
    ++counter;
    }
    return 0;
    }
    برنامه فوق با حلقه [B]while[/B] نوشته شده بود. در برنامه زير معادل حلقه [B]while[/B] فوق را با حلقه [B]for[/B] پياده سازی می کنيم: کد:

    کد:
    #include
    int main()
    {
    for ( int counter = 1; counter <= 5; counter++ )
    cout << counter << endl;
    return 0;
    }
    در برنامه فوق هنگامی که دستور [B]for[/B] اجرا می شود متغير کنترلی [B]counter[/B] تعريف می گردد و عدد [B]1[/B] در آن قرار می گيرد. سپس شرط حلقه مورد بررسی قرار می گيرد [B]([/B][B]counter[/B][B]<=5)[/B] چون مقدار [B]counter[/B] ، عدد [B]1[/B] می باشد پس شرط درست است و دستور حلقه، يعنی دستور [B]cout[/B] اجرا می گردد و اولين عدد يعنی [B]1[/B] نمايش داده می شود. پس از آن دستور[B] ++[/B][B]counter[/B] اجرا می گردد و مقدار متغير [B]counter[/B] يک واحد اضافه می شود. سپس مجدداً شرط حلقه بررسی و در صورت برقرار بودن شرط دستور [B]cout[/B] اجرا می گردد. اين روال تا وقتی که شرط برقرار باشد ادامه می يابد و به محض برقرار نبودن شرط يعنی هنگامی که [B]counter[/B] حاوی عدد [B]6[/B] شود خاتمه می يابد و برنامه به پايان می رسد.
    [B]1 2 3 4 5[/B]


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

    کد:
    for(int counter=10; counter>=1; counter=counter-2)
    خروجی برنامه اعداد زوج [B]10[/B] تا [B]1[/B] به صورت معکوس می باشد، يعنی :
    [B]10 8 6 4 2[/B]


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

    کد:
    #include
    int main ( )
    { int sum = 0;
    for (int num = 2; num <= 100; num += 2)
    sum += num;
    cout << "2 + 4 + 6 + ... + 100 =" <<
    return 0;
    }
    [B]2 + 4 + 6 + ... + 100 =2550[/B]
    توجه داشته باشيد که حلقه for در برنامه فوق را با کمک عملگر کاما ( [B],[/B] ) می توانيم به صورت زير نيز بنويسيم: کد:

    کد:
    for (int num = 2;
    num <= 100;
    sum += num, num +=2);
    ضمناً شکستن حلقه به چند خط نيز مشکلی ايجاد نمی کند. البته دو مورد اخير توصيه نمی شوند، چون از خوانايی برنامه می کاهند.
    مثال : برنامه ای بنويسيد که عددی را از ورودی دريافت کرده و [B]2[/B] به توان آن عدد را محاسبه و در خروجی چاپ نمايد. کد:

    #
    کد:
    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;
    }
    [B]Enter power:25[/B]
    [B]2 ^ 25 = 33554432[/B]
    در مثال های فوق، دستورات حلقه [B]for[/B] را داخل [B]{ }[/B] قرار نداديم چون حلقه [B]for[/B] تنها شامل يک دستور بود، توجه داشته باشيد که اگر بيش از يک دستور در حلقه به کار رود ملزم به استفاده از [B]{ }[/B] می باشيم.
    مثال : برنامه ای بنويسيد که جدول ضرب 5X5 را ايجاد کند. کد:

    کد:
    #include
    int main( )
    {
    for (int x=1;x<=5;x++)
    {
    for (int y=1;y<=5;y++)
    cout <<<"\t";
    cout<
    }
    return 0;
    }
    خروجی برنامه به صورت زير خواهد بود:
    کد:
    کد PHP:
    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 
    در برنامه فوق حلقه شامل متغير [B]x[/B] ، دارای دو دستور [B]for[/B] و [B]cout[/B] بود، به همين علت از [B]{ }[/B] استفاده شد. اما حلقه شامل متغير y تنها دارای يک دستور [B]cout[/B] بود. اگر دقت کرده باشيد دستور [B];"[/B][B]cout[/B][B]<<[/B][B]x*y[/B][B]<<"\[/B][B]t[/B] دارای علامت [B]t[/B][B]\[/B] بود. به کار بردن [B]t[/B][B]\[/B] باعث جدول بندی و مرتب شدن خروجی می شود. در حقيقت مکان نمای صفحه نمايش را در محل جدول بندی قرار می دهد. ضمناً در مثال فوق يک ساختار [B]for[/B] در دل ساختار [B]for[/B] ديگری استفاده شد به اين شيوه استفاده حلقه های تودرتو گفته می شود که در برنامه نويسی ها به کرات از آنها استفاده می شود. در ضمن توجه داشته باشيد که اگر از دستور [B];[/B][B]cout[/B][B] <<[/B][B]endl[/B] استفاده نشود، خروجی به صورت نا مرتب زير خواهد بود:
    کد PHP:
    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 
    [B]نکته :[/B] در حلقه های تکرار ممکن است شرط حلقه را به اشتباه بنويسيم يا به عنوان مثال شمارنده حلقه را افزايش ندهيم در چنين حالاتی ممکن است پس از اجرای برنامه، برنامه به اتمام نرسد و حلقه همچنان تکرار شود. در صورت بروز چنين مشکلی با فشردن کليد [B]Ctrl[/B] همراه با [B]Break[/B] ([B]Ctrl+Break[/B]) اجرای برنامه به صورت ناگهانی قطع می شود و به محيط ويرايشگر ++C باز می گرديد و می توانيد کد اشتباه را درست کنيد. سپس برنامه را مجدداً اجرا کنيد.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  9. #19
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]توابع بازگشتی در ++c[/B]

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

    کد:
    long int d(long int n)
    {
    if (n == 1)
    return 2;
    else
    return 2*d(n-1)+1;
    }
    در زير برنامه ای می نويسيم تا با استفاده از تابع فوق 20 جمله اول دنباله مذکور را نمايش دهد. کد:

    کد PHP:
    #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 (
    == 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 

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

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


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

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

    کد:
    #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
    کد PHP:
    .

     
    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 
    روال فراخوانی تابع هانوی به صورت شکل زير می باشد:



    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  10. #20
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    [B]توليد اعداد تصادفی[/B]

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

    کد:
     i =  rand();


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


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

    کد:
    rand()%(b-a+1)+a
    به عنوان مثال خروجی قطعه برنامه زير عدد صحيحی در بازه [B][20,100][/B] می باشد. کد:

    کد:
    int a = 20 , b = 100;
    cout<< rand()%(b-a+1)+a;
    برنامه زير [B]20[/B] عدد تصادفی بين [B]1[/B] تا [B]6[/B] را ايجاد می کند. که اين برنامه را می توان [B]20[/B] بار پرتاب يک تاس در نظر گرفت : کد:

    کد:
    #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;
    }
    خروجی برنامه فوق به صورت زير می باشد :
    کد PHP:
    5       5       3        5        5

     2       4        2       5       5
     5       3        2       2       1
     5       1        4       6       4 
    يک بار ديگر برنامه فوق را اجرا کنيد و خروجی را مجدداً بررسی کنيد. خواهيد ديد خروجی دقيقاً همان اعداد قبلی می باشد. خروجی تابع [B]rand()[/B] اعداد تصادفی می باشد ولی با اجرای دوباره برنامه همان اعداد مجدداً به همان ترتيب قبلی تکرار می شوند. اين تکرار يکی از قابليتهای تابع می باشد ودر اشکال زدايی برنامه کاربرد دارد.
    اگر بخواهيم که تابع [B]rand()[/B] اعداد کاملاً تصادفی ايجاد کند بايد از تابع [B]srand()[/B] استفاده کنيم. اين تابع ورودی از نوع اعداد صحيح بدون علامت می گيرد و باعث تصادفی شدن تابع [B]rand()[/B] بر اساس مقدار ورودی تابع [B]srand()[/B] می شود. تابع[B]srand()[/B] نيز در فايل کتابخانه ای [B]stdlib.h[/B] قرار دارد. در برنامه زير به نحوه استفاده از تابع [B]srand()[/B] پی خواهيد برد.
    کد:

    کد:
     #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;
    }
    خروجی برنامه به صورت زير می باشد.
    کد PHP:
    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 
    همانطور که می بينيد بر اساس ورودی های مختلف خروجی نيز تغيير می کند. توجه داشته باشيد که ورودی های يکسان خروجی های يکسانی دارند.
    اگر بخواهيم بدون نياز به وارد کردن عددی توسط کاربر، اعداد تصادفی داشته باشيم می توانيم از تابع [B]time[/B] که در فايل کتابخانه ای [B]time.h[/B] قرار دارد استفاده کنيم . تابع [B]time[/B] ساعت کامپيوتر را می خواند و زمان را بر حسب ثانيه بر می گرداند ، به اين ترتيب دستور زير:
    کد:

    کد:
    srand(time(0));
    باعث می شود که تابع [B]rand()[/B] در هر بار اجرای برنامه اعداد متفاوتی را ايجاد کند. اگر برنامه فوق را به صورت زير باز نويسی کنيم با هر بار اجرای برنامه اعداد تصادفی متفاوتی خواهيم داشت.



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

    کد:
     #include <iostream.h>
    کد:
     کد:
     
     
    #include <stdlib.h>
    #include <time.h>
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
صفحه 2 از 4 نخست 1234 آخرین
نمایش نتایج: از 11 به 20 از 35

اطلاعات موضوع

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

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ: 9
    آخرين نوشته: 2015-08-29, 07:18 PM
  2. پاسخ: 6
    آخرين نوشته: 2013-12-17, 12:00 AM
  3. دانلود كتاب اموزش راهنماي برنامه نويسي جاوا
    توسط MspSoft در انجمن JavaScript و Framework های مبتنی بر آن
    پاسخ: 0
    آخرين نوشته: 2012-12-06, 10:21 AM
  4. دانلود كتاب اموزشي فارسي mvc
    توسط MspSoft در انجمن ASP.NET
    پاسخ: 0
    آخرين نوشته: 2012-07-06, 10:17 AM
  5. آشنايي و آموزش مقدماتي با زبان نويسي دلفي
    توسط MspSoft در انجمن برنامه نویسی در Delphi
    پاسخ: 8
    آخرين نوشته: 2011-11-25, 10:23 AM

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

Content Relevant URLs by vBSEO 3.6.0 RC 2