קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים www.cs.tau.ac.il/courses/cs4math/09b 9012345678 0987654321.

Slides:



Advertisements
Similar presentations
מבוא למדעי המחשב לתעשייה וניהול
Advertisements

תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
מבוא כללי למדעי המחשב שיעור שני: שימוש במשתנים.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תכנות תרגול 7 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
מבוא כללי למדעי המחשב שיעור 4 מרצה: שי גוטנר. חזרה - משתנים מסוג char משתנים אלו מיצגים תווים. משתנים אלו מיצגים תווים. לכל תו יש קוד מספרי שמייצג אותו.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
שיעור שישי: מערכים ופונקציות
מבוא כללי למדעי המחשב שיעור שלישי: בקרת זרימה.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מבוא למדעי המחשב מחרוזות, מצביעים וכתובות
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site : T.A. :Emilia Katz.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 3 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
מערכים מבוא לתכנות למנע"ס - שבוע מספר 8 - מאיר קומר - סמסטר ב' - תשס"ו והנה בעיה כתוב תוכנית אשר תקלוט 36 מספרים ותדפיס כמה מתוכם גדולים יותר מהממוצע.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
מבוא כללי למדעי המחשב שיעור רביעי: לולאות
מבני בקרה לולאות. שאלה #1 שאלה ב' – תכתוב תוכנה הכותבת את תפריט הבאה Type 1 to find the area of a circle Type 2 to find the circumference of a circle.
מבוא למדעי המחשב תרגול 6 - מערכים שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות תרגול 4 שבוע : לולאות for לולאות for for (counter=1 ;counter
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
מבוא כללי למדעי המחשב הקצאת זיכרון דינאמית
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא כללי למדעי המחשב תרגול 7. מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
1 תרגול 3 - מערכים מבוא למדעי המחשב – סמסטר א' תשע"א.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 8 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
Structure. מה לומדים היום ? דרך לבנות מבנה נתונים בסיסי – Structure מייצר " טיפוס " חדש מתאים כאשר רוצים לאגד כמה משתנים יחד דוגמאות : עובד : שם, טלפון,
הגדרת משתנים יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
Programming Arrays.
Formal Specifications for Complex Systems (236368) Tutorial #1
מבוא למדעי המחשב סיבוכיות.
מבוא למדעי המחשב – סמסטר א' תשע"ב
שיעור חמישי: מערכים ומחרוזות
מצביעים קרן כליף.
מערכים קרן כליף.
קורס תכנות – סמסטר ב' תשס"ח
מבוא כללי למדעי המחשב פונקציות
הקצאת זיכרון דינאמית מבוא כללי למדעי המחשב
מבוא כללי למדעי המחשב תרגול 4
מבוא כללי למדעי המחשב שיעור 2
מבוא למדעי המחשב – סמסטר א' תשע"ד
מערכים של מצביעים הקצאה דינאמית
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים

שאלה רוצים לקלוט 30 מספרים שלמים, ולאחר מכן להדפיס אותם בסדר הפוך מהסדר שקלטנו אותם (כלומר מהסוף להתחלה). כיצד נוכל לעשות זאת? רוצים לקלוט 30 מספרים שלמים, ולאחר מכן להדפיס אותם בסדר הפוך מהסדר שקלטנו אותם (כלומר מהסוף להתחלה). כיצד נוכל לעשות זאת? לדוגמא, אם היה מדובר על קלט של 3 מספרים: לדוגמא, אם היה מדובר על קלט של 3 מספרים: הפלט היה צריך להיות: הפלט היה צריך להיות:

פתרון אפשרי נשתמש ב-30 משתנים, משתנה לכל ערך מהקלט: a1,…,a30. נשתמש ב-30 משתנים, משתנה לכל ערך מהקלט: a1,…,a30. נקלוט את כל אחד מ-30 המספרים לתוך משתנה (הראשון ל- a1, השני ל- a2, וכן הלאה) נקלוט את כל אחד מ-30 המספרים לתוך משתנה (הראשון ל- a1, השני ל- a2, וכן הלאה) נדפיס את ערכי שלושים המשתנים בסדר הפוך מסדר הקלט: קודם a30, אחר-כך a29, וכך הלאה עד a1. נדפיס את ערכי שלושים המשתנים בסדר הפוך מסדר הקלט: קודם a30, אחר-כך a29, וכך הלאה עד a1. אז בתוכנית יהיו 30 משתנים, 30 פקודות קלט, 30 פקודות הדפסה,... זו תהיה תוכנית מאוד מסורבלת (ומה נעשה אם יהיו 1000 מספרים?)

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

הפתרון: מערך שפת C מאפשרת להגדיר בבת-אחת אוסף של משתנים מאותו סוג, ולגשת לכל אחד מהם בעזרת אינדקס (מספר סידורי). אוסף כזה נקרא "מערך". שפת C מאפשרת להגדיר בבת-אחת אוסף של משתנים מאותו סוג, ולגשת לכל אחד מהם בעזרת אינדקס (מספר סידורי). אוסף כזה נקרא "מערך". זה מאפשר לעשות לולאה על המספר הסידורי של המשתנה, ולבצע אותו דבר על כל אחד מהמשתנים ("התאים") במערך. זה מאפשר לעשות לולאה על המספר הסידורי של המשתנה, ולבצע אותו דבר על כל אחד מהמשתנים ("התאים") במערך. A[0]A[29]

איך ניראה הפיתרון #include<stdio.h> int main() { int i, input[30]; int i, input[30]; printf(“Enter the 30 integers:\n”); printf(“Enter the 30 integers:\n”); for (i=0; i<=29; i++) for (i=0; i<=29; i++) scanf(“%d”, &input[i]); scanf(“%d”, &input[i]); for (i=29; i>=0; i--) for (i=29; i>=0; i--) printf(“%d”, input[i]); printf(“%d”, input[i]); } קלט לתאי המערך, מתא 0 עד תא 29 הדפסה בסדר הפוך, מתא 29 עד תא 0 התוכנית קולטת 30 מספרים ומדפיסה אותם בסדר הפוך מגדירים מערך של 30 משתנים מסוג int עוברים בלולאה על המשתנים האלה

נושאי השיעור היום מה זה מערך ולמה הוא משמש מה זה מערך ולמה הוא משמש הגדרה ואיתחול הגדרה ואיתחול גישה לתאים גישה לתאים

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

מערכים – משמעות והגדרה כאמור, מערך הוא אוסף של משתנים מאותו טיפוס (הטיפוס יכול להיות int, char, float, double או כל טיפוס אחר שנכיר). כאמור, מערך הוא אוסף של משתנים מאותו טיפוס (הטיפוס יכול להיות int, char, float, double או כל טיפוס אחר שנכיר). בהגדרת המערך רושמים את טיפוס המשתנים ואת מספרם. בהגדרת המערך רושמים את טיפוס המשתנים ואת מספרם. למשל כך נגדיר מערך של 100 משתנים מטיפוס double: למשל כך נגדיר מערך של 100 משתנים מטיפוס double: double prices[100]; הגדרת מערך מקצה רצף של מקומות בזיכרון שיכילו את ערכי תאי (משתני) המערך. למשל:הגדרת מערך מקצה רצף של מקומות בזיכרון שיכילו את ערכי תאי (משתני) המערך. למשל: A[0]A[9]

הכנסת ערך לתא במערך לכל אחד מהתאים במערך יש מספר סידורי (אינדקס), החל מ-0. לכל אחד מהתאים במערך יש מספר סידורי (אינדקס), החל מ-0. ההתייחסות אל כל תא היא על-ידי שם המערך והמספר הסידורי של התא, בתוך סוגריים מרובעים. ההתייחסות אל כל תא היא על-ידי שם המערך והמספר הסידורי של התא, בתוך סוגריים מרובעים. לדוגמא, נגדיר מערך של 10 משתנים מסוג int, ונשים 51 בתא הראשון ו-45 בתא העשירי: לדוגמא, נגדיר מערך של 10 משתנים מסוג int, ונשים 51 בתא הראשון ו-45 בתא העשירי: int A[10]; int A[10]; A[0]=51; A[0]=51; A[9]=45; A[9]=45; A[0]A[9]

קריאת ערך מתא במערך כמו שאפשר לשים ערך בתא מסויים, אפשר גם לקבל את הערך שנמצא בתא מסויים. למשל: כמו שאפשר לשים ערך בתא מסויים, אפשר גם לקבל את הערך שנמצא בתא מסויים. למשל: printf(“%d”, A[0]); i=A[5]; נשים לב: כדי להתייחס לתא במערך צריך תמיד לציין את המספר הסידורי שלו בתוך סוגריים מרובעים. נשים לב: כדי להתייחס לתא במערך צריך תמיד לציין את המספר הסידורי שלו בתוך סוגריים מרובעים. שם המערך ללא סוגריים מרובעים מתייחס לכתובת ההתחלה של המערך בזיכרון, ולא לתא במערך. שם המערך ללא סוגריים מרובעים מתייחס לכתובת ההתחלה של המערך בזיכרון, ולא לתא במערך.

הדוגמא שראינו #include<stdio.h> int main() { int i, input[30]; int i, input[30]; printf(“Enter the 30 integers:\n”); printf(“Enter the 30 integers:\n”); for (i=0; i<=29; i++) for (i=0; i<=29; i++) scanf(“%d”, &input[i]); scanf(“%d”, &input[i]); for (i=29; i>=0; i--) for (i=29; i>=0; i--) printf(“%d”, input[i]); printf(“%d”, input[i]); } קלט לתאי המערך, מתא 0 עד תא 29 הדפסה בסדר הפוך, מתא 29 עד תא 0 התוכנית קולטת 30 מספרים ומדפיסה אותם בסדר הפוך מגדירים מערך של 30 משתנים מסוג int עוברים בלולאה על המשתנים האלה

איתחול מערכים בשורת ההגדרה כמו טיפוסי משתנים אחרים, ניתן לאתחל מערך כשמגדירים אותו. זה נעשה באופן הבא: כמו טיפוסי משתנים אחרים, ניתן לאתחל מערך כשמגדירים אותו. זה נעשה באופן הבא: int A[5]={7,43,15,17,235}; int A[5]={7,43,15,17,235}; ערכי האיתחול נכנסים לתאי-המערך לפי הסדר (משמאל לימין). ערכי האיתחול נכנסים לתאי-המערך לפי הסדר (משמאל לימין). אם ניתן ערכים רק לחלק מהתאים, שאר התאים יאותחלו עם הערך 0. אם ניתן ערכים רק לחלק מהתאים, שאר התאים יאותחלו עם הערך 0. int A[5]={9,42}; אז אפשר למשל לאתחל מערך באפסים על-ידי int A[5]={0}; אז אפשר למשל לאתחל מערך באפסים על-ידי int A[5]={0}; אם לא נציין את מספר תאי המערך, הוא יהיה כמספר ערכי האיתחול (בדוגמא הבאה יהיו לו 6 תאים): אם לא נציין את מספר תאי המערך, הוא יהיה כמספר ערכי האיתחול (בדוגמא הבאה יהיו לו 6 תאים): int A[]={16,2,19,256,5,1432}; int A[]={16,2,19,256,5,1432}; לא ניתן להכניס ערכים למערך באופן הזה אחרי ההגדרה שלו. לא ניתן להכניס ערכים למערך באופן הזה אחרי ההגדרה שלו.

אין גישה לכל המערך בבת-אחת אחרי הגדרת המערך אפשר רק להתייחס לכל אחד מהתאים שלו בנפרד. אחרי הגדרת המערך אפשר רק להתייחס לכל אחד מהתאים שלו בנפרד. אי-אפשר לשים ערכים בתאי המערך בבת-אחת: אי-אפשר לשים ערכים בתאי המערך בבת-אחת: למשל אי-אפשר לאפס בבת-אחת את כל התאים, וצריך לעשות זאת ע"י לולאה: למשל אי-אפשר לאפס בבת-אחת את כל התאים, וצריך לעשות זאת ע"י לולאה: for(i=0; i<10; i++) A=0 for(i=0; i<10; i++) A=0 A[i]=0; A[i]=0; אי-אפשר להעתיק מערך למערך אחר ע"י פעולת = גם זה דורש לולאה: אי-אפשר להעתיק מערך למערך אחר ע"י פעולת = גם זה דורש לולאה: for(i=0; i<10; i++) A=B for(i=0; i<10; i++) A=B A[i]=B[i]; A[i]=B[i]; כך גם לגבי פעולות השוואה, הדפסה, קלט, וכו' (דרושה לולאה). כך גם לגבי פעולות השוואה, הדפסה, קלט, וכו' (דרושה לולאה).

חריגה מגבולות המערך אם נכתוב לתא במערך מעבר לגודל שהוגדר, בסבירות גבוהה יפגעו נתונים של תוכנות אחרות, והתוכנית "תעוף". אם נכתוב לתא במערך מעבר לגודל שהוגדר, בסבירות גבוהה יפגעו נתונים של תוכנות אחרות, והתוכנית "תעוף". למשל: למשל: int a[10]; a[10]=1; a[-1]=5;

נקודה תשומת-לב בהגדרת מערך הגודל שלו חייב להיות מספר קבוע, ולא יכול להיות ערך של משתנה. בהגדרת מערך הגודל שלו חייב להיות מספר קבוע, ולא יכול להיות ערך של משתנה. למשל: למשל: int a[10]; int my_size=10; ולא: int a[my_size]; גודל מערך יכול להיות קבוע שמוגדר ב- #define (כי זה מספר שכתוב בתוכנית ולא יכול להשתנות במהלך הריצה). גודל מערך יכול להיות קבוע שמוגדר ב- #define (כי זה מספר שכתוב בתוכנית ולא יכול להשתנות במהלך הריצה). #define SIZE 10 #define SIZE 10 int a[SIZE];

מערכים - דוגמא נוספת #include<stdio.h> int main() { int i, num, digits[10]={0}; int i, num, digits[10]={0}; printf(“Enter a positive integer:\n”); printf(“Enter a positive integer:\n”); scanf(“%d”, &num); scanf(“%d”, &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++) printf(“Digit %d appeared %d times\n”, i, digits[i]); printf(“Digit %d appeared %d times\n”, i, digits[i]); } התוכנית הזו קולטת מספר שלם חיובי ומדפיסה כמה פעמים הופיעה בו כל סיפרה מדפיסים כמה פעמים כל ספרה הופיעה כל תאי המערך מאותחלים לאפס (מניחים כאן שהקלט תקין) מגדילים ב-1 את התא שמתאים לספרת האחדות של המספר, ומחלקים אותו ב-10 לולאה שנמשכת כל עוד המספר לא מתאפס i במערך יכיל את מספר ההופעות של הספרה i תא נניח לדוגמא

נקודה לתשומת-לב: מערך קבוע כמו כל משתנה, אפשר להגדיר מערך כקבוע (const). כמו כל משתנה, אפשר להגדיר מערך כקבוע (const). const int M[12]={31,28,31,30,31,30,31,31,30,31,30,31}; ערכי המערך הוגדרו כקבועים, ולכן לא ניתן להעביר אותו

מערכים רב-מימדיים לפעמים נירצה לייצג מטריצות, או מערכים ממימדים גבוהים יותר. לפעמים נירצה לייצג מטריצות, או מערכים ממימדים גבוהים יותר. נוכל להגדיר מערכים כאלה למשל על-ידי: נוכל להגדיר מערכים כאלה למשל על-ידי: int a[10][100]; המשמעות היא שהגדרנו 10 מערכים בגודל 100 של מספרים שלמים. המשמעות היא שהגדרנו 10 מערכים בגודל 100 של מספרים שלמים. ואז נוכל לגשת לכל תא ע"י שני אינדקסים, למשל: ואז נוכל לגשת לכל תא ע"י שני אינדקסים, למשל:a[5][8]=4;

מערכים רב-מימדיים - איתחול ניתן לתת ערכים התחלתיים גם כשמגדירים מערך רב-מימדי. ניתן לתת ערכים התחלתיים גם כשמגדירים מערך רב-מימדי. מתייחסים אליו כאל מערך של מערכים חד-מימדיים, ומעבירים ערכי איתחול לכל אחד מהם. למשל: מתייחסים אליו כאל מערך של מערכים חד-מימדיים, ומעבירים ערכי איתחול לכל אחד מהם. למשל: int my_matrix[3][2]={ {1,0}, {0,1}, {1,1} }; int my_matrix[3][2]={ {1,0}, {0,1}, {1,1} }; איתחול נפוץ יותר הוא בעזרת לולאות מקוננות (אם יש הרבה תאים לא נירצה לכתוב את ערכי כולם). איתחול נפוץ יותר הוא בעזרת לולאות מקוננות (אם יש הרבה תאים לא נירצה לכתוב את ערכי כולם).

דוגמא: איפוס מערך דו-מימדי בגודל x int main() { int a[100][100] int a[100][100] int i,j; int 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 ] = 0; a[ i ][ j ] = 0; return 0; } אין צורך לרשום את המימד הראשון בסוגריים המרובעים (כמו במערכים רגילים), אבל חייבים לרשום גודל בסוגריים השניים.

דוגמא: מה עושה התוכנית הבאה? #include<stdio.h> int main() { int i,j, a[11][11]; int i,j, a[11][11]; for(i=1; i<=10; i++) for(i=1; i<=10; i++) for(j=1; j<=10; j++) for(j=1; j<=10; j++) a[ i ][ j ] = i*j; a[ i ][ j ] = i*j; for(i=1; i<=10; i++) for(i=1; i<=10; i++) { for(j=1; j<=10; j++) for(j=1; j<=10; j++) printf(“% 4 d”, a[ i ][ j ] ); printf(“% 4 d”, a[ i ][ j ] ); printf(“\n”); printf(“\n”); }} מדפיסה את לוח הכפל כך יוקצו 4 תווים להדפסת כל מספר (ואם יש פחות ספרות יהיו משמאל רווחים) יודפס: