Logo

רד-בורד: ארכיון

ראשי > תיכנות > מערכים מהם? - סליחה על הבורות.

20/06/2007 01:02:34 koler
שלום אני לומד מ"ויקי ספר" את שפת C
כרגע אני לומד על מערכים בתור מתכנת אתרים בעיקר אינני ניתקלתי בנושא מערכים...
השאלה של היא מה המטרה של המערכים כלומר מה תפקידם?
האם להכיל מספר משתנים בתוך משתנה אחד ואז לפנות אליו בעזרת מספר?
מדוע שאני לא יכתוב משתנים רגילים?
האם תוכלו לתת לי דוגמא מילולית שלא שימוש במערך?


תודה
אגב כבר ניסיתי להבין מישעור באינטרנט וללא הצלחה.
20/06/2007 01:41:28 devil kide
ציטוט:שלום אני לומד מ"ויקי ספר" את שפת C
כרגע אני לומד על מערכים בתור מתכנת אתרים בעיקר אינני ניתקלתי בנושא מערכים...
השאלה של היא מה המטרה של המערכים כלומר מה תפקידם?
האם להכיל מספר משתנים בתוך משתנה אחד ואז לפנות אליו בעזרת מספר?
מדוע שאני לא יכתוב משתנים רגילים?
האם תוכלו לתת לי דוגמא מילולית שלא שימוש במערך?


תודה
אגב כבר ניסיתי להבין מישעור באינטרנט וללא הצלחה.
אם תכנת בPHP למשל, בטוח עבדת עם מערכים.
כשאתה מקבל מידע משורת הGET אתה מקבל את המידע בתוך מערך;
קוד:echo $_GET[’url’];

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

קוד:void func(int x){
int arr[100];//הגדרנו מערך בן 101 תאים
int counter,avg=0;//הגדרת הסוכם ללולאה ומשצנה לממוצע
for (counter=0;counter<=x;counter++){
printf ("please insert number...\n");
scanf ("%d",&arr[counter]);//אנחנו קולטים למערך, במקום של הסוכם
}
//ונחזיר את הסכום של כל מה שקלטנו
//אני מודע לזה שלא צריך מערך בשביל זה, זה רק בשביל הדוגמא
for (counter=0;counter<=x;counter++)
avg=avg+arr[counter];
return avg;
}


מקווה שיצא מובן
20/06/2007 03:34:32 koler
בקיצור נגיד יש לי מערך עם 3 איברים אז האיברים יכולים להכיל מספרים?(אך ורק מספרים?!)
20/06/2007 14:32:52 devil kide
תלוי איך אתה מצהיר עליהם.
אם תצהיר עליהם כ float הם יכילו מספר עם נקודה צפה, אם תהיר עליהם כ char אז כל תא יכיל תו בודד, והמערך יכיל מחרוזת.
20/06/2007 22:53:23 HLL
לדעתי ההגדרה הכי הגיונית ומדוייקת למערך היא הבאה
ציטוט:מערך הינו אוסף של נתונים מאותו טיפוס, ואליהם מאופשרת הגישה הרנדומלית(כלומר, גישה לאו דאווקה רציפה כך זה נקרא Random Access) באמצעות אינדקס (אותו ’המספר שאתה מציין בסוגריים’)
וכהגדרתו כמובן - הוא מאפשר לאסוף X משתנים במערך בודד אחד. כאשר אתה לא צריך לטפל בכל אחד בנפרד, אתה יכול לעבור על המערך בלולאה...
נשמע שאתה רק מתחיל בתכנות, אל תסבך את עצמך בזה, אתה תפנים את זה בהמשך.

אה- ודביל קיד-שוב אני נאלץ לתקן אותך :/
המערך אינו בעל 101 תאים (נראה לי שתיקנתי אותך בידיוק על זה בעבר)
המערך הוא בעל 100 תאים הנעים מאינדקס 0 לאינדקס 99 (כולל)
על כן, גם שאר הקוד שלך הוא שגוי, יש בו שגיאת Off by one...[ההודעה נערכה על-ידי HLL ב-20/06/2007 23:05:48]
21/06/2007 13:29:50 xtr
חחח בתור אחד יודע מזה מערכים לא הבנתי ממכם מזה....

כדי להבין מזה מערך צריך לראות איך הוא בנוי

|[][][][][][]|
עקרונית ככה זה נראה בזכרון שלנו (רק עקרונית )

תחיל המערכת מיוצגת על ידי פוינטר
וגישה לאיבר הבא יכולה לעשות ע"י הפוינטר +1

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

במערך יש כמה דברים פשוטים שצריך להבין

המערך תמיד מתחיל מ 0 ונגמר בגודל המערך - 1
זאת אומרת שאם הגדרת מערך בגודל 32
תוכל לקרוא לו מ array[0] עד array[31]
מספר האיברים במערך הוא כמובן 32 כו שהגרת
לכן לולאה של מערך תראה ככה

for (i=0;i<32i++)
עמודים: 1