שוב מערכים בc :) - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שוב מערכים בc :)


shahafp

Recommended Posts

שלום לכולם,

הפעם במערכים דו ממדיים. התרגיל שאני צריך לעשות הוא לקבל מערך דו ממדי מהמשתמש ולסדר את האלכסון הראשי שלו (זה שהולך מהאיבר הראשון עד לאחרון) לפי סדר יורד. כתבתי קטע קוד שאמור לבודד את הערך הגדול מכולם ואז להציב אותו במערך ריק חדש. הבעיה היא שאני לא יודע איך לבודד את המיקום שלו ואז לאפס אותו, מה שקורה בפועל הוא שהערך הכי גבוהה פשוט נכנס לכל התאים במערך החדש. אשמח אם תוכלו להעיף מבט על הקוד ולראות אם יש לי אופציה לעשות שם משהו מועיל. המערך tmp[] הוא ערכי האלכסון בסדר בהם הוכנסו והמערך order[] מתיימר להכיל את אותם ערכים בסדר יורד.


for(i=0; i<row; i++) //reorder the array tmp[] in a new array order[]
{
for(j=0; j<row; j++)
{


if(tmp[j]>max)
{
max=tmp[j];


}
}






order[i]=max;
max=0;
}

- - - תגובה אוחדה: - - -

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

קישור לתוכן
שתף באתרים אחרים

משעשע. אתה יודע איך לפנות לתא (כדי להכניס אותו למשתנה מקס) אבל אתה לא יודע איך לפנות אליו כדי לשנות את הערך?

- - - תגובה אוחדה: - - -

משעשע. אתה יודע איך לפנות לתא (כדי להכניס אותו למשתנה מקס) אבל אתה לא יודע איך לפנות אליו כדי לשנות את הערך?

קישור לתוכן
שתף באתרים אחרים

אם אתה מתעסק רק עם האלכסון הראשי אתה יכול להשתמש בלולאה אחת בלבד--יותר יעיל.

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

קישור לתוכן
שתף באתרים אחרים

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

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

<br>

זה הקוד שיצא בסוף....לא הכי אלגנטי אבל עובד.






for(j=0; j<row; j++) //reorder the array tmp[] in a new array order[]
{
max=tmp[0];
for(i=0; i<row; i++) //finding the max value and put him in "max" variable
{
if(tmp[i]>max)
{
max=tmp[i];
}


}




for(i=0; i<row; i++) //finding the cell where the max value is and put zero instead
{
if(max==tmp[i])
{
tmp[i]=0;
}
}


order[j]=max;


}

קישור לתוכן
שתף באתרים אחרים

ריפר, איך אני שומר את את הכתובת של הערך? שאני חושב על זה עכשיו יכולתי ליצור עוד משתנה ששומר את i של ערך מקס. אבל סה"כ עשיתי משהו דומה.

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

קישור לתוכן
שתף באתרים אחרים

סליחה שאני חוזר לאותו נושא שוב...הפעם אני עוזר לידידה שלומדת איתי. ניסית לעשות את אותו תרגיל אבל הפעם עם כמה מסקנות שהסקתי בפעם הקודמת. הרעיון הוא לעשות לולאה בתוך לולאה. הלולאה הפנימית צריכה לבודד את הערך המקסימלי והכניס את במיקום (i) במשתנה check. אחרי שהלולאה מסתיימת היא צריכה להכניס את הערך המקסימלי לתוך המערך seder[] לפי הסדר ולאפס את הערך המקסימלי. הרעיון הוא שהיא תעשה את זה שלוש פעמים עד שהמערך הזמני יעבור למערך מסודר לפי גודל. משום מה זה לא עובד ואני לא מוצא את הבעיה. מה שקורה אם אני מכניס את הערכים 1-9. המשתנה מקס נשאר עם הערך 9. המערך הזמני נשאר עם הערכים 0,5,9. המערך המסודר 0,0,0. בקיצור משהו בתוך המנגנון עם שתי הלולאות לא עובד כמו שצריך אשמח אם תעיפו מבט ואולי תראו מה לא בסדר...שוב תודה מראש וסליחה :).


#include <stdio.h>
#define N 3


int main()
{


int arr[N][N] = {};
int tmp[N] = {};
int seder[N]={};
int i, j, max, check;
printf("enter your arr number\n");
/*for (i = 0; i < N; i++)
{


for (j = 0; j < N; j++)
{
scanf("%d", &arr[i][j]);
}
}


for (i = 0; i<N; i++)
{
for (j = 0; j < N; j++)
{
printf("%d", arr[i][j]);
}
printf("\n");
}*/




for (i = 0; i < N; i++)
{


tmp[i] = arr[i][i];


}


for (j = 0; j < N; j++);
{
max = tmp[0];


for (i = 0; i < N; i++)
{
if (max < tmp[i])
{
max = tmp[i];
check = i;
}
}


seder[j] = max;
tmp[check] = 0;
}


for (i = 0; i<N; i++)
{


arr[i][i] = seder[i];




}




for (i = 0; i<N; i++)
{
for (j = 0; j < N; j++)
{
printf("%d", tmp[i]);
}
printf("\n");
}




return 0;
}

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...