Aufgabe Verwaltung eines dynamischen Arrays



  • Hi @SeppJ,
    ich tendiere auch zu @Steffo 's Einwand.
    Z.B. habe ich nach dem Buchstaben malen noch Druck und Schreibschrift gelernt.
    Meines Wissens lernen heutige Schüler und Schülerinnen immer noch mit der Hand manuell schreiben, obwohl die meisten schon auf ihrem Smartphone 'wischen', 'klicken' und 'tippen' können und evtl. niemals mehr mit einem Stift schreiben werden. 🙂



  • @SeppJ sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Wann hast du jemals in C++ selber dynamisch Speicher gemacht? Wenn du's jemals gemacht hast, machst du es katastrophal falsch! Deshalb regen sich hier alle (außer dir) auch so über diese Aufgabenstellung auf.

    Mache ich nicht, aber wie gesagt hat fast jeder C++ Entwickler ebenfalls mit C oder Legacy C++ zu tun. Und Smartpointer und std::vector wird man nie richtig verstehen lernen, wenn man nicht C++ 98 kennt.



  • @Steffo sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    @Schlangenmensch Das sieht der Lehrer garantiert anders. Zumal C praktisch eine Teilmenge von C++ ist. Also gehört das allein aus Legacy-Gründen mit dazu. Wer mit C++ zu tun hat, hat aus Legacy-Gründen auch immer mit C zu tun. Wer kommt bspw. nicht in die Verlegenheit eine C-Lib einzubinden? Man muss also immer beide Welten verstehen. Somit ist ein natives Array für Lehrzwecke vollkommen legitim.

    Wenn der Lehrer das ander sieht, hat er keine Ahnung. Ich weiß, dass das dem TE nicht hilft, ist aber so.

    Ich habe auch nie gesagt, dass das für Lehrzwecke nicht legitim ist, auch mal einen vector selber nachzubauen. Aber damit anzufangen, bevor man die stl Sachen verwenden kann und was von Klassen gehört hat usw. ist einfach schlechter Lehrstiel und sorgt für schlechte C++ Programmierer die hinterher mühselig umlernen müssen.

    @Steffo sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    @SeppJ Schlechter Vergleich. Wo kommt bei dir Altgermanisch bei der Arbeit vor?
    Wenn man bei dem Vergleich mal tatsächlich bleiben will: Wenn der Lehrer Altgermanisch fordert und alle rufen: "Hey, nimm Deutsch. Das ist viel besser und moderner", dann ist das Thema wohl verfehlt. Gut gemeint ist noch lange nicht erfolgreich geholfen.

    Naja, der Lehrer hier sagt, wir machen C++, unterrichtet aber C. Und das mit der berüchtigten Teilmenge stimmt ja auch nur so halb.

    Der passendere Vergleich ist, dass man in der Grundschule erstmal einfache Arithmetik lernt (aka 2+2 = 4 / Nutzung von std::vector) und nicht erstmal, dass die ganzen Zahlen mit der Addition eine Gruppe bilden mit neutralem und inversen Element und was noch dazu gehört.
    Es macht einfach vom didaktischen Aufbau keinen Sinn so anzufangen.



  • @Helmut-Jakoby Das hast du danach gelernt und nicht als Grundlage.

    Der C-Teil (jenseits von C-Strings) bei C++ gehört in den Fortgeschrittenen Teil, nicht in die Grundlagen.
    Wäre es der Fortgeschrittene Teil, wäre die Frage vom TO anders und ich hoffe auch die Aufgabe.



  • @Schlangenmensch sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Wenn der Lehrer das ander sieht, hat er keine Ahnung

    Aber der Lehrer hat doch erst 1983 sein Skript mühsam mit halbwissen von C nach C++ portiert. Soll er das schon wieder aktualisieren!?
    Vielleicht tun wir ihm auch alle unrecht und der Kurs heißt "Theoretische Informatik am Beispiel von C++".
    Naja, die Aufgabenstellung sieht nicht danach aus.



  • @Helmut-Jakoby sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Z.B. habe ich nach dem Buchstaben malen noch Druck und Schreibschrift gelernt.

    Ich habe noch nie ein Java oder C#-Buch gesehen, wo man Zeichenketten erstmal in char-Arrays ablegen soll, damit man die Sprache gründlich lernt. Worum gibt es diesen Ansatz in C++ sooo oft!? Das verstehe ich wirklich nicht.



  • @Jockelx
    Du, und die anderen, habt natürlich recht. Es wär wirklich sinnvoll, wenn C++ beigebracht wird, sich nicht mehr auf C zu beziehen. Das funktioniert leider nicht immer in der Ausbildung, weil die etwas 'müden' Ausbilder u.a. schon an der Objektorientierung scheitern.
    Ggf. wäre C++ erfolgreicher, wenn altes C nicht mehr nutzbar wäre.



  • @SeppJ sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Wann hast du jemals in C++ selber dynamisch Speicher gemacht? Wenn du's jemals gemacht hast, machst du es katastrophal falsch!

    Dir ist hoffentlich bewusst, dass es eine Zeit gab, in der die STL noch nicht existierte? D.h. damals musste man Speicherverwaltung in C++ von Hand machen. Also lasst diese wenig geistreichen Sätze, die helfen niemanden.

    Deshalb regen sich hier alle (außer dir) auch so über diese Aufgabenstellung auf.

    Genau diese Haltung ist dafür verantwortlich, dass im Forum so wenig los ist. Es reicht ein Hinweis darauf, dass die Aufgabenstellung schlecht ist, aber die endlose Spiegelfechterei hier wird sicherlich nicht den Dozenten dazu bringen seine Aufgaben zu aktualisieren.



  • @Jockelx sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    @Helmut-Jakoby sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Z.B. habe ich nach dem Buchstaben malen noch Druck und Schreibschrift gelernt.

    Ich habe noch nie ein Java oder C#-Buch gesehen, wo man Zeichenketten erstmal in char-Arrays ablegen soll, damit man die Sprache gründlich lernt. Worum gibt es diesen Ansatz in C++ sooo oft!? Das verstehe ich wirklich nicht.

    Weil C++ ursprünglich von C mit Klassen kommt. Und zu der Zeit gab es noch kein std::string/vector.



  • @john-0 sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Dir ist hoffentlich bewusst, dass es eine Zeit gab, in der die STL noch nicht existierte?

    Da haben die Dozenten noch ihre FORTRAN-Script an C++ angepasst.



  • @john-0 sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    @SeppJ sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Wann hast du jemals in C++ selber dynamisch Speicher gemacht? Wenn du's jemals gemacht hast, machst du es katastrophal falsch!

    Dir ist hoffentlich bewusst, dass es eine Zeit gab, in der die STL noch nicht existierte? D.h. damals musste man Speicherverwaltung in C++ von Hand machen. Also lasst diese wenig geistreichen Sätze, die helfen niemanden.

    Deshalb regen sich hier alle (außer dir) auch so über diese Aufgabenstellung auf.

    Genau diese Haltung ist dafür verantwortlich, dass im Forum so wenig los ist. Es reicht ein Hinweis darauf, dass die Aufgabenstellung schlecht ist, aber die endlose Spiegelfechterei hier wird sicherlich nicht den Dozenten dazu bringen seine Aufgaben zu aktualisieren.

    SeppJ hat völlig recht. Warum sollte man heutzutage den Stand von 1983 als Grundlagen lehren? Ja es gibt Legacy Code. Das ist doch aber kein Problem eines Anfängers. Da sollten Fortgeschrittene ran. Nicht umsonst hält dank sowas der Ruf, dass man in C++ den Speicher schnell zerschießt, was aber bei modernem Ansatz so nicht mehr stimmt.



  • @Tyrdal sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Weil C++ ursprünglich von C mit Klassen kommt. Und zu der Zeit gab es noch kein std::string/vector.

    C with Classes ist deutlich älter (1979, ab 1985 wird die Sprache C++ genannt). cfront 2.0 (1989), das korrespondiert mit der zweiten Auflage von Stroustrups Buch, unterstützte schon fast alles aus dem Sprachstandard von C++98, aber eben noch keine STL als der Teil der Sprache. Stepanov und Lee hatten die als eigenes Projekt entwickelt, und nur das heißt eigentlich STL. Was sich wiederum auf ein Ada83 Projekt von Grady Booch (Booch Components) zurückführen lässt. Mit C++98 kommt zwar die STL als Teil der Standardlibrary, aber bis das alles korrekt umgesetzt worden war, gingen noch einige Jahre ins Land. Der auto_ptr aus C++98 war komplett unbrauchbar, so dass man warten musste bis das Boost Projekt den shared_ptr entwickelt hatte. Ohne jetzt nachzuschauen wann das war, es dürfte nach 2000 der Fall gewesen sein. Die funktionierenden Smart Pointer sind erst seit C++11 Teil der Sprache.

    Ich weiß nicht, was das bringen soll, hier immer darauf zu insistieren, dass der in den Aufgaben genutzt C++ Stil hoffnungslos veraltet ist. Ja ist er, aber das bringt die Studenten der Lösung nicht näher.

    @DirkB sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    @john-0 sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Dir ist hoffentlich bewusst, dass es eine Zeit gab, in der die STL noch nicht existierte?

    Da haben die Dozenten noch ihre FORTRAN-Script an C++ angepasst.

    Wenn das so alt wäre, gäbe es da keine dynamische Speicherverwaltung, das kam erst mit Fortran 90. Und ich durfte mich innerhalb des letzten Jahrzehnts mit Sprachmitteln aus Fortran 66 herumschlagen (das betreffende Feature wurde bereits in Fortran 77 als veraltet gekennzeichnet), weil der Autor des Programms sein Programm nicht an neuere Versionen angepasst hat. Zur Ehrenrettung des Autoren: Lange Zeit gab es nur g77 und kein gfortran, so dass im akademischen Umfeld weiterhin tapfer Fortran 77 geschrieben wurde. Da der Code für die Forschung verwendet wurde, war das erheblich einschneidender als eine Übungsaufgabe mit veraltetem Stil.

    @Tyrdal sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    SeppJ hat völlig recht. Warum sollte man heutzutage den Stand von 1983 als Grundlagen lehren?

    Es geht nicht darum C++ zu lernen, es geht darum die manuelle Speicherverwaltung kennen gelernt zu haben. Das ist das Lernziel, und C++ ist da nur Mittel zum Zweck. Wenn hier also endlose Diskussionen über die ach so schlechten Uni Aufgaben erfolgen, geht das vollkommen am Thema vorbei.



  • @john-0 sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Ich weiß nicht, was das bringen soll, hier immer darauf zu insistieren, dass der in den Aufgaben genutzt C++ Stil hoffnungslos veraltet ist. Ja ist er, aber das bringt die Studenten der Lösung nicht näher.

    Aber dem sinnvollen Gebrauch von C++.

    Es geht nicht darum C++ zu lernen, es geht darum die manuelle Speicherverwaltung kennen gelernt zu haben. Das ist das Lernziel, und C++ ist da nur Mittel zum Zweck.

    Warum dann nicht in einer Sprache, die dies auch erfordert, C zum Bleistift? Oder wenn C++, warum dann nicht in Verbindung mit RAII?



  • @Tyrdal sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Warum dann nicht in einer Sprache, die dies auch erfordert, C zum Bleistift? Oder wenn C++, warum dann nicht in Verbindung mit RAII?

    Wenn Du da etwas erreichen willst, schreib die Professoren an. Nur habe ich da meine Zweifel, dass sie darauf reagieren werden.



  • @nobrainer sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Im main sage ich:

    int* arr = NULL;
    

    Ich habe die Funktion arrayAnlegen so geschrieben:

    int* arrayAnlegen(int len) 
    {
    

    int neu;
    cout << "Gewuenschte Anzahl der Datenelemente: ";
    cin >> neu;
    int* arr = new int [neu];
    len = neu;
    return arr;
    }

    Du solltest in der Funktion arrayAnlegen prüfen, ob die Zeigervariable bereits einen Zeiger zugewiesen worden ist. Dazu soll es keine globalen Variablen geben. D.h. Dein arr muss an die Funktion zum Überprüfen übergeben werden.

    So langsam steige ich nicht mehr durch bei diesen Aufgaben.
    Leider stellt der Lehrer keine Musterlösung zum anschauen und nachvollziehen bereit.

    Was sind die konkreten Probleme, und was wird nicht verstanden?



  • @Tyrdal sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    @john-0 sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Es geht nicht darum C++ zu lernen, es geht darum die manuelle Speicherverwaltung kennen gelernt zu haben. Das ist das Lernziel, und C++ ist da nur Mittel zum Zweck.

    Oder wenn C++, warum dann nicht in Verbindung mit RAII?

    Woher willst du wissen, dass der Lehrer das nicht als nächsten Schritt geplant hat? Und danach die Einführung von Smartpointer? Man muss ja nicht ewig mit C++98 rumhantieren, aber ich persönlich finde das sinnvoll C++ 98, das immer noch in vielen Projekten verbreitet ist(!), zumindest mal kurz kennengelernt zu haben. Dann zeigt man, wie es besser geht und man versteht den Sinn und Zweck des Ganzen. So komplex ist das doch nicht, dass man das niemanden zumuten kann. Jeder von uns hat so schließlich ebenfalls angefangen.
    Und stell dir mal vor du fängst bei Oracle an und hantierst an der Datenbank rum: Glaubst du im ernst du findest dort keinen Legacy Code? Ich kann dir sogar Open Source Projekte zeigen, die noch mit selbstgebastelten Smart-Pointern arbeiten.


  • Mod

    @Steffo sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    @Tyrdal sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    @john-0 sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Es geht nicht darum C++ zu lernen, es geht darum die manuelle Speicherverwaltung kennen gelernt zu haben. Das ist das Lernziel, und C++ ist da nur Mittel zum Zweck.

    Oder wenn C++, warum dann nicht in Verbindung mit RAII?

    Woher willst du wissen, dass der Lehrer das nicht als nächsten Schritt geplant hat?

    Erfahrung. Wäre nämlich der erste Fall.



  • Von der Aufgabenstellung, wie sie der TO beschrieben hat und ohne jeden Code, würde ich erwarten, man macht gerade Schleifen und switch-case.
    Und da passt eine dynamische Speicherverwaltung doch gar nicht rein. Bei diesem Kenntnisstand dürfte man nicht mal wissen, was damit überhaupt gemeint ist.
    Andersrum, wäre man soweit für solche selbst geschriebenen Arrays, hätte man die Aufgabenstellung, nur ohne diesen Punkt, doch schon gelöst und hätte auch entsprechenden Code.

    Hier ist ja nichts. Da kann man doch nur spekulieren.



  • Vieleicht habe ich mich auch nur verannt, aber was ich meine;
    bevor man sein eigenes Array hat, kann man ja schon mal das Menu schreiben. Als Array benutzt man erst man einen vector<T>. Nur als Platzfüller über eine using- Direktive zB. Ich bin auch der Meinung, das std::vectorGrundlage ist.

    Später kann man dann sein eigenes Array einfügen.



  • @Steffo sagte in Aufgabe Verwaltung eines dynamischen Arrays:

    Und stell dir mal vor du fängst bei Oracle an und hantierst an der Datenbank rum: Glaubst du im ernst du findest dort keinen Legacy Code? Ich kann dir sogar Open Source Projekte zeigen, die noch mit selbstgebastelten Smart-Pointern arbeiten.

    Meinst du ernsthaft Legacy Oracle Code wäre was für Anfänger? Ne, erstmal richtig lernen und danach die Altlasten wenn nötig.


Anmelden zum Antworten