עבור לתוכן

++C רשימות

Featured Replies

פורסם

נדמה לי או שהתנאי בלולאה הפוך?

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

  • תגובות 35
  • צפיות 3.7k
  • נוצר
  • תגובה אחרונה

משתתפים בולטים בדיון

פורסם
  • מחבר

אז ככה-

היה תנאי כפול בלולאה(גם ! וגם ==0) ...

עקבתי אחרי התכנית עם הדיבגגר,(איך שלא כותבים את זה) וראיתי שבפונקציה, רשימה list מעבירה לtemp את המספר 5 -שהוא המספר הראשון שהיה צריך להיות ברשימה, ואז יוצאת מהתכנית בגלל הreturn true ובכל זאת כשאני חוזרת לתכנית הראשית -רשימה temp ריקה אפילו את המספר 5 אין בה!!!!!

מה עושים??????????????

פורסם

נדמה לי או שהתנאי בלולאה הפוך?

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

אוי אני מסמיק מבושה! איזה טעות דבילית, סליחה.

אבל בגלל זה אמרתי פסודו-קוד :)

1) לא ברור לי מה זה:


if(!temp.FirstElm()) return false; // error

אני מניח שהכוונה היא לבדוק האם הכנסת האיבר לרשימה temp הצליחה?

2) למה לא לרשום את תנאי הלולאה ככה:

while ( list.IsEmpty() != 0 )

3) ואם כבר עובדים ב-C++, למה IsEmpty מחזיר int? עדיף שיחזיר bool.

פורסם

נראה לי שבודקים שם בעיות הקצאה.

פורסם
  • מחבר

תודה לכל המגיבים אבל התכנית עדיין לא פועלת ככה היא עכשיו:

אשמח לתשובה שתעזור, מה עושים כאן????

   //תרגיל 3: פונקציה המחזירה רשימה ברוורס
#include <iostream>
#include <conio.h>
#include "Link.h"
#include "List.h"
using namespace std;
template <class T>
List<T> Revers(List<T> &list, List<T> &temp)
{
//List<int>temp;//הצהרה על רשימת עזר

while(!list.IsEmpty())
{
temp.Add(list.RemoveFirst());
}

return temp;
}

void main()
{

List<int>list,temp;
int i=0;

while(i<9)//הצבת ערכים ברשימה
{
list.Add(i*2+5);
i++;
}
cout<<"list is: ";
list.print();//הדפסת הרשימה

temp=Revers(list,temp);//קריאה לפונקציה להפיכת הרשימה
cout<<"\n\nlist revers is: ";
temp.print();//הדפסת הרשימה ההפוכה

getche();
}
/*

*/

פורסם

1. פונקציית Add מוסיפה מהתחלה או מהסוף?

2. את אמורה לשנות את הקלט? (כי כמו שזה כתוב - את מרוקנת את רשימת הקלט)

3. אין טעם בזה שהפונקציה מחזירה את הרשימה (כי את במילא משנה את temp).

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

פורסם
  • מחבר

אז ככה:

1.פונקצית Add מוסיפה איבר מההתחלה וגם מוחקת איבר ממהתחלה=יש גישה רק לאיבר הראשון בעזרת מצביע first ->הרשימה מייצגת מחסנית.

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

3.לא הבנתי מה כתוב.

פורסם

אם אתה שולח בתור REF אתה לא צריך להחזיר ערך. תשנה את הערך המוחזר ל- VOID(כלום).

פורסם

לגבי 3 - אם אופרטור ההשמה לא מתחיל במשהו כמו


if (this == otherObject)
return this

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

פורסם
  • מחבר

בגלל שבתכנית הראשית רשמתי

temp=Revers(list,temp);

אז מה שפונקציה מחזירה אמור להכנס לרשימה temp ריקה אחרת!!!!!!

אבל זה לא קורה .

איך אני יוצרת מצב שתחזור אלי הרשימה ההפוכה אם הפונקציה היא void כמו שאמרת?

פורסם

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

כשאת משנה אותו - את משפיעה על הרשימה.

לכן מספיק שתשני את temp כדי שהרשימה תשתנה.

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

פורסם
  • מחבר

לא אכפת לי שהיא ריקה!!!!!! הרי אני רוקנתי אותה!!!

השאלה היא מה אני צריכה לשנות בקוד שרשמתי על-מנת שהתכנית תדפיס בסוף את הרשימה ברוורס????????????

פורסם

אני יכול לענות לך על זה בפסקל אם זה עוזר :hat:

פורסם
  • מחבר

תודה אבל זה לא עוזר לי.

פורסם

מה יש לך בTEMP לאחר הקריאה לפונ ?

ארכיון

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

דיונים חדשים