כותב |
|
Lee Jun Fan משתמש מתחיל
הצטרף / הצטרפה: 01 December 2010
משתמש: מנותק/ת הודעות: 3
|
נשלח בתאריך: 01 December 2010 בשעה 14:55 | | IP רשוּם
|
|
|
|
היי
אני לומד C, ולא מזמן למדתי על פוינטרים.
אני מסתבך עם ייצוג מטריצה באמצעות פוינטרים, ושליחת המטריצה לפונקציה...
הייתי שמח לראות חתימה של פונקציה שמקבלת פוינטר של מטריצה (כוכבית אחת או 2?), ואיך שולחים את המטריצה לפונקציה הזאת (בקריאה לפונקציה).
תודה רבה.
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 01 December 2010 בשעה 16:20 | | IP רשוּם
|
|
|
|
היי - יש שתי דרכים סטנדרטיות להגדיר מטריצה (או מערך דו מימדי) וצריך לשאול את המורה שלך מה הוא מעדיף
אפשרות אחת ופשוטה יותר היא להגדיר מערך אחד גדול, לדוגמא מטריצה של 5X6 - מגדירים בגודל 30.
ואז איברים 0 עד 5 הם השורה הראשונה, 6 עד 11 הם השורה השנייה וכו'.
ואז גם העבודה עם המערך מבחינה סינטקטית כמו כל מערך מוכר.
אפשרות נוספת היא ממש להגדיר מספר מערכים, וכל אחד מהם לאפס בנפרד, כשהיתרון הוא בפחות חשבון מעצבן, והחסרון הוא בהרבה כתיבה סינטקטית, שתי כוכביות כמו שציינת מכיוון שהמטריצה היא מערך של מצביעים לטיפוס הנתונים.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
Lee Jun Fan משתמש מתחיל
הצטרף / הצטרפה: 01 December 2010
משתמש: מנותק/ת הודעות: 3
|
נשלח בתאריך: 01 December 2010 בשעה 17:49 | | IP רשוּם
|
|
|
|
היי
קודם כול תודה על התגובה.
למורה שלי זה לא משנה.
את הדרך של הייצוג כמערך חד ממדי אני מכיר, הייתי רוצה לראות איך עובדים עם הגדרה של מספר מערכים, כשמגדירים בתכנית (לדוגמה): int[5][6] mat = ..., איך שולחים את זה לפונקציה, ואיך נראית החתימה של הפונקציה.
תודה.
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 02 December 2010 בשעה 10:20 | | IP רשוּם
|
|
|
|
היי, שולח לך דוגמא עם הקצאה דינאמית, עם הקצאה סטאטית מוזמן לראות פה
קוד:
#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); } |
|
|
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
Lee Jun Fan משתמש מתחיל
הצטרף / הצטרפה: 01 December 2010
משתמש: מנותק/ת הודעות: 3
|
נשלח בתאריך: 02 December 2010 בשעה 19:27 | | IP רשוּם
|
|
|
|
וואו, המון המון תודה! אני וחברים שלי כבר מלא זמן מנסים וזה לא הולך לנו. ניסינו כל הזמן בהקצאה סטטית להשתמש ב-2 כוכביות (כמו בהקצאה דינמית).
תודה רבה!
|
חזרה לתחילת העמוד |
|
|
pelor משתמש מתחיל
הצטרף / הצטרפה: 20 February 2005
משתמש: מנותק/ת הודעות: 11
|
נשלח בתאריך: 17 December 2010 בשעה 21:25 | | IP רשוּם
|
|
|
|
פספסתם פה חלק מאוד חשוב אפשר גם להגדיר מערך דו מימדי (מטריצה) לא בהקצאה דינאמית
ולשלוח אותו לפנקציות כמטריצה (אז תצטרך לציין את מספר הטורים בהצהרת הפונקציה) או לשלוח אותו כמצביע (int עם כוכבית אחת) ולהתייחס אליו כמערך פרוס בעזרת חישוב פשוט.
הגדרת מערך של מערכים, או מטריצה משוננת, זה כבר עסק אחר וברוב המקרים נסתפק במטריצה רגילה, או מערך דו מימדי
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 18 December 2010 בשעה 10:45 | | IP רשוּם
|
|
|
|
אולי אתה פספסת, אבל אני שלחתי קישור עם דוגמא :)
שבוע טוב
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|