פורסם 2005 באפריל 1220 שנים אני מריץ רקורסיה שמחזירה לי בסופו של דבר מערך של מספריםבפעם הראשונה שאני קורא לפונקציה, היא מחזירה לי ערכים טוביםאבל בפעם השניה זה מחזיר לי ערכים מחורבשים ולא בסדר הנכון.אני חושב שצריך לנקות את ה Buffer, אבל אני לא ממש זוכר איך עושים את זה(לא דרך ה flushall)ואם מישהו נתקל ויודע את הפתרון, מוזמן לעזור..תודה מראש
פורסם 2005 באפריל 1220 שנים BUFFER של מה...? את המחסנית של המערכת...?הבעיה שלך היא איפשהו ברקורסיה...שלח את הקוד
פורסם 2005 באפריל 1220 שנים מחבר #define MAX 2046int arr[MAX];int index;void hanoi(int k, int FROM, int USE,int TO){ if (k==0)// number of disks return; hanoi(k-1,FROM,TO,USE); //printf("%d to %d\n", FROM,TO); arr[index++]=FROM; arr[index++]=TO; hanoi(k-1,USE, FROM, TO);}void hanoi_arr(int array[MAX]){ int k,from,use,to,i; k = 3; from = 1; use = 2; to = 3; // 2*(2^k(-1))=N => (2^(k+1)-2)=N hanoi(k,from,use,to); for (i=0;i<MAX;i++) array[i]=arr[i]; //for (i=0 ; arr[i]!=0 && i!=MAX ;i++) // printf("%d", vec[i]);}
פורסם 2005 באפריל 1220 שנים תנקה את המערך הגלובלי:#include<iostream.h>#define MAX 500int arr[MAX];int index;void hanoi(int k, int FROM, int USE,int TO){if (k==0)// number of disksreturn;hanoi(k-1,FROM,TO,USE);//printf("%d to %d\n", FROM,TO);arr[index++]=FROM;arr[index++]=TO;hanoi(k-1,USE, FROM, TO);}void hanoi_arr(int array[MAX]){int k,from,use,to,i; k = 3;from = 1;use = 2;to = 3;// 2*(2^k(-1))=N => (2^(k+1)-2)=Nhanoi(k,from,use,to);for (i=0;i<MAX;i++)array=arr;//for (i=0 ; arr!=0 && i!=MAX ;i++)// printf("%d", vec);}void main(){ int* arr2 = new int[MAX]; hanoi_arr(arr2); for(int i=0;i<MAX;i++) { cout<<arr2; arr = 0; } cout<<endl<<endl; hanoi_arr(arr); for(i=0;i<MAX;i++) { cout<<arr2; arr = 0; }}
פורסם 2005 באפריל 1220 שנים נו, זה אמור לפתור את הבעיה של מגדלי הנוי (או אולי אנוי, whatever)הרעיון זה שכדי להעביר עמודה עם n לוחיות מעמוד A לעמוד B, אתה פותר את הבעיה עבור n-1 לוחיות מעמוד A לעמוד C, מעביר את הלוחית הנותרת מ- A ל- B, ופותר עוד פעם את הבעיה עבור n-1 לוחיות מעמוד C לעמוד B.אז כמו שאמרתי קודם, להעביר מערך by value זה רעיון ממש גרוע, גם מבחינת ביצועים, וגם כי זה לא עושה מה שציפית (המערך ישוחרר כשהפונקציה תצא, והמערך שהעברת יישאר בלי שינוי)אז בתור התחלה, כדאי שתעביר פוינטר למערך ולא את המערך עצמו.אם בא לך, עדיף לאתחל את index ל- 0 (אני אתן לך לגלות למה)הדרך הבסיסית לנקות מערך היא פשוט לעבור על כל האיברים שלו ולתת להם ערך "נקי". יש גם פונקציות כמו ZeroMemory (תחת windows) שמנקות לך שטחים שלמים.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.