עקרונות התכנות
-
Upload
illana-christensen -
Category
Documents
-
view
50 -
download
0
description
Transcript of עקרונות התכנות
10תרגול מספר
עקרונות התכנות
על מה נדבר?מצביעים
?מה זה? איך? למהמצביעים ומערכיםאריתמטיקה של מצביעיםמערך של מצביעיםמצביעים ופונקציות
2עקרונות התכנות – תשס"ט
משתנים וזכרון לכל טיפוס בשפה יש
גודל:לדוגמה
char 1 הוא בגודלBint 4 הוא בגודלBdouble 8 הוא בגודלB
'הפונsizeof)( מחזירה את הגודל בתאים של
משתנה מסוג כלשהו, אין לנו שימוש מיוחד בה פרט
לדוגמא3 עקרונות התכנות – תשס"ט
משתנים וזכרון )המשך( בשלב הגדרת המשתנה מוקצה
המקום המתאים לו בזכרון המחשב.
שלושה דברים יש לדעת עלמשתנה:
4
c = ‘a’4010
4011
4012
4013i = 1
4014
4015
4016
4017
4018
4019
4020
4021
d = 1.0
4022
4023
4024
4025
dicשם
1.01‘a’ערך
401540114010כתוב
ת
עקרונות התכנות – תשס"ט
משתנים וזכרון )המשך( בעת הרצת התוכנית מערכת ההפעלה קובעת
בשבילנו את מיקום המשתנים בזכרוןאולם, לעיתים נרצה לדעת את כתובות אלו& כדי לבצע זאת נשתמש באופרטור
5 עקרונות התכנות – תשס"ט
האופרטור & כאשר מפעילים את האופרטור & על משתנה אנו
ערכול ולא כתובתולמבקשים להתיחס
6 עקרונות התכנות – תשס"ט
מצביעים לאחר שגילינו את כתובתו של משתנה מסוים בזכרון
נרצה "להחזיק" את כתובת זו כלומר, לבצע בה שימוש.
לכן הוגדרה קבוצה חדשה של טיפוסים – מצביעים מצביע הינו משתנה שמכיל בתוכו כתובת מזכרון
המחשב על משתנה מצביעבמילים אחרות – משתנה זה
אחר
7 עקרונות התכנות – תשס"ט
מצביעים )המשך(:לדוגמה
הגדרנו שני משתנים מטיפוסint
b ו-aבזכרון – ברצוננו להגדיר לכל אחד מהם
מצביע המצביע ל-ערךa הוא
a של הכתובת המצביע ל-ערךb הוא
b של הכתובת
8
4010
4011
4012int a = 2
4013
4014
4015
4016int b = 5
4017
4018
4019
4020Pointer To
4010
4021
4022
4023
4024Pointer to
4014
4025
עקרונות התכנות – תשס"ט
האופרטור *:לאופרטור * יש שני תפקידים
הגדרת מצביעגישה לערך המוצבע
9 עקרונות התכנות – תשס"ט
האופרטור * - הגדרת מצביע:הגדרת מצביע תתבצע באופן הבא int *a; כלומר, אנו מגדירים מצביע למשתנה מטיפוסintבאותה צורה ניתן להגדיר מצביע לכל טיפוס אחרגודלו של המצביע תלוי בגודל זכרון המחשב בלבד 4בד"כ גודלוB
10 עקרונות התכנות – תשס"ט
האופרטור * גישה לערך המוצבעלעיתים נרצה לגשת לערך עליו אנו מצביעים :גישה זו תתבצע ע"י האופרטור * באופן הבא
11
intהגדרת משתנה מטיפוס 1ואיתחולו ל-
הגדרת מצביע למשתנה מטיפוס int ואיתחולו לכתובתו של x .
x מצביע על pxכלומר שהוא pxהדפסת ערכו של
xכתובתו של pxהדפסת הערך המוצבע ע"י xכלומר הדפסת ערכו של
עקרונות התכנות – תשס"ט
סיכום ביניים לאופרטור & יש תפקיד אחד
של הכתובתוהוא לקבל את משתנה אחר
:לאופרטור * יש שני תפקידים להגדיר משתנה מטיפוס
מצביע עליו אנו לערךלגשת
מצביעים
12 עקרונות התכנות – תשס"ט
הערותלכל טיפוס יש צורך להגדיר מצביע משלו-ניתן להתיחס לint* או float* וכנ"ל לגבי שאר(
הטיפוסים שהכרנו( כטיפוסים.:אם ננסה להגדיר מספר משתנים בצורה הבאה
:הקומפיילר יפרש זאת כ :לכן הדרך "היפה" והברורה היא כך
13
x-הוא מצביע ל int-ו y-ו z הם intמטיפוס
שלושת המשתנים הם מצביעים intל-
עקרונות התכנות – תשס"ט
1דוגמה איזה מההשמות הבאות אינן
חוקיות
14
int int*
int* int*
int int
int* int
int* int
עקרונות התכנות – תשס"ט
2דוגמה :בהינתן ארבעה משתנים
int i1, i2;float f1, f2;
הדפיסו את ערכם וכתובתם למסך בעזרת מצביע
15 עקרונות התכנות – תשס"ט
)פתרון(2דוגמה
16 עקרונות התכנות – תשס"ט
3דוגמה ?מה תדפיס התוכנית
17
px-ו py מצביעים על x-ו y בהתאמה.
px = *px + *py*השורה משמעה:
מצביע עליו pxכך את הערך ש- py( ותחבר אותו לערך ש-3)
( 7(. את התוצאה )4מצביע עליו ) מצביע pxשים במקום בזכרון ש-
.xעליו – כלומר ב-
.7 הוא xלכן ערכו של עקרונות התכנות – תשס"ט
4דוגמה ?האם הקוד הבא בסדר
18
שורה שניה תגרוםלקריסת התוכנית
אנחנו מנסים לשים ערך במקום מצביע? לא p מצביע. לאן pאליו
ניתן לדעת. לא איתחלנו אותו ולכן הוא מצביע למקום כלשהו בזכרון.
שימו לב, אין כאן טעות קומפילציהאך התוכנית תקרוס בזמן ריצה
עקרונות התכנות – תשס"ט
מצביעים ומערכים:למדנו להגדיר מערך שם המערךarr המצביע לאיבר מצביע קבוע הוא
הראשון במערך. :גישה לאברי המערך גישה זאת אומרת למחשב: "גש לאן שמצביעarr ,
(, והבא את הערך היושב offset צעדים )3זוז בזכרון".
19 עקרונות התכנות – תשס"ט
מצביעים ומערכים )המשך(
20 עקרונות התכנות – תשס"ט
מצביעים ומערכים )המשך( ניתן להשתמש באריתמטיקה של מערכים
ואריתמטיקה של מצביעים בצורה משולבת
21
array &array[0]
*array array[0]
עקרונות התכנות – תשס"ט
אריתמטיקה של מצביעים:הפעולות הבאות חוקיות במצביעים
( קידום והפחתה עצמיתp++, ++p, p--, --p).חיבור וחיסור בין מצביעים ובין מצביע למספר :פעולות לוגיות< ,> ,=> ,=< ,==.
דוגמה. נניחint *p המצביע על מקום מסויים תדע לקדם את המצביע ++pבמערך. הפעולה
בתים(.4 הוא int בתים )מכיוון שגודל בארבעה
22 עקרונות התכנות – תשס"ט
5דוגמה נתון מערךa ומצביע pהמאותחל לתחילת המערך
23
2000
2008
37
2000
4028
39
12
32
עקרונות התכנות – תשס"ט
6דוגמה מהו פלט הקוד
הבא?
24 עקרונות התכנות – תשס"ט
7דוגמה ?מהו פלט הקוד הבא
25 עקרונות התכנות – תשס"ט
מערך של מצביעיםראינו שניתן ליצור מערך של כל טיפוס בשפה.כלומר, ניתן גם ליצור מערך של מצביעים
26
יצירת מערך של איברים שהטיפוס כלומר מצביעים *intשלהם הוא
intל-
איתחול אברי המערך בכתובת המשתנים
הדפסת הערך המוצבע ע"י אופרטור *
עקרונות התכנות – תשס"ט
מצביעים ופונקציות אחד השימושים הנפוצים במצביעים הוא בפרמטר
של פונקציות. הכתובתהעברת מצביע לפונקציה מעתיקה את
ולכן כל שינוי בפרמטרים אלו בתוך הפונקציה משתנה גם מחוץ לפונקציה.
27 עקרונות התכנות – תשס"ט
8דוגמה
28 עקרונות התכנות – תשס"ט
9דוגמה
29 עקרונות התכנות – תשס"ט
10דוגמה פונקציה שמחזירה
מצביע
30 עקרונות התכנות – תשס"ט
שאלות ??
31 עקרונות התכנות – תשס"ט