מדריך על מערכים (arrays) דו מימדים ותלת מימדים בשפת c#.
אז מה בעצם עושים עם מערכים ?
מערכים הם בעצם תאי מידע, ואם יש לנו הרבה מידע לשים במקום לשים משתנה משתנה עם הרבה שורות קוד, אפשר לעשות את זה בקצרה עם מערכים, עם זאת זה חוסך זיכרון מהתוכנית ויותר נקי.
מערכים
טוב ! נשמע לי טוב.. עכשיו איך אני משתמש בזה ?
בשפת c# יש 2 דרכים להגדיר מערכים בצורה הבאה :
דרך ראשונה :
-בXXX כותבים את סוג הערכים (int,double,float,string)
-ב ZZZ כותבים את שם המערך (רצוי שם משמעותי )
-ב YYY את הערכים עם פסיק שמפריד בין אחד לאחד
לדוגמא :
קוד:
int[] numbers = {1,2,3,4};
הדרך השנייה להכין מערך היא כזאת, קודם כל צריך להגדיר את המערך :
קוד:
XXX[]ZZZ = new XXX[YYY];
-בXX כותבים את סוג הערכים (int,double,float,string) - (בשני ה XXX)
-בZZZ אנחנו כותבים את שם המערך(מומלץ שם משמעותי)
-ב YYY אנחנו כותבים את מספר התאים שאנו נרצה לדוגמא 3.
לדוגמא :
קוד:
int[]morenumbers = new int[5];
עכשיו כדי להכניס ערכים למערך, אנחנו נכנתוב את השם של המערך ואז סוגרים מרובעים ובתוכם את מספר התא ואחרי זה נכתוב שווה לאיזה ערך שנרצה *שימו לב, במערך התאים מתחילים לספר מ 0 - אז אם יש לך תא אחד אז המספר שלו הוא 0*,
לדוגמא אם אני רוצה להכניס 4 מספרים למערך :
קוד:
int[]morenumbers = new int[5];
morenumbers[0] = 1;
morenumbers[1] = 2;
morenumbers[2] = 3;
morenumbers[3] = 4;
תבחרו איזה אחת יותר נוחה לכם ותשתמשו בה.
אני משתמש בשנייה כי היא יותר נוחה לי.
רק כדי לבדוק שבטוח הבנתם, אני יכין עוד דוגמא קטנה של מערך, שמכיל שמות של ילדים בכיתה, ואז מדפיס אותם על המסך.
קודם כל ניצור מערך חדש עם 4 תאים מסוג string, והשם שלו יהיה names.
קוד:
string[]names = new string[4];
אחרי זה כמובן נכניס ל4 תאים שהכנו את השמות של הילדים :
קוד:
names[0] = "Gil";
names[1] = "Omry";
names[2] = "Daniel";
names[3] = "Shron";
ולא נשכח להדפיס את השמות :
קוד:
Console.WriteLine("The names of kids in class are :" + names[0] + ',' + names[1] + ',' + names[2] + ',' + names[3]);
וכמובן עכשיו הכל ביחד עם הערות למי שעדיין לא הבין :
קוד:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[]names = new string[4]; // making a new array type of string with a name of "names" with 4 cells
names[0] = "Gil"; // putting in cell 1 value of Gil
names[1] = "Omry"; // putting in cell 2 value of Omry
names[2] = "Daniel"; // putting in cell 3 value of Daniel
names[3] = "Shron"; // putting in cell 4 value of Shron
//printing the value of the cells in the array
Console.WriteLine("The names of kids in class are :" + names[0] + ',' + names[1] + ',' + names[2] + ',' + names[3]);
Console.Read();
}
}
}
טוב הבנתי איך להכין מערך ואיך להכניס בו מערכים.. אבל אין דרך יותר טובה להדפיס את הערכים שלהם ?
הדוגמא הבאה שאני יראה לכם היא דרך נוחה ויעילה להדפיס את כל הערכים במערך, בעזרת לולאת FOR :
קוד:
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine(names[i]);
}
*כאשר שמים את הפקודה .length ליד המערך זה יחזיר לנו את מספר התאים במערך*
מה שעשינו כאן בעצם זה שהגדרנו לולאות for, התחלנו את המשתנה i ל 0, אמרנו שהלולאה תמשיך ככל ש i גדול מ מספר התאים של המערך
names ואז I יגדל ב 1.
בתוך הלולאה עשינו שזה ידפיס את הערך של התא של המערך במספר i (כל הזמן גדל ב 1).
אהה עכשיו הבנתי !
מערך תלת מימדי
מערך תלת מימדי הוא אוסף עיברים כמו מערך רגיל, אך לעומת מערך רגיל צריך שני אינדקסים כדי לגשת לערך של התא.
אפשר להתייחס לזה כמו טבלא :

אה נראה מגניב !
אז איך אני משתמש בזה ?
בשפת c# אנו מכינים מערך דו מימדי בצורה הבאה :
קוד:
XXX[,]YYY = new XXX[ZZZ, VVV];
-XXX מסמל את טיפוס המערך (למשל int,double,string וכדומה)
-YYY מסמל את של המערך (מומלץ שם משמעותי)
-ZZZ מסמל את מספר השורות במערך
-VVV מסמל את מספר העמודות במערך
אז לדוגמא נכין ככה מערך דו מימדי מטיפוס string בשם names שיש לו 3 שורות ו3 עמודות :
קוד:
string[,]names = new string[3, 3];
אחרי שהגדרנו מערך דו מימדי, כמובן שנרצה להכניס לו ערכים.
בדומה למערך רגיל, מכניסים למערך דו מימדי ערכים בעזרת השם שלו, סוגרים מרובעים ואז מספר השורה שהוא בה, ואז סוגרים מרובעים ואת המספר עמודה שהוא בה :
קוד:
XXX[YYY, ZZZ] = TTT;
- XXX מסמל את שם המערך שאליו אנו נרצה להכניס את הערכים.
-YYY מסמל את מספר השורה שאנו נרצה להכניס אליה את הערך
-ZZZ מסמל את מספר העמודה שנרצה להכנס אליה את הערך
-TTT מסמל את הערך שאתה רוצה להכניס לתא.
לדוגמא אני יכניס לשורה מספר 1 ועמודה מספר 1 את הערך gil(למערך הקודם שהכנו) :
קוד:
names[0, 0] = "Gil";
יפה ! אבל עכשיו, איך אני יכול להדפיס את כל המערך הדו מימדי ?
בשביל להדפיס את כל הערכים של המערך הדו מימדי, אנחנו נכין לולאה בתוך לולאה, שתדפיס את הערכים ככה :
קוד:
for (int i = 0; i < names.GetLength(0); ++i) {
for (int z = 0; z < names.GetLength(1); ++z)
{
Console.WriteLine(names[i, z]);
}
}
-getLength(0) מחזיר לנו את מספר השורות שיש במערך
-getLength(1) מחזיר לנו את מספר העמודות שיש במערך
כל מה שעשינו זה לולאה ראשונה שרצה כמספר השורות שיש, ואז בתוכה עוד לולאה שרצה כמספר העמודות שיש, ואז מדפיסה אותם.
טוב אז רק בשביל לבדוק שאנחנו הבנו את זה לגמרי, אנחנו נכין תוכנית קצרה, שבה נכין מערך דו מימדי, שבכל שורה יהיה את שמות הילדים בכיתה, ואז היא תדפיס לנו את שמות הילדים בכל כיתה.
אז בוא נתחיל !
קודם כל אנחנו נכין את המערך שלנו, נקרא לו "names" מטיפוס של string ויהיה בו 3 שורות ו3 עמודות.
קוד:
string[,]names = new string[3, 3];
עכשיו אנחנו נכניס את שמות הילדים בכל כיתה (כל שורה מיצגת כיתה אחרת) :
קוד:
names[0, 0] = "Gil";
names[0, 2] = "Ido";
names[0, 1] = "Ran";
names[1, 0] = "Michael";
names[1, 2] = "yuval";
names[1, 1] = "Lior";
names[2, 0] = "Lahav";
names[2, 2] = "itzhak";
names[2, 1] = "afik";
אחרי שהכנסנו את הערכים לתוך המערך הדו מימדי שלנו, אנחנו נדפיס את כל השמות שלהם עם מספר הכיתה שלהם כך :
קוד:
for (int i = 0; i < names.GetLength(0); ++i)
{
Console.WriteLine("");
Console.WriteLine("Class " + (i +1) + ":");
Console.WriteLine("");
for (int z = 0; z < names.GetLength(1); ++z)
{
Console.WriteLine(names[i, z]);
}
}
כל מה שעשינו זה לולאה ראשונה שרצה כמספר השורות שיש ומדפיסה את מספר הכיתה (מוסיפה 1 ל I מכיון שהוא מתחיל מ 0 ואין כיתה כזאת כיתה 0), ואז בתוכה עוד לולאה שרצה כמספר העמודות שיש, ומדפיסה את שמות הילדים בכיתה.
וכמובן, כול הקוד עם הערות למי שעדין לא סגור שהוא הבין :
קוד:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[,]names = new string[3, 3]; // making a new array type of string name of "names" 3 lines and 3 columns
names[0, 0] = "Gil"; // putting in line 1 column 1 value of gil
names[0, 2] = "Ido"; // putting in line 1 column 2 value of Ido
names[0, 1] = "Ran"; // putting in line 1 column 3 value of Ran
names[1, 0] = "Michael"; // putting in line 2 column 1 value of Michael
names[1, 2] = "yuval"; // putting in line 2 column 2 value of Yuval
names[1, 1] = "Lior"; // putting in line 2 column 3 value of Lior
names[2, 0] = "Lahav"; // putting in line 3 column 1 value of Lahav
names[2, 2] = "itzhak"; // putting in line 3 column 2 value of Itzhak
names[2, 1] = "afik"; // putting in line 3 column 3 value of Afik
for (int i = 0; i < names.GetLength(0); ++i) // starting the loop, contiues for the amount of rows
{
Console.WriteLine(""); // space
Console.WriteLine("Class " + (i +1) + ":"); // printing num of class
Console.WriteLine(""); // space
for (int z = 0; z < names.GetLength(1); ++z) // loop for printing students names
{
Console.WriteLine(names[i, z]); // print the student name
}
}
Console.Read();
}
}
}
וזהו !
אני מקווה שעכשיו הבנתם מה זה מערך ומערך דו מימדי, איך משתמשים בזה ולמה זה שימושי,
אם יש לכם שאלות/לא הבנתם משהו אשמח אם תשאלו.
עבדתי על זה שעתיים וחצי, אשמח לתגובות !
כל הזכויות שמורות לי - אין להעתיק ללא רשות