Eingabe ähnlich einer Konsole?



  • Hi,

    ich schreibe gerade an einer Klasse zur Matrixmanipulation. Dabei verwende ich auch Operatorüberladung. Ich würde gerne wenn das Programm gestartet wurde meine Matrizen wie z.b in einer Konsole eingeben.

    Beipiel:

    new m1; new m2; new m3;
    m1>>1>>2>>endl>>3>>4; 
    m2>>1>>2>>endl>>3>>4;
    m3=m1+m2;
    2 4
    6 8
    

    Also der Benutzer kann das so eingeben und nicht über Menüpunkte im Hintergrund Funktionen aufrufen.

    Ich hoffe man hat mein anliegen verstanden.
    Wie wäre so etwas möglich? Ist der Zeitaufwand dafür hoch?

    Gruß



  • Streetdevil schrieb:

    ...Also der Benutzer kann das so eingeben und nicht über Menüpunkte im Hintergrund Funktionen aufrufen....

    Also ich verstehe den 2. Teil des Satzes nicht ("... nicht über Menüpunkte im Hintergrund Funktionen aufrufen").

    Wenn ich nden mal mental wegstreiche würde ich sagen: Eigentlich kein Problem ... ich persönlich fände diese Art der Eingabe aber umständlich.

    • Warum nicht einfach durch Leerzeichen trennen ? Wenn unbedingt mehrere (Matrizen-)Zeilen in einer (Eingabe-)Zeile eingegeben werden sollen, kannst Du ja weiterhin ein "Umbruchsymbol" verwenden
    • Ob eine "C++-ige" Syntax wirklich hilfreich ist, bezweifele ich. Den nicht-C++-ern ist sie nicht intuitiv ersichtlich und die anderen kommen mit den Abweichungen von der Syntax durcheinander (z.B. die "new"-Syntax)
    • "C++-iger" wäre "<<" statt ">>"

    Insgesamt geht es Dir hier anscheinend um normales Eingabeparsing ... und gerade für "Taschenrechneraufgaben" habe ich hier schon einiges im Forum gesehen - da hilft Dir evtl. die Suche weiter ... oder sogar der Einsatz von Tools (die machen dann wenigstens auch mit Klammer, Auswertungsprioritäten, .... alles richtig).

    Gruß,

    Simon2.



  • Hmm ... wie groß der Zeitaufwand sein wird lässt sich schwer Abschätzen,
    Generell möglich ist dein Vorhaben aber.

    Die kritische Stelle wird vermutlich das "endl" sein.
    Evtl. kommst du weiter wenn du den << Operator nochmal überlädtst so
    das er neben den regulären Werten auch noch strings/char annimmt.
    Dann könntest du den "Zeilenwechsel" mit einem solchen Konstrukt lösen

    m1<<1<<2<<";"<<3<<4;
    

    Alles andere wird dann vermutlich eher im Detail deiner Implementierung liege.
    Oder darin das ich deine Frage misverstanden habe.



  • Ups ich glaub ihr habt mich doch falsch verstanden. Das mit den Operatoren steht ja soweit. Ich bin schon bei der Ausführung des Programms.

    Also wenn ich meine .exe starte und das schwarzen Konsolenfenster kommt. DORT möchte ich das der Benutzer seine Matrizen so erstellen kann wie es oben steht.
    Normalerweiße mache ich das über Menüpunkte wie:

    (1) Matriz erzeugen
    (2) Addition
    (3) Multiplikation
    (4) Determinante errechnen
    (usw.)
    

    und rufe dann über die main im Hintergund die Funktionen der Klasse auf.

    Dies soll aber eben wie in einer Konsole passieren. Also die Eingabe wie oben in dem Fenster. Ich hoffe das war verständlicher.

    @simon2: Das mit den Leerzeichen habe ich mir auch schon überlegt, aber dafür müsste ich doch am Anfang schon wissen wieviele Parameter da kommen(für den Funkionsprototypen). Ich gebe ihm ja mit das jetzt eine 'int' Variable kommt. Deswegen verwende ich jedesmal wieder ein '>>'. Aber für ein Hinweis wie man sowas umsetzen könnte würde ich mich freuen.
    Gruß



  • Also nochmal zum Mitschreiben ...

    Du willst quasi ein kleines Command Prompt für die Matrizenerstellung
    in dem der Anwender einen string eingibt der dann entsprechend zu einer
    Matrix übersetzt wird.



  • Jau du hast es 😉



  • Dazu musst du dir IMHO einen kleinen Parser schreiben, der die Eingaben
    liest, interpretiert und dann die Funktionen anspricht.

    Jetzt kommts beim Zeitaufwand darauf an wie Komfortabel der sein soll.

    Also mal ein paar Gedanken von mir:

    - Am einfachsten ist wahrscheinlich eine Matrix pro Zeile,
    trennzeichen definieren auswerten ... ab in die Klasse.
    - Wenn die komplette Steuerung des Programms so stattfinden soll
    wird die Umsetzung wahrscheinlich schwieriger, mehr Zeichen und
    viele Auswertungsmöglichkeiten, Vollständigkeitsprüfungen und und und.
    - Folge mal Simons Hinweis mit den Taschenrechneraufgaben, da dürftest du
    was das Parsing angeht einige Hinweise finden.



  • Danke für die Hinweise. Werde mich da mal schlau machen!



  • Streetdevil schrieb:

    ..
    @simon2: Das mit den Leerzeichen habe ich mir auch schon überlegt, aber dafür müsste ich doch am Anfang schon wissen wieviele Parameter da kommen(für den Funkionsprototypen). ...

    Ich bin mir nicht sicher, wann Du vom Quellcode Deines Programms und wann von der Benutzereingabe sprichst .... und ich bin mir nicht einmal sicher, ob DU das weißt. 😉
    Das Argument " ... mit Leerzeichen muss ich wissen, wie viele Parameter kommen ...." ist aber definitiv falsch - egal, wie man es meint.
    Schließlich funktioniert ja auch die "normale Ausgabe" ("cout << "Hallo" << nummer << " 345345";") mit variabel vielen Parametern....

    Mir scheint, Dir schwebt irgendeine Art von "C++-Interpreter" vor, den Du aber nicht selbst schreiben, sondern "irgendwie den Compiler dazu überreden" möchtest ....

    Gruß,

    Simon2.


Anmelden zum Antworten