PracticU

קורס סי-שארפ - מערך - Array

בלי כתוביותעם כתוביות
PracticU › קורס יסודות התכנות - שפת C# .NET - קורס תכנות למתחילים - דוט-נט / סי-שארפ - חומר לימוד של מדעי המחשב › קורס סי-שארפ - מערך - Array
מילון מושגים:
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
אינדקס - מבנה במסד נתונים שמאיץ חיפוש ושליפה. גם מספר המציין מיקום של איבר במערך.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.

קורס סי-שארפ - מערך - Array
הסרטון מציג מערכים - אוסף של תאים רציפים בזיכרון מאותו טיפוס - ומסביר איך מגדירים, מאכלסים, סורקים ושולחים מערך לפונקציה.
הגדרה ואתחול
1. הגדרה: כותבים את הטיפוס עם סוגריים מרובעים, שם המערך, ואחר כך new והגודל. לדוגמה int[] grades = new int[7]; יוצר שבעה תאים מסוג int.
2. אינדקסים: התא הראשון מספרו 0, והאחרון מספרו גודל המערך פחות 1. גישה לתא נעשית לפי האינדקס, למשל grades[0] = 80.
3. אתחול מיידי: אם הערכים ידועים מראש, כותבים אותם בסוגריים מסולסלים: int[] numbers = { 1, 2, 3 };, והגודל נקבע לפי מספר הערכים.
4. אורך המערך: במקום לכתוב את הגודל כמספר קבוע, כותבים grades.Length. כך משנים את גודל המערך במקום אחד בלבד.
סריקה ופעולות
- סריקה בלולאה: for (int i = 0; i < grades.Length; i++), ובכל איטרציה ניגשים ל-grades[i].
- כל תא פועל כמו משתנה רגיל: אפשר לקרוא ממנו ולכתוב אליו.
- שליחה לפונקציה: שם המערך מצביע לכתובת שלו, ולכן פונקציה שמקבלת מערך עובדת על המערך המקורי, בלי צורך ב-ref. זו ההתנהגות הרגילה, כי מערך יכול להכיל כמות גדולה של נתונים שלא כדאי להעתיק.
- ממוצע: מחברים את כל הערכים ומחלקים באורך המערך. אם שני המספרים מסוג int, החלוקה מחזירה מספר שלם. לכן ממירים אחד מהם ל-double. בדוגמה ממוצע המספרים 1 עד 10 מניב 5 בלי ההמרה, ו-5.5 עם ההמרה.
טעויות נפוצות
- Console.WriteLine(grades) לא מציג את כל הערכים של המערך. צריך לולאה שמציגה כל תא בנפרד.
- ערכים שלא הוכנסו נשארים 0, כי כל תא במערך חדש מאופס.
מערך מאפשר להגדיר כמות גדולה של תאים מאותו טיפוס בבת אחת, ולעבור עליהם בלולאה אחת.
השיעור הבא בקורס: לולאת foreach

פרקי ההרצאה: קורס סי-שארפ - מערך - Array

  1. 00:00

    מה זה מערך (Array)

  2. 00:38

    בעיית הציונים: הרבה משתנים נפרדים

  3. 02:18

    הגדרת מערך: סוג, שם וגודל

  4. 06:12

    קליטה והדפסה לפי אינדקס בלולאה

  5. 08:07

    סריקת מערך בלולאה אחת

  6. 10:04

    המערך בזיכרון כטבלה חד-ממדית

  7. 12:08

    גישה לתא בודד במערך

  8. 14:56

    שינוי גודל מערך ושימוש ב-Length

תמלול ההרצאה: קורס סי-שארפ - מערך - Array

הטקסט המלא של הדקות הראשונות בהרצאה «קורס סי-שארפ - מערך - Array» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

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

  2. 00:14

    אריי זה אוסף של תאים שנמצאים בצורה רציפה בזיכרון ואנחנו יכולים בבת אחת להגדיר כמות גדולה של משתנים בזיכרון. למה זה חשוב לנו?

  3. 00:28

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

  4. 00:42

    אם לא היה לנו את היכולת להשתמש במערכים היינו צריכים לבצע דבר כזה int grade1.grade2.grade3.grade4 וכו' וכו' וכו' וכו' עד 30. לאחר מכן grade1=console.readline כמובן עטוף בתוך convert to in32 וזה רק קבלה של ציון אחד לאחר מכן היינו צריכים לחזור על זה עבור גרייד 2 ועבור גרייד 3 ועבור גרייד 4

  5. 01:28

    וכולי וכולי וזה רק 30 ציונים מה היה קורה אם היינו רוצים 100 ציונים אז כאן היינו צריכים להגדיר 100 תאים ולאחר מכן 100 שורות קוד רק בשביל לקלוט את הציונים וקצת too much מבחינת תחשבו מה היה קורה אם הייתם רוצים לקלוט 1,000 מניות בבורסה.

  6. 01:51

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

  7. 02:14

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

  8. 02:26

    נניח שאנחנו רוצים לקלוט מערך ציונים, כל מה שנשאר לנו לעשות זה להחליט שזה אינטג'ר, אבל אם היינו כותבים int grade, אז היה לנו תא זיכרון אחד ויחיד שבו היינו יכולים להכניס ציון אחד ויחיד.

  9. 02:43

    ובכן אנחנו מגדירים את התחביר הבא: int וסוגריים מרובעים. לאחר מכן שם של כל המערך, כאן לא הגיוני שנקרא לו grade, כי grade זה יחיד, יותר הגיוני שנקרא לו grades.

  10. 02:58

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

  11. 03:18

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

  12. 03:33

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

  13. 03:47

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

  14. 04:04

    תמיד המיקום של התא הראשון הוא 0 ותמיד המיקום של התא האחרון זה גודל המערך, בוא נקרא לזה 7 פחות 1. זאת אומרת שהתא האחרון המיקום שלו זה 6. איך אנחנו ניגשים לתא בודד grades והאינדקס של התא?

  15. 04:25

    כעת אנחנו ניגשנו לתא שהמיקום שלו זה 0, כלומר התא הראשון. מה אפשר לעשות עם תא? כל מה שאפשר לעשות עם משתנה רגיל. מה אפשר לעשות עם משתנה רגיל?

  16. 04:36

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

  17. 05:11

    ו-90 ו-85 ו-77 יש לנו פה 60 יש לנו פה 99 ונניח שיש לנו פה 100. עכשיו אם אנחנו רוצים להציג את הכל אז יש לנו פה את grades על 0 1 2 3 4 5 ו-6 נריץ ונראה שיש לנו פה את כל הציונים אוקיי אבל אנחנו רואים שגם כאן יש פה המון שורות קוד שכביכול כתבנו והאם אנחנו יכולים בעצם לקצר את כל הסיפור הזה כלומר כן הצלחנו להגדיר בבת אחת שבעה תאים רציפים בזיכרון

  18. 05:56

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

  19. 06:12

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

  20. 06:24

    בוא נניח שאנחנו רוצים לקלוט מהמשתמש את הערכים האלה ולאחר מכן להדפיס את כולם אז במקום לעשות שורה שורה קליטה מהמשתמש שדרך אגב היה אמור להיות convert to in32 של console readline ואת הדבר הזה היינו צריכים לשכפל בצורה כזאת במקום לעשות את זה בצורה כזאת היינו יכולים פשוט ליצור לולה עד 4 כאן i היה מתחיל מ-0 כל עוד i קטן מ-7

  21. 07:13

    כל מה שאנחנו צריכים לעשות grades על i, ש-i מתחלף מ-0 עד 6 ולכן זה חוסך לנו את כל אלה, שווה לקלט מהמשתמש. והנה לולאה אחת שחוסכת לנו את כל הלולאה הזאת, כל הקודים האלה ליתר דיוק. בואו נשים את כל זה בהערה.

  22. 07:47

    מה בקשר לקודים האלה? האם אנחנו יכולים בעזרת לולאה אחת לבצע את ההדפסה? תשובה כמובן, כל מה שאנחנו צריכים לעשות זה console right line, של גריידז על איי ואנחנו יכולים עכשיו לראות שבבת אחת במקום לבצע שורות בודדות אנחנו בעצם מבצעים משהו שנקרא בעולם הפיתוח

  23. 08:13

    סריקת מערך אנחנו רצים מהתא הראשון עד התא האחרון ומבצעים פעולה כלשהי עם כל אחד מהתאים בגלל שהאינדקס בלולאה משתנה ולכן מתייחס כל איטרציה לתא אחר בלולאה כאן אנחנו קולטים לתא אחר במערך ליתר דיוק ערך מהמשתמש כאן אנחנו מדפיסים תא אחר במערך כל פעם בואו נריץ ונראה שאנחנו יכולים עכשיו לקלוט ערכים מהמשתמש

  24. 08:45

    והנה הדפסנו אותם בואו נדפיס את הכל בשורה אחת ובואו נגיד למשתמש כאן enter 7 rates נריץ משתמש רואה הודעה "הכנס שבעה ציונים", מכניס 90, 100, 80, 77, 98, 95 ובוא נניח גם 89. עכשיו אנחנו רואים את

  25. 09:24

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

  26. 09:40

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

  27. 09:59

    מה בעצם נפתח לנו בזיכרון? אז אפשר לצייר את זה כאילו שזה מעין טבלה חד-ממדית. זה בעצם מערך חד-ממדי. אנחנו פתחנו טבלה בגודל 7, אז יש לנו 0, 1, 2, 3, 4, 5, 6 תאים.

  28. 10:18

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

  29. 10:42

    מיקום נקרא אינדקס. המיקום של התא הראשון הוא תמיד 0 תא השני 1 שלישי 2 שימו לב שנהוג לצייר את זה בצורה כזאת סדרה של תאים והאינדקסים מתחתיהם.

  30. 10:59

    כאן יש לנו תא עם אינדקס מספר 4, תא עם אינדקס מספר 5, תא עם אינדקס מספר 6. ואם אנחנו עכשיו בתוכנית כותבים את הדבר הבא, grades במיקום, בוא נניח 3, שווה 90, המחשב ברגע שהוא מגיע לפקודה הזאת אומר דבר כזה:

  31. 11:29

    grades זה כל המערך, זה כל מה שאתם רואים כאן, מיקום 3 זה רק התא שהאינדקס שלו הוא 3. אני לתוכו מכניס 90. בואו נשים את זה קצת יותר אסתטי, נראה בצורה כזאת, ויש לנו 90 בתוך התא שהאינדקס שלו הוא 3.

  32. 11:57

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

  33. 12:18

    מה עושים אותו? במקרה הזה מדפיסים אותו. אם אנחנו מבצעים int num שווה grades על 3 זה גם כן פקודה שכורת את הערך שנמצא במיקום 3 כלומר את ה-90 ומכניסה אותו לתוך num אם אנחנו כותבים grades על 0 שווה 80 בעצם הכנסנו 80 לתא הזה אם אנחנו כותבים grades על 6 אנחנו בעצם מכניסים ערך לתא האחרון במקרה הזה 79, נכנס לפה, 79. ככה אתם רואים שיש לנו

  34. 13:13

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

  35. 13:34

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

  36. 13:47

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

  37. 13:59

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

  38. 14:27

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

  39. 14:56

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

  40. 15:12

    התשובה כן, אבל האם התוכנית טובה לנו כרגע? וכמובן התשובה לא. קודם כל אנחנו רואים enter seven numbers, את זה אנחנו צריכים לשנות.

  41. 15:21

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

  42. 15:41

    יש לנו אפשרות להגיע לגודל של המערך על ידי grades.length.length.length זה בעצם אורך המערך.

לקורס המלא: קורס C# למתחילים אונליין

ההרצאה הקודמת: חיפוש בגוגל

ההרצאה הבאה: לולאת foreach

הרצאות קשורות מקורסים אחרים

  • מערך של מבנים - Array
  • מערך Array ב-TypeScript
  • מערך Array ב-Javascript
  • מערך - Array - שפת Swift

קורסים נוספים במסלול

  • קורס פיתוח משחקים יוניטי - Unity - שפת #C