2017-06-06 4 views
7

Ich versuche, eine Art von Caesar Cipher in Cobol zu programmieren. Aber irgendwie bekomme ich die folgende Compiler-Fehler:Funktion ord funktioniert nur manchmal, aber manchmal nicht

Numeric function "INTEGER FUNCTION ORD" was not allowed in this context.

Dieser Fehler wird hier gefeuert (beide Linien)

000048     MOVE FUNCTION ORD("A") TO a 
000049     display function ord("A") 

Aber NICHT hier

000054    MOVE FUNCTION CHAR(FUNCTION MOD(
000055     FUNCTION ORD(outstring (i:1)) 
000056      - a + offset, 26) + a) 
000057    TO outstring (i:1) 

i ist die Position der outstring wir betrachten. a ist, den Wert von "a" oder von "A" erforderlich sicherzustellen, dass wir in den 26 Buchstaben, definiert als

000018   03 a pic S9(3). 

Wo ist der Unterschied zu bleiben? Warum funktioniert die zweite und die erste nicht?

+0

Nur um zu sagen: Ich war nicht in der Lage, das Problem zu lösen, da wir nicht ascii, sondern eine andere, wo a bis z sind nicht in Ordnung, aber mit Lücken. – inetphantom

Antwort

5

Das zweite Beispiel funktioniert und das erste funktioniert nicht, weil Sie numerische Ausdrücke als Funktionsargumente verwenden dürfen, aber Sie können keine numerischen Ausdrücke als Betreff einer MOVE-Anweisung verwenden. In Ihrem Fall betrachtet Ihr Compiler (IBM?) einen numerischen intrinsischen Funktionsaufruf als einen numerischen Ausdruck. Sie müssen also MOVE durch COMPUTE ersetzen und den Funktionsaufruf in DISPLAY zu a ändern.

000048     COMPUTE a = FUNCTION ORD("A") 
000049     DISPLAY a 
Verwandte Themen