תוכן נעמה. - HWzone פורומים
עבור לתוכן
  • צור חשבון

נעמה.

משתמש רשום
  • מספר הודעות

    173
  • הצטרפות

  • ביקר לאחרונה

    אף פעם

הודעות שנפתחו על-ידי נעמה.

  1. הצהרתי על פונקציות חברות ע"מ להשתמש באופרטורים >> ו<< לקלוט מחרוזות:


    friend ostream& operator<<(ostream &os, String&);
    friend istream& operator>>(istream &is, String&);

    וממשתי:


    ostream & operator<<(ostream&os, String&s)
    {
    os<<s;
    return os;
    }

    istream & operator>>(istream&is, String&s)
    {
    is>>s;
    return is;
    }

    ואני מקבלת כל מיני הערות מוזרות לדוגמא:


    'ostream' : 'friend' not permitted on data declarations
    'ostream' : missing storage-class or type specifiers
    'ostream' : unable to resolve function overload

    מה הבעיה?????

  2. התכנית פועלת מ-צ-ו-י-ן!!!!!!!!!!!!!! :yelclap: :yelclap: :yelclap: :yelclap:

    תודה רבה!!!!!!!!!!!

    ->עדיין לא הבנתי מה פשר השינוי(אם אפשר הסבר ברור יותר)

    ושוב-תודה.

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

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

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

    temp=Revers(list,temp);

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

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

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

  5. אז ככה:

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

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

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

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

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

       //תרגיל 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();
    }
    /*

    */

  7. אז ככה-

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

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

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

  8. כן , בוודאי.

    רק שכשהעתקי את הקוד שZelig הציע, הקומפיילר הראה טעות על התנאי if , אז במקום לרשום אותו ככה:

     while( !list.IsEmpty ) {
    if ( !temp.Add( list.RemoveFirst() ) ) return false; // error
    }

    רשמתי ככה:

     while( !list.IsEmpty()==0) 
    {
    temp.Add(list.RemoveFirst());
    if(!temp.FirstElm()) return false; // error

    }

    זה בעיה?

  9. כמובן ששלחתי את האיברים עם הסימן & .

    זה עדיין לא עובד.

    UnsignedInteger, מצטערת.

    זה היה נראה כמו מילת קוד שתפעל רק אם אעשה copy constructor.

  10. בצעתי את הפונקציה שהצעת- זה לא עובד!

    הרשימות חוזרות לתכנית הראשית ללא שינוי!!!!!!!!!!!!! כאילו לא בצעתי אליהן את הפונקציה!

    מה לעשות?

  11. אהההה, יש טעות בcopy constructor הנ"ל.

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

    template <class T>
    List<T>::List(const List<T> &list)
    {
    Link<T> *src,*trg;
    if(list.first!=NULL)
    {
    first=new Link<T>((list.first)->value,NULL);
    src=list.first;
    trg=first;
    while(src->next!=NULL)
    {
    trg->next=new Link<T>
    ((src->next)->value,NULL);
    src=src->next;
    trg=trg->next;
    }
    }
    }

  12. copy constructor ממומש כך:

     template <class T>
    List<T>::List(const List<T> &list)
    {
    Link<T> *src,*trg;
    if(list.first!=NULL)
    {
    first=new Link<T>((list.first)->value,NULL);
    src=list.first;
    trg=first;
    while(src->next!=NULL)
    {
    trg->next=new Link<T>;
    ((scr->next)->value,NULL);
    scr=scr->next;
    trg=trg->next;
    }
    }
    }

    כאשר Link זוהי מחלקה לייצוג איבר בודד ברשימה.

    מה זה UnsignedInteger ?

  13. תודה על ההערה החשובה.

    ישנה פונקציה של copy constructor- לא יודעת איך היא עוזרת לי.

    לא הבנתי את הענין של המצביע. אם אני עושה שהפונקציה תחזיר לתכנית return temp גם לאחר הקריאה לפונקציה הפונקציה עושה מה שעושה, ואז בחזרה לתכנית הראשית, - רשימה temp ריקה ורשימה list מכילה את כל האיברים כאילו לא עשיתי כלום!!!!!!!!!!!

    איך אני מחזירה את הרשימה temp המעודכנת??

  14. אני צריכה לבנות תכנית שיש בה פונקציה המקבלת רשימה (שהיא מחסנית ,ניתן להוצי ולהכניס רק את האיבר האחרון) והפונקציה מחזירה את הרשימה ברברס.

    זה מה שכתבתי עד עכשיו :

    (הפונקציות Add, IsEmpty,RemoveFirst מוגדרות בקובץ header )

    השאלה שלי: איך אני מחזירה את הרשימה ההפוכה לתכנית הראשית. (איך אפשר לעשות return temp)

    קוד:

    template <class T>

    void Revers(List<T> list)

    {

    List<int>temp;//הצהרה על רשימת עזר

    while(!list.IsEmpty())

    {

    temp.Add(list.RemoveFirst());

    }

    }

    void main()

    {

    List<int>list;

    int i=0;

    while(i<9)//הצבת ערכים ברשימה

    {

    list.Add(i*2+5);

    i++;

    }

    cout<<"list is: ";

    list.print();//הדפסת הרשימה

    Revers(list);//קריאה לפונקציה להפיכת הרשימה

    cout<<"\n\nlist revers is: ";

    list.print();//הדפסת הרשימה ההפוכה

    getche();

    }

  15. איך מממשים את הפונקציה של copy constructor ??

    ציטוט:

    void String::setString(const char* newString) {

    // Copying newString to m_string.

    int i;

    for (i=0; newString; ++i) {

    m_string = newString;

    }

    m_string = '\0';

    }

    ע"מ לקיים הצבה זו יש לממש אופרטור הצבה '=' כיצד עושים זאת???

  16. שאלה בה אני צריכה לבנות מחלקה למחרוזת:

    בקובץ ההצהרה: ב-private יהיה שדה מסוג char המכיל 256 בייתים.

    בpublic צריך להיות:

    Default constructor

    copy constructor

    setString

    getString

    איך אני מממשת כל אחת מהפונקציות הנ"ל בקובץ המימוש?????

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

    תודה.

×
  • צור חדש...