עבור לתוכן

שאלה בסי-שרפ (C#) איחוד טורים.

Featured Replies

פורסם

שלום, יש לי שאלה.

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

(הטורים לא באותו גודל)

התשובה שלי:



class Question1
{
public static int MixedQ(queueObject q)

queueObject q1,q2;

queueObject temp = new queueObject();

while (!q1.isEmpty()) && (!q2.isEmpty())


if (this.q1.remove() > this.q2.remove)

q1.insert(q.temp);

else (this.q2.remove() > this.q1.remove())


this.q2.insert(this.q.temp);

if (this.q1.isEmpty())

insert(this.q2.remove())

else

insert(this.q1.remove)

}
return ("{0}",q.temp);
}

מישהו יכול להסביר לי מה עשיתי לא טוב?

פורסם

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

אתה מצהיר על q1 ו-q2 מטיפוס queueObject, לא שם בהם שום ערך (כלומר הם null) ואז מתחיל לשחק איתם.

אתה מתייחס אליהם באמצעות this, שזו שגיאה - הם משתנים מקומיים, ולא איברים של הקלאס שלך (הצהרת עליהם בתוך הפונקציה).

יש עוד כמה שורות לא תקניות מבחינת תחביר (לדוגמה - לפעמים אתה מנסה לקרוא לפונקציה remove בלי סוגריים).

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

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

קצת קשה לעזור לך מעבר לזה בלי לדעת מה ההגדרה של queueObject (לדוגמה, מה זה q.temp?)

תדאג:

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

ב. לומר בדיוק מה השגיאות, ולא לומר פשוט "זה לא עובד".

פורסם
  • מחבר

אני אשמח אם תוכל לתקן לי את הקוד בצורה כזאת שהוא יעבוד.

או לפחות להסביר לי איך עושים את זה..

q.temp טור זמני שיצרתי, כלומר הטור שהוא המיזוג בין שני הטורים.

ה-REMOVE מוציא את הקוביה הראשונה מהטור.

וה-INSERT מכניס קוביה לטור רצוי, לסופו כמובן.



{
class queueObject
{
item first;

public queueObject()
{
first = null;
}
public bool isEmpty()
{
if (first == null)
return true;
else
return false;

}

public void insert(int x)
{
item temp = new item(x); //יצרנו חוליה חדשה
item p;

if (first == null) // if the queue is empty
first = temp;
else
{
p = first;
while (p.NEXT != null)
p = p.NEXT; // p is poiter to the last item in the queue
p.NEXT = temp;
}
}

public int Remove()
{
item temp;
int x;
temp = first; // new pointer to first item in the queue

first = first.NEXT;
temp.NEXT = null; // remove tfirst item from the list;

x = temp.DATA.NUM;//get the info from the item
return x;
}

public int Head()
{
int x;
x = first.DATA.NUM;
return x;
}

public override string ToString()
{
item p;
string st="";
p = first;
while (p != null)
{
st = st + p.ToString() + "\n";
p = p.NEXT;
}
return st;
}

public int minInQueue()
{
queueObject temp = new queueObject();
int min = first.DATA.NUM;
temp.insert(Remove());
while (!this.isEmpty())
{
if (min > this.Head())
min = this.Head();
temp.insert(Remove());
}
while (!temp.isEmpty())
this.insert(temp.Remove());

return min;
}

public int maxInQueue()
{
queueObject temp = new queueObject();
int min = first.DATA.NUM;
temp.insert(Remove());
while (!this.isEmpty())
{
if (min <this.Head())
min = this.Head();
temp.insert(Remove());
}
while (!temp.isEmpty())
this.insert(temp.Remove());
return min;
}
public void turnqueue()
{
int x = 0;
if (!this.isEmpty())
{
x = this.Remove();
this.turnqueue();
this.insert(x);
}
}

public int Size()
{
int mone = 0;
queueObject temp = new queueObject();

while (!isEmpty())
{
mone++;
temp.insert(this.Remove());
}
while (!temp.isEmpty())
this.insert(temp.Remove());
return mone;
}



}
}

אני אשמח לקצת עזרה.

פורסם

תתחיל מלתקן את הקוד שלך ככה שהוא יתקמפל (סדר את כל בעיות הסוגריים וכו').

לא ברור לי איך יש לך משתנה בשם "q.temp". באמצעות נקודה אתה יכול לגשת רק לאיבר של קלאס, כלומר אם ל-queueObject היה איבר (לא משתנה) שקוראים לו temp (ולפי ההגדרה שלך אני רואה שאין).

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

ארכיון

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

דיונים חדשים