Как напечатать звездный рисунок в COBOL? - PullRequest
0 голосов
/ 01 октября 2018

Я пытался напечатать шаблон звезды в коболе.Я построил следующий код.Но я думаю, что это можно оптимизировать.А также мне нужно принять несколько входов во время выполнения.Не может принимать входные данные во время выполнения.Кто-нибудь может направить меня?

 IDENTIFICATION DIVISION.
 PROGRAM-ID. HELLO.
 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01 WS-TABLE.
  05 WS-A OCCURS 10 TIMES INDEXED BY I.
     10 WS-B PIC X(1).
     10 WS-C PIC X(1) OCCURS 10 TIMES INDEXED BY J.
01 N PIC 9(1).
PROCEDURE DIVISION.
ACCEPT N.
PERFORM A-PARA VARYING I FROM 1 BY 1 UNTIL I>N.
PERFORM C-PARA VARYING I FROM 1 BY 1 UNTIL I>N.
STOP RUN.
A-PARA.
PERFORM B-PARA VARYING J FROM 1 BY 1 UNTIL J>I.
B-PARA.
MOVE '*' TO WS-C(I,J).
C-PARA.
DISPLAY WS-A(I).

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Sayantan Sur, Добро пожаловать в переполнение стека.Приятно знать, что вы решили свой вопрос и разместили их в качестве ответов.Вам не нужно публиковать 2 ответа, когда вы можете edit 1-й ответ для любых обновлений / улучшений / оптимизированных решений.Параметр edit находится чуть ниже вашего ответа, между share и flag.

Что касается вашего вопроса, у вас может быть только одна петля PERFORM для печати шаблона звездочек.Пожалуйста, посмотрите на следующий код.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.

DATA DIVISION. 
WORKING-STORAGE SECTION.
01 WS-OUT PIC X(80) VALUE SPACES.
01 WS-I PIC 9(2) VALUE 0. 
01 WS-N PIC 9(2) VALUE 5. 
01 WS-CENTER PIC 9(2) VALUE 1.  

PROCEDURE DIVISION.

PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-N
MOVE ALL '*' TO WS-OUT(WS-CENTER:WS-I)
DISPLAY WS-OUT
END-PERFORM. 

STOP RUN.

Примечание: В приведенном выше фрагменте кода я не включил шаги для ввода данных во время выполнения.Вместо этого я использовал предложение VALUE, чтобы назначить ввод для WS-N.

В качестве альтернативы вы также можете использовать следующий код.Спасибо Рику Смиту за ценные предложения.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.

DATA DIVISION. 
WORKING-STORAGE SECTION.
01 WS-OUT PIC X(10) VALUE ALL '*'.
01 WS-I PIC 9(2) VALUE 0. 
01 WS-N PIC 9(2) VALUE 5. 
01 WS-CENTER PIC 9(2) VALUE 1.  

PROCEDURE DIVISION.

PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-N
DISPLAY WS-OUT(WS-CENTER:WS-I)
END-PERFORM. 

STOP RUN.

Вывод: Оба кода дают следующий вывод.

*                                                                               
**                                                                              
***                                                                             
****                                                                            
*****

Вы можете попробовать запустить код здесь .

0 голосов
/ 02 октября 2018
   IDENTIFICATION DIVISION.
   PROGRAM-ID. HELLO.
   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
   05 WS-A OCCURS 10 TIMES INDEXED BY I.
   10 WS-B PIC X(1) OCCURS 10 TIMES INDEXED BY J.
   01 N PIC 9(2).
   PROCEDURE DIVISION.
   DISPLAY "ENTER NUMBER OF ROWS: "
   ACCEPT N.
   PERFORM A-PARA UNTIL N>0 AND N<11
   PERFORM B-PARA VARYING I FROM 1 BY 1 UNTIL I>N
           AFTER J FROM 1 BY 1 UNTIL J>I
   PERFORM C-PARA VARYING I FROM 1 BY 1 UNTIL I>N.
   STOP RUN.
   A-PARA.
   DISPLAY "ENTER VALUE WITHIN 1 AND 10"
   ACCEPT N.
   B-PARA.
   MOVE '*' TO WS-B(I,J).
   C-PARA.
   DISPLAY WS-A(I).

Здесь цикл был дополнительно оптимизирован, и даже количество абзацев было уменьшено.

...