Download presentation
Presentation is loading. Please wait.
Published byΩσαννά Βουρδουμπάς Modified over 6 years ago
1
פונקציות לעיתים קרובות לא נוח להגדיר את כל התוכנה בתוך גוף אחד.
עדיף לחלק תוכנה לבלוקים / תהליכים נפרדים (תכנית משנה – קטע קוד) שנוכל לבצע בכל עת ולתכנת כל בלוק / תהליך בנפרד. זאת גם אחד מהתנאים לכתיבת תוכנה טובה. רעיון: לחלק תוכנה לתת-תוכנות קטנות יחסית . ואם יש שגיאה אז קל יותר למצוא לתקן אותה. קטע קוד כזה נקרא פונקציה. נגדיר את מושג הפונקציה.
2
תזכורת מעניינת: כל תוכנית שכתבנו עד היום כוללה פונקציה המוכרת לנו מימים ימימה: int main() { …… return 0; } ממנה מתחיל ביצוע התכנית. בכל תכנית שלנו תמיד תהיה פונקציה main() והמעבד מתחיל את הרצת התכנית מפונקציה זאת. הפונקציות אחרות נוספות תכללנה בתכנית על-פי שיקול דעתנו.
3
Type Function_Name(Type Parmeter_1,…,Type Parameter_n) { ……. }
הגדרה פורמאלית: Type Function_Name(Type Parmeter_1,…,Type Parameter_n) { ……. } )רשימת-פרמטרים שהפונקציה מקבלת מה-(mainשם-פונקציה ערך-מוחזר לידי הפונקציה ל-main בתוך סוגריים () נכתוב את הנתונים שהפונקציה מקבלת מה- main ננקוב בסוגו של כל משתנה ובשם המשתנה לפיו תתייחס הפונקציה אל הנתון. הפונקציה חייבת לקבל נתונים מאותו סוג שצוין ,באותו סדר שצוין, ובאותה כמות שצוינה. פונקציה מסוג int, char, float, double יכולה להחזיר ערך אחד בלבד פקודת החזרת ערך: return (parameter)
5
//--------------------------------
cout<< "\nThank You\n"; }
6
בדוגמה זו בהגדרת הפונקציה, לפני שמה, מופיעה המילה השמורה void
משמעה- "כלום" . הפונקציה לא מקבלת שום פרמטרים מה- main()ולא מחזירה כלום (void) ל- main().
10
הסבר: יש לשים לב לאופן הרישום:
גוף של פונקציה הגדרנו אחרי main() אבל שם של הפונקציה כולל סוגה ופרמטרים צריך להגדיר לפני main(). שיטה זו מאפשרת לנו לכתוב מספר רב של פונקציות, גם כאלה אשר קוראות זו לזו, מבלי שנצטרך ליחס כל חשיבות לסדרן. #include <stdio.h> void myfunc(); (prototype) – הפרוטוטיפ של הפונקציה // void main() { cout<<"Ma nishma\n"; myfunc() ; //קריאה לפונקציה cout<<"ok\n"; // cout<< "\nThank You\n"; } void myfunc() cout<< "Beseder\n" ;
12
דוגמא : פונקציה שכן מקבלת ערכים אך מחזירה void
#include <iostream> #include <string> using namespace std; void min(int num1, int num2) { if (num1<num2) cout<<"num1="<<num1<<endl<<"num2="<<num2<<endl<<"num1<num2"<<endl; else cout<<num1<<endl<<num2<<endl<<"num1>num2"<<endl; } int main () int num1,num2; cout<<"num1=? num2=?"<<endl; cin>>num1>>num2; min(num1,num2); return 0;
13
דוגמא : פונקציה שכן מקבלת ערכים אך מחזירה void+ הפונקציה שלא מקבלת פרמטרים
מה- main() ולא מחזירה פרמטר ל-main() #include<iostream> using namespace std; // void myname() { cout<<"func name is:"<<endl; } void mymekabelet(double a, double b) double mykefel=a*b; cout<<"kefel =a*b="<<mykefel<<endl; int main() double a,b; cout<<"Enter your numbers:"<<endl; cin>>a>>b; cout<<"Your numbers:"<<"a="<<a<<" "<<"b="<<b<<endl<<endl; myname(); mymekabelet(a,b);
14
#include<iostream>
using namespace std; // double mysym(double a, double b) { double mysyma=a+b; return mysyma; } // double myhisur(double a, double b) double myhisura=a-b; return myhisura; void myname() cout<<"my name is....."<<endl;
15
void mymekabelet(double a, double b)
{ double mykefel=a*b; cout<<"kefel =a*b="<<mykefel<<endl; } // int main() double a,b,hibur,hisur; cout<<"Enter your numbers:"<<endl; cin>>a>>b; cout<<"Your numbers:"<<"a="<<a<<""<<"b="<<b<<endl<<endl; hibur=mysym(a,b); hisur=myhisur(a,b); myname(); mymekabelet(a,b); cout<<"a+b="<<hibur<<endl; cout<<"a-b="<<hisur<<endl;
17
דוגמה: #include <iostream> using namespace std;
int max(int x, int y) { if (x>y) return x; else return y; } int main() int x = 5, y = 7; int m = max(x,y); cout<<"max = "<<m<<endl; cout<<"max = "<<max(9,-8)<<endl; return 0; הפונקציה max מוגדרת כך שהיא מקבלת שני פרמטרים מסוג int ומחזירה ערך גם מסוג int . תפקידה של הפונקציה הוא למצוא את המספר הגדול מבין שני המספרים שהיא מקבלת. הפונקציה main קוראת לפונקציה max עם הפרמטרים 5 ו- 7 ומבצעת השמה של ערך המוחזר על-ידי הפונקציה ל- m , לאחר מכן התוצאה נשלחת למסך. בסוף התוכנית שוב ישנה קריאה לפונקציה max אך הפעם עם ערכים 9 ו- 8-.
18
המשמעות של פונקציה המחזירה void היא שהפונקציה אינה מחזירה ערך כלל.
דוגמה 1 #include<iostream> using namespace std; void triangleStars(int n) } for (int i = 1; i <= n; i++) { for (int j = n; j >= i; j--) cout << "* "; cout << endl; int main() int num; cout << "enter number of strings "; cin >> num; triangleStars(num); return 0; פונקציה triangleStars הוגדרה כפונקציה המחזירה ערך void , כוון שהיא לא מחזירה ערך כלל, רק מדפיסה משולש ישר זווית של n כוכביות על המסך.
19
דוגמה 2 פונקציה isEven מקבלת מספר שלם x ומחזירה אמת אם המספר הוא זוגי, אחרת היא מחזירה שקר bool isEven(int x) { bool ans = true; if (x%2 != 0) ans = false; } return ans;
20
#include<iostream>
סוגים של משתנים נתבונן בדוגמא פשוטה: ב-C++ נכתוב: #include<iostream> using namespace std; int stam(); int main() { int z=8; int w=stam(); cout<<"from main="<<5*z<< " " <<"from stam()="<< w <<endl; return 0; } int stam() int z=6; return(5*z); }
21
כאן הגדרנו משתנה z פעמיים: פעם אחד בתוך פונקציה main() ופעם בפונקציה stam()
אבל משתנה z שהוגדר בתוך פונקציה stam() אינו משפיע על משתנה z החיצוני (של ה-MAIN). כל משתנה המוגדר בתוך פונקציה נקרא משתנה לוקאלי (משתנה מקומי) אפשר לגשת למשתנה הזה רק בתוך הפונקציה. הוא לא קיים מחוץ לפונקציה.
22
נתבונן בדוגמא אחרת(f4): ב-C נכתוב:
#include<iostream> using namespace std; int z=2; int stam(); int main() { cout<<"from stam()"<<stam()<<endl; return 0; } int stam() return(5*z);
23
כאן לא הגדרנו בתוך פונקציה שום משתנה ולא העבנו שום פרמטר, אבל לא נקבל טעות.
למשתנה שהגדרנו לפני main() ניתן לגשת מכל חלק של תוכנה. המשתנה כזה נקרא משתנה גלובאלי הערה: עדיף לצמצם בשימוש של משתנים גלובאליים ולהגדיר משתנים לוקליים בתוך הפונקציה.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.