PracticU

מערך של מבנים - Array

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

מערך של מבנים - Array
מערך של מבנים (Array of Structs) בונה טבלת מפתחות וערכים פשוטה ב-C++: מערך קבוע של רשומות, שכל רשומה מכילה מפתח וערך, עם פונקציות להוספה ולשליפה.
השלבים העיקריים
1. מבנה הנתונים: נכתבת מחלקה בשם HashTable שמכילה מערך פרטי של רשומות Entry.
2. מבנה Entry: הרשומה מכילה שני שדות ציבוריים, מפתח (key) וערך (value). המבנה מוגדר לפני המחלקה, כי הקומפיילר דורש הצהרה לפני השימוש.
3. גודל קבוע: המערך מוגדר בגודל 1000 בלי אפשרות להקצאה מחדש, ולכן הגודל קבוע.
4. בנאי: הבנאי מאפס את האינדקס הפנימי לאפס. המרצה מציין שמשתנה שלא אותחל לא מקבל ערך אפס אוטומטית, ולכן הבנאי נחוץ. ניסיון לאתחל את המערך עם סוגריים מסולסלים נכשל בקומפיילר, וההרצאה לא מציגה פתרון מלא לכך.
5. פונקציית Add: מקבלת מפתח וערך, שומרת אותם במקום האינדקס הנוכחי ומגדילה את האינדקס באחד.
6. פונקציית Get: מקבלת מפתח ומחזירה bool. היא עוברת בלולאה על המערך עד האינדקס הנוכחי. אם מצאה מפתח זהה, היא מעתיקה את הערך לפרמטר שהועבר בהפניה (reference) ומחזירה true, ואחרת מחזירה false.
7. בדיקה: המרצה מבצע שני חיפושים, אחד שמוצא ערך ואחד שלא מוצא, ומראה שהערך במשתנה ההפניה לא משתנה כשהמפתח לא נמצא.
טעויות נפוצות
- שימוש במבנה לפני הצהרתו גורם לשגיאת תחביר.
- ללא בנאי, ערכי המערך הם זבל, ולכן החיפוש עלול להחזיר תוצאות לא צפויות.
הסטודנט יודע לאחר ההרצאה לבנות מחלקה עם מערך של מבנים, להוסיף ערכים ולשלוף אותם בעזרת פרמטר הפניה, ולבדוק את מצב ההחזרה.
השיעור הבא בקורס: רשימה משורשרת - הוספה והדפסה

פרקי ההרצאה: מערך של מבנים - Array

  1. 00:00

    פתיחת פרויקט ורעיון טבלת הערכים

  2. 01:03

    צורך במבנה נתונים לפי מפתח

  3. 01:45

    הקצאה דינמית או סטטית של הטבלה

  4. 03:17

    פונקציית add עם מפתח וערך

  5. 04:24

    אחסון בתוך מערך של entries

  6. 05:01

    מחלקה פנימית entry עם key ו-value

  7. 06:41

    מערך קבוע בגודל 1000 בתוך המחלקה

  8. 08:24

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

תמלול ההרצאה: מערך של מבנים - Array

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

  1. 00:02

    טוב, אנחנו רוצים לכתוב תוכנית, נפתח visual studio, file new project, win32, console application, זה יהיה track A, sample 01, גיבו אוקיי, וזה יהיה application settings, console application,

  2. 00:44

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

  3. 01:28

    להגדיר את ht, אני לא רוצה אותו דינמי, אני רוצה אותו דינמי או לא? דינמי או לא? דינמי או לא? שנייה אחת, בוא נחשוב. אני רוצה אותו דינמי, אני רוצה לכתוב שווה ל-new השטייב.

  4. 01:52

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

  5. 02:31

    זה אמור לעבור בשלום יפה אז יש לי כבר האשטייבל עכשיו מה אני רוצה לעשות עם האשטייבל הזה אני רוצה לבוא ולהגיד לו האשטייבל תוסף לפי ה-Key הזה את ה-Value הזה.

  6. 02:57

    טוב, אז אנחנו אומרים לו, תוסיף לי Key ו-Value. אוקיי, אז בהשתהב על מה שאנחנו נעשה, אנחנו נגדיר פרייבט באזור של הפרייבט. מה אנחנו נגדיר?

  7. 03:14

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

  8. 03:23

    אפשר להגיד לו תיצור, את יוניטייט, את גאות תעופה, בקיצור אין לו, צריך לזכור את זה ידנית, אז נגדיר באזור של הפאבליק, נגדיר את void add שמקבלת נגיד int k והvalue גם כן יהיה int value ונממש אותה כאן.

  9. 03:54

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

  10. 04:31

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

  11. 04:52

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

  12. 05:14

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

  13. 05:42

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

  14. 06:13

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

  15. 06:53

    הגודל יהיה קבוע, יפה. בואו נעשה, אוקיי, אז עכשיו אנחנו בעד, אז בעד אני רוצה, בואו נעשה build כרגע, נגיד לו yes, אוקיי, מה הבעיה?

  16. 07:09

    אז הוא אומר לי, syntax term missing, נקודה פסיק, before I identify entries, עוד פעם, מיסינג נקודה פסיק בפור אידנטיפייר אנטריז מיסינג נקודה פסיק בפור אידנטיפייר אנטריז אה, הוא לא מכיר את אנטרי.

  17. 07:37

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

  18. 08:13

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

  19. 08:36

    אז אולי נעשה קונסטרקטור. אם נעשה קונסטרקטור, נעשה default קונסטרקטור. קונסטרקטור, נדרוס את ה-default קונסטרקטור. זאת אומרת, אני לוקח את זה לכאן ואני אומר לו קופי ו-hash table.

  20. 09:02

    default קונסטרקטור זה קונסטרקטור ללא פרמטרים. אני דורס את ה-default קונסטרקטור, והאמת שאני יכול לשים פה נקודתיים ואינדקס חל לאפס.

  21. 09:16

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

  22. 09:27

    הוא אמר: אינדיקציה לתכנות נכון זה קונסטרקטור ריק. אז הנה, תכנות נכון. יפה.

  23. 09:35

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

  24. 09:49

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

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

ההרצאה הקודמת: מצביע למצביע - Pointer to Pointer

ההרצאה הבאה: רשימה משורשרת - הוספה והדפסה

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

  • קורס סי-שארפ - מערך - Array
  • מערך Array ב-TypeScript
  • מערך Array ב-Javascript
  • מערך - Array - שפת Swift

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

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס תכנות מתקדם - #Advanced .NET C