2016-01-13 4 views
0

У меня есть строка как '# $ rahul', и мне нужно вычислить количество альфа-батов без использования контрольного глагола. Также не используется аргументом ord для значения ASCII. Мой инструктор сказал мне использовать пустой массив, но как он используется? Я пробовал, но он также учитывает символы.Подсчитайте количество алфавитных символов в данных

DATA DIVISION. 
    WORKING-STORAGE SECTION. 
    01 WS-TABLE. 
     05 WS-A OCCURS 3 TIMES INDEXED BY I. 
     10 WS-B PIC A(2). 
     10 WS-C OCCURS 2 TIMES INDEXED BY J. 
      15 WS-D PIC X(3). 

PROCEDURE DIVISION. 
    MOVE '@#@#DEF34GHIJKL56MNOPQR' TO WS-TABLE. 
    PERFORM A-PARA VARYING I FROM 1 BY 1 UNTIL I >3 
    STOP RUN. 

    A-PARA. 
    PERFORM C-PARA VARYING J FROM 1 BY 1 UNTIL J>2. 

    C-PARA. 
    if ws-table(1) equals to spaces 
    continue 
    else 
    add +1 to ws-count 
    end-if 
    DISPLAY WS-C(I,J). 
+0

Просьба показать код, который вы пробовали, и даст нам лучшее представление о том, чего вы упускаете. –

+0

Я добавил свой код, но мой тренер хочет использовать еще один пустой массив, который не был понят мной. –

ответ

3

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

Что вам нужно сделать, это найти раздел документации COBOL на класса состояния и тестов класса.

Я подозреваю, что этот бит кода:

if ws-table(1) equals to spaces 
continue 
else 
add +1 to ws-count 
end-if 

был добавлен в спешке. С вашими данными ws-table(1) никогда не будет места, а ws-count не определен.

Назад к определению. Вы определяете структуру с тремя частями (WS-A OCCURS 3), каждая из которых состоит из двухбайтового алфавитного поля, за которым следуют два трехбайтовых алфавитно-цифровых поля. Это определение не имеет прямого отношения к вашей задаче.

01 the-data. 
     05 FILLER OCCURS 24 TIMES 
      INDEXED BY data-byte-index. 
      10 the-data-byte    PIC X. 

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

Примечание. Вы также можете использовать ссылку-модификацию и проиграть на читаемость в целях уменьшения набора текста.

Формат вашей программы

Если это не диктуется вам (и хотя я никогда не видел его раньше в течение 30 лет, я видел его пару раз в последнее время) нет абсолютно никакого смысла в «отступы», например, в разделе WORKKING-STORAGE или даже в параграфах/SECTION. У них уже есть все отступы, в которых они нуждаются, и в дальнейшем отступы ничего не добавляют, что требует больше набрания текста, а также заставляет опытных программистов COBOL задаваться вопросом, почему вы это делаете.

Начиная со Стандарта 1985 года для COBOL, использование полных остановок/периодов в ПРОЦЕДУРНОМ РАЗДЕЛЕ значительно ослабляется. Поскольку полная остановка/период в неправильном месте может вызвать ошибки, это было хорошо. Будет также хорошо, если вы в полной мере воспользуетесь им. Запятые слишком сильно похожи на полные остановки/периоды, которые могут быть использованы в коде. Они никогда не должны быть там, поэтому им ничего не выгодно. Также следует избегать шумовых слов, таких как THEN. В отличие от запятых, интервал может быть благом для формата программы.

Вот ваш код выше, переформатирован:

 MOVE '@#@#DEF34GHIJKL56MNOPQR' 
            TO WS-TABLE 
     PERFORM      A-PARA 
     VARYING     I 
      FROM      1 
      BY      1 
      UNTIL     I > 3 
     STOP RUN 
     . 

    A-PARA. 
     PERFORM      C-PARA 
     VARYING     J 
      FROM      1 
      BY      1 
      UNTIL     J > 2 
     . 
    C-PARA. 

     if ws-table (1) equal to space 
      continue 
     else 
      add +1     to ws-count 
     end-if 

     DISPLAY 
       WS-C (I J) 
     . 

Используйте некоторые собственные имена, и это начинают выглядеть как реальная программа.

Обратите внимание, что не все люди согласны с тем, как программа должна быть отформатирована. Шутки в сторону.

+0

Да, Билл Вудджер, я обязательно позабочусь о ваших предложениях, и это действительно полезно для меня, я определяю ws-count, но забыл написать в разделе рабочего хранилища. На самом деле мой тренер сказал, что он будет решен путём пустого массива, но он не может доходить до моих знаний. Огромное спасибо вам огромное спасибо @ bill woodger. –

+0

@RahulMurade Я не уверен, что они подразумевали под «пустым массивом @» в этом контексте. –

+0

Да, я тоже не понимаю, что он на самом деле хочет. Он просто сказал, что использует пустой массив, т. Е. Использует пустую таблицу, но не мог встретить требование. Если у меня что-то есть или он скажет мне, я напишу ему ответ. –

Смежные вопросы