++C רשימות - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

++C רשימות


נעמה.

Recommended Posts

  • תגובות 35
  • נוצר
  • תגובה אחרונה

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

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

אז ככה-

היה תנאי כפול בלולאה(גם ! וגם ==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.לא הבנתי מה כתוב.

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

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

temp=Revers(list,temp);

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

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

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

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

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

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

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

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

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

ארכיון

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


×
  • צור חדש...