Это очень удар в темноте, так как я никогда не писал линию COBOL до сегодняшнего дня . Однако, после того, как немного googling и играя в ideone, я думаю, что я, по крайней мере захватил вкус того, что код будет выглядеть, если не фактическое решение:
IDENTIFICATION DIVISION.
PROGRAM-ID. IDEONE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STACK.
05 WS-TOP PIC 9 VALUE 0.
05 WS-ITEMS OCCURS 10 TIMES INDEXED BY I.
10 WS-M PIC 9 VALUE 0.
PROCEDURE DIVISION.
ADD 1 TO WS-TOP.
MOVE 9 TO WS-M(WS-TOP).
ADD 1 TO WS-TOP.
MOVE 8 to WS-M(WS-TOP).
DISPLAY "WS-STACK :" WS-STACK.
DISPLAY "WS-TOP :" WS-TOP.
DISPLAY "WS-ITEMS[WS-STACK.WS-TOP].M :" WS-M(WS-TOP).
SUBTRACT 1 FROM WS-TOP.
DISPLAY "WS-TOP :" WS-TOP.
DISPLAY "WS-ITEMS[WS-STACK.WS-TOP].M :" WS-M(WS-TOP).
STOP RUN.
Да, размер hardcoded to 10 (не знаю, как делать символические константы в COBOL), и WS-TOP
и WS-M
могут хранить только значения от 0 до 9.
Излишне говорить, что типы данных в COBOL и C очень разные. Я не создал новый тип стека; Я объявлял отдельные элементы данных с несколькими подпозициями, одна из которых представляет собой таблицу, которая может хранить 10 экземпляров чего-то, называемого WS-M
. Это фактически то же самое, как написание
int main(void)
{
int top = 10;
int m[10];
m[--top] = 9;
m[--top] = 8;
printf("top = %d\n", top);
printf("m[%d] = %d", top, m[top]);
top++;
printf("top = %d\n", top);
printf("m[%d] = %d", top, m[top]);
return 0;
}
в С, причем основное различие в том, что я написал код C таким образом, что стек растет «вниз» (который является более естественным). Насколько я мог сказать за десять минут, проведенных в этом учебнике COBOL, COBOL на самом деле не имеет эквивалента типа struct
; даже если элементы данных могут быть сгруппированы иерархически, вы не создаете новый struct
или тип записи как таковой. Если бы я хотел несколько стеков, мне пришлось бы объявлять несколько отдельных резервных хранилищ и индексных переменных.
думаю.
Мне нужно будет немного почитать.
1. На данный момент в день я предпочел бы работать на только о ничего кроме проблемы передо мной прямо сейчас, и я всегда был интересен, как другая половина живет. Кроме того, я работаю над платформой онлайн-банкинга, и я знаю, что половина наших бэкэндов написана в COBOL, так что это не помешает занять время, чтобы изучить его.
2. Я не могу ручаться за качество этого урока; это первый, который я нашел, который казался достаточно полным и легким для чтения.
Последняя строка в основном оценивает верхнюю часть стека, получает верхнее значение (st.top), а затем получает его из массива элементов, содержащего целые числа , –
Открыть Cobol. Мне жаль, я не спрашивал, как реализовать стек. Мне хотелось знать синтаксис. Как и как эта структура и этот оператор выглядят в Cobol, так что я могу сделать остальную часть стека себе. –
ОК. OpenCOBOL теперь GnuCOBOL. Если вы пойдете сюда и зададите вопрос в «Помощь при запуске», это будет гораздо лучший формат для вероятного итеративного исследования вашего вопроса. –