1 / 23

توابع در C++ قسمت اول

توابع در C++ قسمت اول. اصول كامپيوتر 1. آشنايي. تقسيم و حل ساخت يك برنامه با استفاده از قطعات كوچكتر مستقل هر بخش، وظيفه خاصي دارد و به دليل كوچك بودن ،مديريت آن آسانتر است. اجزا برنامه در C++. هر برنامه : تركيبي از توابع موجود در كتابخانه C++ و توابع جديد است.

terena
Download Presentation

توابع در C++ قسمت اول

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. توابع در C++ قسمت اول اصول كامپيوتر 1

  2. آشنايي • تقسيم و حل • ساخت يك برنامه با استفاده از قطعات كوچكتر مستقل • هر بخش، وظيفه خاصي دارد و به دليل كوچك بودن ،مديريت آن آسانتر است

  3. اجزا برنامه در C++ • هر برنامه : • تركيبي از توابع موجود در كتابخانه C++ و توابع جديد است. • كتابخانه استاندارد C++ ‌مجموعه اي غني از توابع مفيد و كاربردي است • با فراخواني تابع، از توابع استفاده مي كنيم • هنگام فراخواني تابع، نام تابع وبرخي از اطلاعات مورد نياز آن را ذكر مي كنيم • فراخواني تابع مانند كار رييس و كارگر است: رييس(تابع فراخوني كننده )‌از كارگر (تابع فراخواني شده) مي خواهد كه كاري را انجام داده و برگردد • كد تابع يكبار نوشته مي شود: • دستورات يك تابع از توابع ديگر جدا و مخفي ست. • مثال: (رييس و كارگر): رييس لازم نيست بداند كه كارگر كار مورد نظر را چگونه انجام مي دهد. او تنها به انجام شدن كار اهميت مي دهد.

  4. توابع كتابخانه اي رياضي در C++ • توابع عمومي رياضي را پياده سازي مي كنند • با الحاق <cmath>به برنامه مي توان از آنها استفاده كرد • فرخواني اين توابع به شكل زير است: functionName (argument) • مثال cout << sqrt( 900.0 ); • اين دستور تابع sqrt (ريشه دوم ) را فراخواني مي كند. دستور بالا، عدد 30 را چاپ مي كند • همانند بقيه توابع مشابه در كتابخانه رياضي، اين تابع يك آرگومان از نوع double ‌مي گيرد و يك نتيجه از همان نوع توليد مي كند.

  5. توابع كتابخانه اي رياضي در C++ • آرگومان توابع مي تواند يكي از انواع زير باشد • ثابت sqrt( 4 ); • متغير sqrt( x ); • عبارت sqrt( sqrt( x ) ) ; sqrt( 3 - 6x );

  6. توابع • با استفاده از توابع: • برنامه نويس مي تواند برنامه خود را به چندين بخش تقسيم كند • هر بخش را يك پيمانه (Module‌) مي گويند • تقسيم برنامه به چند پيمانه را Modularization مي گويند • متغير هاي محلي • تنها در تابعي كه تعريف شده اند، شناخته مي شوند • پارامترهاي تابع • دسته اي از متغيرهاي محلي هستند كه براي انتقال داده از خارج به داخل تابع استفاده مي شوند

  7. تعريف توابع • هنگام برنامه نويسي، توابعي تعريف كنيد كه: • داده ها را بگيرند • عملياتي انجام دهند • نتيجه را برگردانند • نحوه تعريف تابع return-value-type function-name( parameter-list ){declarations and statements} • مثال: int square( int y) { return y * y; }

  8. 1 // Fig. 3.3: fig03_03.cpp 2 // Creating and using a programmer-defined function Notice how parameters and return value are declared. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 int square( int ); // function prototype 9 10 int main() 11 { 12 for ( int x = 1; x <= 10; x++ ) 13 cout << square( x ) << " "; 14 15 cout << endl; 16 return 0; 17 } 18 19 // Function definition 20 int square( int y ) 21 { 22 return y * y; 23 } 1. Function prototype 2. Loop Function definition Program Output 1 4 9 16 25 36 49 64 81 100

  9. 1 // Fig. 3.4: fig03_04.cpp 2 // Finding the maximum of three integers 3 #include <iostream> 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 int maximum( int, int, int ); // function prototype 10 11 int main() 12 { 13 int a, b, c; 14 15 cout << "Enter three integers: "; 16 cin >> a >> b >> c; 17 18 // a, b and c below are arguments to 19 // the maximum function call 20 cout << "Maximum is: " << maximum( a, b, c ) << endl; 1. Function prototype (3 parameters) 2. Input values 2.1 Call function

  10. 21 22 return 0; 23 } 24 25 // Function maximum definition 26 // x, y and z below are parameters to 27 // the maximum function definition 28 int maximum( int x, int y, int z ) 29 { 30 int max = x; 31 32 if ( y > max ) 33 max = y; 34 35 if ( z > max ) 36 max = z; 37 38 return max; 39 } Function definition Program Output Enter three integers: 22 85 17 Maximum is: 85 Enter three integers: 92 35 14 Maximum is: 92 Enter three integers: 45 19 98 Maximum is: 98

  11. الگوي توابع • الگوي تابع از قسمتهاي زير تشكيل يافته است • نام تابع • پارامترها • داده هايي كه تابع بعنوان ورودي دريافت مي كند • نوع نتيجه برگشتي • بيانگر نوع داده برگشتي به فراخواننده است. )پيش فرض int ) • voidنوع برگشتي void ‌بدين معني است كه تابع هيچ چيزي بر نمي گرداند • اگر تابع فراخواننده پيش از تابع فراخواني شده ، نوشته شده باشد، لازم است الگوي تابع پيش از استفاده از آن اعلام شود • مثال: int maximum( int, int, int ); • سه عدد صحيح مي گيرد • يك عدد صحيح برمي گرداند

  12. فايلهاي Header • Header files • حاوي الگوي توابع كتابخانه اي هستند • <cstdlib> , <cmath>, etc. • با دستور #include <filename>به برنامه اضافه مي شوند • مثال: #include <cmath> • فايلهاي Header خصوصي • برنامه نويس مي تواند فايلهاي Header‌مورد نياز خود را تعريف كند و الگوي توابع خاصي را در آنها قرار دهد • با اين نام و پسوند ذخيره مي شوند: filename.h • با استفاده از دستور زير به برنامه اضافه مي شوند: #include "filename.h"

  13. توليد اعداد تصادفي • تابع rand i = rand(); • <cstdlib> • عدد شبه تصادفي بين صفر تا RAND_MAX‌توليد مي كند . • اين ثابت معمولا برابر 32767 است • اعداد شبه تصادفي ، دنباله اي از اعداد تصادفي هستند كه تحت فرمول ويژه اي توليد مي شوند • در هربار اجراي برنامه، اين دنباله تكرار مي شودs • تابع srand • نقطه شروع اين دنباله را تعيين مي كند srand( seed ); srand( time( 0 ) ); //must include <ctime> • time( 0 ) • زمان كامپايل شدن برنامه را بر مي گرداند • استفاده از اين تابع سبب مي شود پس از هر بار كامپايل برنامه، دنباله متفاوتي توليد شود

  14. توليد اعداد تصادفي • تغيير دامنه اعداد • با استفاده از عملگر محاسبه باقيمانده مي توان دنباله توليد اعداد تصادفي را به بازه خاصي محدود كرد • X =rand() % 100 براي توليد اعداد از 0 تا 99 • i = rand() % 6 + 1; • توليد اعداد تصادفي از 1 تا 6

  15. 1 // Fig. 3.7: fig03_07.cpp 2 // Shifted, scaled integers produced by 1 + rand() % 6 Notice rand() % 6 . This returns a number between 0and 5 (scaling). Add 1 to get a number between 1and6. 3 #include <iostream> Executing the program again gives the same "random" dice rolls. 4 5 using std::cout; 6 using std::endl; 7 8 #include <iomanip> 9 10 using std::setw; 11 12 #include <cstdlib> 13 14 int main() 15 { 16 for ( int i = 1; i <= 20; i++ ) { 17 cout << setw( 10 ) << ( 1 + rand() % 6 ); 18 19 if ( i % 5 == 0 ) 20 cout << endl; 21 } 22 23 return 0; 24 } 1. Define loop Output random number Program Output 5 5 3 5 5 2 4 2 5 5 5 3 2 2 1 5 1 4 6 4

  16. 1 // Fig. 3.9: fig03_09.cpp 2 // Randomizing die-rolling program 3 #include <iostream> 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 #include <iomanip> 10 11 using std::setw; 12 13 #include <cstdlib> 14 15 int main() 16 { 17 unsigned seed; 18 19 cout << "Enter seed: "; 20 cin >> seed; 21 srand( seed ); 22 23 for ( int i = 1; i <= 10; i++ ) { 24 cout << setw( 10 ) << 1 + rand() % 6; 25 26 if ( i % 5 == 0 ) 27 cout << endl; 28 } 29 30 return 0; 31 } 1. Initialize seed 2. Input value for seed 2.1 Use srand to change random sequence 2.2 Define Loop 3. Generate and output random numbers

  17. Enter seed: 67 1 6 5 1 4 5 6 3 1 2 Enter seed: 432 4 2 6 4 3 2 5 1 4 4 Enter seed: 67 1 6 5 1 4 5 6 3 1 2 Notice how the die rolls change with the seed. Program Output

  18. مثال : بازي شانسي • نوع داده شمارشي: مجموعه اي از اعداد صحيح كه با اسم تعريف مي شوند enum typeName {constant1, constant2…}; • ثابتها از 0 شروع شده و يكي يكي اضافه مي شوند. • اسم ثابتها منحصر بفرد بايد باشد • مثال: enum Status {CONTINUE, WON, LOST}; • استفاده از نوع داده شمارشي: Status enumVar; // create variable enumVar = WON; // set equal to WON enumVar = 1; // ERROR

  19. مثال : بازي شانسي • ثابت هاي شمارشي را مي توان هنگام تعريف مقدار دهي كرد: enum Months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}; • Starts at 1, increments by 1 • قاعده بازي: • دو تاس را با هم بريزيد: • مجموع 7 يا 11 نشانگر برنده شدن بازيگر است • اگر در دور اول 2 ، 3 يا 12 بيايد، بازيگر بازنده است • 4, 5, 6, 8, 9, 10 • عدد بدست آمده امتياز بازيگر است • بازيگر بايد آنقدر تاس بريزد تا : • مجموعي برابر امتياز كسب شده در مرحله اول بدست آورد كه در اين صورت برنده است • مجموع بدست آمده 7 باشد كه دراين صورت بازنده است

  20. 1 // Fig. 3.10: fig03_10.cpp 2 // Craps 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; Notice how the enum is defined 7 8 #include <cstdlib> 9 10 #include <ctime> 11 12 using std::time; 13 14 int rollDice( void ); // function prototype 15 16 int main() 17 { 18 enum Status { CONTINUE, WON, LOST }; 19 int sum, myPoint; 20 Status gameStatus; 21 22 srand( time( 0 ) ); 23 sum = rollDice(); // first roll of the dice 24 25 switch ( sum ) { 26 case 7: 27 case 11: // win on first roll 28 gameStatus = WON; 29 break; 30 case 2: 31 case 3: 32 case 12: // lose on first roll 33 gameStatus = LOST; 34 break; 1. rollDice prototype 1.1 Initialize variables and enum 1.2 Seed srand 2. Define switch statement for win/loss/continue

  21. 35 default: // remember point 36 gameStatus = CONTINUE; 37 myPoint = sum; 38 cout << "Point is " << myPoint << endl; 39 break; // optional 40 } 41 42 while ( gameStatus == CONTINUE ) { // keep rolling 43 sum = rollDice(); 44 45 if ( sum == myPoint ) // win by making point 46 gameStatus = WON; 47 else 48 if ( sum == 7 ) // lose by rolling 7 49 gameStatus = LOST; 50 } 51 52 if ( gameStatus == WON ) 53 cout << "Player wins" << endl; 54 else 55 cout << "Player loses" << endl; 56 57 return 0; 58 } 59 2.1 Define loop to continue playing 2.2 Print win/loss

  22. Player rolled 6 + 5 = 11 Player wins 60 int rollDice( void ) 61 { Player rolled 6 + 5 = 11 Player wins Player rolled 4 + 6 = 10 Point is 10 Player rolled 2 + 4 = 6 Player rolled 6 + 5 = 11 Player rolled 3 + 3 = 6 Player rolled 6 + 4 = 10 Player wins 62 int die1, die2, workSum; 63 64 die1 = 1 + rand() % 6; Player rolled 1 + 3 = 4 Point is 4 Player rolled 1 + 4 = 5 Player rolled 5 + 4 = 9 Player rolled 4 + 6 = 10 Player rolled 6 + 3 = 9 Player rolled 1 + 2 = 3 Player rolled 5 + 2 = 7 Player loses 65 die2 = 1 + rand() % 6; 66 workSum = die1 + die2; 67 cout << "Player rolled " << die1 << " + " << die2 68 << " = " << workSum << endl; 69 70 return workSum; 71 } 3. Define rollDice function Program Output

  23. پروژه شماره 1- بازي حدس اعداد • برنامه اي بنويسيد كه عددي 5 رقمي به صورت تصادفي توليد كند و از كاربر بخواهد اين عدد را حدس بزند. • عدد توليد شده را عدد مخفي و عددي را كه كاربر وارد مي كند عدد كاربر مي ناميم • برنامه بايد عدد كاربر را با عدد مخفي مقايسه كند و در صورت مساوي نبودن اين دو عدد، دو كميت زير را محاسبه و چاپ كند: • تعداد ارقام مشابه عدد مخفي و عدد كاربر • تعداد ارقام مشابه عدد مخفي و عدد كاربر كه ارزش مكاني آنها نيز مشابه باشد • مثال : عدد مخفي 11386 و عدد كاربر 18755 • تعداد ارقام مشابه: 2 ( 1و 8 در هر دو عدد موجودند) • تعداد ارقام مشابه و هم ارزش : 1 ( رقم 1 در هر دو عدد در مكان پنجم است) • آيا مي توانيد الگوريتمي ارائه دهيد كه با تعداد قدمهاي متناهي، هر عدد ممكني را حدس بزند؟ • حداقل و حداكثر تعداد قدمهاي لازم براي حدس يك عدد چقدر است؟ • پروژه انفرادي و مهلت انجام آن تا دو هفته آينده است. • از توابع مناسب براي پياده سازي قسمتهاي مختلف اين برنامه استفاده كنيد

More Related