+ All Categories
Home > Documents > תרגול 6: פונקציות, סוגי משתנים, top-down design

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

Date post: 08-Feb-2016
Category:
Upload: bandele
View: 66 times
Download: 5 times
Share this document with a friend
Description:
תרגול 6: פונקציות, סוגי משתנים, top-down design. מה היה שבוע שעבר?. לולאות מערכים מערכים דו-ממדיים. והיום נלמד. פונקציות מחסנית הקריאות סוגי משתנים Top-Down design. מבוא לפונקציות תזכורת מההרצאה. פונקציות ב- C. - PowerPoint PPT Presentation
99
בבבב בבבבב בבבבב בבבבב6 : בבבבבבבב, בבבב בבבבבב,top-down design 1
Transcript
Page 1: תרגול 6: פונקציות, סוגי משתנים,  top-down design

מבוא למדעי המחשב, 6תרגול , משתנים: סוגי פונקציות

top-down design

1

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

2

מה היה שבוע שעבר?

לולאות•מערכים••- ממדיים דו מערכים

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

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

3

והיום נלמד

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

פונקציות•הקריאות • מחסניתמשתנים • סוגי•Top-Down design

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

מבוא לפונקציותתזכורת מההרצאה

6מבוא למדעי המחשב מ' - תירגול 4

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

5

Cפונקציות ב-

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

ערכים • שמקבלת שחורה קופסה כמו לפונקציה להתייחס ניתןעליהם( )פרמטרים) חישוב תוצאת החזרה ומחזירה (.ערך

• : לפונקציות דוגמאות בעבר ...printf, scanfראינו•. הצורך לפי עצמנו משל פונקציות ליצור יכולים אנחנו• , בפונקציה שימוש שעושה לפונקציה קריאה בין להבדיל יש

עם ) שעשינו כפי שחורה הגדרת(, printf ,scanfכקופסא לבין. , בפועל החישוב מתבצע שם שלה והמימוש הפונקציה

פרמטריםמועבר) מידע

לפונקציה(

מוחזר ערךתוצאה)

המתקבלת מהפונקציה(

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

דוגמה – מימוש פונקציה

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

• , ומחזירה מספרים שני שמקבלת הבאה הפונקציה את ננתח. מוחלט בערך ביניהם ההפרש את

•: חתימה יש פונקציה לכל

float delta(float a, float b) { float result = a – b; if (result < 0) result = -result; return result;}

המוחזר הטיפוסהפונקציה" י ע

. שמה לפני מופיע . הפונקציה שם רשימת: בסוגרייםמופרדים ) הפרמטרים

.) ביניהם בפסיקים

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

דוגמה - המשך

•: הפונקציה של נוספים רכיבים

6מבוא למדעי המחשב מ' - תירגול 7

גוף הפונקצי

ה

float delta(float a, float b) { float result = a – b; if (result < 0) result = -result; return result;}

מקומי , :משתנה הפונקציה בתוך רק קיים " " . סיום לאחר נשכח פועלת שהפונקציה בזמן

. הפונקציה פעולת

הערך משמשת לקביעת returnההוראה על-ידי הפונקציה.המוחזר

זה בעצם הערך שהפונקציה מחשבת. resultבדוגמה אנו יכולים להחזיר את

מהטיפוס deltaכי ערך החזרה של המתאים

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

returnפקודת

מסיימת את הפונקציה הנוכחית, returnפעולת •.מהמקום בו קראנו לפונקציהוההרצה נמשכת

הוא הערך "שהפונקציה returnהערך שהועבר ל-•מחזירה", כלומר התוצאה.

כאשר הפונקציה לא מחזירה ערך ("טיפוס" מוחזר •void ,(return וגם לא הכרחית) לא מקבלת ערך

לכתיבה).

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

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

mainכפונקציה

•- ה היא נקודת ההתחלה של כל ()mainפונקצייתתוכנית, והיא נקראת ע"י מע' ההפעלה.

חתימת הפונקציה: •

() מסיים main עם ערך כלשהו מתוך returnביצוע •את ריצת התוכנית ומחזיר את אותו ערך למע'

ההפעלה.

בד"כ נהוג:• בסיום תקין0החזרת –6מבוא למדעי המחשב מ' - תירגול כל ערך אחר בשגיאה– 9

int main();

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

המשך דוגמה – קריאה לפונקציה

! מתאים מטיפוס הם לפונקציה המועברים שהפרמטרים לב נשיםלהיות חייבים הם ?floatהאם

int main(){ float x = 3.4, y = 5.7; float d = delta(x,y); printf(“delta of x and y is: %f\n”, d); d = delta(d, x); printf(“delta of x and y is: %f\n”, d); d = delta(d,d); printf(“delta of x and y is: %f\n”, d); return 0;}

2.3יודפס

1.1יודפס

0יודפס

float delta(float a, float b);

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

11

קריאה לפונקציה

• , הפרמטרים ערכי מחושבים תחילה נקראת פונקציה כאשר. מורכב – ביטוי גם להיות יכולים אשר אליה שהועברו

המתאים – • לטיפוס יומרו לפונקציה המועברים הפרמטרים , מסוג פרמטר עם פונקציה הקודמת יכולה, floatבדוגמא

פרמטר עם .intלהיקרא שלמדנו כפי המוכר באופן שיומר• , להניח ניתן לא לכן מהדר תלוי הוא הפרמטר חישוב סדר

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

.) ערך) מחזירה אכן היא אם

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

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

12

עוד על פרמטרים

הפונקציה – בכותרת המוגדרים משתנים הם פרמטרים. הפונקציה ריצת בסיום ומשתחררים

ב – – בתוך, by valueמועברים Cפרמטרים פרמטר ערך שינוי . הם לפונקציה מחוץ משתנים ערכי על ישפיע לא פונקציה

. לפונקציה בקריאה שחושבו הערכים של עותקים בעצם

6מבוא למדעי המחשב מ' – תירגול

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

תרגילים

שלמים: 1תרגיל • מספרים שני המקבלת פונקציה כתבו. שלהם המקסימום את ומחזירה

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

- פתרון1תרגיל

: מטיפוס פרמטרים שני הפונקציה לחתימת לב וערך intנשיםמטיפוס :intחזרה

לכתוב גם -return yיכולנו ה אחרי .elseללא, ifישר

int max2(int x, int y){if (x > y){

return x;}else{

return y;}

}

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

תרגילים

המקבלת: 2תרגיל • פונקציה ומחזירה 3כתבו שלמים מספרים. ביניהם המקסימום את

6מבוא למדעי המחשב מ' - תירגול 15

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

- פתרון2תרגיל

תרגיל כמו הסגנון באותו פונקציה לכתוב אפשר1:

–? הקודמת בפונקציה נשתמש אולי

int max3(int x, int y, int z){if (x > y){

if (x > z) return x;else return z;

}\\ x is not bigger than yelse{

if (y > z) return y;else return z;

}}

int max2(int x, int y){if (x > y){

return x;}else{

return y;}

}

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

- פתרון2תרגיל

בין: המקסימום מה ידענו אילו -xהבחנה צריכים, yו היינו רק- ל אותו .zלהשוות

של :max2(x,y)הערך המדובר המקסימום בדיוק הוא

לכתוב – מנת על קיימות בפונקציות להשתמש נעדיף כללי באופן. חדש קוד

int max3(int x, int y, int z){return max2(max2(x,y),z);

}הערך טיפוס בין להתאמה לב נשים

של של max2המוחזר החזרה לערךmax3

הפרמטר טיפוס בין להתאמה לב נשיםהערך max2ש- לטיפוס לקבל מצפה

" י ע max2המוחזר

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

תרגילים

בשם: 3תרגיל • פונקציה כפרמטר intשמקבלת isPrimeכתבו-trueומחזירה ו ראשוני הפרמטר .falseאם אחרת

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

– פתרון3תרגיל

bool is_prime(int num) { \\ if divisible by 2, only 2 is prime:

if (num%2 == 0) ???; \\ otherwise see if divisible by anything int i=3;

while (i*i <= num){ if (num%i == 0) {

??? } i++;

} return true;}

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

– פתרון3תרגיל

bool is_prime(int num) { \\ if divisible by 2, only 2 is prime:

if (num%2 == 0) return num == 2; \\ otherwise see if divisible by anything int i=3;

while (i*i <= num){ if (num%i == 0) {

return false; } i++;

} return true;}

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

בדיקת ראשוניות – דוגמה לשימוש

מספר מקבלים בו בתרגיל הוא 1-10ניזכר האם ומדפיסים. - קצת, אותו ונשנה ראשוני לא זוגי אי או זוגי או ראשוני

בשם: 4תרגיל • פונקציה את printPropertyכתבו שפותרתצריכה ) לא שהיא לב שימו שלם מספר כל עבור התרגיל

,) בפונקציה שימוש תוך כלום :isPrimeלהחזיר

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

- פתרון4תרגיל

void print_property(int num){if (is_prime(num)){ printf(“Number is prime\

n”);}else if (num % 2 == 0){ printf(“Number is even\

n”);}else printf(“Number is odd\n”);return;

}הוא החזרה ערך כצפוי voidטיפוס

הכרחי returnה- לא

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

תרגילים

?5תרגיל • הללו: במימושים בסדר לא מה

int min(int a, int b) { if (a > b) return b;}

void print_value(int m) { printf(“Value=%d\n”, m); return m;}

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

תרגילים

?6תרגיל • חוקיות: לא מהקריאות אילו: הפונקציות של ;int gcd(int n, int m)חתימות

void print_value(int num);int dist(float, float);char get_letter();

j = gcd(j, j);

result = print_value(i+1);

dist(2.2, 1.5);

printf(“input: %c\n”, get_letter(k));

get_letter;

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

25

הצהרת פונקציות – בעיה

•. לסוף מההתחלה הקוד את קורא הקומפיילר , על לפונקציה קריאה יש בה לנקודה מגיע כשהוא

: מוגדרת כבר להיות הזאת הפונקציה

•g הוגדרה אחרי ()f()למרות שנעשה בה

()fשימוש ב-

() אינה מוכרת gנקבל שגיאה האומרת ש-•()fבקריאה מ-

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

int f(int x) { return g(x) + 1;}

int g(x) { return x * -1;}

error: implicit declaration of function 'g'

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

26

הצהרת פונקציות – פתרון א'

הפונקציות • כתיבת סדר את נהפוךהקוראת – הפונקציה לפני תיכתב הנקראת הפונקציה

•? תמיד יעבוד הפתרון האם

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

int g(x) { return x * -1;}

int f(int x) { return g(x) + 1;}

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

27

הצהרת פונקציות – בעיה

עם • פונקציות עבור הפתרון את ליישם ניתן לאמעגלית קריאה

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

int g(x) { if (x <= 0) x = f(x); return x * -1;}

int f(int x) { return g(x) + 1;}

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

28

הצהרת פונקציות – פתרון ב'

•. מימושן לפני הפונקציות על נצהיר

לקומפיילר • מדווחת ההצהרהלפני הפונקציות של קיומן על

המימוש.

את • מייצאים אף לעיתיםלקובץ נפרד headerההצהרות

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

int g(int x);int f(int);

int g(int x) { if (x <= 0) x = f(x); return x * -1;}

int f(int x) { return g(x) + 1;}

השורה;" חייבים " בסוף

. המשתנים שמות את לרשום צורך אין

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

29

מחסנית הקריאות

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

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

6מבוא למדעי המחשב מ' - תירגול 30

דע מאין באת ולאן אתה הולך

•: תוכנית בקטע נביט

נקראת כאן פעמיים.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);

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

6מבוא למדעי המחשב מ' - תירגול 31

מחסנית הקריאות

• , מנהלת המערכת התוכנית ריצת במהלךקריאות מחסנית .של

בשיטת • מנוהלת Last-In-First-Outהמחסנית.) שמה) ומכאן

•: הבאים הנתונים נשמרים המחסנית על–. הפונקציה סיום לאחר לחזור לאן–. לפונקציה שהועברו הפרמטרים ערכי–. הפונקציה של לוקאליים משתנים

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

32

מחסנית הקריאות

•. , ריקה המחסנית התוכנית בתחילת

תחום ) • בלוק לתוך שנכנסים פעם בכל ,) , התוכנית בהמשך נרחיב מסולסלים בסוגריים

הבלוק של הלוקאליים המשתנים את מקצה. גדלה היא וכך המחסנית בראש

• , את מפנה התוכנית מבלוק שיוצאים ברגע, זה בלוק עבור שהוקצו המשתנים כל

. בחזרה קטנה והמחסנית

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

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 33

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;

}

Stack

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 34

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;

}

Stack

Z = 0

y = 0

x = 0

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 35

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;

}

Stack

Z = 1

y = 4

x = 2

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 36

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

Stack

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 37

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

Stack

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 38

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

Stack

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 39

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

Stack

4

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 40

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

Stack

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 41

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

Stack

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 42

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

Stack

4

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 43

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

Stack

4

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 44

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;

}

Stack

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

45

- מה תדפיס התוכנית?דוגמה

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

void setToTen(int x) { x = 10;}

int main() { int x = 2; setToTen(x); printf(“%d”,x); return 0;}

2תשובה:

• , התוכנית תדפיס מה עתה זה שראינו מה לאורהבאה?

בשפת, • לא Cכאמור הפונקציה בתוך הפרמטרים ערך שינוילפונקציה מחוץ משתנים ערכי על ישפיע

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

סוגי משתניםמקומיים, סטאטיים, גלובאליים

6מבוא למדעי המחשב מ' - תירגול 46

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

בלוקים

מסולסלים • סוגריים זוג ידי על שתחום קוד קטע הוא .} {בלוקלהיות • יכולים , מקונניםאו זריםבלוקים השני ) בתוך מוגדר אחד

.) לולאה בתוך לולאה של במקרה כמו

•: לבלוקים דוגמאות-. בלוק בתוך נכתבת פונקציה כל-. התניה ובפקודות בלולאות בבלוקים להשתמש ניתן-! רציף קוד באמצע כך סתם בלוק לשים גם ניתן

6מבוא למדעי המחשב מ' - תירגול 47

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

משתנים מקומיים

מקומיים • :משתנים משתנים הםהוגדרו • בהם הבלוק סוף ועד הגדרתם מרגע החיים

פנימי • בלוק ובכל הוגדרו בהם בבלוק נגישים

משתנים • הם כה עד שראינו המשתנים כל למעשהמקומיים:

•- ב שהוגדרו () או בכל פונקציה אחרתmainמשתנים

forמשתני אטרציה שהוגדרו בלולאות •

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

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

6מבוא למדעי המחשב מ' - תירגול 49

הסתרה של משתנים

פנימי • מבלוק מבלוק מסתירמשתנה משתנה. שם אותו בעלי הם אם חיצוני

תלויה • אינה ההסתרה. בשם, רק בטיפוס

בהסתרה • המשתמש קוד! מאוד מבלבל

! מכך, להימנע השתדלו לכן

int main() { int a = 10; if (a > 0) { float a = 0.0; printf(“%f\n”, a); } printf(“%d”, a); return 0;}

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

משתנים סטאטיים

סטאטיים • :משתנים משתנים הםבתחילת – • מוקצים תמד סופה ועד התוכנית תחילת מרגע החיים

. , הוגדרו הם היכן משנה לא התכנית ריצתמשתנים ) • כמו פנימי בלוק ובכל הוגדרו הם בו בבלוק נגישים

מקומיים(• " השמורה המילה כתיבת י ע לפני שם staticמוגדרים

הטיפוס בהגדרת המשתנה

אתחול משתנים סטטיים:•ניתן ע"י ערכים ידועים בזמן קומפילציה בלבד• 0אם לא צוין ערך אתחול, משתנה סטטי יאותחל ל-•

(בניגוד למשתנה מקומי שלא יאותחל כלל ולא ניתן לצפות את ערכו)

6מבוא למדעי המחשב מ' - תירגול 50

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

51

- מה תדפיס התוכנית?דוגמה

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

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

dringdring dringdring dring dring

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

52

- מה תדפיס התוכנית?2 דוגמה

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

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?

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

53

- מה תדפיס התוכנית?2 דוגמה

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

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

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

54

משתנים גלובאליים

•. סופה ועד התוכנית תחילת מרגע חיים• , מנקודת החל בתוכנית נקודה מכל נגישים

הגדרתם.• , , מחוץ בפרט הבלוקים לכל מחוץ מוגדרים

().mainל-

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

void g() { … }

int x = 3;

int f() { … }

int main() { … }

משתנה גלובאלי

בכל xהמשתנה מוכרהזה שבחלק הפונקציות

מוכר xהמשתנה איננוכאן

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

משתנים גלובאליים

•: גלובאליים משתנים אתחול

סטטיים • משתנים של לזה דומה

•- ל . 0מאותחלים אחר אתחול ערך צוין לא אם

בזמן • הידועים קבועים לערכים רק לאתחל ניתןקומפילציה

6מבוא למדעי המחשב מ' - תירגול 55

המקרים ברוב נחשב גלובאליים במשתנים שימושמאוד תכנות מפרים . רע גלובאליים שמשתנים כיוון

ולבעיות לפונקציות התוכנית חלוקת של הרעיון אתנפרדות.

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

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

דוגמה: שימוש במשתנים גלובליים

מה תדפיס

התוכניתהבאה?

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

57

סיכום: השוואה בין משתנים

אתחול חיים זמן הכרה טווח משתנה סוג

בהגעה להגדרתו

סוף עד מהגדרתוהוגדר בו הבלוק

מקומי

סטטי

מהגדרתו בכל

הפונקציות בתוכנית

גלובאלי

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

עד מהגדרתוהבלוק סוף

הוגדר בו

מתחילת ועד התוכנית

סופה

בתחילת התוכנית

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

מחסנית הקריאות וסוגי משתנים: דוגמה

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

Stack

Globals , גלובאליים משתנים לב שימולא וסטטיים

באזור אלא במחסנית נשמריםגלובאלי " ."הנקרא

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 59

status=0

Stack

total=0

sum=0

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

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 60

status=0

Stack

total=0

sum=0

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

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 61

Stack

total=0

sum=0

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

num=?

חזרה כתובת)(readnumמ-

status=0

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 62

Stack

total=0

sum=0

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

num=5

חזרה כתובת)(readnumמ-

status=0

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 63

Stack

total=1

sum=0

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

num=5

חזרה כתובת)(readnumמ-

status=0

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 64

Stack

total=1

sum=5

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

num=5

חזרה כתובת)(readnumמ-

status=0

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 65

Stack

total=1

sum=5

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

num=5

חזרה כתובת)(readnumמ-

status=0

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 66

Stack

total=1

sum=5

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

חזרה כתובת)(readnumמ-

status=0

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 67

Stack

total=1

sum=5

Globalsint 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;} status=1

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 68

Stack

total=1

sum=5

Globalsint 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;} status=1

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 69

Stack

total=1

sum=5

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

num=?

חזרה כתובת)(readnumמ-

status=1

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 70

Stack

total=1

sum=5

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

num=7

חזרה כתובת)(readnumמ-

status=1

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 71

Stack

total=2

sum=5

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

num=7

חזרה כתובת)(readnumמ-

status=1

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 72

Stack

total=2

sum=12

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

num=7

חזרה כתובת)(readnumמ-

status=1

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 73

Stack

total=2

sum=12

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

num=7

חזרה כתובת)(readnumמ-

status=1

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 74

חזרה כתובת)(readnumמ-

status=2

Stack

total=2

sum=12

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

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 75

status=2

Stack

total=2

sum=12

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

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 76

Stack

total=2

sum=12

Globalsint 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;} status=2

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 77

Stack

total=2

sum=12

Globalsint 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;} status=2

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

מחסנית הקריאות: דוגמה

6מבוא למדעי המחשב מ' - תירגול 78

Stack

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

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

Top-Down Design

79 6מבוא למדעי המחשב מ' – תירגול

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

מוטיבציה

•! באגים פחות

•! בזמן חיסכון

•! קריא קוד

בעזרת • זה Top-Down Designכל

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

מה זה בעצם?

•. אותו כותבים שאנחנו לפני הקוד את לתכנן

• , ליותר לחלקו ניתן יותר מורכב שהפרויקט ככל , לתתי בעצמן שמתחלקות משימות תתי

. הלאה וכך משימות

•. נפרדת בפונקציה תתבצע משימה תת כל

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

מה זה בעצם?

בניין – • לבנות רוצים היינו לא באגים מונע תכנון! הדלת את ששכחנו לגלות ובסיום

• , באגים – פתרון של גם זמן חוסך מראש תכנוןיותר ) הרבה עבודה כדי תוך תכנון של גם

מסורבל(.

לקוד • תגרום משימות לתתי הגיונית חלוקה. ואינטואיטיבי הגיוני להיות

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

Top-down designדוגמא :

. שחקנים לשני מספרים משחק ונתכנת נתכנן: המשחק מהלך

• , , ומציג כלשהו שלם מספר מגריל המחשב המשחק בתחילתאותו.

•. המספר של מספרותיו אחת את לבחור צריך בתורו שחקן כל– - מ שונה שבחר הספרה לבחור , 0אם לשחקן מאפשר המחשב

- ב ) לפחות אותה להקטין חייב הוא אותה להקטין רוצה הוא בכמה1.) לאפס אותה להפחית לו ומותר

היא – הספרה לספרה , 0אם מימין הספרות כל את מוחק המחשב. , עצמה הספרה כולל בחר שהשחקן

•. , מפסיד לאפס המספר את שמביא השחקן

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

משחק לדוגמא135945 המספר ההתחלתי הוא:

תור שחקן א'. הוא בוחר את הספרה .2(, ומפחית אותה ל-4השנייה )שערכה

תור שחקן ב'. הוא בוחר את הספרה .0(, ומפחית אותה ל-3החמישית )שערכה

תור שחקן א'. הוא בוחר גם כן את הספרה .0החמישית, שערכה כעת

135945135925

135925105925

1059251

תור שחקן ב'. הוא חייב לבחור בספרה . הוא 0היחידה שנותרה ולהוריד אותה ל-

הפסיד...

10

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

srand(time(0));x = rand();…x = rand();

התחלתי )• אקראי מספר (.random seedבוחרים• , שונות טכניקות ישנן ההתחלתי המספר משנבחר

נוספים אקראיים מספרים של שרשרת ליצירת. דרישה לפי

-Cבשפת • ל את המספר ()srandמזיניםהאקראי ההתחלתי (בד"כ השעה). זה

, בתחילת פעם אחת בלבדנעשה התוכנית.

בכל פעם שצריך מספר אקראי נוסף, • המחזירה ()randקוראים לפונקציה

int.אקראי

()srand ו-()randהפונקציות •.<stdlib.h>מוגדרות בספרייה

)(timeהפונקציה מחזירה את הזמן הנוכחי

כמספר שלם )בד"כ מספר 1/1/1970השניות מאז

(. מוגדרת בספרייה 00:00<time.h>.

Top-down designדוגמא :

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

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

לפי משימות תתיאינטואיטיבית חלוקה

אחת, כל והגיוניתבפונקציה תמומש

נפרדת

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

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

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

מימוש הצגת הודעת פתיחה

void print_welcome_message() { printf("Welcome to NumberTournanment 2013!\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" );}

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

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

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

מימוש הדפסת מצב המשחק

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

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

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

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

מימוש קריאת אינדקס ספרה

int read_dig_index() {printf("Please choose a digit index: ");

int dig_id = 0;scanf(“%d”, &dig_id);

return dig_id;}

קלט בדיקת עם ?מה

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

מימוש קריאת אינדקס ספרה

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

נוספות משימות תתי

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

read_dig_indexפונקציות עזר ל –

int num_length(unsigned int num) { int digit_num = 1;

while(num < 9) { num /= 10; digit_num++; } return digit_num;}

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

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

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

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

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

מימוש עדכון המספר

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

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

update_numפונקציות עזר ל –

long long pow10(int n) { long long result = 1; while (n < 0) { result *= 10; n--; } return result;}

int get_digit(unsigned int num, int digID) {return (num / (int)pow10(digID-1)) % 10;

}

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

Top-down designסיכום דוגמא :

•. משחק מממשת תכנית לכתוב התבקשנו

•Top-down design – לתתי מחלוקה התחלנו " , תת כל חילקנו כ ואח עיקריות משימות

. היררכי באופן משימה

פרויקטים • לתכנת האולטימטיבית הדרךמורכבים!


Recommended