Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol GnuCOBOL (OpenCOBOL)
GnuCOBOL (OpenCOBOL) El compilador gratuito y Open Source cada vez más popular.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Información] ¡¡¡Vuelta al Foro antiguo!!! Kuk Funcionamiento del Foro 40 21 de abril de 2026 22:04
Caida de Watsapp y FB, o vuelta a la normalidad Kuk Charladero - espacio libre 3 5 de octubre de 2021 17:39
[Información] Estamos de vuelta de nuevo Kuk Funcionamiento del Foro 8 12 de septiembre de 2018 23:08
[Duda] Reducir tamaño campo Gatomalo RM/COBOL 4 24 de noviembre de 2017 04:30
[Duda] Tamaño de campo Josber PowerFORM 2 16 de diciembre de 2015 19:47

Respuesta

  #1
Antiguo 23 de octubre de 2022, 02:33
CHITOBLA
Forero
Última Actividad 27.12.2022 23:37
Posts Posts: 58
Likes enviados Enviados: 72
Likes recibidos Recibidos: 17
Idea Darle la vuelta a un campo
0 Inactivo Inactivo

Hola coboleros, como están.
Tengo un problema que hace mas de 2 días estoy tratando de resolver y no he podido y por esto les escribo a los que tienen mucha mas experiencia que yo.

Antes que nada quiero que sepan que estoy usando como compilador el Open COBOL Ide, lo cual como saben es el de los mas simples y fáciles.

El problema que quiero resolver es poder DAR VUELTA UN CAMPO ALFANUMERICO.

Les doy un ejemplo: si introduzco por ejemplo la frase "hoy llueve" quisiera tener en otro campo lo siguiente: "eveull yoh".

Espero haber sido claro con el ejemplo.
He hecho todas las pruebas que he podido leyendo y copiando alternativas, sacando espacios de adelante, de atrás, copiando la frase ingresada a otra variable, pero no le he encontrado la vuelta para poder reversar una frase ingresada en otra variable.

Yo use en un curso que hice hace poco el lenguaje PSEINT que es para aprendices y es en español, y era facil resolver este problema como quizás lo sea en otros lenguajes, pero en COBOL al menos yo no lo he podido.

En ese curso tuvimos un problema que era resolver si un numero es "capicúa", es decir que si lo miras de izquierda a derecha es el mismo numero que si lo miras de derecha a izquierda.
Aquí en el Rio de la Plata se le dice "capicúa".
Como ejemplo les doy el número 12121.

Aguardo si alguien con mucha mas experiencia cobolera y les recuerdo que debería ser una solución ANSI 74 u 85 por el compilador que tengo.

No quise escribirles hasta no probar todo lo que he podido leer, ver y sobre todo cobolear.

Un abrazo a todos y que tengamos una muy buena semana.
Gracias.
CHITOBLA is offline   Responder Con Cita
  #2
Antiguo 23 de octubre de 2022, 06:20
dariodr
Forero
Última Actividad 20.09.2026 10:04
Posts Posts: 57
Likes enviados Enviados: 17
Likes recibidos Recibidos: 11

Hola, visita esta pagina creo que te puede servir.
Saludos.

https://iamamainframer.blogspot.com/...l-without.html
dariodr is offline   Responder Con Cita
  #3
Antiguo 23 de octubre de 2022, 13:57
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

@CHITOBLA, para el tema del capicúa, prueba con éste código

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. CAPICUA.
  3.        ENVIRONMENT DIVISION.
  4.        DATA DIVISION.
  5.        WORKING-STORAGE SECTION.
  6.        01  TECLA                        PIC X.
  7.        01  I                            PIC 99 COMP-5.
  8.        01  J                            PIC 99 COMP-5.
  9.        01  K                            PIC 99 COMP-5.
  10.        01  L                            PIC 99 COMP-5.
  11.        01  NUM                          PIC 9(10) USAGE IS DISPLAY.
  12.        01  EDI  REDEFINES NUM.
  13.            03  E                        PIC X OCCURS 10.
  14.        01  WTEX.
  15.            03  FILLER                   PIC X(10)
  16.                        VALUE "El numero ".
  17.            03  EDITADO                  PIC Z(10).
  18.            03  FILLER                   PIC XX VALUE ", ".
  19.            03  SINO                     PIC XX VALUE SPACES.
  20.            03  FILLER                   PIC X(9) VALUE " Capicua.".
  21.        PROCEDURE DIVISION.
  22.        INICIO.
  23.            INITIALIZE TECLA I J K L NUM.
  24.        ACEPTAR.
  25.            DISPLAY "Introduzca número (Cero para terminar): ".
  26.            ACCEPT NUM CONTROL "TAB, NO BEEP".
  27.            IF NUM = 0
  28.               STOP RUN
  29.            END-IF.
  30.  
  31.            IF NUM < 9
  32.               DISPLAY "El número tiene que ser mayor de 9"
  33.               GO ACEPTAR
  34.            END-IF.
  35.  
  36.            MOVE NUM TO EDITADO.
  37.      *
  38.        COMPROBAR.
  39.      *  Vamos a comprobar la longitud del número.
  40.            PERFORM VARYING I FROM 1 BY 1
  41.                    UNTIL I > 10 OR E(I) NOT = "0"
  42.                          CONTINUE
  43.            END-PERFORM.
  44.      *  Sacamos el centro del número.
  45.            COMPUTE J = (10 - I) / 2 + I.
  46.      *
  47.            MOVE 10 TO L.
  48.      *  Comprobamos, se prdría hacer con 2 perform anidados
  49.      *  pero para no liar ...
  50.            PERFORM VARYING K FROM I BY 1
  51.                    UNTIL I > J OR L < J
  52.                          IF E (K) NOT = E (L)
  53.                             MOVE "NO" TO SINO
  54.                             DISPLAY WTEX
  55.                             STOP RUN
  56.                          ELSE
  57.                             SUBTRACT 1 FROM L
  58.                          END-IF
  59.            END-PERFORM.
  60.      *  Si llegamos aquí, es capicúa
  61.            MOVE "SÍ" TO SINO.
  62.            DISPLAY WTEX.
  63.            DISPLAY " ".
  64.            DISPLAY "... Pulse una tecla para continuar ..."
  65.            ACCEPT TECLA.
  66.            GO INICIO.

No lo puedo probar, porque no tengo ningún compilador que funcione en MS-DOS en una máquina de 64 bits, pero al compilarlo, no da errores, que ya es algo. Está lo más "estandarizado" posible, (por eso no hay ningún LINE o POSITION en los DISPLAY), para ANSI-74, seguro que no funciona, porque esa versión no contemplaba los END-xxxxx.

Un salu2.-
Josber is offline   Responder Con Cita
  #4
Antiguo 23 de octubre de 2022, 20:42
CHITOBLA
Forero
Última Actividad 27.12.2022 23:37
Posts Posts: 58
Likes enviados Enviados: 72
Likes recibidos Recibidos: 17

Josber buenas trdes.
Te agradezco infinitamente las 2 cosas que me has mandado.

La pagina es exactamente lo que buscaba aunque todavia no lo probe porque quise contestarte lo antes posible ya que has tomado un tiempo para resolver mi problema.

He copiado lo que me mandaste del tema "CAPICUA" y ajustado algunas cosas que mi compilador no acepta.

A pesar de no marcarme ningún error, NO QUIERE COMPILAR y no dice porque, sale este mensaje que parece no tener sentido (para mi):
"PRUEBA 2.cbl": line 1 Invalid argument

Toque otro botón en la ventana que abre el compilador y me salió este mensaje::
Código:
cobc.exe -x -o bin\PRUEBA 2.exe -std=cobol85 -Wall -debug "PRUEBA 2.cbl"
que no entiendo bien que quiere decir, fui a buscar al directorio que dice pero solo encontré el programa

Desde ya te agradezco muchísimo el tiempo que te has tomado para escribir el programa y te mantendré informado como me va con los cambios.

Un afectuoso abrazo.
G R A C I A S.
CHITOBLA is offline   Responder Con Cita
  #5
Antiguo 23 de octubre de 2022, 21:04
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

@CHITOBLA, ¿Qué compilador estás usando?, a ver si lo puedo descargar y me funciona en 64bits
Josber is offline   Responder Con Cita
  #6
Antiguo 24 de octubre de 2022, 02:01
CHITOBLA
Forero
Última Actividad 27.12.2022 23:37
Posts Posts: 58
Likes enviados Enviados: 72
Likes recibidos Recibidos: 17

Josber estoy usando el OPEN COBOL IDE 4.7.6 que es la ultima versión para Windows.
Te cuento que mi netbook es de 64 bits también.
Por mas que he intentado muchas variantes no lo he podido compilar.

Te quiero contar que el link que me diste para dar vuelta las palabras funciona MARAVILLOSO y lo he usado para el tema del CAPICUA.
Lo que he hecho es que si en lugar de letras pongo números como
"12321" y hago la comparación entre el original y el dado vuelta, hago un display "ES CAPICUA.

Aqui te copio el programa y depende el numero que pongas debes corregir el tamaño de la variable porque sino no son comparables.

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. REVERS.
  3.        DATA DIVISION.
  4.  
  5.        WORKING-STORAGE SECTION.
  6.            01 WS-A PIC X(7) VALUE '1234333'.
  7.            01 WS-OUT PIC X(7).[/SIZE]
  8.            01 WS-I   PIC   9(3) VALUE 0.
  9.            01 WS-J   PIC   9(2) VALUE 1.
  10.            01 WS-LEN PIC 9(3) VALUE 0.
  11.  
  12.        PROCEDURE DIVISION.
  13.            MOVE FUNCTION LENGTH(WS-A) TO WS-LEN.
  14.            PERFORM VARYING WS-I FROM WS-LEN BY -1 UNTIL WS-I = 0
  15.              MOVE WS-A(WS-I:1) TO WS-OUT(WS-J:1)
  16.              ADD 1 TO WS-J
  17.            END-PERFORM.
  18.            DISPLAY " ".  
  19.            DISPLAY "      ORIGINAL:  " WS-A.
  20.            DISPLAY "      DADO VUELTA:  " WS-OUT.
  21.            DISPLAY " ".
  22.            IF WS-A = WS-OUT
  23.                DISPLAY " ES CAPICUA !!!!!"
  24.            ELSE
  25.                DISPLAY " !!!!! NO ES CAPICUA !!!!!"
  26.             STOP RUN.

Pero si pongo por ejemplo "1234333" y hago la comparación entre el original y el dado vuelta pongo un display " NO ES CAPICUA".

Esto es lo que yo quería y tu me lo has conseguido.
GRACIAS GRACIAS GRACIAS.

Cuéntame porque no compila tu programa que obviamente es totalmente distinto ya que para mi es un misterio.

Te mando un abrazo y muchísimas gracias por tu tiempo en mi problema que al final con un poco de maña y astucia (esto es lo que sobra por estos lados), he resuelto las 2 cosas que quería y aprendido un poco mas de cobol.

Comentario de Moderador

Usa los botones de resalto de sintaxis
CHITOBLA is offline   Responder Con Cita
  #7
Antiguo 24 de octubre de 2022, 08:21
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@CHITOBLA, Ahí tienes una posibilidad que funciona con Cobol IDE

Código COBOL:
  1. ******************************************************************
  2.      * Author: jcantero
  3.      * Date: 24/10/2022
  4.      * Purpose: Dar vuelta cadena para ForoCobol
  5.      * Tectonics: cobc
  6.      ******************************************************************
  7.        IDENTIFICATION DIVISION.
  8.        PROGRAM-ID. YOUR-PROGRAM-NAME.
  9.        DATA DIVISION.
  10.        FILE SECTION.
  11.        WORKING-STORAGE SECTION.
  12.        01 cadena pic x(80).
  13.        01 cadenax pic x(80).
  14.        01 i pic 999.
  15.        01 j pic 999.
  16.        
  17.        PROCEDURE DIVISION.
  18.        
  19.        MAIN-PROCEDURE.
  20.            
  21.             initialize cadena cadenax.
  22.             display "Introducir cadena:"
  23.             accept cadena
  24.            
  25.             move 0 to j.
  26.             perform varying i from 80 by -1 until i = 0
  27.             if cadena(i:) not = ' ' then
  28.                add 1 to j
  29.                move cadena(i:1) to cadenax(j:1)
  30.             end-if
  31.             end-perform.
  32.                
  33.             display "Cadena resultado:".          
  34.             display cadenax.
  35.            
  36.             STOP RUN.
  37.            
  38.        END PROGRAM YOUR-PROGRAM-NAME.
  39.  
JCantero is offline   Responder Con Cita
  #8
Antiguo 24 de octubre de 2022, 10:28
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@CHITOBLA,

Código COBOL:
  1.        working-storage section.
  2.        
  3.        01  frase      pic x(100).
  4.        01  resultado  pic x(100).
  5.        01  lim        pic 9(4) comp-5.
  6.        01  idx        pic 9(4) comp-5.
  7.        
  8.        procedure division.
  9.            
  10.            move "hola amigos" to frase
  11.            
  12.            perform varying lim from length of frase by -1
  13.                until frase(lim:1) not = spaces or lim = 1
  14.            end-perform
  15.            
  16.            perform varying idx from 0 by 1 until idx > lim / 2  
  17.                move frase(lim - idx + 1:1) to resultado(idx:1)
  18.                move frase(idx:1)           to resultado(lim - idx + 1:1)
  19.            end-perform
  20.            
  21.            if  function rem(lim 2) = 1
  22.                move frase(lim / 2 + 1:1) to resultado(lim / 2 + 1:1)    
  23.            end-if
  24.            
  25.            display resultado



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #9
Antiguo 24 de octubre de 2022, 10:34
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@JCantero, me gusta lo de

Código COBOL:
  1. if cadena(i:) not = ' '



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #10
Antiguo 24 de octubre de 2022, 10:39
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@Kuk, lo utilizo muchísimo. Te ahorra mucha lógica en algoritmos que tratan "string"

En RM/Cobol eso de from length of frase no lo puedo utilizar.
JCantero is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:19.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.