Hilfe bei einer Übungsaufgabe



  • Hallo zusammen,
    ich bin relativ neu und beschäftige mich erst seit ca. 2 Wochen mit C++.
    Nun habe ich unteranderem eine Aufgabe bekommen, die ich leider überhaupt nicht verstanden habe.
    DIe Aufgabe lautet:
    "Für die folgende Aufgabe bildet das verfügbare Gerüst Ausleihe.cpp den Ausgangspunkt. Im gegebenen Programmgerüst sind zwei Klassen definiert: Book und Student. Jedes Buch (Instanz der Klasse Book) besitzt die Attribute m_title, m_author und m_isbn, welche Titel, Autor und ISBN des Exemplars beschreiben. Eine Instanz der Klasse Student enthält bis zu acht (ausgeliehene) Bücher, die in einem Array (m_book) gespeichert sind. Das Array soll Pointer auf die Instanzen der ausgeliehenen Bücher speichern.In der folgenden Aufgabe sollen Book und Student ergänzt werden, so dass die (unveränderte) main-Funktion genau die folgende Ausgabe produziert:
    ---------------- [Buch 0] Titel: Introduction to Algorithms Autor: Th. Cormen, Ch. Leiserson, R. Rivest, ISBN: 0262531968 [Buch 1] Titel: The C++ Programming Language Autor: Bjarne Stroustrup, ISBN: 0201700735 [Buch 2] Titel: Grundkurs Informatik Autor: H. Ernst, ISBN: 3528257172 ---------------- [Buch 0] Titel: Introduction to Algorithms Autor: Th. Cormen, Ch. Leiserson, R. Rivest, ISBN: 0262531968 [Buch 2] Titel: Grundkurs Informatik Autor: H. Ernst, ISBN: 3528257172 ----------------
    Dabei sollten Sie bitte folgendermaßen vorgehen:
    a) Fügen Sie zur Klasse Book Funktionen für das Setzen und Lesen der Attribute hinzu, also:string getTitle(), string getAuthor(), string getISBN(), void setTitle(string title), void setAuthor(string author), void setISBN(string isbn)
    b) Vervollständigen Sie den Konstruktor von Book, so dass eine korrekte Initialisierung durchgeführt wird, d.h. dass die Werte der übergebenen Parameter an die Attribute der Instanzen weitergegeben werden.
    c) Vervollständigen Sie den Konstruktor und Destruktor von Student. Im Konstruktor sollen alle Elemente des Arrays m_book auf NULL gesetzt werden, um zu verdeutlichen, dass diese Elemente noch nicht initialisiert sind. Im Destruktor sollen alle vorhandenen, initialisierten Elemente des Arrays mit deletegelöscht werden.
    d) Implementieren Sie die beiden Funktionen addBook(...) und removeBook(...), welche das Hinzufügen (Ausleihen) und Entfernen (Zurückgeben) von Büchern ermöglichen sollen. Dabei soll ein Buch an der ersten verfügbaren Stelle im Array (also das erste nicht-initialisierte Element – gleich NULL) mit Hilfe eines new-Aufrufs hinzugefügt werden. Das Entfernen eines Buches sollte mit Hilfe eines delete-Aufrufs und durch Setzen des entsprechenden Array-Elementes auf NULL realisiert werden. Um das zu löschende Buch im Array zu finden, können Sie z.B. einen Vergleich der ISBN-Nummern durchführen. Benutzen Sie für den Zugriff auf ein Attribut eines eine der in a) hinzugefügten get-Funktionen.
    e) Implementieren Sie die Funktion printBooks(), welche eine Liste aller Array-Elemente ungleich NULL, also aller ausgeliehenen Bücher, ausgeben soll."

    Wie genannt, ist ein Codegerüst angeben, dass sieht so aus:

    #include <iostream>
    #include <string>

    using namespace std;

    class Book
    {
    string m_title;
    string m_author;
    string m_isbn;

    public:

    Book(string title,
    	string author,
    	string isbn)
    
    {
    }
    string getTitle()
    {
    	return m_title;
    }
    void setTitle(string newTitle)
    {
    	m_title = newTitle;
    }
    
    string getAuthor()
    {
    	return m_author;
    }
    void setAuthor(string newAuthor)
    {
    	m_author = newAuthor;
    }
    
    string getISBN()
    {
    	return m_isbn;
    }
    void setISBN(string newIsbn)
    {
    	m_isbn = newIsbn;
    }
    

    };

    class Student
    {
    // array der geliehenen Buecher
    Book* m_book[8];

    public:
    Student()
    {
    // ...
    }

    ~Student()
    {
    	// ...
    }
    
    void addBook(Book& book)
    {
    	// ...
    }
    
    void removeBook(Book& book)
    {
    	// ...
    }
    
    void printBooks()
    {
    	// ...
    }
    

    };

    /** This is the entry point of the program. /
    int main(int argc, char
    argv[])
    {
    cout << "----------------\n";;

    Book book_1("Introduction to Algorithms",
    	"Th. Cormen, Ch. Leiserson, R. Rivest",
    	"0262531968");
    
    Book book_2("The C++ Programming Language",
    	"Bjarne Stroustrup",
    	"0201700735");
    
    Book book_3("Grundkurs Informatik",
    	"H. Ernst",
    	"3528257172");
    
    Student student;
    student.addBook(book_1);
    student.addBook(book_2);
    student.addBook(book_3);
    student.printBooks();
    
    cout << "----------------\n";;
    
    student.removeBook(book_2);
    student.printBooks();
    
    cout << "----------------\n";;
    
    return 0;
    

    }

    Dort habe ich, die Aufgabe a schon mit eingefügt (ob richtig oder falsch, weiß ich natürlich nicht)
    Nun wäre meine Frage, ob mir jemand sagen kann, was ich genau bei den Aufgaben b bis e, genau machen/bzw. was von mir erwartet wird.
    Am besten wäre natürlich auch ein Beispeil.

    Vielen Dank im Vorraus 🙂



  • Schreibe bitte in eine Zeile vor dem Code ``` und in eine Zeile nach dem Code ```. Alternativ markiere den Code und klicke auf das </> in der Symbolleiste über dem Eingabefeld.
    Du kannst Deine Beiträge auch nachträglich bearbeiten. Den Menüpunkt "Bearbeiten" findest Du hinter dem Drei-Punkte-Menü rechts unter Deinen Beiträgen.
    Danke.


    @student35 sagte in Hilfe bei einer Übungsaufgabe:

    Dort habe ich, die Aufgabe a schon mit eingefügt (ob richtig oder falsch, weiß ich natürlich nicht)

    Dann wäre schon gut wenn Du die reine, unveränderte Vorgabe postest.



  • #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Book
    {
    	string m_title;
    	string m_author;
    	string m_isbn;
    
    public:
    
    	Book(string title,
    	     string author,
    	     string isbn)
    	{
    		// ...
    	}
    
    	// ...
    };
    
    class Student
    {
    	// array der geliehenen Buecher
    	Book* m_book[8];
    	
    public:
    	Student()
    	{
    		// ...
    	}
    	
    	~Student()
    	{
    		// ...
    	}
    	
    	void addBook(Book& book)
    	{
    		// ...
    	}
    
    	void removeBook(Book& book)
    	{
    		// ...
    	}	
    
    	void printBooks()
    	{
    		// ...
    	}	
    };
    
    /** This is the entry point of the program. */
    int main(int argc, char* argv[])
    {
    	cout << "----------------\n";;
    
    	Book book_1("Introduction to Algorithms",
    	            "Th. Cormen, Ch. Leiserson, R. Rivest", 
    	            "0262531968");
    
    	Book book_2("The C++ Programming Language",
    	            "Bjarne Stroustrup", 
    	            "0201700735");
    
    	Book book_3("Grundkurs Informatik",
    	            "H. Ernst", 
    	            "3528257172");
    
    	Student student;
    	student.addBook(book_1);
    	student.addBook(book_2);
    	student.addBook(book_3);
    	student.printBooks();
    	
    	cout << "----------------\n";;
    	
    	student.removeBook(book_2);
    	student.printBooks();
    	
    	cout << "----------------\n";;
    
    	return 0;
    }
    
    

    Das ist jetzt das originale Codegerüst ohne irgendeine Bearbeitung.



  • @student35 sagte in Hilfe bei einer Übungsaufgabe:

    Am besten wäre natürlich auch ein Beispeil.

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Book
    {
        string m_title;
        string m_author;
        string m_isbn;
    
    public:
        Book(string title, string author, string isbn)
        : m_title{ title }, m_author{ author }, m_isbn{ isbn }
        {}
    
        string getTitle() const { return m_title; }
        void setTitle(string title) { m_title = title; }
        
        string getAuthor() const { return m_author; }
        void setAuthor(string author) { m_author = author; }
        
        string getISBN() const { return m_isbn; }
        void setISBN(string isbn) { m_isbn = isbn; }
    };
    
    class Student
    {
        Book *m_book[8];
    
    public:
        Student()
        : m_book{ nullptr }
        {}
    
        Student(Student const&) = delete;
    
        ~Student()
        {
            for (size_t i = 0; i < size(m_book); ++i)
                delete m_book[i];
        }
    
        void addBook(Book &book)
        {
            for (size_t i = 0; i < size(m_book); ++i) {
                if (!m_book[i]) {
                    m_book[i] = new Book{ book };
                    return;
                }
            }
        }
    
        void removeBook(Book &book)
        {
            for (size_t i = 0; i < size(m_book); ++i) {
                if (m_book[i]->getISBN() == book.getISBN()) {
                    delete m_book[i];
                    m_book[i] = nullptr;
                    return;
                }
            }
        }
    
        void printBooks()
        {
            for (size_t i = 0; i < size(m_book); ++i) {
                if (m_book[i]) {
                    cout << "[Buch " << i << "] Titel: " << m_book[i]->getTitle()
                         << " Author: " << m_book[i]->getAuthor()
                         << " ISBN: " << m_book[i]->getISBN() << '\n';
                }
            }
        }
    };
    
    int main()
    {
        cout << "----------------\n";;
    
        Book book_1("Introduction to Algorithms",
            "Th. Cormen, Ch. Leiserson, R. Rivest",
            "0262531968");
    
        Book book_2("The C++ Programming Language",
            "Bjarne Stroustrup",
            "0201700735");
    
        Book book_3("Grundkurs Informatik",
            "H. Ernst",
            "3528257172");
    
        Student student;
        student.addBook(book_1);
        student.addBook(book_2);
        student.addBook(book_3);
        student.printBooks();
    
        cout << "----------------\n";
        student.removeBook(book_2);
        student.printBooks();
        cout << "----------------\n";
    }
    


  • Super, schon einmal vielen Dank Swordfish. 😊
    Kannst du mir dein Code eventuell erklären ? Auf welche Aufgabe bezieht er sich und was genau sagen die Befehle aus.
    Danke auch für die schnelle antworten.



  • Befehle gibt's in C++ nicht.



  • @student35 sagte in Hilfe bei einer Übungsaufgabe:

    Auf welche Aufgabe bezieht er sich und was genau sagen die Befehle aus.

    Auf die Aufgabe die Du gepostet hast? Die Aufgabenstellung ist eigentlich ganz klar also solltest Du vielleicht gezielt Fragen stellen wenn Du etwas nicht verstehst.



  • Achso danke, ich war mir nicht sicher, ob das alle Aufgaben beinhaltet, aber dann weiß ich es jetzt.
    Ich habe Aufgabe b nicht ganz verstanden, also was genau ist mit einer "korrekten Initialisierung" gemeint ?
    Welchen Begriff verwendet man denn anstatt "Befehl" ?
    Ich danke euch aufjeden Fall für eure Hilfe und wünsche allen schöne Weihnachtstage und einen guten Rutsch ins neue Jahr 🙂



  • @student35 sagte in Hilfe bei einer Übungsaufgabe:

    Welchen Begriff verwendet man denn anstatt "Befehl" ?

    https://en.cppreference.com/w/cpp/language/statements

    @student35 sagte in Hilfe bei einer Übungsaufgabe:

    Ich habe Aufgabe b nicht ganz verstanden, also was genau ist mit einer "korrekten Initialisierung" gemeint ?

    https://en.cppreference.com/w/cpp/language/initialization
    https://en.cppreference.com/w/cpp/language/constructor



  • Danke


Log in to reply