mdmdmd פורסם 2010 באוגוסט 20 Share פורסם 2010 באוגוסט 20 שלום לכולם.בניתי קוד לחיפוש במטריצה ריבועית.הקוד אמור לבדוק אם במטריצה בגודל 5X5 המסגרת הפנימית היא מורכבת מ-אחדים (1 דים).ז"א נגיד שהמטריצה תהיה 00000 01110 01110 01110 00000אז הפונקציה תחזיר שהכל תקין ובעצם תחזיר את הספרה אחדואם המטריצה תהיה 00000 01010 01110 01110 00000הפונקציה תחזיר את הספרה 0אבל הבעיה היא שהפונקציה צריכה לחפש רק במסגרת הפנימית ולא כולל האיבר האמצעי במטריצה ז"א 00000 01110 01010 01110 00000הפונקציה צריכה להחזיר שהכל תקין, ז"א 1אני צריך איזשהו קוד שידלג על בדיקת האיבר האמצעי (רק המסגרת הפנימית צריכה להיות עשויה מאחדים, כל השאר יכולים להיות כל מספר)זהו הקוד:void check_matrix(int arr[MATRIX][MATRIX],int* p_result){ int i,j; int flag3=1; int temp; for(i=1 ; i<MATRIX-1 ; i++)//i goes 1,2,3 out { for(j=1 ; j<MATRIX-1 ; j++)//j goes 1,2,3 out { arr[i][j]; if(arr[i][j]!=1)//exclude the value in the middle of matrix { flag3=0; } } } *p_result=flag3;}תודה מראש קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 באוגוסט 20 Share פורסם 2010 באוגוסט 20 פשוט מאוד - תחשב מהם האינדקסים של האיבר האמצעי, ואז תתייחס לזה ב-if. קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2010 באוגוסט 20 Share פורסם 2010 באוגוסט 20 במקום לעבור על כל האיברים הפנימיים, אתה יכול לעבור רק על השורות והעמודות שאתה צריך.אם גודל המטריצה הוא WIDTH*HEIGHT, תעשה:int result =1;for (int j = 1; i < HEIGHT - 1; ++j){result &= arr[j][WIDTH - 1] & arr[j][1];}for (int i = 2; i < WIDTH - 2; ++i){ result &= arr[1][i] & arr[HEIGHT - 1][i];}return result; קישור לתוכן שתף באתרים אחרים More sharing options...
mdmdmd פורסם 2010 באוגוסט 20 מחבר Share פורסם 2010 באוגוסט 20 שניצל- אני יודע, ניסיתי אבל משום מה הוא מתעלם מהקוד של האינדקסים, ז"א:if(i==2 && j==2)flage3=1:את הקוד הזה אני מכניס בתוך ה IF לחיפוש אם שונה מאחד, אבל אז הוא משום מה גם כאשר המטריצה היא00000001100101001110הוא מתעלם מהאפס במסגרת ומחזיר ערך 1אז אני צריך קוד אחר בתוך הלולאת FOR, אם למישהו יש רעיון...UnsignedInteger-אני לא כל כך מבין את הקוד שלך בתוך הלולאות, מה זה אומר &= זה בשפת C רגילה בכלל?והאם בקוד שלך התעלמת מהאיבר האמצעי בתוך המסגרת?תודה בכל מקרה על העזרה. קישור לתוכן שתף באתרים אחרים More sharing options...
nsofi פורסם 2010 באוגוסט 20 Share פורסם 2010 באוגוסט 20 כמה דברים א) כאלטרנטיבה (אם גודל המטריצה קבוע ולא ישתנה בעתיד ו/או מה שיעניין אותך זו רק "המסגרת" אז) אתה יכול לבדוק ישירות את התאים במסגרת ללא לולאה. if (arr[1][1]==1 && arr[1][2]==1 && arr[1][3]==1 && ... && arr[3][3] == 1) *p_result=1else *p_result=0 כמובן שצריך לדלג על האיבר האמצעי. פשוט עד כדי כאב ולכן היה חוסך לך שעות של עבודה מול ה debugger ולכתוב הודעות בפורום ולספק לחברים פה "עבודה" ב) מכיוון שהפונקציה שלך בעקרון מחזירה ערך אחד אז עדיף שתגדיר את הפונקציה כמחזירה ערך במקום להעביר את התוצאה המחושבת בפרמטר. int check_matrix(int arr[MATRIX][MATRIX]) ג) יש לך כמובן באג שבגללו אתה מחזיר 1 במקרה שהצגת. כרמז אומר שבמקרים מסוימים אחרים לא תחזיר טעות. לדוגמה במקרה הבא: 111101011 (קשור לפעולה שאתה מבצע אחרי בדיקת מקרה האיבר האמצעי) ד) ללא קשר אם כבר הגעת לשלב בו flag3 צריך להיות 0 אז משיקולי יעילות אל תמשיך בלולאות מכיוון שברור כי המטריצה כבר לא טובה ואין מה לבדוק עוד. תעשה אחד מהבאים: תחזור מייד או תצא מהלולאות ותמשיך בביצוע הפונקציה. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 באוגוסט 20 Share פורסם 2010 באוגוסט 20 פותח הת'רד: ניסית להבין מה הבאג שלך? (זה הרי לא קורה "משום מה", יש לזה סיבה די פשוטה)במקרה ש-i,j שניהם 2, אין סיבה להדליק את הדגל מחדש, פשוט צריך להימנע מלכבות אותו. קישור לתוכן שתף באתרים אחרים More sharing options...
Shlompy פורסם 2010 באוגוסט 20 Share פורסם 2010 באוגוסט 20 עזוב אותך מדגלים.תעשה שתי לולאות.אחת בודקת את שתי השורות של המסגרת הפנימים.אחת בודקת את שתי העמודות של המסגרת הפנימית.אם באחד מהאיברים נתקלת ב 0, אז שהפונקציה תחזיר 0.בסוף הפונקציה תחזיר אחד.אני לא מבין מה יכול להיות יותר פשוט מזה. לא רואה שום סיבה לרוץ על כל המטריצה. קישור לתוכן שתף באתרים אחרים More sharing options...
mdmdmd פורסם 2010 באוגוסט 22 מחבר Share פורסם 2010 באוגוסט 22 אוקיי, פתרתי את הבעיה. סתם לידע כללי: התרגיל הזה הוא תרגיל בית בתכנות שאני צריך להגיש ולקבל עליו ציון אני לא יכול להשתמש בפונקציה המחזירה ערך (מן הסתם הייתי עושה את זה אם הייתי יכול) זה חלק מדרישות התרגיל הבעיה שלי לא הייתה בהיגיון אלא באג בבדיקה שגיליתי איך לפתור הגודל של המטריצה לא קבוע, מה שמזכיר לי שעשיתי טעות ששלחתי את הקובץ כי גם אני השתמשתי ב J==2 ו- I==2 והייתי צריך להשתמש ב MATRIX\2==I MATRIX\2==J במקום... בכל מקרה תודה לכולם על הנסיון לעזור והעוקצנות הרבה קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.