1 / 25

مبحث پنجم: توابع و کلاسهای حافظه

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

huslu
Download Presentation

مبحث پنجم: توابع و کلاسهای حافظه

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. حسابگری الگوریتمی مبحث پنجم: توابع و کلاسهای حافظه

  2. توابع و کلاس های حافظه فهرست مطالب • مقدمه • آشنایی با ساختار توابع • توابع بدون بازگرداندن مقدار • توابعی که یک مقدار باز می گردانند • توابع بازگشتی • شرایط و حالات خاص توابع • توابع کتابخانه ای

  3. مقدمه تعریف توابع • نوشتن تابع: • براي هر قسمت از برنامه که به صورت منطقي مي تواند جداگانه کاري را انجام دهد. • انواع توابع • توابع کتابخانه اي: (cin، sin، clrscr) • تابع اصلي برنامه: main • توابع تعريف شده توسط برنامه نويس

  4. مقدمه مزاياي استفاده از توابع برنامه نويسي ساخت يافته • نوشتن برنامه ساده تر مي شود. • تقسيم برنامه هاي بزرگ به بخش هاي ساده و کوچک تر • دستورالعملها و داده هاي هر تابع مستقل از ساير بخشها اجرا مي شود. • توانايي ايجاد همکاري بين افراد مختلف در اجراي هر بخش • اشکال زدايي ساده تر برنامه • استفاده از توابع در برنامه هاي ديگر با تغييرات اندک

  5. مقدمه جنبه هاي مختلف يک تابع • تعريف تابع: • مجموعه اي از دستورات که عملکرد تابع را مشخص مي کند. • توابع را بعد از تابع main() مي نويسيم. • فراخواني تابع: • دستوري که تابع را فراخواني مي کند. • فراخواني با نام تابع صورت مي گيرد. (نامگذاري مانند متغيرها) • اعلان تابع (الگوي تابع): • مشخص کنندة نحوة فراخواني تابع

  6. آشنایی با ساختار توابع چگونگی بیان ساختار تابع #include <iostream.h> void sample (int x, int y); الگوی تابع intmain( ) { int a, b; … sample (a, b); فراخواني تابع … return 0; } void sample (int x, int y) عنوان تابع { cout << “\n function structure”; cout << “x=” << x; … } <نوع تابع> نام تابع (ليست پارامترها) { 1دستور; 2دستور; … nدستور ; } آرگومانها پارامترها

  7. آشنایی با ساختار توابع نکات مهم در تعریف تابع • الگوي تمام توابع را قبل از تابع main() اعلان کنيد. • اعلان در تابع main() نيز مجاز مي باشد. • نوع توابع را مشخص کنيد. • براي اجراي تابع آن را با نامش فراخواني کنيد. • متغيرهاي هر تابع داخل آن تعريف مي شود و امکان استفاده از آنها در تابع ديگر مگر از طريق پارامترها ممکن نمي باشد. • تعريف تابع داخل تابع ديگر امکان پذير نيست. • هنگام فراخواني به تعداد و نوع پارامترها و آرگومانها دقت کنيد. • هنگام اعلان الگوي تابع نيازي به ذکر اسامي پارامترها نيست و ذکر نوع کافيست. • اگر تابع فاقد آرگومان است کلمة void را قرار مي دهيم.

  8. آشنایی با ساختار توابع نحوة عملکرد تابع هنگام فراخواني void func1 (int); void func2 (int, int); intfunc3 (float); int main() { … func2(a,b); … func1(a); … cout << func3(c); … return 0; } void func2 (int, int) { … } void func1 (int) { … } intfunc3 (float) { … }

  9. آشنایی با ساختار تابع روشهاي ارسال پارامتر به توابع • انواع ارسال پارامتر از تابع فراخوان به تابع مورد نظر • روش فراخواني با مقدار • توابعي که هيچ مقداري را باز نمي گردانند. • توابعي که فقط يک مقدار را باز مي گردانند. • مقادير آرگومانها در پارامترها کپی شده، تغيير پارامترها تأثيري در آرگومانها ندارد. • روش فراخواني با ارجاع • توابع مي توانند چند مقدار را بازگردانند. • آدرس آرگومانها به پارامترها منتقل مي شود. (بحث اشاره گرها)

  10. توابع بدون بازگرداندن مقدار مثال توابع بدون بازگرداندن مقدار • مثال 5-1: نمايش زمان بر حسب ثانيه Example 5-1: #include <iostream.h> void convert (void); int main() { convert() ; return 0; } //************************** void convert (void) { int hours, minutes, second; long int time ; cout << "\n Enter time to be convert: hour, minutes, second: "; cin >> hours >> minutes >> second; time=(long int) (60 * hours + minutes) * 60 + second ; cout << "\n Time is: ” << time << “ seconds"; } Enter time to be convert: hour, minutes, second: 2 2 2 Time is 7322 seconds.

  11. توابع بدون بازگرداندن مقدار مثال توابع بدون بازگرداندن مقدار - 2 • مثال 5-2: يافتن بزرگترين مقدار بين سه عدد Example 5-2: #include <iostream.h> void findmax(int, int, int); int main() { int x, y, m; cout << "\nEnter three integer numbers: "; cin >> x >> y >> m; findmax(x, y, m); return 0; } //********************* void findmax(int p1, int p2, int p3) { int maxp; maxp = (p1 > p2) ? p1 : p2; maxp = (p3 > maxp) ? p3 : maxp; cout << "maximum= " << maxp; } Enter three integer numbers: 46 102 9 maximum= 102

  12. توابع بدون بازگرداندن مقدار مثال توابع بدون بازگرداندن مقدار - 3 • مثال 5-3: نمايش نحوة تأثير آرگومانها و پارامترها بر يکديگر Enter two integer numbers: 46 23 You entered : x= 46 y= 23 f1 receives : x= 46 y= 23 new values in f1 : x=47 y= 24 After return from f1 : x= 46 y= 23 Example 5-3: #include <iostream.h> void f1(int, int); int main() { int x, y; cout << "\nEnter two integer numbers: "; cin >> x >> y; cout << " You entered : x= " << x << " y= " << y; f1(x, y); cout << "\n After return from f1 : x= " << x << " y= " << y; return 0; } //********************* void f1(int x, int y) { cout << "\n f1 recieves : x= " << x << " y= " << y; x ++; y ++; cout << "\n new values in f1 : x= " << x << " y= " << y; }

  13. توابعی که یک مقدار باز می گردانند مثال توابع با بازگرداندن یک مقدار • مثال 5-4: تغيير حروف از کوچک به بزرگ Example 5-4: #include <iostream.h> #include <conio.h> char tocapital(char); int main() { char ch; cout << "\n Enter a character: "; ch = getche(); cout << "\n Result is: " << tocapital(ch); return 0; } //******************** char tocapital(char ch) { if (ch >= 'a' && ch <= 'z') ch -=32; return ch; } Enter a character: r Result is: R

  14. توابعی که یک مقدار باز می گردانند مثال توابع با بازگرداندن یک مقدار - 2 • مثال 5-5: محاسبة مساحت دايره Example 5-5: #include <iostream.h> float area(float); int main() { float r, s; cout << "\nEnter the radius: "; cin >> r; s = area(r); cout << "\nArea = " << s; return 0; } //********************** float area(float r) { float s; s = r * r * 3.14; return s; } Enter the radius: 4.3 Area = 58.0586

  15. Example 5-6: #include <iostream.h> #include <conio.h> int prime(int); int main() { int num; char ans; while(1) { cout << "\n Enter a number: "; cin >> num; if(prime(num)) cout << "\n Number " << num << " is prime."; else cout << "\n Number " << num << " is not prime."; cout << "\n Do you want to continue?(y/n): "; ans = getche(); if(ans != 'y') break; }// end of while return 0; } //******************** int prime(int num) { int i, temp = 1; for(i = 2; (i <= num / 2) && temp ; i++) if(num % i == 0) temp = 0; return temp; } توابعی که یک مقدار باز می گردانند مثال توابع با بازگرداندن یک مقدار - 3 • مثال 5-6: تشخيص اول بودن يک عدد Enter a number: 23 Number 23 is prime. Do you want to continue? (y/n): y Enter a number: 56 Number 56 is not prime. Do you want to continue?(y/n): n

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

  17. توابع بازگشتی مثال توابع بازگشتي • مثال 5-9: محاسبة فاکتوريل Example 5-9: #include <iostream.h> unsigned long fact(int) ; int main() { int m ; cout << "\n Enter a positive integer number: "; cin >> m; cout << "\n number= " << m << " fact= " << fact(m); return 0; } //********************** unsigned long fact(int x) { if(x != 0) return(x * fact(x - 1)) ; return 1 ; } Enter a positive integer number: 10 number= 10 fact= 3628800

  18. توابع بازگشتی مثال توابع بازگشتي - 2 • مثال 5-10: محاسبة ضرب دو عدد به صورت بازگشتي Example 5-10: #include <iostream.h> int product(int x, int y); int main() { int x, y; cout << "\nEnter two integer numbers: "; cin >> x >> y; cout << "\nThier product is " << product(x, y); return 0; } //*********************** int product(int x, int y) { if(y == 1) return x; return(x + product(x, y - 1)); } Enter two integer numbers: 23 3 Their product is 69

  19. توابع بازگشتی مثال توابع بازگشتي - 3 • مثال 5-11: چاپ ارقام يک عدد صحيح Example 5-11: #include <iostream.h> void write_v(int); int main() { int x; cout << "Enter an integer number: "; cin >> x; write_v(x); return 0; } //***************** void write_v(int x) { if (x < 10) cout << x << endl; else { write_v(x / 10); cout << x%10 << endl; } } Enter an integer number: 15347 1 5 3 4 7

  20. شرایط و حالات خاص توابع شرايط عدم نياز به اعلام الگوي تابع • مثال 5-13: محاسبة سود بانکي Example 5-13: #include <iostream.h> float calculate(float balance, float rate, int mon) { int i; float ben, sben = 0; for(i = 0; i < mon; i++){ ben = balance * rate / 100; balance += ben; sben +=ben; } return sben; } //**************************** int main() { int mon; float balance, rate, sben; cout << "\nEnter balance, rate, mon:"; cin >> balance >> rate >> mon; sben = calculate(balance, rate, mon); cout << "\n benefit= " << sben << " balance= " << balance; cout << "\n new balance is: " << balance + sben; return 0; } Enter balance, rate, moon: 10000 5 10 benefit= 6288.95 balance= 10000 new balance is: 16288.9

  21. شرایط و حالات خاص توابع آرگومان هاي پيش فرض • تعيين مقداري به عنوان پيش فرض براي آرگومان توابع • محل تعيين پيش فرض: الگوي تابع • تعريف تابع در اين حالت با قبل تفاوتي ندارد. • محدوديت: • در تابعي با چند آرگومان، آرگومانهاي داراي پيش فرض بايد سمت راست ترين آرگومانها باشند. • هنگام فراخواني تابع، تمام آرگومانهاي سمت راست آرگومان حذف شده نيز بايد حذف شوند. Example: long myfunction (int x=50); long myfunction (int = 50);

  22. شرایط و حالات خاص توابع آرگومان هاي پيش فرض - 2 • مثال 5-17: محاسبة حجم مکعب مستطيل First time Calculation: Length= 100 Width= 50 Height= 2 Area= 10000 Second time Calculation: Length= 100 Width= 50 Height= 1 Area= 5000 Third time Calculation: Length= 100 Width= 25 Height= 1 Area= 2500 Example 5-17: #include <iostream.h> int areaCube (int length, int width= 25, int height= 1); void main() { int area, length= 100, width= 50, height= 2; cout << "\nFirst time Calculation: \n"; cout << areaCube(length, width, height) << endl; cout << "\nSecond time Calculation: \n"; cout << areaCube(length, width) << endl; cout << "\nThird time Calculation: \n"; cout << areaCube(length) << endl; } //************************* int areaCube (int length, int width, int height) { cout << "Length= " << length << " Width= " << width << " Height= " << height; cout << "\nArea= "; return (length*width*height); }

  23. توابع کتابخانه ای توابع رياضي • محاسبة قدر مطلق: • int abs (intnum) • double fabs (double num) • long labs (long num) • گرد کردن عدد: • double ceil (double num) • محاسبة کوچکترين عدد صحيح بزرگتر يا مساوي با عدد num • double floor (double num) • محاسبة بزرگترين عدد صحيح کوچکتر يا مساوي با عدد num

  24. توابع کتابخانه ای توابع رياضي - 2 • توابع مثلثاتي (sin، cos، tan): • double sin (double arg) • زاويه ورودي بر حسب راديان – خروجي در بازة [-1,1] • توابع مثلثاتي (acos، asin، atan): • double asin (double arg) • ورودي بازة [-1,1] – خروجي بر حسب راديان • توابع هيپربوليک (sinh، cosh، tanh) • double tanh (double arg) • ورودي زاويه برحسب راديان

  25. توابع کتابخانه ای توابع رياضي - 3 • توابع لگاريتمي و نمايي و تواني: • محاسبة تواني از e (پاية لگاريتم طبيعي) • double exp (double arg) • محاسبة لگاريتم طبيعي يک عدد مثبت • double log (double num) • محاسبة توانهاي يک مبنا • double pow (double base, double expe) • محاسبة توانهاي مبناي 10 • double pow10 (intexpe) • محاسبة لگاريتم مبناي 10 اعداد مثبت • double log10 (double num) • محاسبة جذر يک عدد مثبت • double sqrt (double num)

More Related