Rechenausdruck auswerten

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

Rechenausdruck auswerten

Beitrag von Gast ( / / 0 / 3 ) »
Hi Leute,
habe die Aufgabe bekommen ( zu Übungszwecken ), ein Programm zu schreiben, das einen beliebigen Rechenausdruck den man eingibt auswertet und anschließen das Ergebniss berechnet. Vorgabe ist auch, das Terme mindestens durch ein Leerzeichen voneinander getrennt sein sollen.
Eine mögliche Eingabe könnte z.B. : "1 + SQRT (3)" oder "1 + 3" sein.
Mein Problem ist jetzt das ich anfangs viele Ideen hatte wie ich das lösen könnte aber letztendlich nichts davon geklappt hat.
Könntet ihr mir vielleicht eine kleinen Tipp geben wie ich diese Aufgabe lösen kann oder was ich mal ausprobieren könnte?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Rechenausdruck auswerten

Beitrag von Gast ( / / 0 / 3 ) »
Gast hat geschrieben:Mein Problem ist jetzt das ich anfangs viele Ideen hatte wie ich das lösen könnte aber letztendlich nichts davon geklappt hat.
Schade, dass Du keine Deiner vielen Ideen und die dabei aufgetretenen Probleme konkret benannt hast.

Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
Hi,

Code: Alles auswählen.

REPORT zforum49 .

PARAMETERS: formel(50) obligatory default 'sqrt( 2 )'.
DATA : BEGIN OF prog OCCURS 0,
       text(72),
       END OF prog.
DATA genprog LIKE tadir-obj_name.
DATA line TYPE i.
DATA word(80) TYPE c.
DATA message(99) TYPE c.
DATA error.
DATA text(72).
DATA ergebnis(16) TYPE p DECIMALS 2.

APPEND 'report z1.' TO prog.
APPEND '*' TO prog.
APPEND 'form RECHNEN using formel ergebnis.' TO prog.
CONCATENATE 'ergebnis ='  formel '.' INTO prog-text
SEPARATED BY space.
APPEND prog.
text = prog.
APPEND 'endform.' TO prog.

GENERATE SUBROUTINE POOL prog NAME genprog MESSAGE message
                                           LINE line WORD word.

IF sy-subrc <> 0.
  error = sy-subrc.
  LOOP AT prog.
    WRITE: / sy-tabix.
    IF sy-tabix = line .
      WRITE:  prog COLOR 6.
      WRITE:/ line , message COLOR 6 INTENSIFIED OFF.
    ELSE.
      WRITE:  prog.
    ENDIF.
  ENDLOOP.
ENDIF.

IF NOT error IS INITIAL.
  EXIT.
ENDIF.

PERFORM rechnen IN PROGRAM (genprog) USING formel ergebnis.
WRITE: / ergebnis, '=', formel.

lg Andreas

Beitrag von PsychoMantis (ForumUser / 98 / 0 / 0 ) »
Nu hast du seine Hausaufgaben gemacht und der Lerneffekt ist flöten gegangen :wink: Hätte ihm doch wesentlich weiter gebracht wenn wir ihm bei seinen Ideen geholfen hätten.

Beitrag von black_adept (Top Expert / 3947 / 105 / 886 ) »
Vielleicht könnte man ja auch ABAP den Großteil der Arbeit machen lassen und einfach einen FB geschickt füttern. Damit kann man dann fast zaubern...


FB: "EVAL_FORMULA"
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Gast ( / / 0 / 3 ) »
PsychoMantis hat geschrieben:Nu hast du seine Hausaufgaben gemacht und der Lerneffekt ist flöten gegangen :wink: Hätte ihm doch wesentlich weiter gebracht wenn wir ihm bei seinen Ideen geholfen hätten.
Wenn ein Programm mit so einer Backdoor einmal im Produktivsystem ist, hat man verloren.
Dann kann keiner mehr sagen, welches SAP-Standard-Programm noch konsistent ist, welche Daten noch nicht manipuliert wurden usw.

Wenn das als Erfüllung der Hausaufgabe durchgeht, tauigt der Referent nichts.

Beitrag von Gast ( / / 0 / 3 ) »
Hi danke für eure Antworten.
Würde euch ja gern meine Versuche die ich so gestartet habe zeigen aber naja die haben immer irgendwann im nichts geendet und sind etwas zu peinlich *g*. Ok man muss dazu sagen ich bin n kompletter Anfänger in ABAP und bin grad dabei ABAP zu lernen....
@PsychoMantis das mit dem Lerneffekt stimmt eigentlich schon. Hab auch nicht vor jetzt einfach nur den Report zu kopieren und fertig... Zuerst werd ich mir das Teil mal so lange anschauen, bis ich ihn komplett verstehe ;). Und dann versuche ich nochmal die Aufgabe irgendwie zu lösen. Wenn ich es hin bekommen habe, zeig ich euch wie ich es gemacht habe.

Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
Anonymous hat geschrieben:
PsychoMantis hat geschrieben:Nu hast du seine Hausaufgaben gemacht und der Lerneffekt ist flöten gegangen :wink: Hätte ihm doch wesentlich weiter gebracht wenn wir ihm bei seinen Ideen geholfen hätten.
Wenn ein Programm mit so einer Backdoor einmal im Produktivsystem ist, hat man verloren.
Dann kann keiner mehr sagen, welches SAP-Standard-Programm noch konsistent ist, welche Daten noch nicht manipuliert wurden usw.

Wenn das als Erfüllung der Hausaufgabe durchgeht, tauigt der Referent nichts.

ok,
..
war wohl mit Kanonen auf Spatzen :oops:

-zum Thema backdoor: es gibt aber auch einige Progrämmchen im Standard mit denen man manipulieren und zerstören könnte - sogar über rfc von einem fremden System :evil:


-zum eigentlichen Thema : Wenn es sich um einen Anfängerkurs handelt, sollte sich der Kandidat mal die case- und die split-Anweisung anschauen


nix für ungut

Andreas

Beitrag von thund3rbird (ForumUser / 3 / 0 / 0 ) »
Hi *,

die Lösung von Asaph is gut, funktioniert auch einwandfrei ...

Nur eine Frage, gibts das ganze auch irgendwie mit na Parser Funktion und Tokens ???

Hat jemand ne Ahnung wie man das so lösen könnte. ... !!

Vielen Dank

Beitrag von black_adept (Top Expert / 3947 / 105 / 886 ) »
Ich schreibe es gerne nochmal, wenn du die Antwort oben übersehen hast:

Funktionsbaustein : "EVAL_FORMULA"
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von thund3rbird (ForumUser / 3 / 0 / 0 ) »
hey danke für die schnelle antwort,

also den FB habe ich gefunden, aber so ganz verstehen was man mit dem machen kann, tuh ich noch net ....

Hab auch noch net so die Anung von ABAP ..

Vielleicht kann mir da ja einer weiter helfen ..

DANKE ...

Grüße

Beitrag von black_adept (Top Expert / 3947 / 105 / 886 ) »
Das ist doch genau so wie man es erwartet.

In den Parameter "FORMULA" gibt man den auszuwertenden Ausdruck ein ( z.B. 13 / SIN( 3 * 4 ) ) und im Parameter VALUE bekommt man dann das Ergebnis zurück.

Allerdings sollte man in der SE37 ganz nach rechts blättern, da das Ausgabefeld 200 Zeichen lang ist und man das Ergebnis auf den meisten Bildschirmen nicht direkt ohne zu blättern sehen kann.

Der Baustein ist sowieso ganz nett - einfach mal debuggen und anschauen, wie er lehrbuchmäßig die eingegebene Formel abarbeitet .
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von thund3rbird (ForumUser / 3 / 0 / 0 ) »
d.h. der EVAL_FORMULA übernimmt schon meine eigentlich parser-Funktion ??
so dass ich mir über die Parsereigenschaften eigentlich garkeine gedanken mehr machen muss ??

Grüße

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
thund3rbird hat geschrieben:d.h. der EVAL_FORMULA übernimmt schon meine eigentlich parser-Funktion ??
so dass ich mir über die Parsereigenschaften eigentlich garkeine gedanken mehr machen muss ??

Grüße
Debug doch den FuBa mal, dann lernste erstens wie er arbeitet und zweitens kannste deine Frage dann selbst beantworten ;)

Gruß
Markus

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1230
Views
Konditionen auswerten?
von Gast » 29.11.2005 18:46 • Verfasst in Sales and Distribution
2
Antw.
2064
Views
Zählen, und Auswerten
von Presanth » 03.11.2004 11:31 • Verfasst in ABAP® für Anfänger
3
Antw.
3163
Views
RTE Feld auswerten?
von nicnor » 08.08.2007 07:51 • Verfasst in Human Resources
1
Antw.
3894
Views
LOIBOM Änderungszeiger Auswerten
von maple » 06.02.2020 12:00 • Verfasst in ABAP® für Anfänger
14
Antw.
1091
Views
Interne Tabelle auswerten
von wreichelt » 26.08.2021 10:26 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.