erklärung bitte (leicht!)



  • Hi,
    habe mir vor paar Tagen nen C++ Buch gekauft um C++ zu lernen ^^.
    Bei jedem Kapitelende sind auch schöne Aufgaben zum üben!
    Habe da aber eine Aufgabe nicht richtig hinbekommen und dann die Lösung
    angeguckt die ich aber nicht ganz verstehe und wollte die Lösung bitte
    genauer erklärt bekommen.
    Ich möchte das dick geschriebene genauer erklärt bekommen 🙂

    Hier der Code :

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        char wort[21];
        int laenge;
        cout << "\nBitte Wort eingeben "
                "(max. 20 Zeichen)\n";
        cin >> wort;
        laenge=strlen(wort);
        cout << "\n";
        for [b](int i=laenge-1; i>=0; i--)[/b]
          cout << wort[i];
        cout << "\n";
        return 0;
    }
    

    thx schoma für die antwort 😃
    auch wenn es für euch bestimmt selbst verständlich ist !







  • for (int i=laenge-1; i>=0; i--) 
      cout << wort;
    

    bewirkt folgendes:
    der Rumpf der "for-Schleife" (in diesem Fall nur der cout-Befehl) wird je nach Länge des Wortes ausgegeben.

    eine for Schleife sieht gedanklich so aus:
    for([i]Initialisierung*;Bedingung;Reinitialisierung)

    in der Initialisierung wird der Startwert deiner Zählvariable festgelegt (in deinem Fall die Anzahl der Buchstaben deines Wortes minus eins (minus eins deswegen, weil das Array bei 0 seinen ersten Index hat und nicht bei 1))

    int i=laenge-1
    

    Die Bedingung bedeutet, das die Schleife durchlaufen wird, solange i größer oder gleich 0 ist,

    i>=0
    

    die Reeinitialisierung wird bei jedem Schleifendurchlauf ausgeführt und bewirkt durch das "i--", das mit jedem Schleifendurchlauf i um eins erniedirgt wird (dekrementiert wird), sobald also i<0 wird der Rumpf
    hier:

    cout << wort[i]
    

    nicht mehr ausgegeben

    Fazit: die for-Schleife gibt dir dein eingegebenes Wort mit der entgegengesetzten Buchstabenreihenfolge wieder aus

    zuerst den Buchstabe an der stelle:
    Länge-1 also bei einem Wort mit 20 Buchstaben den buchstaben nr. 19
    danach:
    länge-2 also Buchstabe 18
    ... usw
    bis zum ende:
    länge-länge also Ausgabe voN Buchstabe Nr. 0

    ➡ ist gar net so schwer :xmas1:



  • Diese Lösung stand in dem Buch? Wie lautete denn bitte die Aufgabe?



  • 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.


Log in to reply