PDA

View Full Version : FREE RPG Extender H für aufrunden



Seiten : [1] 2 3

loeweadolf
25-02-04, 00:47
Wie kann ich aufrunden im FREE RPG.

Beispiel:
Ergebnis (h) = Zahl1 * Zahl2


Die Umwandlungsliste meldet mir: *RNF7030: Der Name H ist nicht definiert.

Im Internet (RPG-Referenz) konnte ich die Lösung nicht finden.

mfg. Ludger

Klaus Meyer
25-02-04, 08:09
versuche es mal mit

eval(h) Ergebnis = Zahl1 * Zahl2

mfg Klaus

B.Hauser
25-02-04, 08:32
Hallo Ludger,

normealerweise sind EVAL und CALLP in RPG-Free-Format nicht notwendig.
Die einzige Ausnahme ist bei Erweiterungen z.B. (H) oder (E).
Werden Erweiterungen verwendet, darf zwischen dem OpCode und der Erweiterung kein *Blank stehen!
(Im Gegensatz zur klassischen Schreibweise)

Wenn Du auf das EVAL verzichten möchtest, musst Du mit Built-In-Funktionen arbeiten.
z.B. %DecH für Dezimal-Werte, %IntH oder %UnsH für Integer
Das H steht jeweils für kaufmännisch runden.



/Free
Ergebnis = %DecH(Zahl1 * Zahl2: 11: 3);
/End-Free


Birgitta

loeweadolf
25-02-04, 09:28
Hallo Klaus, es hat geklappt, danke..

Ich war mir 100% sicher, diese Variante schon getestet zu haben, anscheinend wohl doch nicht.

Ein anderes Problemchen:
Wie bringe ich in FREE RPG ein Datumsfeld in ein num. Feld mit 6,0 Länge ?

D Datum S d
D DatNeu S 6 0

Datum ist bereits gefüllt (*eur).
Nun möchte ich den Inhalt von Datum nach DatNeu (dmy) überstellen.

mfg- Ludger

loeweadolf
25-02-04, 09:34
Hallo Birgitta, danke für den Hinweis.

Eine Frage zu %decH
Was bedeuten in dem Beispiel die Angaben :11:3 ?
Ist das die Länge des Ergebnisfeldes ? Das kann eigentlich nicht sein, da dieses bereits definiert wurde.

Warum ist in Free Rpg kein CALLP mehr notwendig ?

mfg. Ludger

B.Hauser
25-02-04, 10:06
Hallo Ludger,

1. Umsetzen Datum nach Datum 6,0 im Format DMY:


D DateEur S D DatFmt(*Eur)
D DateNum S 6P 0
/Free
DateNum = %Int(%Char(DateEur: *DMY0));
/End-Free


2. Bei der Built-in-Funktion %DecH können die Länge und die Anzahl der Dezimal-Stellen angegeben werden. (Parameter 2/3)
Dies ist gerade bei komplexen Rechenoperationen sinnvoll, da intern mit Gleit-Komma gerechnet wird.
Die Parameter können als Variable verwendet werden.
Allerdings muss das Format zur Compile-Zeit bekannt sein.
Am besten hinterlegt man eine Konstante:
Länge: Const(%Size(RefFeld))
Anzahl Dezimalstellen: Const(%DecPos(RefFeld)

3. Warum wird CallP im Free-Format nicht mehr benötigt?
Die Frage müsste anders lauten: Warum wurde CallP in der klassischen Schreibweise benötigt?
Aus dem gleichen Grund warum EVAL erfunden wurde:
Damit das Feld OPCODE gefüllt werden kann.
Durch die eindeutige Schreibweise kann der Compiler erkennen, dass es sich um einen Programm/Prozedur-Aufruf handelt.

Birgitta

BenderD
25-02-04, 10:28
Hallo nochmal,

@Birgitta zu 3. stimmt nur fast, das mit dem CallP, da gibt es ein paar Probleme, da RPG nach wie vor keine reservierten Wörter hat. Der Compiler kriegt den Husten, wenn man eine procedure wie einen Opcode nennt und reagiert darauf unterschiedlich und kurios.

BTW: als ich das erste Mal auf einer common Veranstaltung nach den zwei überflüssigsten RPG Anweisungen gefragt habe und dann EVAL und CALL benannt habe, habe ich einiges an Murren provoziert.

Was sind die zwei überflüssigsten RPG Anweisungen im Free Format???
/free und /endfree; das sieht man schon daran, dass keine Lochkartenart (Stelle 6) angegeben ist.

mfg

Dieter Bender

loeweadolf
25-02-04, 10:58
Hallo Birgitta, vielen Dank. Ludger

Fuerchau
25-02-04, 11:43
@Dieter

Ohne /free /endfree mag der Compiler aber nicht !

BenderD
25-02-04, 11:50
Hallo,

@Baldur: da kann man wieder mal sehen, wie schlampig dieser angeblich Meilenstein des Software Engineering entwickelt ist

Dieter Bender