Gracias Rui Pinto (Rapinto)
COBOL Foro
Foro dedicado a COBOL, a la Programación y a la Informática.
  COBOL Foro > IDE-s y compiladores COBOL > MicroFocus COBOL > Visual Cobol
Visual Cobol El último IDE de MicroFocus basado en Eclipse y Plugin para Visual Studio.
Comunicados
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Información] ThruEvents pone el puntero por defecto Kuk PowerCOBOL (ActiveX, v4 - v11) 7 19 de mayo de 2017 12:57
Respuesta
 
Herramientas

  #1
Antiguo 3 de noviembre de 2021, 11:56
IDENTIFICATION DIVISION
DestinedBroken
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de DestinedBroken
DATA DIVISION
octubre 2021
16.02.2022 10:57
PROCEDURE DIVISION
Posts: 28
Enviado: 16
Recibido: 4
Soluciones: 0
Reputación: 0
DestinedBroken is an unknown quantity at this point
Predeterminado No se muestra lo que pone el código.

Hola gente,

Tengo el siguiente código con el que uno se da cuenta que si el usuario introduce por consola "S" o "s" el programa debe devolver una frase por consola. Sin embargo, a mí siempre me termina el programa, meta lo que meta (S, n, números, etc).

¿Qué es lo que está fallando?

Código COBOL:
  1.  IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. CAPITULO11.
  3.      *GO TO salta a donde se le manda, y continua hasta el final
  4.      *PERFORM luego de hacer lo que sea, vuelve a donde estaba
  5.        DATA DIVISION.
  6.  
  7.        WORKING-STORAGE SECTION.
  8.        01 RES pic x.
  9.        PROCEDURE DIVISION.
  10.  
  11.        PREGUNTA.
  12.  
  13.            PERFORM CONTINUACION
  14.            .
  15.  
  16.            IF RES = "N" OR RES = "n"
  17.                GO TO FINALIZA-PROGRAMA
  18.            IF RES = "S" OR RES = "s"
  19.                perform PROGRAMA
  20.            ELSE
  21.                DISPLAY " Introduce una 'N' o 'S'"
  22.            .
  23.  
  24.        FINALIZA-PROGRAMA.
  25.            STOP RUN
  26.            .
  27.  
  28.        CONTINUACION.
  29.            DISPLAY "Ejecutar el programa (S/N)?"
  30.            .
  31.            ACCEPT res
  32.            .
  33.        PROGRAMA.
  34.            DISPLAY "Se ejecuta el programa"
  35.            .
  36.        END PROGRAM CAPITULO11.

He intentado poner todo en mayúsculas, por tonterías que uno prueba vaya, y ni aún así. Igualmente, cambié el perform de PROGRAMA dentro de las cláusulas if-else por un go to pero nada de nada.
DestinedBroken no ha iniciado sesión   Responder Con Cita
Mejores respuestas Soluciones: 2
  #2
Antiguo 3 de noviembre de 2021, 13:08
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
37 años
26.06.2022 11:57
PROCEDURE DIVISION
Posts: 1.998
Enviado: 701
Recibido: 852
Soluciones: 100
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado
1 usuarios han marcado este post como "Solución"

@DestinedBroken, tienes que usar los END-IF etc. (terminadores explícitos) y NO USAR los puntos.

Es la "enfermedad" de Cobol que se solucionó en el año 74.

A ti lo que te pasa es que el segundo IF está dentro del primero. Así que si le dices "N" se va al FINALIZA-PROGRAMA, y si le das a cualquier otra cosa, simplemente no entra en inguno de los IF y pasa al FINALIZA-PROGRAMA.

---------- Post añadido el 3 de noviembre de 2021 a las 14:09 ----------

Usa Ctrl+SPACE de Eclipse para autocompletado de código, te pondrá los terminadores automáticamente.

---------- Post añadido el 3 de noviembre de 2021 a las 14:10 ----------

Y no uses los GO TO. Solo usa PERFORM.



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 no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
DestinedBroken ( 3 de noviembre de 2021)
  #3
Antiguo 3 de noviembre de 2021, 15:26
IDENTIFICATION DIVISION
DestinedBroken
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de DestinedBroken
DATA DIVISION
octubre 2021
16.02.2022 10:57
PROCEDURE DIVISION
Posts: 28
Enviado: 16
Recibido: 4
Soluciones: 0
Reputación: 0
DestinedBroken is an unknown quantity at this point
Predeterminado

Citación del post de Kuk Ver Mensaje
tienes que usar los END-IF
Hostias es verdad, se me habían olvidado. Me estoy dando cuenta de las grandes diferencias de autocompletado que ofrecen los IDE de OpenCobol y VCobol entre sí y los fallos que me estoy comiendo por venir de uno y llegar a otro

Citación del post de Kuk Ver Mensaje
y NO USAR los puntos.
¿Los puntos no son obligatorios, como los punto y coma en el resto de lenguajes? ¿o sólo te refieres a no ponernos dentro de las cláusulas if-else?
Esto es algo que no termino nunca de entender del todo. Los puntos hay que colocarnos al final de una línea de código, pero cuando llega la hora de hacer unos if-else como los ponga empiezan a salirme fallos. Solamente tras la última instrucción no me sale error (en el código de arriba, sería tras la sentencia final dentro del ELSE).


Citación del post de Kuk Ver Mensaje
Usa Ctrl+SPACE de Eclipse para autocompletado de código, te pondrá los terminadores automáticamente.
yeh



Citación del post de Kuk Ver Mensaje
Y no uses los GO TO. Solo usa PERFORM.
Siempre leo lo mismo pero no termino de verle el por qué más allá de que al empezar el salto sigue hacia abajo sin volver desde donde se le llamó (hablo del GO TO obviamente).
DestinedBroken no ha iniciado sesión   Responder Con Cita
  #4
Antiguo 3 de noviembre de 2021, 18:32
IDENTIFICATION DIVISION
Josber
 Super Moderador
Activista del Foro: Activista del Foro - Razón: Por aportar manuales y enriquecer   Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por muchos agradecimientos 
ENVIRONMENT DIVISION
Avatar de Josber
DATA DIVISION
febrero 2015
Alicante
27.06.2022 09:55
PROCEDURE DIVISION
Posts: 636
Enviado: 297
Recibido: 334
Soluciones: 45
Reputación: 35
Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road
Predeterminado

No te preocupes, yo, cuando pasé del COBOL-74 al COBOL-85, todo eran errores.

Los puntos, y eso no ha cambiado, son obligatorios, en COBOL-74, para terminar sentencias condicionales (IF), sentencias de flujo (PERFOR, GO TO ...), sentencias imperativas, (AT END, INVALID KEY ...), en el COBOL-85, con la introducción de las sentencias END-xxxxx, la obligatoriedad del punto, (.), decayó bastante, aunque si se usan, ofrecen una comprensión más clara del código

un salu2.-
Josber no ha iniciado sesión   Responder Con Cita
  #5
Antiguo 3 de noviembre de 2021, 18:54
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
37 años
26.06.2022 11:57
PROCEDURE DIVISION
Posts: 1.998
Enviado: 701
Recibido: 852
Soluciones: 100
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Citación del post de DestinedBroken Ver Mensaje
¿Los puntos no son obligatorios,
en PROCEDURE DIVISION el único punto obligatorio es el del final del párrafo (termina el párrafo). Ponlo en una línea separada al final. No pongan ningún otro punto en esta parte del programa.

Citación del post de DestinedBroken Ver Mensaje
no termino de verle el por qué más allá
La vuelta asegura la jerarquía anti-espagueti. Con los GO TO puedes ir a cualquier lado, y eso es más espagueti que los espagueti.

---------- Post añadido el 3 de noviembre de 2021 a las 19:55 ----------

Citación del post de Josber Ver Mensaje
ofrecen una comprensión más clara del código
En esto no estoy de acuerdo contigo compañero Para mi que al revés.



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 no ha iniciado sesión   Responder Con Cita
  #6
Antiguo 3 de noviembre de 2021, 20:10
IDENTIFICATION DIVISION
DestinedBroken
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de DestinedBroken
DATA DIVISION
octubre 2021
16.02.2022 10:57
PROCEDURE DIVISION
Posts: 28
Enviado: 16
Recibido: 4
Soluciones: 0
Reputación: 0
DestinedBroken is an unknown quantity at this point
Predeterminado

Citación del post de Kuk Ver Mensaje
en PROCEDURE DIVISION el único punto obligatorio es el del final del párrafo (termina el párrafo). Ponlo en una línea separada al final. No pongan ningún otro punto en esta parte del programa.
¿Un solo punto? A mí me da fallos por todos lados...




Citación del post de Kuk Ver Mensaje
y eso es más espagueti que los espagueti
entendido, gracias!
DestinedBroken no ha iniciado sesión   Responder Con Cita
  #7
Antiguo 3 de noviembre de 2021, 22:06
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
37 años
26.06.2022 11:57
PROCEDURE DIVISION
Posts: 1.998
Enviado: 701
Recibido: 852
Soluciones: 100
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

@DestinedBroken, lo primero es mejor que no pegues imágenes, sino código (texto) envuelto en el bloque de resalto de sintaxis (los botoncitos con nombres de lenguajes) así te podemos copiarlo y corregirlo.

Se necesita un punto despues de PROCEDURE DIVISION. Y luego al final de cada párrafo. O sea dentro de un párrafo un solo punto al final del mismo



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 no ha iniciado sesión   Responder Con Cita
  #8
Antiguo 3 de noviembre de 2021, 22:31
IDENTIFICATION DIVISION
DestinedBroken
 Acabo de llegar...
ENVIRONMENT DIVISION
Avatar de DestinedBroken
DATA DIVISION
octubre 2021
16.02.2022 10:57
PROCEDURE DIVISION
Posts: 28
Enviado: 16
Recibido: 4
Soluciones: 0
Reputación: 0
DestinedBroken is an unknown quantity at this point
Predeterminado

Perdona @Kuk, no pensé en poner el código.

Cuando dices párrafos, ¿estamos hablando de las rutinas? Si es así debería funcionarme como te pongo a continuación (pero sigue dando errores). Sé que esto es sintaxis básicas, pero vengo de que me den caña poniendo puntos detrás de cada línea

Mira, el código es el del otro hilo, básicamente lo he cogido para esto de los puntos (por si te suena):

Código COBOL:
  1. IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. CAPITULO11.
  3.      *GO TO salta a donde se le manda, y continua hasta el final
  4.      *no recomendado -> codigo spaghetti!
  5.      *PERFORM luego de hacer lo que sea, vuelve a donde estaba
  6.      *usarlo en vez de GO TO!
  7.        DATA DIVISION.
  8.  
  9.        WORKING-STORAGE SECTION.
  10.        01 RES pic x.
  11.        PROCEDURE DIVISION.
  12.  
  13.        PREGUNTA.
  14.  
  15.            PERFORM CONTINUACION.
  16.            
  17.  
  18.            IF RES = "N" OR RES = "n"
  19.                perform FINALIZA-PROGRAMA.
  20.            end-if
  21.            IF RES = "S" OR RES = "s"
  22.                perform PROGRAMA.
  23.            ELSE
  24.                DISPLAY " Introduce una 'N' o 'S'"
  25.            
  26.            
  27.        FINALIZA-PROGRAMA.
  28.            STOP RUN
  29.            
  30.  
  31.        CONTINUACION.
  32.            DISPLAY "Ejecutar el programa (S/N)?"
  33.            
  34.            ACCEPT res
  35.            
  36.        PROGRAMA.
  37.            DISPLAY "Se ejecuta el programa"
  38.            
  39.            
  40.            
  41.        END PROGRAM CAPITULO11.
DestinedBroken no ha iniciado sesión   Responder Con Cita
  #9
Antiguo 4 de noviembre de 2021, 08:32
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
37 años
26.06.2022 11:57
PROCEDURE DIVISION
Posts: 1.998
Enviado: 701
Recibido: 852
Soluciones: 100
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado
1 usuarios han marcado este post como "Solución"

@DestinedBroken, ya no hay errores. Fíjate en los puntos:

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. CAPITULO11.
  3.      *GO TO salta a donde se le manda, y continua hasta el final
  4.      *no recomendado -> codigo spaghetti!
  5.      *PERFORM luego de hacer lo que sea, vuelve a donde estaba
  6.      *usarlo en vez de GO TO!
  7.        DATA DIVISION.
  8.  
  9.        WORKING-STORAGE SECTION.
  10.        01 RES pic x.
  11.        
  12.            
  13.        PROCEDURE DIVISION.
  14.  
  15.        PREGUNTA.
  16.  
  17.            PERFORM CONTINUACION
  18.            
  19.  
  20.            IF RES = "N" OR RES = "n"
  21.                PERFORM FINALIZA-PROGRAMA
  22.            END-IF
  23.            
  24.            IF RES = "S" OR RES = "s"
  25.                PERFORM PROGRAMA
  26.                
  27.            ELSE
  28.                DISPLAY " Introduce una 'N' o 'S'"
  29.            END-IF
  30.            .
  31.            
  32.        FINALIZA-PROGRAMA.
  33.            STOP RUN
  34.            .
  35.            
  36.  
  37.        CONTINUACION.
  38.            DISPLAY "Ejecutar el programa (S/N)?"
  39.            
  40.            ACCEPT res
  41.            .
  42.            
  43.        PROGRAMA.
  44.            DISPLAY "Se ejecuta el programa"
  45.            .
  46.            
  47.        END PROGRAM CAPITULO11.



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 no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
DestinedBroken ( 4 de noviembre de 2021)
Respuesta


Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
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



La franja horaria es GMT +1. Ahora son las 18:58.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2022, Jelsoft Enterprises Ltd.