חיפוש בינארי על שורה ראשונה במטריצה C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

חיפוש בינארי על שורה ראשונה במטריצה C


omfir

Recommended Posts

אהלן,

אני מנסה לעשות חיפוש בינארי על שורה ראשונה בטריצה 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 188
Error 9 error C2040: '>' : 'int' differs in levels of indirection from 'int [1]' c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 191
Error 5 error C2087: 'C' : missing subscript c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 178
Error 6 error C2446: '<' : no conversion from 'int *' to 'int' c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 188
Error 8 error C2446: '>' : no conversion from 'int *' to 'int' c:\users\offir\documents\visual studio 2010\projects\tar33\tar33\amir.cpp 191
Error 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

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

לא שמתי לב...

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

אני חותר לדבר הבא:

אם בקריאה לפונרציה הייתי כותב C[0] הייתי מקבל את השורה הראשונה כמערך ועובד עליה בלי בעיה...

אבל המגבלה שלי שאסור לי לגעת בMain.

אז כל פעם אני אצטרך לעשות [cols ][0] כדי לעבוד על העמודות?

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

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

הנה הפונקציה המתוקנת...





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");
}




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

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

ב. אח"כ מתוך הפונקציה שמחפשת במטריצה, תעביר אליה את השורה הראשונה שכתבת בא'

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

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

לא הבנתי אותך נכון...

תראה:


void Search(int C[Max_Cols],int cols)

מן הסתם שזה יתן לי שגיאת קומפילציה כי הוא לא יכול להמיר את זה ממטריצה למערך.

וזה בדיוק מה ששניצל הסביר לי-בCALL מהMAIN אתה מבקש מטריצה אז בפונקציה תקבל מטריצה אבל תעבוד רק על השורה הראשונה וזה מה שהעלאתי בהמשך השרשור אבל זה לא עובד.....

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

טוב זה כבר ממש מוזר..

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

עובד מעולה אבל שוב באיטרציה השנייה של ה while(כשאני מדבאג את התכנית) הלולאה עובדת אבל אין הכנסת ערכים.

ז"א אני לוחץ F10 הלולאה רץ על התנאי הקודם כל הזמן ואני לא מבין למה..

יכול להיות נגמר הזיכרון במחסנית?

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

ארכיון

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

×
  • צור חדש...