erklärung bitte (leicht!)



  • Konrad Rudolph schrieb:

    Wie lautete denn bitte die Aufgabe?

    schreibe ein programm, das ein wort rückwärts ausgibt. achte besonders darauf, dass der code leicht lesbar ist dass man die vorgehensweise gut erkennen kann und beachte auch die zweite zeile in Konrad Rudolphs signatur...



  • aso thx for help die aufgabe lautete:
    Schreiben Sie ein Programm, das ein Wort über die Tastatur einliest und es rückwärts wieder anzeigt. Benutzen Sie eine for-Schleife.



  • cOn schrieb:

    aso thx for help die aufgabe lautete:
    Schreiben Sie ein Programm, das ein Wort über die Tastatur einliest und es rückwärts wieder anzeigt. Benutzen Sie eine for-Schleife.

    Okay, dann kick Dein Buch in die Tonne. In C++ macht man sowas anders (und zwar viel einfacher). Dass das Buch das so kompliziert macht, ist ein Armutszeugnis.

    Zur Info: Man würde es z.B. so machen:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        cout << "Bitte Wort eingeben:" << endl;
        string wort;
        cin >> wort;
        for (int i = wort.length() - 1; i >= 0; --i)
            cout << wort[i];
        cout << endl;
    }
    


  • Dein Code sieht irgendwie auch einfacher aus ^^.
    Das Buch ist von Helmut Erlenkötter und heißt
    C++
    Objektorientiertes Programmieren von Anfang an.
    Kennst du vielleicht nen anderes Buch was gut ist (für nen Anfänger) ? 🙂



  • naja ich denke mal das man als anfänger schritt für schritt prgraommieren sollte und nicht mehrere schritte zusammenfassen.. es ist deswegen einfachter weil man diverse zeilen zusammenfassen kann etc. als anfänger sollte man zwecks des verständnisse ruhig ein schritt mehr schreiben... die optimierung erfolg dann irgendwann mal nach instinkt!!

    ist wie bei der mathematik.. als amateur muss man auch alle rechenschritte aufschreiben als fortgeschrittener schon weniger und als profi geht schon fast alles in koopff..;)



  • auserdem sollte man erst mal char[..] verstehen bevor man mit string anfängt.. bau alles aufeinander auf...;)



  • BorisDieKlinge schrieb:

    auserdem sollte man erst mal char[..] verstehen bevor man mit string anfängt..

    dafür werden dich die hardcore c++ freaks gleich steinigen 😉



  • BorisDieKlinge schrieb:

    ist wie bei der mathematik..

    Genau.

    als amateur muss man auch alle rechenschritte aufschreiben als fortgeschrittener schon weniger und als profi geht schon fast alles in koopff..;)

    Umgekehrt wird ein Hut draus. Als "Anfänger" akzeptiert man in der Mathematik, dass 0 < 1 und dass 1 + 1 = 2. Als Profi beweist man es.

    Genauso sollte man beim Programmierenlernen vorgehen. Wie der String unter der Haube aussieht, ist vollkommen egal. Ich habe eine Box, in der Buchstaben in einer Reihe stehen, ich kann einen Inhalt in die Box einlesen, ich kann einzelne Elemente herausgreifen. Mehr brauche ich nicht zu wissen. Insbesondere Beschränkungen wie "maximal 20 Zeichen" -- oder genau das Gegenteil, explizite dynamische Speicherverwaltung, ist in der Erklärung einfach kontraproduktiv, da diese weltlichen Details vom eigentlichen Punkt der Übung ablenken -- nämlich etwas einzulesen und rückwärts zu durchlaufen.

    auserdem sollte man erst mal char[..] verstehen bevor man mit string anfängt.. bau alles aufeinander auf...;)

    Genau das ist Quatsch. Was interessiert es mich, ob 'string' intern ein Feld von Zeichen benutzt, ob es eine verkette Liste ist oder ob im inneren kleine Feen hin und her schwirren und mit ihrem magischen Zauberstab die richtigen Zeichen abstubsen?

    Ich empfehle in diesem Zusammenhang eine Überlegung von Bjarne Stroustrup zum Thema: Learning Standard C++ as a New Language.



  • aha.. d.h. es ist völlig egal wie der hase läuft, hautpsache er läuft....

    d.h. sich erst grad nicht mit einfache char[..} rumschlagen sonder gleich mit string arbeiten ohne zu wissen was dahinter steckt??
    am besten auf pointer verzichten.. alles global anlegen...

    hast informatik studiert?



  • BorisDieKlinge schrieb:

    d.h. sich erst grad nicht mit einfache char[..} rumschlagen sonder gleich mit string arbeiten ohne zu wissen was dahinter steckt??

    Ja.

    am besten auf pointer verzichten..

    Du hast es begriffen.

    alles global anlegen...

    Oder doch nicht?

    hast informatik studiert?

    Ich studiere es momentan im fünften Semester (Bioinformatik). Aber das tut nichts zur Sache, da man sowas in Informatik nicht lernt. Von uns wird erwartet, dass wir sowas können.



  • aha und kannst es... ??



  • BorisDieKlinge schrieb:

    aha.. d.h. es ist völlig egal wie der hase läuft, hautpsache er läuft....

    👍



  • hehe.. naja egal.. müsst ja nich meiner meinung sein..

    mich interessrt es einfach was in den tiefen des codes vor sich geht...
    um auch verständs bi problembehandlungen zu haben...



  • BorisDieKlinge schrieb:

    mich interessrt es einfach was in den tiefen des codes vor sich geht...

    Natürlich, und das ist auch sehr wichtig, wenn man C++ programmieren können will. Aber man muss ja nicht alles auf einmal lernen -- und es ist sinnvoll, mit einfachen Dingen -- Eingabe, Ausgabe, simple Manipulation von Objekten -- anzufangen, bevor man sich an die verstrickten Interna macht.



  • Auch wenn man erst Krabbeln lernt und dann Gehen, verhält es sich mit fremden Dingen häufig andersherum: Man lernt erst die Schnittstelle kennen und später dann, wenn man denn möchte und die Möglichkeit bekommt, die Interna. Windows-Programmierung dürfte man ja sonst gar nicht machen, denn da bekommt man gewöhnlich nicht die Möglichkeit sich die Interna anzuschauen, sondern muss sich mit den Schnittstellen (API) und deren Beschreibung zufrieden geben. Aber das ist nicht nur in der Programmierung so; z. Bsp. lernt man gewöhnlich schon als kleines Kind, dass man ein Auto mit einem Lenkrad lenken kann und erst später, dass sich eine Lenkstange dahinter befindet. Wenn man möchte kann man dann tiefer in die Materie einsteigen und KFZ-Mechanik lernen. Ebenso sollte man es mit den Zeichenketten handhaben; die Benutzung der C++ Strings ist weitaus komfortabler und sicherer als die zugrundeliegenden, gezähmten, C Strings. Wenn man irgendwann mal eine eigene String-Klasse schreiben will, kann man sich immer noch mit C Strings beschäftigen.



  • ich denke du vergleichst ganz andere objekte miteinander, je mehr man am anfang über ein problem nachdenkt desto schneller findet man für neue Programme die Lösung.

    man sollte sich erstmal mit dem elementaren vertraut machen bevor man zusätliche bibliotheken anwendet

    ein unsinniger vergleich:

    wozu verkehrsregeln lernen ? wenn ich paar kilometer gefahren bin werd ichs schon merken was man darf und nicht darf



  • Stelfer schrieb:

    man sollte sich erstmal mit dem elementaren vertraut machen bevor man zusätliche bibliotheken anwendet

    Die STL ist aber keine zusätzliche Bibliothek, sie ist elementar.



  • Ich habe nicht gesagt, man soll sich nicht mit der Schnittstelle der C++ String-Klasse auseinandersetzen. Es geht hier NICHT darum, dass man nur durch Trial & Error lernen soll, im Gegenteil. Ich habe auch mit C Strings angefangen, weil wir im Studium mit C angefangen haben. Meiner Meinung nach kommt man bei C Strings eher mit "Lernen durch Trial & Error" in Kontakt, als bei C++ Strings. Ich habe von anderen Objekten gesprochen, aber die Analogie bezog sich auf Schnittstellen und das was dahinter steckt. Wie genau das realisiert ist, was hinter einer Schnittstelle steckt muss man nicht wissen. Es geht um den Zweck und die korrekte Verwendung der Schnittstelle. Im Gegensetz zum Lenkrad mit versteckter Lenkstange haben die Verkehrsregeln in erster Linie herzlich wenig mit einer Schnittstelle und dahinter versteckter Funktionalität zu tun. Man könnte die Verkehrsregeln aber als eine Spezifikation ansehen, auf deren Basis man versteckte Funktionalität mit einer sichtbaren Schnittstelle implementiert, die Autos zwingt, sich an diese Regeln zu halten. Und wieder müsste der Fahrer nicht wissen, wie genau die versteckte Funktionalität implementiert ist, sondern nur die Schnittstelle kennen um z. Bsp. die Regeln dem Land entsprechend, zu konfigurieren.
    Wie schon gesagt, in C++ muss man sich erst mit C Strings auseinandersetzen, wenn man seine eigene String-Klasse implementieren will oder wenn man dazu gezwungen wird. Ansonsten ist es genauso freiwillig, wie das Einbetten von Inline-Assembler.



  • Es gibt schlechtere Bücher als "Objektorientiertes Programmieren von Anfang an".

    Im übrigen ist der Ausgangspunkt der Diskussion das Verstehen der for-Schleife, die noch aus C stammt.

    Ich denke, dass man die Klasse string erst dann wirklich versteht, wenn man selbst zumindest rudimentär versucht hat, z.B. auf Basis von char eine solche Klasse zu schreiben.



  • net schrieb:

    BorisDieKlinge schrieb:

    auserdem sollte man erst mal char[..] verstehen bevor man mit string anfängt..

    dafür werden dich die hardcore c++ freaks gleich steinigen 😉

    ... und zwar vollkommen zurecht ! 😉
    Es gibt wirklich KEINEN Grund, Anfänger erst mit char* zu quälen (statt gleich mit string anzufangen) außer:

    • den "C-Hintergrund" des Buchauthors und
    • dessen sadistische "da musste ich auch durch"-Einstellung

    Beides keine Kriterien für gute Didaktik.

    Das regt mich immer wieder auf, weil es vollkommen unnötig Einsteigern das Leben erschwert und dann noch "rufschädigend" für die Sprache ist. Für den richtigen Umgang mit char* muss man einen Haufen Zeug verstanden haben (Zeiger(arithmetik), Heap/Stack, Literale, Arrays, 0-Terminierung, ....) - eigentlich nix für den Anfänger und sein erstes Programm.

    Gruß,

    Simon2.


Anmelden zum Antworten