נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: מטריצות ופוינטרים ב-C

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
Lee Jun Fan
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 01 December 2010
משתמש: מנותק/ת
הודעות: 3
נשלח בתאריך: 01 December 2010 בשעה 14:55 | IP רשוּם
ציטוט Lee Jun Fan

היי

אני לומד C, ולא מזמן למדתי על פוינטרים.

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

הייתי שמח לראות חתימה של פונקציה שמקבלת פוינטר של מטריצה (כוכבית אחת או 2?), ואיך שולחים את המטריצה לפונקציה הזאת (בקריאה לפונקציה).

 

תודה רבה.

חזרה לתחילת העמוד הצג את כרטיס החבר של Lee Jun Fan חפש הודעות אחרות של Lee Jun Fan
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 01 December 2010 בשעה 16:20 | IP רשוּם
ציטוט shoshan

היי - יש שתי דרכים סטנדרטיות להגדיר מטריצה (או מערך דו מימדי) וצריך לשאול את המורה שלך מה הוא מעדיף

אפשרות אחת ופשוטה יותר היא להגדיר מערך אחד גדול, לדוגמא מטריצה של 5X6 - מגדירים בגודל 30.

ואז איברים 0 עד 5 הם השורה הראשונה, 6 עד 11 הם השורה השנייה וכו'.

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

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


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
Lee Jun Fan
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 01 December 2010
משתמש: מנותק/ת
הודעות: 3
נשלח בתאריך: 01 December 2010 בשעה 17:49 | IP רשוּם
ציטוט Lee Jun Fan

היי

קודם כול תודה על התגובה.

למורה שלי זה לא משנה.

את הדרך של הייצוג כמערך חד ממדי אני מכיר, הייתי רוצה לראות איך עובדים עם הגדרה של מספר מערכים, כשמגדירים בתכנית (לדוגמה): int[5][6] mat = ..., איך שולחים את זה לפונקציה, ואיך נראית החתימה של הפונקציה.

 

תודה.

חזרה לתחילת העמוד הצג את כרטיס החבר של Lee Jun Fan חפש הודעות אחרות של Lee Jun Fan
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 02 December 2010 בשעה 10:20 | IP רשוּם
ציטוט shoshan

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

קוד:
#include <stdlib.h>
#include "stdio.h"

#define MATRIX_ROWS 10
#define MATRIX_COLUMNS 5

void print_matrix(int** matrix, int rows, int columns)
{
    int i, j;

    for (i = 0 ; i < rows ; ++i)
    {
        for (j = 0 ; j < columns ; ++j)
        {
            printf("%03d | ", matrix[i][j]);
        }
        printf("\n");
    }
}

int **create_matrix(int rows, int columns)
{
    int **matrix;
    int r;
    matrix = (int**)malloc(rows * sizeof(int*));
    for (r=0; r<rows; ++r)
    {
        matrix[r] = (int*)malloc(columns * sizeof(int));
    }
    return matrix;
}

void free_matrix(int **matrix, int rows)
{
    int r;
    for (r=0; r<rows; ++r)
    {
        free(matrix[r]);
    }
    free(matrix);
}

int main()
{
    int **matrix;

    int r, c;

    matrix = create_matrix(MATRIX_ROWS, MATRIX_COLUMNS);

    for (r = 0 ; r < MATRIX_ROWS ; ++r)
    {
        for (c = 0 ; c < MATRIX_COLUMNS ; ++c)
        {
            matrix[r][c] = r*MATRIX_COLUMNS+c;
        }
    }

    print_matrix(matrix, MATRIX_ROWS, MATRIX_COLUMNS);

    free_matrix(matrix, MATRIX_ROWS);
}



__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
Lee Jun Fan
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 01 December 2010
משתמש: מנותק/ת
הודעות: 3
נשלח בתאריך: 02 December 2010 בשעה 19:27 | IP רשוּם
ציטוט Lee Jun Fan

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

תודה רבה!

חזרה לתחילת העמוד הצג את כרטיס החבר של Lee Jun Fan חפש הודעות אחרות של Lee Jun Fan
 
pelor
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 20 February 2005
משתמש: מנותק/ת
הודעות: 11
נשלח בתאריך: 17 December 2010 בשעה 21:25 | IP רשוּם
ציטוט pelor

פספסתם פה חלק מאוד חשוב
אפשר גם להגדיר מערך דו מימדי (מטריצה) לא בהקצאה דינאמית
קוד:

int matrix[5][5]

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

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

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 18 December 2010 בשעה 10:45 | IP רשוּם
ציטוט shoshan

אולי אתה פספסת, אבל אני שלחתי קישור עם דוגמא :)

שבוע טוב


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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