Рассмотрев структуру программы на предыдущих «уроках» ( http://habrahabr.ru/blogs/atnikvariat/115813/ ), простые арифметические функции ( http://habrahabr.ru/blogs/atnikvariat/115821/ ) и описание переменных ( http://habrahabr.ru/blogs/atnikvariat/115849/ ) мы пойдём всё дальше и дальше! На этот раз мы познакомимся с прелестями условий (а также получим в конце дополнительный подарок за знания).
Итак, я думаю, все, кто хоть немного интересовался программированием, помнят, что, наверное, почти во всех языках есть такой оператор, как IF (Если), и, конечно же, он есть и в COBOL. Как это записывается? ЕСЛИ (необязательно, ЕЩЕ) КОНЕЦ-ЕСЛИ.
ВНИМАНИЕ.
Это важно: Каждое выражение в КОБОЛе заканчивается знаком «.
» (точка), вы это уже знаете, НО IF считается одним выражением, поэтому точка здесь ставится ТОЛЬКО после END-IF. Будь осторожен! Возможные условия: 1. Проверка типа данных в переменной: числовой (IS NUMERIC) — проверяет, содержит ли переменная число.
Алфавитный (IS ALPHABETIC) – проверяет, что переменная содержит ТОЛЬКО буквы и пробелы.
Алфавитный (заглавные буквы) и Алфавитный (строчные буквы) (IS ALPHABETIC-UPPER и ALPHABETIC-LOWER) — проверяет соответственно, что он содержит только заглавные буквы или только заглавные буквы и пробелы.
Он использовался и используется для проверки правильности введенных данных и соответствующей обработки обнаруженных ошибок.
Например, ЕСЛИ WS-A ЦИФРОВОЙ ПЕРЕМЕЩЕНИЕ WS-A В WS-B ЕЩЕ ДИСПЛЕЙ «Ошибка!» КОНЕЦ-ЕСЛИ.
2. Сравнение: Оператор (полная форма), Краткая форма, Значение БОЛЬШЕ, ЧЕМ ЕСТЬ > Больше, чем НЕ БОЛЬШЕ, ЧЕМ НЕТ > Не более МЕНЬШЕ, ЧЕМ ЕСТЬ < Less than НЕ МЕНЬШЕ, ЧЕМ НЕТ < Not less than РАВНО ЕСТЬ = Равно IS NOT EQUAL TO IS NOT = Не равно БОЛЬШЕ ИЛИ РАВНО ЕСТЬ > = Больше или равно МЕНЬШЕ ИЛИ РАВНО ЕСТЬ <= Less than or equal to И если со сравнением цифр все понятно, то со сравнением буквенных переменных следует уточнить.
COBOL подгоняет сравниваемые значения к одному и тому же размеру, добавляя пробелы в правый конец.
Затем посимвольное сравнение начинается с крайнего левого символа в соответствии с ASCII, EBCDIC (на мейнфреймах) или другой кодировкой, заданной компилятором.
ЕСЛИ ВВОД ТЕКСТА > «Оранжевый» ДИСПЛЕЙ «Оранжевый» ДИСПЛЕЙ ВВОД ТЕКСТА ЕЩЕ ДИСПЛЕЙ ВВОД ТЕКСТА ДИСПЛЕЙ «Оранжевый» КОНЕЦ-ЕСЛИ.
Если вы введете Apple, оно будет «меньше», чем Orange, но яблоко будет «крупнее».
3. Проверка знака числа: IS POSITIVE – положительное число; IS NEGATIVE – отрицательное число; IS ZERO – число равно нулю; НЕ ПОЗИТИВНО – число НЕ положительное (0 или отрицательное); НЕ ОТРИЦАТЕЛЬНО – число НЕ отрицательное (0 или положительное); НЕ НУЛЬ – число НЕ равно нулю.
Например: ПЕРЕМЕСТИТЬ 100 В WS-РЕЗУЛЬТАТ.
ОТОБРАЖЕНИЕ «WS-РЕЗУЛЬТАТ ЕСТЬ», WS-РЕЗУЛЬТАТ.
ЕСЛИ WS-РЕЗУЛЬТАТ НЕ НУЛЬ ОТОБРАЖЕНИЕ «WS-РЕЗУЛЬТАТ НЕ НУЛЬ!» КОНЕЦ-ЕСЛИ.
ЕСЛИ WS-РЕЗУЛЬТАТ НУЛЬ ОТОБРАЖЕНИЕ «WS-РЕЗУЛЬТАТ НОЛЬ!» КОНЕЦ-ЕСЛИ.
ЕСЛИ WS-РЕЗУЛЬТАТ НЕ ПОЛОЖИТЕЛЬНЫЙ ДИСПЛЕЙ «WS-РЕЗУЛЬТАТ НЕ ПОЛОЖИТЕЛЬНЫЙ!» КОНЕЦ-ЕСЛИ.
ЕСЛИ WS-РЕЗУЛЬТАТ НЕ ОТРИЦАТЕЛЬНЫЙ ДИСПЛЕЙ «WS-РЕЗУЛЬТАТ НЕ ОТРИЦАТЕЛЬНЫЙ!» КОНЕЦ-ЕСЛИ.
ЕСЛИ WS-РЕЗУЛЬТАТ ПОЛОЖИТЕЛЬНЫЙ ДИСПЛЕЙ «WS-РЕЗУЛЬТАТ ПОЛОЖИТЕЛЬНЫЙ!» КОНЕЦ-ЕСЛИ.
ЕСЛИ WS-РЕЗУЛЬТАТ ОТРИЦАТЕЛЬНЫЙ ОТОБРАЖЕНИЕ «WS-РЕЗУЛЬТАТ НЕ НУЛЬ!» КОНЕЦ-ЕСЛИ.
Вывод в этом случае будет выглядеть так: WS-РЕЗУЛЬТАТ 000100 WS-РЕЗУЛЬТАТ НЕ НУЛЬ! WS-РЕЗУЛЬТАТ НЕ ОТРИЦАТЕЛЬНЫЙ! WS-РЕЗУЛЬТАТ ПОЛОЖИТЕЛЬНЫЙ! 4. Использование переменной с условиями: В одном из предыдущих уроков мы упоминали переменную level 88. Теперь пришло время рассмотреть ее поближе.
Переменная этого типа не имеет описания; он инициализируется сразу после объявления и может быть только подуровнем другой переменной.
Он используется как своего рода аналог CASE из других языков программирования и хранит значение, с которым будет проверяться IF. Например: Описываем и инициализируем в DATA DIVISION. 01 НОМЕР-ПРОВЕРЬТЕ РИСУНОК S9. 88 NC-ОДИН ЗНАЧЕНИЕ 1. 88 НЗ-НУЛЕВОЕ ЗНАЧЕНИЕ 0. 88 НЗ-МИНУС ЗНАЧЕНИЕ -1. Мы используем его в ПРОЦЕДУРНОМ ОТДЕЛЕНИИ.
ПРИНЯТЬ НОМЕР-ПРОВЕРИТЬ.
ЕСЛИ NC-ONE ДИСПЛЕЙ «НОМЕР-ПРОВЕРКА ОДИН» КОНЕЦ-ЕСЛИ.
ЕСЛИ NC-МИНУС ДИСПЛЕЙ «НОМЕР-ПРОВЕРКА МИНУС» КОНЕЦ-ЕСЛИ.
ЕСЛИ NC-НОЛЬ ДИСПЛЕЙ «НОМЕР-ПРОВЕРКА НУЛЯ» КОНЕЦ-ЕСЛИ.
Как это работает: NC-ONE, NC-MINUS и NC-ZERO — это переменные, присвоенные NUMBER-CHECK, когда мы используем IF NC-ONE, компилятор фактически «подставляет» ЕСЛИ НОМЕР-ПРОВЕРКА = 1. Помимо ЦЕННОСТИ, ЦЕННОСТИ ЧЕРЕЗ можно использовать, и в этом случае при 88 NC-ONE VALUES 1 THRU 10 значение, сохраненное в NUMBER-CHECK, будет проверено, если оно находится в диапазоне от 1 до 10. В дополнение к вышесказанному, IF поддерживает NOT, AND и OR, например, IF NOT WS-A = WS-B или IF ((WS-A = WS-B) AND (WS-A = WS-RESULT)) OR (WS-РЕЗУЛЬТАТ = WS-B).
Жду вопросов и предложений в комментариях.
До следующей встречи! Впереди будет еще много интересного) Воронцов «нерфур» Вячеслав.
2011. Теги: #COBOL #cobol #программирование #oldschool #COBOL
-
Несовершенное Эго
19 Oct, 24