פורסם 2010 בינואר 2215 שנים שלום לכולם.אני צריך לכתוב תוכנית שמקבלת מטריצה וממיינת את הערכים בכל עמודה לפי סדר יורד. לשם כך כתבתי שתי פונקציות: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;}התוכנית עוברת קומפילציה ורצה אבל לא מבצעת את המשימה כמו שצריך.אם מישהו יכול לעזור לי כאן אני מאוד אודה לו.יום טוב
פורסם 2010 בינואר 2215 שנים הבעיה אצלך היא בפונקציה שעושה SWAPאתה שומר ב TEMP את הכתובת של X, אחרי מכניס לכתובת של X את הערך של Y, ואז אתה מכניסה ל Y את מה שיש ב TEMP, שמצביע לכתובת של X, ששם שמת לפני שניה את הערך שב Y.מה שבעצם זה עשה בפועל, זה:x=yy=xהמשתנה TEMP שלך לא אמור להיות מצביע!תעשה את זה בצורה הבאה:int temp;temp=*x;*x=*y;*y=temp;בהצלחה!
פורסם 2010 בינואר 2315 שנים מחבר שאלה נוספת. חיפשתי בגוגל וניסיתי גם את החיפוש באתר..איך אני מגדיר בC מערך של מחרוזות. כאשר מס' המחרוזות מוגדר כקבוע N ואני לא יודע מה הגודל של כל מחרוזת. ???
פורסם 2010 בינואר 2315 שנים אז זה חייב להיות מערך של מצביעים:char* arr[N];ואז כל מצביע צריך להיות מוקצה דינמית איכשהו (באמצעות malloc) לפי אורך המחרוזת.
פורסם 2010 בינואר 2315 שנים מחבר תודה משהו כזה בערך? void main(){char *arrOfStr[N];int i;for (i=0; i<N; i++) arrOfStr[i]=(char *)realloc(arrOfStr, strlen(gets(arrOfStr[i])));}
פורסם 2010 בינואר 2315 שנים אתה לא יכול לעשות malloc ו-gets באותה שורה, כי כרגע אתה עושה gets לפני ה-malloc, כלומר אתה מנסה לקרוא לתוך מצביע שלא אותחל עדיין.קודם צריך לקרוא את המחרוזת לאנשהו, להחליט מה האורך שלה, ואז לעשות malloc ולהעתיק לשם את המחרוזת.חוץ מזה, עוד שני דברים קטנים: האורך של המערך שאתה מקצה עבור מחרוזת צריך להיות strlen+1, כדי שיהיה מקום ל-'0\', ועושים realloc רק כשאתה רוצה להקצות מצביע כלשהו מחדש. בהקצאה הראשונה משתמשים ב-malloc.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.