Citación del post de
Kuk
|
❞
@Joseg, nunca he sido un crack de las formulas y algoritmos la verdad, pero me acabo de dar cuenta de otra cosa que sabemos desde el cole y se nos ha escapado...
El cálculo lo hacemos así:
Código COBOL:
COMPUTE wsomamodelos = wsomamodelos + byte(idx-1) * idx-1
De esta manera, primero se hace la multiplicación.
Si lo hacemos así, con paréntesis, para que primero se haga la suma:
Código COBOL:
COMPUTE wsomamodelos = (wsomamodelos + byte(idx-1)) * idx-1
Entonces a mi me da 2 valores diferentes:
Código:
207.99.99; --> 759816616914665856
247.97.99; --> 257135248213769984
|
Ahhhhhhh, ok, ok,
Muchas gracias, Kuk. Cambiaré la fórmula. Sin embargo, chatGTP sugirió este ejemplo, lo que garantiza que siempre funciona, independientemente del orden de los dígitos/caracteres.
Código COBOL:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-TEXTO PIC X(50)
VALUE "207.99.99;247.97.99;".
01 WS-CODE PIC 9(9) VALUE 0.
01 WS-ASCII PIC 9(3).
01 I PIC 9(3).
PROCEDURE DIVISION.
MOVE 0 TO WS-CODE
PERFORM VARYING I FROM 1 BY 1
UNTIL I > FUNCTION LENGTH(WS-TEXTO)
COMPUTE WS-ASCII = FUNCTION ORD(WS-TEXTO(I:1))
COMPUTE WS-CODE = (WS-CODE * 31) + WS-ASCII
COMPUTE WS-CODE = FUNCTION MOD(WS-CODE, 999999999)
END-PERFORM
DISPLAY "CODIGO = " WS-CODE