6 מערכים

18
1 שיעור שישי: מערכיםonline.shenkar.ac.il/moodle online.shenkar.ac.il/moodle http:// http:// 9 0 12345678 0 9 87654321 קורס מבוא למדעי המחשב קורס מבוא למדעי המחשב סמסטר א סמסטר א' ' תשס תשס" ח תזכורת תזכורת: : פונקציות פונקציות מהי פונקציה מהי פונקציה קטע תוכנית שיש לו שם ויכול לקבל נתונים ולהחזיר תוצאה קטע תוכנית שיש לו שם ויכול לקבל נתונים ולהחזיר תוצאה הגדרת פונקציות הגדרת פונקציות שם הפונקציה שם הפונקציה, , סוג הערך המוחזר סוג הערך המוחזר, , הערכים שמועברים הערכים שמועברים, , return return . double square(double num) {return num*num;} double square(double num) {return num*num;} קריאה לפונקציה והערך המוחזר ממנה קריאה לפונקציה והערך המוחזר ממנהa=square(b); a=square(b);

Upload: yosef-joron

Post on 14-Mar-2016

216 views

Category:

Documents


2 download

DESCRIPTION

C LAN, C LANG

TRANSCRIPT

Page 1: 6 מערכים

1

מערכים: שיע ור שיש י

online.shenkar.ac.il/moodleonline.shenkar.ac.il/moodlehttp://http://

90 1 2 3 4 5 6 7 8

09 8 7 6 5 4 3 2 1

קורס מבוא למדעי המחשבקורס מבוא למדעי המחשב

חח""תש סתש ס' ' סמסטר אסמסטר א

פונק ציותפונק ציות: : תזכורתתזכורת

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

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

double square(double num) {return num*num;}double square(double num) {return num*num;}

קריאה לפונקציה והערך המוחזר ממנה קריאה לפונקציה והערך המוחזר ממנה ••a=square(b);a=square(b);

Page 2: 6 מערכים

2

פונק ציותפונק ציות: : תזכורתתזכורת

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

הכרזות על פונקציות וספריות של פונקציותהכרזות על פונקציות וספריות של פונקציות••הכרזה מאפשרת שימ וש ב פונקצי ות שכת ובות בהמ ש ך או בקובץ אחר הכרזה מאפשרת שימ וש ב פונקצי ות שכת ובות בהמ ש ך או בקובץ אחר ••

double square(double);double square(double);

י הוספת קבצי י הוספת קבצי ""למשל אפשר להשתמ ש בס פריות קי ימות של פונ קציו ת עלמשל אפשר להשתמ ש בס פריות קי ימות של פונ קציו ת ע••..iostream.hiostream.h, , stdio.hstdio.h, math.h, math.hכמו כמו , , הכרזותהכרזות

דוגמא דוגמא --פונקציות פונקציות #include <#include <iostream.hiostream.h>>

doubledouble powerpower((double base, double base, intint exponentexponent))

{{

intint i; i;

double result=1;double result=1;

for(i=1; i<=exponent; i++)for(i=1; i<=exponent; i++)

result=result*base;result=result*base;

return result;return result;

}}

intint main()main()

{{

double solution=double solution=powerpower((2,202,20)+)+powerpower((3,153,15)+)+powerpower((5,175,17););coutcout << "2^20 + 3^15 + 5^17 = " << solution << << "2^20 + 3^15 + 5^17 = " << solution << endlendl; ;

return 0;return 0;

}}

, מ סוי ים לקטע תוכ נית שםנותנ ים

כך שאפשר להשתמש ב ו כ מה

נתונים שונים כל פעם עם , פעמים

"פונקציה"קטע תוכנ ית כזה נקר א

main ריצת התוכ נית תמיד תתחיל בפונקצ יה

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

והת וצ אות מוחזרות ,הערכים המת אימים

Page 3: 6 מערכים

3

#include <#include <iostream.hiostream.h>>

double power(double base, double power(double base, intint exponent)exponent)

{{

intint ii;;

double result=1;double result=1;

for(for(ii=1;=1; ii<=exponent;<=exponent; ii++)++)

result=result*base;result=result*base;

return result;return result;

}}

intint main()main()

{{

double double ii==power(2,20)+power(3,15)+power(5,17); power(2,20)+power(3,15)+power(5,17);

coutcout << "2^20 + 3^15 + 5^17= " <<<< "2^20 + 3^15 + 5^17= " << ii << << endlendl; ;

return 0;return 0;

}}

שונ ות אפשר להגדיר בפו נקצי ות

א ינםוהם , בא ותו שםמשתנים

קשורים זה לז ה

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

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

..המשתנה המקוריהמשתנה המקורי לא משפיעים על לא משפיעים על במשתנה שאליו הוכנס הערךבמשתנה שאליו הוכנס הערך

::למשל בדוגמא הבאהלמשל בדוגמא הבאה••#include<#include<iostream.hiostream.h>>

intint square square ((intint num)num)

{{

num=num*num;num=num*num;

return num;return num;

}}

intint main()main()

{{

intint num=16;num=16;

coutcout << "The square of " << << "The square of " << num num << " is " << << " is " << squaresquare((numnum) << ) << endlendl;;

return 0;return 0;

}}

:הפלט

256 is the square of 16 256 is the square of 16

לא מושפע main - שבnumהמשתנה

מהשינ וי ים במשתנ ה שאל יו הועבר ערכו

16ה ערך כאן מועבר

Page 4: 6 מערכים

4

שימוש ב פונק ציות

?שאלות נו ספות

בעיה מהחיים בעיה מהחיים

שממוספרים שממוספרים (( מתחרים מתחרים 5050במוקדמות תחרות זמרים משתתפים במוקדמות תחרות זמרים משתתפים ••

11--5050 .( .(

שמוזן שמוזן , , ))1010-- ל ל11בין בין (( אחרי ההופעה שלו אחרי ההופעה שלוניקודניקודכל מתחרה מקבל כל מתחרה מקבל ••

..למחשבלמחשב

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

..מהממוצעמהממוצע

המספרים הסידוריים של המתחרים המספרים הסידוריים של המתחרים על המחשב להדפיס את על המחשב להדפיס את ••

. . שעולים לשלב הבאשעולים לשלב הבא

Page 5: 6 מערכים

5

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

..את המספרים הסידוריים של התוצאות שהיו גבוהות מהממוצעאת המספרים הסידוריים של התוצאות שהיו גבוהות מהממוצע

:: מספרים מספרים44לדוגמא עבור קלט של לדוגמא עבור קלט של ••

77

99

66

1010

::הפלט צריך להיותהפלט צריך להיות

These are the indices of scores above the average: These are the indices of scores above the average:

22 44

?איך אפשר לעשות את זה

פתרון אפשרי פתרון אפשרי ..a1,a1,……,a50,a50: : משתנה לכל מתמודדמשתנה לכל מתמודד, , משתנים משתנים5050--בבנשתמש נשתמש ••

לתוך משתנה לתוך משתנה המתמודד ים המתמודד ים 5050--של כל אחד משל כל אחד מנקלוט את הניקוד נקלוט את הניקוד ••))וכן הלאהוכן הלאה, , a2a2 --השני להשני ל, , a1a1 --הראשון להראשון ל((

.. המשתנים האלה המשתנים האלה5050נחשב את הממוצע של נחשב את הממוצע של ••

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

). ). 55אז נדפיס אז נדפיס

..., משפטי תנאי50, פקודות קלט50, משתני ם50אז בתוכנ ית יה יו

))?? מתמודדים מתמודדים10001000ומה נעשה אם יהיו ומה נעשה אם יהיו ((זו תהיה תוכנית מאוד מסורבלת זו תהיה תוכנית מאוד מסורבלת

Page 6: 6 מערכים

6

מה ה יינו רוצים מה ה יינו רוצים

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

.. מאותו סוג עבור התוצאות מאותו סוג עבור התוצאות משתנים משתנים5050אחת אחת --להגדיר בבתלהגדיר בבת••

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

).).איכשהו עם לולאהאיכשהו עם לולאה((לחשב את הממוצע בקלות לחשב את הממוצע בקלות ••

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

הפתרוןהפתרון: : מע רך מע רך

אחת אוסף של משתנים מאותו אחת אוסף של משתנים מאותו -- מאפשרת להגדיר בבת מאפשרת להגדיר בבתCCשפת שפת ••

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

..""מערךמערך""כזה נקרא כזה נקרא

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

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

A[0] A[49]

79 . . . . . . . .

Page 7: 6 מערכים

7

איך ניראה הפי תרון איך ניראה הפי תרון #include<#include<iostream.hiostream.h>>

intint main()main()

{{

intint i;i;

double scores[50],double scores[50], sum=0;sum=0;

coutcout << "Enter the 50 scores:<< "Enter the 50 scores:\\n";n";

for (i=0; i<50; i++)for (i=0; i<50; i++)

{{

cincin >> >> scores[iscores[i]];;

sum += sum += scores[iscores[i];];

}}

for (i=0; i<50; i++)for (i=0; i<50; i++)

if (if (scores[i]scores[i] > sum/50)> sum/50)

coutcout << "Candidate " << i+1 << " passed<< "Candidate " << i+1 << " passed\\n";n";

}}

אחת אוסף -אפשר להגדיר בבת

ולג שת לכל א חד , של משתנים

אוסף כזה . ידי אינד קס-מהם על

".מערך "נקרא

, קליטת תוצא ה למשתנ ה במערך

והו ספת התוצא ה הזו לס כו ם

בודקים א יזה תוצא ות הי ו מעל הממוצע

. אפשר לעבור בל ולא ה על ה משתנים הא לה

) הנחנ ו כא ן שהק לט תקין (

)0-האי נדקס מתחי ל מ(

נושאי השיעו ר היום נושאי השיעו ר היום

: : מערכיםמערכים

מה זה מערךמה זה מערך••

ואיתחולואיתחולהגדרההגדרה••

גישה לתאיםגישה לתאים••

העברת מערך לפונקציההעברת מערך לפונקציה••

מימדייםמימדיים--מערכים רבמערכים רב••

Page 8: 6 מערכים

8

מערכים מערכים –– מש מעות והגדר ה מש מעות והגדר ה

••CC מערךמערךמאפשרת להגדיר משתנה מטיפוס מאפשרת להגדיר משתנה מטיפוס..

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

intint, char, float, double, char, float, doubleאו כל טיפוס אחר שנכיר או כל טיפוס אחר שנכיר .(.(

.. רושמים את טיפוס המשתנים ואת מספרם רושמים את טיפוס המשתנים ואת מספרםבהגדרת המערךבהגדרת המערך••

::doubledouble משתנים מטיפוס משתנים מטיפוס 100100למשל כך נגד יר מערך של למשל כך נגד יר מערך של ••

double prices[double prices[10100];0];

הגדרת מערך מקצה רצף של מקומות בזיכרון שיכילו את ערכי הגדרת מערך מקצה רצף של מקומות בזיכרון שיכילו את ערכי ••

. . המערךהמערך) ) משתנימשתני((תאי תאי

הכנסת ערך ל תא במערך הכנסת ערך ל תא במערך

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

). ). 00-- מתחיל מ מתחיל מהמיספורהמיספור ( (בתוך סוגריים מרובעיםבתוך סוגריים מרובעיםשלו שלו

-- בתא הראשון ו בתא הראשון ו 55ונשים ונשים , , intint משתנים מסוג משתנים מסוג 1010נגדיר מערך של נגדיר מערך של , , למשללמשל••

: : בתא העשירי בתא העשירי44

intint A[10];A[10];

A[0]=5;A[0]=5;

A[9]=4;A[9]=4;

A[0] A[9]

45 . . . . . . . .

Page 9: 6 מערכים

9

קריאת ערך מ תא במערך קריאת ערך מ תא במערך

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

::למשללמשל. . מסוייםמסוייםשנמצא בתא שנמצא בתא

coutcout << A[<< A[00];];

i=A[5];i=A[5];

כדי להתייחס לתא במערך צריך תמיד לציין את כדי להתייחס לתא במערך צריך תמיד לציין את ::נשים לבנשים לב••

..המספר הסידורי שלו בתוך סוגריים מרובעיםהמספר הסידורי שלו בתוך סוגריים מרובעים

של של לכת ובת ה התחלהלכת ובת ה התחלהשם המערך ללא סוגר יים מ רובעים מתי יחס שם המערך ללא סוגר יים מ רובעים מתי יחס ••

..ולא לת א במערךולא לת א במערך, , המערך בזיכר וןהמערך בזיכר ון

הדוגמא שראינ והדוגמא שראינ ו#include<#include<iostream.hiostream.h>>

intint main()main()

{{

intint i;i;

double scores[50],double scores[50], sum=0;sum=0;

coutcout << "Enter the 50 scores:<< "Enter the 50 scores:\\n";n";

for (i=0; i<50; i++)for (i=0; i<50; i++)

{{

cincin >> >> scores[iscores[i]];;

sum += sum += scores[iscores[i];];

}}

for (i=0; i<50; i++)for (i=0; i<50; i++)

if (if (scores[iscores[i]] > sum/50)> sum/50)

coutcout << "Candidate " << i+1 << " passed<< "Candidate " << i+1 << " passed\\n";n";

}}

, אחת אוסף של משתנ ים-אפשר להגדיר בבת

. ידי אינד קס-ולגשת ל כל אחד מהם על

". מערך"אוסף כזה נקר א

, קליטת תוצא ה למשתנ ה במערך

והו ספת התוצא ה הזו לס כו ם

בודקים א יזה תוצא ות הי ו מעל הממוצע

. אפשר לעבור בל ולא ה על ה משתנים הא לה

) הנחנ ו כא ן שהק לט תקין (

)0-האי נדקס מתחי ל מ(

Page 10: 6 מערכים

10

איתחולאיתחול מערכ י ם בשורת ה הג דרה מערכ י ם בשורת ה הג דרה

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

•• intint A[5]={0,1,2,3,4}A[5]={0,1,2,3,4}). ). משמ אל לימי ןמשמ אל לימי ן((המערך לפי הסדר המערך לפי הסדר -- נכנ סים לתא י נכנ סים לתא יהא יתחו להא יתחו לערכי ערכי ••

..00 עם הערך עם הערך יאות חלויאות חלושאר התא ים שאר התא ים , , מהתאיםמהתאיםלחלק לחלק אם ניתן ערכ ים רק אם ניתן ערכ ים רק ••

intint A[5]={1,2}A[5]={1,2}

הא יתחו להא יתחו לכמספר ערכי כמספר ערכי הוא יהי ה הוא יהי ה , , אם לא נציי ן את מספר תאי המערךאם לא נציי ן את מספר תאי המערך••): ): תאים תאים66בדוגמא הב אה י הי ו לו בדוגמא הב אה י הי ו לו ((

•• intint A[]={1,2,3,4,5,6}A[]={1,2,3,4,5,6}

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

אין גיש ה לכל המערך בבת אין גיש ה לכל המערך בבת --אחתאחת

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

::אחתאחת--אפשר לשים ערכים בתאי המערך בבתאפשר לשים ערכים בתאי המערך בבת--איאי••וצריך לעשות זאת וצריך לעשות זאת , , אחת את כל התא יםאחת את כל התא ים--אפשר לאפס בבתאפשר לאפס בבת--למשל אי למשל אי ••

: : י לולאהי לולאה""עע

•• for(i=0; i<10; i++) A[i]=0; for(i=0; i<10; i++) A[i]=0; A=0A=0

==י פעולת י פעולת ""אפשר להעתיק מערך אחד למערך אחר עאפשר להעתיק מערך אחד למערך אחר ע--איאי••: : זה דורש לו לאהזה דורש לו לאה••

•• for(i=0; i<10; i++) A[i]=B[i]; for(i=0; i<10; i++) A[i]=B[i]; A=BA=B

דרושה דרושה ((' ' וכווכו, , קלטקלט, , הדפסההדפסה, , השוואההשוואהכך גם לגבי פעולות כך גם לגבי פעולות ••). ). לולאהלולאה

Page 11: 6 מערכים

11

חריגה מג בולו ת המערך חריגה מג בולו ת המערך

בסבירות בסבירות , , אם נכתוב לתא במערך מעבר לגודל שהוגדר אם נכתוב לתא במערך מעבר לגודל שהוגדר

".".תעוףתעוף""והתוכנית והתוכנית , , גבוהה יפגעו נתונים של תוכנות אחרותגבוהה יפגעו נתונים של תוכנות אחרות

::למשללמשל

intint a[10];a[10];

a[1a[100]=0;]=0;

a[a[--1]=5;1]=5;

משמעות•

ואיתחול הגדרה•

גישה לתאים•

להיזהר מחריגה מגבולות המערך•

?שאלות •

ביניים - סיכו ם-מערכים

Page 12: 6 מערכים

12

דוג מא נוספת דוג מא נוספת--מערכים מערכים

#include<#include<iostream.hiostream.h>>

intint main()main()

{{

intint i, num, i, num, digits[10]={0};digits[10]={0};

coutcout << "Enter a positive integer:<< "Enter a positive integer:\\n";n";

cincin >> num;>> num;

while (num!=0)while (num!=0)

{{

digits[num%10]++;digits[num%10]++;

num=num/10;num=num/10;

}}

for (i=0; i<10; i++)for (i=0; i<10; i++)

coutcout<<"Digit<<"Digit "<<i<<""<<i<<" appearedappeared "<<"<<digits[idigits[i]]<<"<<" timestimes\\n";n";

}}

התוכ נית הז ו קולטת מספר שלם חיובי

ומדפיסה כמ ה פעמים הופי עה בו כל סיפר ה

מדפיסים כמה פעמים כל ס פרה הופיעה

לאפס מאו תחליםכל תאי המערך

) מניח ים כאן שה קלט תקי ן(

את התא שמתאים לספרת 1-מגדילים ב

. ומוחקים אותה ,האחדות של המ ספר

לולא ה שנמש כת כל עוד ה מספר לא מתאפס

i במערך יכיל את מספר ה הופעות של הספרה i תא

העברת מער ך לפונקציההעברת מער ך לפונקציה

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

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

..המערך המקוריהמערך המקוריכלומר לפונקציה מועבר כלומר לפונקציה מועבר , , איננו מועתקאיננו מועתקהוא הוא

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

..במקום שממנו הקריאה בוצעהבמקום שממנו הקריאה בוצעה

כל ומר המי קום של כל ומר המי קום של , , כתובת המערךכתובת המערךלמעשה מה שמ ועבר הו א למעשה מה שמ ועבר הו א ((••

גו דל המערך לא מועבר וב אחריותנ ו לדא וג גו דל המערך לא מועבר וב אחריותנ ו לדא וג ; ; המערך המקור י בזיכר וןהמערך המקור י בזיכר ון

).).שהפונקצ יה ל א תחרוג ממנ ושהפונקצ יה ל א תחרוג ממנ ו

Page 13: 6 מערכים

13

דוג מא דוג מא --העברת מער ך לפונקציה העברת מער ך לפונקציה

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

. . התאים הראשונים במערך התאים הראשונים במערךsizesizeומאפסת את ומאפסת את , , sizesizeנוסף נוסף

void void zero_array(zero_array(intint array[array[ ],], intint sizesize))

{{

intint i;i;

for(i=0; i<size; i++)for(i=0; i<size; i++)

array[i]=0; array[i]=0;

}}

1010 זה יאפס את זה יאפס את ;mainmain : :zero_array(digits, 10);zero_array(digits, 10) --אז אם נכתוב ב אז אם נכתוב ב ••

כי בה עברת מערך כי בה עברת מערך ( (mainmain -- ב בdigitsdigitsהתאים הרא שו נים של המע רך התאים הרא שו נים של המע רך

). ). לפונקצ יה מועבר המערך ע צמו ולא העתק ש לולפונקצ יה מועבר המערך ע צמו ולא העתק ש לו

דוג מא דוג מא --העברת מער ך לפונקציה העברת מער ך לפונקציה

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

. . כי מועבר מערך שכבר הוגדר כי מועבר מערך שכבר הוגדר,,גודל המערךגודל המערך

י י ""למשל עלמשל ע((באחריותנו לוודא שהפונקציה לא תחרוג מגבולותיו באחריותנו לוודא שהפונקציה לא תחרוג מגבולותיו ••

). ). הגודל במשתנה נוסףהגודל במשתנה נוסףהעברת העברת

void void zero_array(zero_array(intint arrayarray[[ ]],, intint sizesize))

{{

intint i;i;

for(i=0; i<size; i++)for(i=0; i<size; i++)

array[i]=0; array[i]=0;

}}

Page 14: 6 מערכים

14

דוג מא דוג מא --העברת מער ך לפונקציה העברת מער ך לפונקציה

כי כאמור כי כאמור , , אבל אין לזה משמעותאבל אין לזה משמעות, , זו לא טעות לרשום כאן גודלזו לא טעות לרשום כאן גודל••

..המערך לא מוגדר כאן מחדשהמערך לא מוגדר כאן מחדש

void void zero_array(zero_array(intint arrayarray[100][100],, intint sizesize))

{{

intint i;i;

for(i=0; i<size; i++)for(i=0; i<size; i++)

array[i]=0; array[i]=0;

}}

מערך ק בוע מערך ק בוע ––העברה לפ ונקציה העברה לפ ונקציה לפונקציה שבה לפונקציה שבה ) ) constconst((כקבוע כקבוע אי אפשר להעביר מערך שהוגדר אי אפשר להעביר מערך שהוגדר ••

..הוא לא קבוע ועלול להשתנותהוא לא קבוע ועלול להשתנות

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

..המשתנה שה מערך מועבר אליו בפונקציההמשתנה שה מערך מועבר אליו בפונקציה

:: למשל למשל••

void print_array(void print_array(constconst intint array[ ],array[ ], size)size)

{{

intint i=0;i=0;

for(i=0; i<size; i++) for(i=0; i<size; i++)

coutcout << << array[iarray[i] << " ";] << " ";

}}

Page 15: 6 מערכים

15

מערכים ר ב מערכים ר ב --מי מדיים מי מדיים

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

..יותריותר

::ידיידי--נוכל להגדיר מערכים כאלה למשל עלנוכל להגדיר מערכים כאלה למשל על••

intint a[100][100];a[100][100];

::למשללמשל, , י שני אינדקסיםי שני אינדקסים""ואז נוכל לגשת לכל תא עואז נוכל לגשת לכל תא ע••

a[5][8]=4;a[5][8]=4;

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

--ניתן לתת ערכים התחלתיים גם כשמגדירים מערך רבניתן לתת ערכים התחלתיים גם כשמגדירים מערך רב••

::למשללמשל, , מימדימימדי

intint my_matrix[3][2]={ {1,0}, {0,1}, {1,1}my_matrix[3][2]={ {1,0}, {0,1}, {1,1} };};

אם יש אם יש (( נפוץ יותר הוא בעזרת לולאות מקוננות נפוץ יותר הוא בעזרת לולאות מקוננות איתחולאיתחול••

).). לכתוב את ערכי כולם לכתוב את ערכי כולםנירצהנירצההרבה תאים לא הרבה תאים לא

Page 16: 6 מערכים

16

דוג מא דוג מא --מי מדי מי מדי -- מערך דו מערך דו איתחולאיתחול

void void initialize_array(initialize_array(intint a[100][100]a[100][100]))

{{

intint i ,j;i ,j;

for(i=0; i<100; i++)for(i=0; i<100; i++)

for(j=0; j<100; j++)for(j=0; j<100; j++)

a[ i ][ j ] = a[ i ][ j ] = 00;;

}}

זה משנה גם את , כאמור

המערך המקור י ולא רק

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

בעתיד נסב יר למה

מימדי ים-במערכים דו

יש חשיב ות לריש ום

המימד השנ י בהעבר ה

. לפונקצ יה

? ? מה עוש ה התו כנית הבאה מה עוש ה התו כנית הבאה #include<#include<iostream.hiostream.h>>

intint main()main()

{{

intint i ,j, i ,j, a[10][10];a[10][10];

for(i=0; i<10; i++)for(i=0; i<10; i++)

for(j=0; j<10; j++)for(j=0; j<10; j++)

a[ i ][ j ] = (i+1)*(j+1);a[ i ][ j ] = (i+1)*(j+1);

for(i=0; i<10; i++)for(i=0; i<10; i++)

{{

for(j=0; j<10; j++)for(j=0; j<10; j++)

coutcout << a[ i ][ j ];<< a[ i ][ j ];

coutcout << << endlendl;;

}}

}}

מדפיסה את לוח הכפל

Page 17: 6 מערכים

17

מחרוזות מחרוזות

למשל מילה או למשל מילה או ((היא רצף תווים בעל משמעות כלשהי היא רצף תווים בעל משמעות כלשהי מחרוזת מחרוזת ••

). ). משפטמשפט

..מערך של תוויםמערך של תוויםי י "" מחרוזות ע מחרוזות עיצוגיצוגשימוש נפוץ במערכים הוא שימוש נפוץ במערכים הוא ••

::למשללמשל. . כמה תכונות מיוחדותכמה תכונות מיוחדותלעבודה עם מחרוזות יש לעבודה עם מחרוזות יש ••

ולא רק כמערך ולא רק כמערך , , אחתאחת--בבת בבת הרבה פעמים צריך להת ייח ס אל מחרוזת הרבה פעמים צריך להת ייח ס אל מחרוזת ••

). ). תותו--אחת ולא תו אחת ולא תו --למשל ל קלוט מיל ה בבת למשל ל קלוט מיל ה בבת ( ( של תוו ים בודדים של תוו ים בודדים

ית כן שנ קבל מ הקלט מיל ה ית כן שנ קבל מ הקלט מיל ה (( לא תמי ד י דוע מראש לא תמי ד י דוע מראש אורך המחרוזתאורך המחרוזת••

). ). קצרה יותר מגוד ל המערךקצרה יותר מגוד ל המערך

ספריה שכבר נכתבו במיוחד ספריה שכבר נכתבו במיוחד --לצורך כך נכיר פקודות ופונקציותלצורך כך נכיר פקודות ופונקציות••

..נדבר על כך בפעם הבאהנדבר על כך בפעם הבאה. . עבור עבודה עם מחרוזותעבור עבודה עם מחרוזות

סיכוםסיכום

:דיברנו היום על

מהו מערך•

ואיתחול הגדרה •

גישה ושימוש•

העברה לפונקציה•

מימדיים- מערכים רב•

Page 18: 6 מערכים

18

??שאלות נו ספות שאלות נו ספות

שיעור שישי שיעור שישי ––מבוא למדעי המחשב מבוא למדעי המחשב