Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "توابع در C++ قسمت اول اصول كامپيوتر 1."— Presentation transcript:

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

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

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

4 توابع كتابخانه اي رياضي در C++
توابع عمومي رياضي را پياده سازي مي كنند با الحاق <cmath> به برنامه مي توان از آنها استفاده كرد فرخواني اين توابع به شكل زير است: functionName (argument) مثال cout << sqrt( ); اين دستور تابع 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. Function prototype 2. Loop Function definition Program Output
1 // Fig. 3.3: fig03_03.cpp 2 // Creating and using a programmer-defined function 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++ ) 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 } Notice how parameters and return value are declared. 1. Function prototype 2. Loop Function definition Program Output

9 1. Function prototype (3 parameters) 2. Input values 2.1 Call function
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 Function definition Program Output
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 ) max = y; 34 35 if ( z > max ) max = z; 37 38 return max; 39 } Function definition Program Output Enter three integers: Maximum is: 85 Enter three integers: Maximum is: 92 Enter three integers: 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 <cstdlib>
i = rand(); <cstdlib> عدد شبه تصادفي بين صفر تا RAND_MAX‌توليد مي كند . اين ثابت معمولا برابر است اعداد شبه تصادفي ، دنباله اي از اعداد تصادفي هستند كه تحت فرمول ويژه اي توليد مي شوند در هربار اجراي برنامه، اين دنباله تكرار مي شودs تابع srand نقطه شروع اين دنباله را تعيين مي كند srand( seed ); srand( time( 0 ) ); //must include <ctime> time( 0 ) زمان كامپايل شدن برنامه را بر مي گرداند استفاده از اين تابع سبب مي شود پس از هر بار كامپايل برنامه، دنباله متفاوتي توليد شود

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

15 1. Define loop Output random number Program Output
1 // Fig. 3.7: fig03_07.cpp 2 // Shifted, scaled integers produced by 1 + rand() % 6 3 #include <iostream> 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++ ) { cout << setw( 10 ) << ( 1 + rand() % 6 ); 18 if ( i % 5 == 0 ) cout << endl; 21 } 22 23 return 0; 24 } 1. Define loop Output random number Program Output Notice rand() % 6 . This returns a number between 0 and 5 (scaling). Add 1 to get a number between 1 and 6. Executing the program again gives the same "random" dice rolls.

16 2.1 Use srand to change random sequence
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++ ) { cout << setw( 10 ) << 1 + rand() % 6; 25 if ( i % 5 == 0 ) 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 Program Output Notice how the die rolls change with the seed.
Enter seed: 67 Enter seed: 432 Notice how the die rolls change with the seed. Program Output

18 مثال : بازي شانسي ثابتها از 0 شروع شده و يكي يكي اضافه مي شوند.
نوع داده شمارشي: مجموعه اي از اعداد صحيح كه با اسم تعريف مي شوند 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.1 Initialize variables and enum
1 // Fig. 3.10: fig03_10.cpp 2 // Craps 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 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 ) { case 7: case 11: // win on first roll gameStatus = WON; break; case 2: case 3: case 12: // lose on first roll gameStatus = LOST; break; 1. rollDice prototype 1.1 Initialize variables and enum 1.2 Seed srand 2. Define switch statement for win/loss/continue Notice how the enum is defined

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

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

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


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

Similar presentations


Ads by Google