עבור לתוכן

צריך לנקות את ה Buffer

Featured Replies

פורסם

אני מריץ רקורסיה שמחזירה לי בסופו של דבר מערך של מספרים

בפעם הראשונה שאני קורא לפונקציה, היא מחזירה לי ערכים טובים

אבל בפעם השניה זה מחזיר לי ערכים מחורבשים ולא בסדר הנכון.

אני חושב שצריך לנקות את ה Buffer, אבל אני לא ממש זוכר איך עושים את זה

(לא דרך ה flushall)

ואם מישהו נתקל ויודע את הפתרון, מוזמן לעזור..

תודה מראש

פורסם

BUFFER של מה...? את המחסנית של המערכת...?

הבעיה שלך היא איפשהו ברקורסיה...שלח את הקוד

פורסם
  • מחבר

#define MAX 2046
int 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]);
}

פורסם

יכול להיות בגלל שלא אתחלת את המישתנה הגלובלי index

פורסם

תנקה את המערך הגלובלי:

#include<iostream.h>

#define MAX 500

int 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=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;

}

}

פורסם

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

פורסם

תסביר מה אתה מעוניין לעשות???????

פורסם

נו, זה אמור לפתור את הבעיה של מגדלי הנוי (או אולי אנוי, whatever)

הרעיון זה שכדי להעביר עמודה עם n לוחיות מעמוד A לעמוד B, אתה פותר את הבעיה עבור n-1 לוחיות מעמוד A לעמוד C, מעביר את הלוחית הנותרת מ- A ל- B, ופותר עוד פעם את הבעיה עבור n-1 לוחיות מעמוד C לעמוד B.

אז כמו שאמרתי קודם, להעביר מערך by value זה רעיון ממש גרוע, גם מבחינת ביצועים, וגם כי זה לא עושה מה שציפית (המערך ישוחרר כשהפונקציה תצא, והמערך שהעברת יישאר בלי שינוי)

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

אם בא לך, עדיף לאתחל את index ל- 0 (אני אתן לך לגלות למה)

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

ארכיון

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

דיונים חדשים