פורסם 2011 בדצמבר 3013 שנים אהלן,אני מנסה לעשות חיפוש בינארי על שורה ראשונה בטריצה C(השורה הראשונה כבר ממויינת).משום מה זה לא עובד ואני לא מבין למה:main CALL:Search(C,cols);fucntion:void Search(int C[][],int cols){ int x; int low=0,mid,high; printf("Please enter an integer for search:\n",x); scanf("%d",&x); high=cols-1; while(low<=high) { mid=(low+high)/2; if(x<C[mid]) high=mid-1; else if(x>C[mid]) high=mid+1; else if(x==mid) printf("%d",mid); } printf("No matches found\n");}errors:Error 7 error C2040: '<' : 'int' differs in levels of indirection from 'int [1]' c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 188Error 9 error C2040: '>' : 'int' differs in levels of indirection from 'int [1]' c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 191Error 5 error C2087: 'C' : missing subscript c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 178Error 6 error C2446: '<' : no conversion from 'int *' to 'int' c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 188Error 8 error C2446: '>' : no conversion from 'int *' to 'int' c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 191Error 10 error C2664: 'Search' : cannot convert parameter 1 from 'int [10][15]' to 'int [][1]' c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 283 11 IntelliSense: an array may not have elements of this type c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 178
פורסם 2011 בדצמבר 3013 שנים אם C הוא מערך דו מימדי, אז מה זה [C[mid?איך ניגשים לאיברים מהשורה הראשונה במערך דו מימדי?
פורסם 2011 בדצמבר 3013 שנים מחבר לא שמתי לב...אבל אני לא מבין דבר פשוט.בקריאה אני קורא למטריצה אבל אני רוצה לקבל כמערך את הראושנה..אני חותר לדבר הבא:אם בקריאה לפונרציה הייתי כותב C[0] הייתי מקבל את השורה הראשונה כמערך ועובד עליה בלי בעיה...אבל המגבלה שלי שאסור לי לגעת בMain.אז כל פעם אני אצטרך לעשות [cols ][0] כדי לעבוד על העמודות?
פורסם 2011 בדצמבר 3113 שנים מחבר משום מה כשאני עושה דיבאג לתכנית באמצע החיפוש היא נפסקת משום מה,אין שינוי משתנים הלוקאלים,בתנאי,כלום זה פשוט רץ בלי לעשות כלום....הנה הפונקציה המתוקנת...void Search(int C[][MAX_COLS],int cols){ int x=0; int low=0,mid,high; printf("Please enter an integer for search:\n",x); scanf("%d",&x); high=cols-1; while(low<high) { mid=(low+high)/2; if(x<C[0][mid]) high=mid-1; else if(x>C[0][mid]) high=mid+1; else printf("%d",mid); } printf("No matches found\n");}
פורסם 2011 בדצמבר 3113 שנים א. כתוב פונקציה שעושה חיפוש בינארי על מערך חד מימדי של אלמנטים, תדבג אותה ותוודא שהיא עובדת נכון.ב. אח"כ מתוך הפונקציה שמחפשת במטריצה, תעביר אליה את השורה הראשונה שכתבת בא'חיפוש בינארי הוא על אוסף ("חד מימדי") ממויין של אלמנטים. מערך דו מימדי ("מטריצה") לא נוגעת ישירות לעניין, לכן מוטב לפרק את הבעיה לשניים כמו שהצעתי למעלה.
פורסם 2012 בינואר 113 שנים מחבר לא הבנתי אותך נכון...תראה: void Search(int C[Max_Cols],int cols)מן הסתם שזה יתן לי שגיאת קומפילציה כי הוא לא יכול להמיר את זה ממטריצה למערך.וזה בדיוק מה ששניצל הסביר לי-בCALL מהMAIN אתה מבקש מטריצה אז בפונקציה תקבל מטריצה אבל תעבוד רק על השורה הראשונה וזה מה שהעלאתי בהמשך השרשור אבל זה לא עובד.....
פורסם 2012 בינואר 113 שנים שורה במטריצה = מערך חד מימדי. אין בעיה להעביר אותה כפרמטר לפונקציה, דהיינו:Search(c[0], cols);
פורסם 2012 בינואר 113 שנים מחבר נכון!,אבל ההגבלה שאני לא יכול לשנות את הmain דהיינו אני לא יכול לשנות את:Search(C,Cols)רק בגלל זה אני מסתבך..
פורסם 2012 בינואר 113 שנים מחבר טוב זה כבר ממש מוזר..עשיתי מערך עזר שקיבל מהמטריצה את השורה הממוינת..עובד מעולה אבל שוב באיטרציה השנייה של ה while(כשאני מדבאג את התכנית) הלולאה עובדת אבל אין הכנסת ערכים.ז"א אני לוחץ F10 הלולאה רץ על התנאי הקודם כל הזמן ואני לא מבין למה..יכול להיות נגמר הזיכרון במחסנית?
פורסם 2012 בינואר 113 שנים מחבר צירפתי תמונה אולי זה ייתן אינדיקציה יותר טובה למה הבעיהhttp://imageshack.us/f/593/omer.jpg/
פורסם 2012 בינואר 113 שנים תסתכל על הקוד שלך, לך step by step, תסתכל על ערכי המשתנים בכל שלב, עד שתמצא מה הבעיה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.