עקרונות התכנות

Post on 03-Jan-2016

50 views 0 download

description

עקרונות התכנות. תרגול מספר 10. על מה נדבר?. מצביעים מה זה? איך? למה? מצביעים ומערכים אריתמטיקה של מצביעים מערך של מצביעים מצביעים ופונקציות. משתנים וזכרון. לכל טיפוס בשפה יש גודל לדוגמה: char הוא בגודל 1B int הוא בגודל 4B double הוא בגודל 8B - PowerPoint PPT Presentation

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 עקרונות התכנות – תשס"ט