עבור לתוכן

שאלה בנוגע לכתובות של תאים במטרציה בשפת C

Featured Replies

פורסם

שלום לכולם.

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

void firstSort(int mat[][COL])
{
int i,j,k;
for (i=0; i<COL; i++)
for (k=0; k<ROW; k++)
for (j=1; j<ROW; j++)
if (mat[j-1][i] > mat[j][i])
swap(&(mat[j-1][i]), &(mat[j][i]));
}


void swap(int *x, int *y) //x gets the value in y
{
int *temp;
temp=x;
*x=*y;
*y=*temp;
}

התוכנית עוברת קומפילציה ורצה אבל לא מבצעת את המשימה כמו שצריך.

אם מישהו יכול לעזור לי כאן אני מאוד אודה לו.

יום טוב

פורסם

הבעיה אצלך היא בפונקציה שעושה SWAP

אתה שומר ב TEMP את הכתובת של X, אחרי מכניס לכתובת של X את הערך של Y, ואז אתה מכניסה ל Y את מה שיש ב TEMP, שמצביע לכתובת של X, ששם שמת לפני שניה את הערך שב Y.

מה שבעצם זה עשה בפועל, זה:

x=y

y=x

המשתנה TEMP שלך לא אמור להיות מצביע!

תעשה את זה בצורה הבאה:


int temp;
temp=*x;
*x=*y;
*y=temp;

בהצלחה!

פורסם
  • מחבר

תודה רבה! עזרת לי מאוד

פורסם
  • מחבר

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

איך אני מגדיר בC מערך של מחרוזות. כאשר מס' המחרוזות מוגדר כקבוע N ואני לא יודע מה הגודל של כל מחרוזת.

???

פורסם

אז זה חייב להיות מערך של מצביעים:

char* arr[N];

ואז כל מצביע צריך להיות מוקצה דינמית איכשהו (באמצעות malloc) לפי אורך המחרוזת.

פורסם
  • מחבר

תודה :xyxthumbs:

משהו כזה בערך?

void main()
{
char *arrOfStr[N];
int i;
for (i=0; i<N; i++)
arrOfStr[i]=(char *)realloc(arrOfStr, strlen(gets(arrOfStr[i])));

}

פורסם

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

קודם צריך לקרוא את המחרוזת לאנשהו, להחליט מה האורך שלה, ואז לעשות malloc ולהעתיק לשם את המחרוזת.

חוץ מזה, עוד שני דברים קטנים: האורך של המערך שאתה מקצה עבור מחרוזת צריך להיות strlen+1, כדי שיהיה מקום ל-'0\', ועושים realloc רק כשאתה רוצה להקצות מצביע כלשהו מחדש. בהקצאה הראשונה משתמשים ב-malloc.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים