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

25
وش ن ر ذ هدی آ مhttp://azarnoosh.mshdiau.ac.ir م: ج ن پ ث ح ن م ه ظ ف های حا س لا ک ع و ب وآ) ن س ح ر گ ب ا ی گ/ ل آ) ت/3 ی ور ی م

Upload: huslu

Post on 08-Jan-2016

53 views

Category:

Documents


4 download

DESCRIPTION

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

TRANSCRIPT

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

مهدی آذرنوش

http://azarnoosh.mshdiau.ac.ir

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

یموریت

گی ال

رگساب

ح

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

2

توابع و کال

س های حافظه

Lecture_5

فهرست مطالب

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

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

3

مقدمه

Lecture_5

تعریف توابع

نوشتن تابع:•براي هر قسمت از برنامه که به صورت منطقي –

مي تواند جداگانه کاري را انجام دهد.

انواع توابع•(cin، sin، clrscrتوابع کتابخانه اي: )–mainتابع اصلي برنامه: –

توابع تعريف شده توسط برنامه نويس–

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

4

مقدمه

Lecture_5

مزاياي استفاده از توابع برنامه نويسي ساخت يافته

نوشتن برنامه ساده تر مي شود.•

تقسيم برنامه هاي بزرگ به بخش هاي ساده و •کوچک تر

دستورالعملها و داده هاي هر تابع مستقل از ساير بخشها –اجرا مي شود.

توانايي ايجاد همکاري بين افراد مختلف در اجراي هر –بخش

اشکال زدايي ساده تر برنامه–

استفاده از توابع در برنامه هاي ديگر با تغييرات اندک•

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

5

مقدمه

Lecture_5

جنبه هاي مختلف يک تابع

تعريف تابع:•مجموعه اي از دستورات که عملکرد تابع را مشخص مي –

کند.)( مي نويسيم.mainتوابع را بعد از تابع –

فراخواني تابع:•دستوري که تابع را فراخواني مي کند.–فراخواني با نام تابع صورت مي گيرد. )نامگذاري مانند –

متغيرها(

اعالن تابع )الگوي تابع(:•مشخص کنندة نحوة فراخواني تابع–

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

6

آشناییب اساختارت وابع

Lecture_5

چگونگی بیان ساختار تابع

نوع تابع< نام تابع )ليست پارامترها(>{

;دستور 1;دستور 2…nدستور ;

}

#include <iostream.h>

void sample (int x, int y); الگوی تابع

int main( ) { int a, b; … sample (a, b); فراخواني تابع … return 0;}

void sample (int x, int y) عنوان تابع{ cout << “\n function structure”; cout << “x=” << x; …}

آرگومانها

پارامترها

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

7

آشناییب اساختارت وابع

Lecture_5

نکات مهم در تعریف تابع

)( اعالن کنيد.mainالگوي تمام توابع را قبل از تابع •)( نيز مجاز مي باشد.mainاعالن در تابع –

نوع توابع را مشخص کنيد.•

براي اجراي تابع آن را با نامش فراخواني کنيد.•

متغيرهاي هر تابع داخل آن تعريف مي شود و امکان استفاده •از آنها در تابع ديگر مگر از طريق پارامترها ممکن نمي باشد.

تعريف تابع داخل تابع ديگر امکان پذير نيست.•

هنگام فراخواني به تعداد و نوع پارامترها و آرگومانها دقت •کنيد.

هنگام اعالن الگوي تابع نيازي به ذکر اسامي پارامترها نيست •و ذکر نوع کافيست.

را قرار مي دهيم.voidاگر تابع فاقد آرگومان است کلمة •

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

8

آشناییب اساختارت وابع

Lecture_5

نحوة عملکرد تابع هنگام فراخواني

void func1 (int);void func2 (int, int);int func3 (float);

int main() {…func2(a,b);…func1(a);…cout << func3(c);…return 0;

}

void func2 (int, int){…}

void func1 (int){…}

int func3 (float){…}

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

9

آشناییب اساختارت ابع

Lecture_5

روشهاي ارسال پارامتر به توابع

انواع ارسال پارامتر از تابع فراخوان به تابع مورد •نظرروش فراخواني با مقدار–

توابعي که هيچ مقداري را باز نمي گردانند. • توابعي که فقط يک مقدار را باز مي گردانند.• مقادير آرگومانها در پارامترها کپی شده، تغيير •

پارامترها تأثيري در آرگومانها ندارد.

روش فراخواني با ارجاع– توابع مي توانند چند مقدار را بازگردانند.• آدرس آرگومانها به پارامترها منتقل مي شود. •

)بحث اشاره گرها(

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

10

توابعب دونب ازگرداندن مقدار

Lecture_5

مثال توابع بدون بازگرداندن مقدار

: نمايش زمان بر حسب ثانيه1-5مثال •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.

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

11

توابعب دونب ازگرداندن مقدار

Lecture_5

مثال توابع بدون بازگرداندن مقدار - 2: يافتن بزرگترين مقدار بين سه عدد2-5مثال •

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

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

12

توابعب دونب ازگرداندن مقدار

Lecture_5

مثال توابع بدون بازگرداندن مقدار - 3: نمايش نحوة تأثير آرگومانها و 3-5مثال •

پارامترها بر يکديگر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;}

Enter two integer numbers: 46 23

You entered : x= 46 y= 23f1 receives : x= 46 y= 23new values in f1 : x=47 y=

24After return from f1 : x=

46 y= 23

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

13

توابعی کهی ک مقدارب از می گردانند

Lecture_5

مثال توابع با بازگرداندن یک مقدار

: تغيير حروف از کوچک به بزرگ4-5مثال •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: rResult is: R

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

14

توابعی کهی ک مقدارب از می گردانند

Lecture_5

مثال توابع با بازگرداندن یک مقدار - 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

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

15

توابعی کهی ک مقدارب از می گردانند

Lecture_5

مثال توابع با بازگرداندن یک مقدار - 3: تشخيص اول بودن يک عدد6-5مثال •

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; }

Enter a number: 23

Number 23 is prime.Do you want to continue?

(y/n): yEnter a number: 56

Number 56 is not prime.Do you want to

continue?(y/n): n

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

16

توابعب ازگشتی

Lecture_5

تعریف توابع بازگشتي

توابعي که در داخل خودشان، به نحوی خود را •فراخواني مي کنند:

فراخواني مستقيم: يکي از دستورات تابع، فراخوان –خودش است.

فراخواني غير مستقيم: دو تابع وجود دارد که هر يک –ديگري را فراخواني مي کند.

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

بازگشتي شود.

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

17

توابعب ازگشتی

Lecture_5

مثال توابع بازگشتي: محاسبة فاکتوريل9-5مثال •

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

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

18

توابعب ازگشتی

Lecture_5

2مثال توابع بازگشتي -

: محاسبة ضرب دو عدد به صورت 10-5مثال •بازگشتي

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

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

19

توابعب ازگشتی

Lecture_5

3مثال توابع بازگشتي -

: چاپ ارقام يک عدد صحيح11-5مثال •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

15347

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

20

شرایط و حالات خاصت وابع Lecture_5

شرايط عدم نياز به اعالم الگوي تابع: محاسبة سود بانکي13-5مثال •

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

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

21

شرایط و حالات خاصت وابع Lecture_5

آرگومان هاي پيش فرض

تعيين مقداري به عنوان پيش فرض براي آرگومان •توابع

محل تعيين پيش فرض: الگوي تابع•

تعريف تابع در اين حالت با قبل تفاوتي ندارد.•محدوديت:•

در تابعي با چند آرگومان، آرگومانهاي داراي پيش فرض بايد –سمت راست ترين آرگومانها باشند.

هنگام فراخواني تابع، تمام آرگومانهاي سمت راست –آرگومان حذف شده نيز بايد حذف شوند.

Example:

long myfunction (int x=50);

long myfunction (int = 50);

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

22

شرایط و حالات خاصت وابع Lecture_5

2آرگومان هاي پيش فرض -

: محاسبة حجم مکعب مستطيل17-5مثال •

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);}

First time Calculation:Length= 100 Width= 50

Height= 2Area= 10000

Second time Calculation:Length= 100 Width= 50

Height= 1Area= 5000

Third time Calculation:Length= 100 Width= 25

Height= 1Area= 2500

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

23

توابع کتابخانها ی

Lecture_5

توابع رياضي

محاسبة قدر مطلق:•• int abs (int num)• double fabs (double num)• long labs (long num)

گرد کردن عدد:•• double ceil (double num)

محاسبة کوچکترين عدد صحيح بزرگتر يا مساوي با –numعدد

• double floor (double num)محاسبة بزرگترين عدد صحيح کوچکتر يا مساوي با –

numعدد

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

24

توابع کتابخانها ی

Lecture_5

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)

ورودي زاويه برحسب راديان–

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

25

توابع کتابخانها ی

Lecture_5

3توابع رياضي - توابع لگاريتمي و نمايي و تواني:•

)پاية لگاريتم طبيعي(eمحاسبة تواني از –• double exp (double arg)

محاسبة لگاريتم طبيعي يک عدد مثبت–• double log (double num)

محاسبة توانهاي يک مبنا–• double pow (double base, double expe)

10محاسبة توانهاي مبناي –• double pow10 (int expe)

اعداد مثبت 10محاسبة لگاريتم مبناي –• double log10 (double num)

محاسبة جذر يک عدد مثبت–• double sqrt (double num)