Themengebiet : C-Zeichenketten, Anwendung : Zahleingabe auswerten.



  • Einen schönen guten Tag, ich bin es wieder an dieser Stelle.

    Sitze immernoch an diesem verfluchten Buch, welches ich in den vorherigen Beiträgen erwähnt habe, momentan bin ich komplett überfordert, möge es am Buch liegen, oder auch an mir.

    Quelltext :

    #include <iostream>
    using namespace std;
    const int MAX=256;
    int main()
    {
        char input[MAX];
        int i=0;
        double Wert = 0;
        double Nenner = 0;
    
        cin.getline(input, MAX);
        // Lese den Nenner ein
        while (input[i]>='0' && input[i]<='9')
        {
            Wert *= 10;
            Wert += input[i] - '0';
            i++;
        }
        // Wenn ein / kommt, gibt es einen Nenner
        if (input[i]=='/')
        {
            // Den Nenner einlesen
            i++;
            while (input[i]>='0' && input[i]<='9')
            {
                Nenner *= 10;
                Nenner += input[i] - '0';
                i++;
            }
        }
        // Falls ein Nenner gefunden wurde, durch ihn teilen.
        if (Nenner!=0)
        {
            Wert /= Nenner;
        }
        cout << Wert << endl;
    }
    

    Vorarbeit :
    - Abschnitt vor dieser Aufgabe durchgelesen.
    - Ewig lange Suche nach einem Debugger, DDD gefunden, ewig langes probieren bis er endlich funktionierte.
    - Aufgabe kann mit Debugger nicht durchgegangen werden da mir nicht klar ist, wie ich :

    1. Benutzereingaben tätigen kann in DDD.
    2. Wo die "Ausgaben", also das Terminal, von dem Programm sein soll.
    - Wollte deshalb diese Variable char input[MAX] am Anfang als 3/4 deklarieren, funktionierte aber auch nicht.
    - Der Debugger von Eclipse wird mir empfohlen, das Programm an sich gibt mir ständig Launcher-Fehler, sagt mir immer, dass er die Binary nicht finden kann, auch das Abspeichern des Projektes vor der Ausführung führte nach einiger Zeit zu keinem Erfolg.

    Schreiben tue ich diese langatmige Geschichte, da ich zeigen will, dass ich mir nicht zu bequem bin, sondern keine andere Option mehr habe/sehe als euch zu fragen, ansonsten könnte ich tagelang wieder an dieser -beliebiges Schipfwort- sitzen.

    # Das Programm an sich :

    Soll Brüche als Eingaben zulassen, also 3/4 dann als Variable, im Terminal, als 0,75 ausgeben.
    ----------------------------------------------------------------
    Zeile Nummer 3 : const int MAX=256;
    Stellt soweit ich es verstanden habe die Begrenzung der Benutzereingabe auf maximal 256 Zeichen fest.
    Zeile Nummer 6: char input[MAX];
    Sollte die Einführung des char-Arrays sein, ist demnach auf 256 Zeichen begrenzt...
    Zeile Nummer 11: cin.getline(input,MAX);
    Stellt wohl eine Funktion dar, in welcher die Benutzeringabe eingeleitet wird, die Zahl kommt in diese char-Array input (Zeile 6), dieses ",MAX" verwirrt etwas.

    Sagen wir mal, wir nehmen jetzt 3/4.

    Einlesen vom Nenner, also der 4, damit gehen wir in die while Schleife.

    input[i] ist hier input[0] also der 1. Indexplatz in den Feldern.
    Ist demnach wohl 0, da nichts anderes zugewiesen wurde und da 0 < 9 ist geht er wohl in die while Schleife.

    Wert ist oben als 0 definiert, 0*10 = 0 wird wieder zugewiesen, bleibt 0.
    Zeile unterhalb : 0 - 0 = 0, Wert ist ja 0 + die 0 rechts ist 0.

    Erhöhung von i um 1.

    input[1]>='0' ... ab da verstehe ich nichts mehr, was soll input[1] sein in dieser Aufgabe?

    Der andere Gag ist, dass in der Aufgabe drei mal vom Nenner gesprochen wird.

    Könnt ihr mir helfen die Aufgabe zu verstehen???


  • Mod

    Sind die Kommentare, Variablennamen und Variablentypen so im Buch? Das ist ja schrecklich.

    Nimm mal an, Wert stünde für Zähler, und der Kommentar in Zeile 12 würde sich ebenfalls auf den Zähler beziehen.

    input[i] ist hier input[0] also der 1. Indexplatz in den Feldern.
    Ist demnach wohl 0, da nichts anderes zugewiesen wurde und da 0 < 9 ist geht er wohl in die while Schleife.

    Wieso 0? Es wurde doch
    1. In Zeile 11 etwas zugewiesen
    und
    2. 0 und '0' sind im Allgemeinen ganz unterschiedliche Werte.

    input[1]>='0' ... ab da verstehe ich nichts mehr, was soll input[1] sein in dieser Aufgabe?

    Na, das nächste Zeichen in input.



  • Jaja, das Problem mit Kommentaren. Die werden nämlich nicht vom Compiler gelesen und demnach kann da alles mögliche stehen, auch totaler Blödsinn wie in diesem Fall. Die while Schleife liest nicht den Nenner ein, sondern den Zähler indem er solange vorrückt, bis ein Zeichen kommt, dass nicht 0-9 ist. Ich denke du hast es sonst schon richtig verstanden.
    Ein funktionierender Debugger ist allerdings besonders für Anfäger essenziell! Das solltest du als erstes hinbekommen. Welches OS hast du denn?



  • SeppJ schrieb:

    Sind die Kommentare, Variablennamen und Variablentypen so im Buch? Das ist ja schrecklich.

    Nimm mal an, Wert stünde für Zähler, und der Kommentar in Zeile 12 würde sich ebenfalls auf den Zähler beziehen.

    input[i] ist hier input[0] also der 1. Indexplatz in den Feldern.
    Ist demnach wohl 0, da nichts anderes zugewiesen wurde und da 0 < 9 ist geht er wohl in die while Schleife.

    Wieso 0? Es wurde doch
    1. In Zeile 11 etwas zugewiesen
    und
    2. 0 und '0' sind im Allgemeinen ganz unterschiedliche Werte.

    input[1]>='0' ... ab da verstehe ich nichts mehr, was soll input[1] sein in dieser Aufgabe?

    Na, das nächste Zeichen in input.

    Ja, das Buch ist sehr schrecklich.
    Falls Interesse von deiner Seite besteht kannst du den Abschnitt, als auch die "Lösung" im Buch gerne auf folgenden Seiten nachschauen :

    1.http://www3.zippyshare.com/v/55831126/file.html
    2.http://www3.zippyshare.com/v/9261718/file.html
    3.http://www3.zippyshare.com/v/81208435/file.html
    4.http://www3.zippyshare.com/v/36172964/file.html
    5.http://www3.zippyshare.com/v/48038279/file.html
    6.http://www3.zippyshare.com/v/16630975/file.html
    7.http://www3.zippyshare.com/v/77020585/file.html

    Das wäre dann wohl die "Einführung" und die Aufgabenstellung inkluzive "Lösung", werde die Sache wahrscheinlich überspringen, wollte ich zwar vermeiden, aber naja.



  • brotbernd schrieb:

    Jaja, das Problem mit Kommentaren. Die werden nämlich nicht vom Compiler gelesen und demnach kann da alles mögliche stehen, auch totaler Blödsinn wie in diesem Fall. Die while Schleife liest nicht den Nenner ein, sondern den Zähler indem er solange vorrückt, bis ein Zeichen kommt, dass nicht 0-9 ist. Ich denke du hast es sonst schon richtig verstanden.
    Ein funktionierender Debugger ist allerdings besonders für Anfäger essenziell! Das solltest du als erstes hinbekommen. Welches OS hast du denn?

    Also stimmen die Kommentare nicht mal wirklich, das Problem ist eher, dass ich mit dem ganzen Quelltext kaum was anfangen kann, da ich nicht richtig hineingeführt wurde.

    So wie ich es gerade sehe, sprengt dieses Problem eine Forumsanfrage, da bräuchte ich wahrscheinlich schon persönliche Beratung, haha.

    Ich benutze Ubuntu, habe aber auch Windows auf dem BS.
    Die Geschichte war ein tagelanger Krampf, bis man endlich eine IDE und einen Debugger gefunden hat und diesen dann halbwegs zum Laufen bekommen hat.

    Wahrscheinlich wäre es intelligenter gewesen gleich auf Windows zu gehen und dort dieses Visual C++ zu laden/zu holen.

    Momentan versuch ich mich mit dem Geany und wie gesagt diesem DDD durchzuschlagen, funktioniert aber nicht wirklich.


Anmelden zum Antworten