המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

תרגול 6: פונקציות, סוגי משתנים, top-down design

מצגות קשורות


מצגת בנושא: "תרגול 6: פונקציות, סוגי משתנים, top-down design"— תמליל מצגת:

1 תרגול 6: פונקציות, סוגי משתנים, top-down design

2 מבוא למדעי המחשב מ' - תירגול 6
מה היה שבוע שעבר? לולאות מערכים מערכים דו-ממדיים מבוא למדעי המחשב מ' - תירגול 6

3 מבוא למדעי המחשב מ' - תירגול 6
והיום נלמד פונקציות מחסנית הקריאות סוגי משתנים Top-Down design מבוא למדעי המחשב מ' - תירגול 6

4 פונקציות: העברת פרמטרים
מבוא למדעי המחשב מ' - תירגול 6

5 שינוי ערך פרמטר בפונקציה
בשפת C שינוי ערך הפרמטרים בתוך הפונקציה לא ישפיע על ערכי משתנים מחוץ לפונקציה. void setToTen(int x) { x = 10; } int main() { int x = 2; setToTen(x); printf(“%d”,x); return 0; הפרמטר x של setToTen והמשתנה x של main נחשבים משתנים שונים לחלוטין (מקומות אחרים בזיכרון). מה שמשתנה זה רק הערך של העותק של x על המחסנית (מומלץ לצייר את המחסנית לשם הבהרה) יודפס 2 מבוא למדעי המחשב מ' - תירגול 6

6 העברת מערכים לפונקציה כאשר מעבירים מערך בגודל קבוע לפונקציה יש להגדיר אותה באופן הבא: #define N 2 void setToTen(int a[N]){ a[0] = 10; } int main() { int x[N] = {2,2}; setToTen(x); printf(“%d”,x[0]); return 0; #define M 3 #define N 2 void setToTen(int sq[M][N]){ sq[0][0] = 10; } int main() { int x[M][N] = {{2}}; setToTen(x); printf(“%d”,x[0][0]); return 0; פרטים נוספים בהרצאה ובתרגול 8 בקריאה, כותבים את שם המערך ללא סוגריים. תוכן המערך יכול להשתנות (את הסיבה נבין בהמשך) בקריאה לפונקציה: שם המערך ללא סוגריים מה יודפס? מבוא למדעי המחשב מ' - תירגול 7

7 מבוא למדעי המחשב מ' - תירגול 7
העברת מערכים לפונקציה שינוי תוכן מערך בתוך פונקציה משנה את תוכן המערך גם מחוץ לפונקציה! (את הסיבה נבין בהמשך) #define N 2 void setToTen(int a[N]){ a[0] = 10; } int main() { int x[N] = {2,2}; setToTen(x); printf(“%d”,x[0]); return 0; #define M 3 #define N 2 void setToTen(int sq[M][N]){ sq[0][0] = 10; } int main() { int x[M][N] = {{2}}; setToTen(x); printf(“%d”,x[0][0]); return 0; פרטים נוספים בהרצאה ובתרגול 8 מה יודפס? מבוא למדעי המחשב מ' - תירגול 7

8 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות מבוא למדעי המחשב מ' - תירגול 6

9 דע מאין באת ולאן אתה הולך
נביט בקטע תוכנית: הפונקציה delta נקראת כאן פעמיים. בכל פעם, לאחר שהפונקציה מסתיימת, התוכנית ממשיכה ממקום אחר. איך זה קורה? float delta_age; float delta_height; float age1=2, age2=3, height1=1.67, height2=1.78; delta_age = delta(age1, age2); delta_height = delta(height1, height2); מבוא למדעי המחשב מ' - תירגול 6

10 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות במהלך ריצת התוכנית, המערכת מנהלת מחסנית של קריאות. המחסנית מנוהלת בשיטת Last-In-First-Out (ומכאן שמה). על המחסנית נשמרים הנתונים הבאים: לאן לחזור לאחר סיום הפונקציה. ערכי הפרמטרים שהועברו לפונקציה. משתנים לוקאליים של הפונקציה. מבוא למדעי המחשב מ' - תירגול 6

11 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות בתחילת התוכנית, המחסנית ריקה. בכל פעם שנכנסים לתוך בלוק (תחום בסוגריים מסולסלים, נרחיב בהמשך), התוכנית מקצה את המשתנים הלוקאליים של הבלוק בראש המחסנית וכך היא גדלה. ברגע שיוצאים מבלוק, התוכנית מפנה את כל המשתנים שהוקצו עבור בלוק זה, והמחסנית קטנה בחזרה. מבוא למדעי המחשב מ' - תירגול 6

12 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; מבוא למדעי המחשב מ' - תירגול 6

13 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; Z = 0 y = 0 x = 0 מבוא למדעי המחשב מ' - תירגול 6

14 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; Z = 1 y = 4 x = 2 מבוא למדעי המחשב מ' - תירגול 6

15 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; z(max3) = 1 y(max3) = 4 x(max3) = 2 כתובת חזרה max3 Z = 1 y = 4 x = 2 מבוא למדעי המחשב מ' - תירגול 6

16 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; y(max2) = 4 x(max2) = 2 כתובת חזרה max2 z(max3) = 1 y(max3) = 4 x(max3) = 2 כתובת חזרה max3 Z = 1 y = 4 x = 2 מבוא למדעי המחשב מ' - תירגול 6

17 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; y(max2) = 4 x(max2) = 2 כתובת חזרה max2 z(max3) = 1 y(max3) = 4 x(max3) = 2 כתובת חזרה max3 Z = 1 y = 4 x = 2 מבוא למדעי המחשב מ' - תירגול 6

18 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; z(max3) = 1 y(max3) = 4 x(max3) = 2 כתובת חזרה max3 Z = 1 y = 4 x = 2 4 מבוא למדעי המחשב מ' - תירגול 6

19 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; y(max2) = 1 x(max2) = 4 כתובת חזרה max2 z(max3) = 1 y(max3) = 4 x(max3) = 2 כתובת חזרה max3 Z = 1 y = 4 x = 2 מבוא למדעי המחשב מ' - תירגול 6

20 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; y(max2) = 1 x(max2) = 4 כתובת חזרה max2 z(max3) = 1 y(max3) = 4 x(max3) = 2 כתובת חזרה max3 Z = 1 y = 4 x = 2 מבוא למדעי המחשב מ' - תירגול 6

21 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; z(max3) = 1 y(max3) = 4 x(max3) = 2 כתובת חזרה max3 Z = 1 y = 4 x = 2 4 מבוא למדעי המחשב מ' - תירגול 6

22 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; Z = 1 y = 4 x = 2 4 מבוא למדעי המחשב מ' - תירגול 6

23 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה Stack int max2(int x, int y) { if (x > y) return x; else return y; } int max3(int x, int y, int z) { return max2(max2(x,y),z); int main() { int x = 0, y = 0, z = 0; scanf("%d%d%d", &x, &y, &z); printf("max: %d", max3(x, y, z)); return 0; מבוא למדעי המחשב מ' - תירגול 6

24 מבוא למדעי המחשב מ' – תירגול6
Top-Down Design בעצם הם למדו על זה בהרצאה, כדאי לתת תזכורת, לא צריך להתעכב יותר מדי לדעתי מבוא למדעי המחשב מ' – תירגול6

25 מוטיבציה פחות באגים! חיסכון בזמן! קוד קריא!
כל זה בעזרת Top-Down Design

26 מה זה בעצם? לתכנן את הקוד לפני שאנחנו כותבים אותו.
ככל שהפרויקט מורכב יותר, ניתן לחלקו ליותר תתי משימות, שמתחלקות בעצמן לתתי משימות וכך הלאה. כל תת משימה תתבצע בפונקציה נפרדת.

27 מה זה בעצם? תכנון מונע באגים – לא היינו רוצים לבנות בניין ובסיום לגלות ששכחנו את הדלת! תכנון מראש חוסך זמן – גם של פתרון באגים, גם של תכנון תוך כדי עבודה (הרבה יותר מסורבל). חלוקה הגיונית לתתי משימות תגרום לקוד להיות הגיוני ואינטואיטיבי.

28 Top-down design: דוגמא
נתכנן ונתכנת משחק מספרים לשני שחקנים. מהלך המשחק: בתחילת המשחק, המחשב מגריל מספר שלם כלשהו, ומציג אותו. כל שחקן בתורו צריך לבחור את אחת מספרותיו של המספר. אם הספרה שבחר שונה מ- 0 , המחשב מאפשר לשחקן לבחור בכמה הוא רוצה להקטין אותה (הוא חייב להקטין אותה לפחות ב- 1 ומותר לו להפחית אותה לאפס). אם הספרה היא 0 , המחשב מוחק את כל הספרות מימין לספרה שהשחקן בחר, כולל הספרה עצמה. השחקן שמביא את המספר לאפס, מפסיד.

29 משחק לדוגמא המספר ההתחלתי הוא: 135945
תור שחקן א'. הוא בוחר את הספרה השנייה (שערכה 4), ומפחית אותה ל-2. 135945 135925 תור שחקן ב'. הוא בוחר את הספרה החמישית (שערכה 3), ומפחית אותה ל-0. 135925 105925 תור שחקן א'. הוא בוחר גם כן את הספרה החמישית, שערכה כעת 0. 105925 1 תור שחקן ב'. הוא חייב לבחור בספרה היחידה שנותרה ולהוריד אותה ל-0. הוא הפסיד... 1

30 Top-down design: דוגמא
בוחרים מספר אקראי התחלתי (random seed). משנבחר המספר ההתחלתי, ישנן טכניקות שונות ליצירת שרשרת של מספרים אקראיים נוספים לפי דרישה. בשפת C מזינים ל-srand() את המספר האקראי ההתחלתי (בד"כ השעה). זה נעשה פעם אחת בלבד, בתחילת התוכנית. בכל פעם שצריך מספר אקראי נוסף, קוראים לפונקציה rand() המחזירה int אקראי. הפונקציות rand() ו-srand() מוגדרות בספרייה <stdlib.h>. הפונקציה time() מחזירה את הזמן הנוכחי כמספר שלם (בד"כ מספר השניות מאז 1/1/ :00). מוגדרת בספרייה <time.h>. srand(time(0)); x = rand();

31 Top-down design: סכמה srand(time(0)); int num = rand(); < display welcome message > int curr_player = 1; while (num > 0) { < print the game state > < get digit index from player > < update num according to player's choice > curr_player = 3 - curr_player; } printf("Player %d has won!\n", curr_player); תתי משימות לפי חלוקה אינטואיטיבית והגיונית, כל אחת תמומש בפונקציה נפרדת

32 Top-down design: סכמה srand(time(0)); int num = rand(); print_welcome_message(); int curr_player = 1; while (num > 0) { print_game_state(num, curr_player); int dig_index = read_dig_index(num); num = update_num(num, dig_id); curr_player = 3 - curr_player; } printf("Player %d has won!\n", curr_player);

33 מימוש הצגת הודעת פתיחה void print_welcome_message() { printf("Welcome to NumberTournanment 2015!\n\n" "Please enter the arena. In a moment you " "will be fighting head-to-head\n" "at the NNDF (National Number & Digit Federation) " "world cup championships.\n" "The Number Master will now choose the golden number;\n" "you must keep this number above zero at all cost.\n" "The player who survives the longest wins.\n\n" "Ready?\n" "Go!\n" ); }

34 Top-down design: סכמה srand(time(0)); int num = rand(); print_welcome_message(); int curr_player = 1; while (num > 0) { print_game_state(num, curr_player); int dig_index = read_dig_index(num); num = update_num(num, dig_id); curr_player = 3 - curr_player; } printf("Player %d has won!\n", curr_player);

35 מימוש הדפסת מצב המשחק void print_game_state(unsigned int num, int player) { printf("\n** Player no. %d turn **\n\n", player); printf("The number is: %u\n", num); }

36 Top-down design: סכמה srand(time(0)); int num = rand(); print_welcome_message(); int curr_player = 1; while (num > 0) { print_game_state(num, curr_player); int dig_index = read_dig_index(num); num = update_num(num, dig_id); curr_player = 3 - curr_player; } printf("Player %d has won!\n", curr_player);

37 מימוש קריאת אינדקס ספרה
int read_dig_index() { printf("Please choose a digit index: "); int dig_id = 0; scanf(“%d”, &dig_id); return dig_id; } מה עם בדיקת קלט?

38 מימוש קריאת אינדקס ספרה
int read_dig_index(unsigned int num) { int num_len = num_length(num); printf("Please choose a digit index (1..%d): ", num_len); int dig_id = read_value(1, num_len); return dig_id; } תתי משימות נוספות

39 פונקציות עזר ל – read_dig_index
int num_length(unsigned int num) { int digit_num = 1; while(num > 9) { num /= 10; digit_num++; } return digit_num;

40 פונקציות עזר ל – read_dig_index
int read_value(int min, int max) { int value = 0; do { if (scanf("%d", &value) != 1) { printf("Error reading input! Exiting.\n"); exit(1); } if (value < min || value > max) printf("Invalid value! please try again: "); while (value < min || value > max); return value;

41 Top-down design: סכמה srand(time(0)); int num = rand(); print_welcome_message(); int curr_player = 1; while (num > 0) { print_game_state(num, curr_player); int dig_index = read_dig_index(num); num = update_num(num, dig_id); curr_player = 3 - curr_player; } printf("Player %d has won!\n", curr_player);

42 מימוש עדכון המספר unsigned int update_num(unsigned int num, int digID) { int dig_val; dig_val = get_digit(num, digID); if (dig_val == 0) { num /= (int)pow10(digID); } else { printf("Choose amount: (1..%d) ", dig_val); num -= read_value(1,dig_val) * pow10(digID-1); return num;

43 פונקציות עזר ל – update_num
int get_digit(unsigned int num, int digID) { return (num / (int)pow10(digID-1)) % 10; } long long pow10(int n) { long long result = 1; while (n > 0) { result *= 10; n--; } return result;

44 print_welcome_message
גרף קריאות לפונקציות main print_welcome_message print_game_state read_dig_index update_num get_digit num_length read_value pow10

45 Top-down design: סיכום דוגמא
התבקשנו לכתוב תכנית מממשת משחק. Top-down design – התחלנו מחלוקה לתתי משימות עיקריות, ואח"כ חילקנו כל תת משימה באופן היררכי. הדרך האולטימטיבית לתכנת פרויקטים מורכבים!

46 סוגי משתנים מקומיים, סטאטיים, גלובאליים
בעצם הם למדו על זה בהרצאה, כדאי לתת תזכורת, לא צריך להתעכב יותר מדי לדעתי מבוא למדעי המחשב מ' - תירגול 6

47 מבוא למדעי המחשב מ' - תירגול 6
בלוקים בלוק הוא קטע קוד שתחום על ידי זוג סוגריים מסולסלים { }. בלוקים יכולים להיות זרים או מקוננים (אחד מוגדר בתוך השני, כמו במקרה של לולאה בתוך לולאה). דוגמאות לבלוקים: כל פונקציה נכתבת בתוך בלוק. ניתן להשתמש בבלוקים בלולאות ובפקודות התניה. ניתן גם לשים בלוק סתם כך באמצע קוד רציף! מבוא למדעי המחשב מ' - תירגול 6

48 מבוא למדעי המחשב מ' - תירגול 6
משתנים מקומיים משתנים מקומיים הם משתנים: החיים מרגע הגדרתם ועד סוף הבלוק בהם הוגדרו נגישים בבלוק בהם הוגדרו ובכל בלוק פנימי למעשה כל המשתנים שראינו עד כה הם משתנים מקומיים: משתנים שהוגדרו ב-main() או בכל פונקציה אחרת משתני אטרציה שהוגדרו בלולאות for פרמטרים של פונקציות מבוא למדעי המחשב מ' - תירגול 6

49 מבוא למדעי המחשב מ' - תירגול 6
הסתרה של משתנים משתנה מבלוק פנימי מסתיר משתנה מבלוק חיצוני אם הם בעלי אותו שם. ההסתרה אינה תלויה בטיפוס, רק בשם. קוד המשתמש בהסתרה מבלבל מאוד! לכן, השתדלו להימנע מכך! int main() { int a = 10; if (a > 0) { float a = 0.0; printf(“%f\n”, a); } printf(“%d”, a); return 0; מבוא למדעי המחשב מ' - תירגול 6

50 מבוא למדעי המחשב מ' - תירגול 6
משתנים סטאטיים משתנים סטאטיים הם משתנים: החיים מרגע תחילת התוכנית ועד סופה – תמד מוקצים בתחילת ריצת התכנית, לא משנה היכן הם הוגדרו. נגישים בבלוק בו הם הוגדרו ובכל בלוק פנימי (כמו משתנים מקומיים) מוגדרים ע"י כתיבת המילה השמורה static לפני שם הטיפוס בהגדרת המשתנה אתחול משתנים סטטיים: ניתן ע"י ערכים ידועים בזמן קומפילציה בלבד אם לא צוין ערך אתחול, משתנה סטטי יאותחל ל-0 (בניגוד למשתנה מקומי שלא יאותחל כלל ולא ניתן לצפות את ערכו) מבוא למדעי המחשב מ' - תירגול 6

51 דוגמה - מה תדפיס התוכנית?
דוגמה - מה תדפיס התוכנית? void ring() { static int count; count++; for (int i = 0; i < count; i++) printf(“dring “); printf(“\n”); } int main() { for (int i = 0; i < 3; i++) ring(); return 0; dring dring dring dring dring dring מבוא למדעי המחשב מ' - תירגול 6

52 דוגמה 2 - מה תדפיס התוכנית?
דוגמה 2 - מה תדפיס התוכנית? void print_chars(char c1, char c2) { printf(“%c%c”, c1, c2); } char cool_char() { static int n = 0; n++; return ‘a’ + n; int main() { print_chars(cool_char(), cool_char()); return 0; Could it be more confusing? דוגמא לדברים להתחשב בהם כיוון שלא יודעים באיזה סדר הפרמטרים מחושבים מבוא למדעי המחשב מ' - תירגול 6

53 דוגמה 2 - מה תדפיס התוכנית?
דוגמה 2 - מה תדפיס התוכנית? void print_chars(char c1, char c2) { printf(“%c%c”, c1, c2); } char cool_char() { static int n = 0; n++; return ‘a’ + n; int main() { char c1 = cool_char(); char c2 = cool_char(); print_chars(c1, c2); return 0; bc דוגמא לדברים להתחשב בהם כיוון שלא יודעים באיזה סדר הפרמטרים מחושבים מבוא למדעי המחשב מ' - תירגול 6

54 מבוא למדעי המחשב מ' - תירגול 6
משתנים גלובאליים חיים מרגע תחילת התוכנית ועד סופה. נגישים מכל נקודה בתוכנית, החל מנקודת הגדרתם. מוגדרים מחוץ לכל הבלוקים, בפרט, מחוץ ל-main(). המשתנה x איננו מוכר כאן void g() { … } int x = 3; int f() { … } int main() { … } משתנה גלובאלי המשתנה x מוכר בכל הפונקציות שבחלק הזה מבוא למדעי המחשב מ' - תירגול 6

55 מבוא למדעי המחשב מ' - תירגול 6
משתנים גלובאליים אתחול משתנים גלובאליים: דומה לזה של משתנים סטטיים מאותחלים ל-0 אם לא צוין ערך אתחול אחר. ניתן לאתחל רק לערכים קבועים הידועים בזמן קומפילציה שימוש במשתנים גלובאליים נחשב ברוב המקרים תכנות רע מאוד. כיוון שמשתנים גלובאליים מפרים את הרעיון של חלוקת התוכנית לפונקציות ולבעיות נפרדות. מבוא למדעי המחשב מ' - תירגול 6

56 דוגמה: שימוש במשתנים גלובליים
#include <stdio.h> int lights_on = 0; /* Global variable */ void flip_lights() { lights_on = !lights_on; } void print_light_status() { if (lights_on) printf(“Lights are on.”); else printf (“Lights are off.”); int main() { int lights_on = 1; /* Local variable */ flip_lights(); print_light_status(); return 0; מה תדפיס התוכנית הבאה? Will print: Lights are on. מבוא למדעי המחשב מ' - תירגול 6

57 סיכום: השוואה בין משתנים
אתחול זמן חיים טווח הכרה סוג משתנה בהגעה להגדרתו מהגדרתו עד סוף הבלוק בו הוגדר מקומי סטטי מהגדרתו בכל הפונקציות בתוכנית גלובאלי מהגדרתו עד סוף הבלוק בו הוגדר בתחילת התוכנית מתחילת התוכנית ועד סופה מבוא למדעי המחשב מ' - תירגול 6

58 מחסנית הקריאות וסוגי משתנים: דוגמה
int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; שימו לב, משתנים גלובאליים וסטטיים לא נשמרים במחסנית אלא באזור הנקרא "גלובאלי". Globals Stack מבוא למדעי המחשב מ' - תירגול 6

59 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=0 sum=0 Stack status=0 מבוא למדעי המחשב מ' - תירגול 6

60 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=0 sum=0 Stack status=0 מבוא למדעי המחשב מ' - תירגול 6

61 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=0 sum=0 Stack num=? כתובת חזרה מ- readnum() status=0 מבוא למדעי המחשב מ' - תירגול 6

62 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=0 sum=0 Stack num=5 כתובת חזרה מ- readnum() status=0 מבוא למדעי המחשב מ' - תירגול 6

63 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=1 sum=0 Stack num=5 כתובת חזרה מ- readnum() status=0 מבוא למדעי המחשב מ' - תירגול 6

64 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=1 sum=5 Stack num=5 כתובת חזרה מ- readnum() status=0 מבוא למדעי המחשב מ' - תירגול 6

65 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=1 sum=5 Stack num=5 כתובת חזרה מ- readnum() status=0 מבוא למדעי המחשב מ' - תירגול 6

66 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=1 sum=5 Stack כתובת חזרה מ- readnum() status=0 מבוא למדעי המחשב מ' - תירגול 6

67 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=1 sum=5 Stack status=1 מבוא למדעי המחשב מ' - תירגול 6

68 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=1 sum=5 Stack status=1 מבוא למדעי המחשב מ' - תירגול 6

69 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=1 sum=5 Stack num=? כתובת חזרה מ- readnum() status=1 מבוא למדעי המחשב מ' - תירגול 6

70 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=1 sum=5 Stack num=7 כתובת חזרה מ- readnum() status=1 מבוא למדעי המחשב מ' - תירגול 6

71 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=2 sum=5 Stack num=7 כתובת חזרה מ- readnum() status=1 מבוא למדעי המחשב מ' - תירגול 6

72 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=2 sum=12 Stack num=7 כתובת חזרה מ- readnum() status=1 מבוא למדעי המחשב מ' - תירגול 6

73 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=2 sum=12 Stack num=7 כתובת חזרה מ- readnum() status=1 מבוא למדעי המחשב מ' - תירגול 6

74 כתובת חזרה מ- readnum()
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=2 sum=12 Stack כתובת חזרה מ- readnum() status=2 מבוא למדעי המחשב מ' - תירגול 6

75 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=2 sum=12 Stack status=2 מבוא למדעי המחשב מ' - תירגול 6

76 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=2 sum=12 Stack status=2 מבוא למדעי המחשב מ' - תירגול 6

77 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals total=2 sum=12 Stack status=2 מבוא למדעי המחשב מ' - תירגול 6

78 מבוא למדעי המחשב מ' - תירגול 6
מחסנית הקריאות: דוגמה int sum; int readnum() { int num; static int total; if (scanf("%d",&num) < 1) return -1; total++; sum += num; return total; } int main() { int status = 0; do { status = readnum(); } while(status < 2 && status != -1); printf("sum = %d\n", sum); return 0; Globals Stack מבוא למדעי המחשב מ' - תירגול 6


הורד את "ppt "תרגול 6: פונקציות, סוגי משתנים, top-down design

מצגות קשורות


מודעות Google