Й.Янсен Курс цифровой электроники. Том 4. Микрокомпьютеры (1987) (1092084), страница 58
Текст из файла (страница 58)
Следует отметить, что иногда по отношению к 1)ЗК-оператору проявляется некоторое непонимание. В ряде диалектов Бейсика можно записывать результат в определенную ячейку ЗУ, куда по ходу выполнения программы интерпретатор передает данные. Может оказаться, что, перед тем как будет совершен обратный переход, необходимые данные появятся в определенном регистре. Иногда оказывается невозможно совершить обратный переход с помощью оператора КЕТ, и этот переход подготавливается в подпрограмме с помощью оператора ДМР. Адрес обратного перехода находится в определенной ячейке ЗУ, откуда его можно извлечь известиымн способами. Руководство для пользователя по языку Бейсик, используемое для работы на микроЭВМ, должно содержать всю необходимую информацию. Следует отметить, что ()БК-оператор имеется как в обычном варианте Бейсика (4К), так и в его расширенной версии (8К).
Рис. 6.6. Структурная схема программы, связываюшей Бейсик с машинным языком. 6.9. Обработка строк символов В предыдущих разделах уже рассматривалось понятие строки символов, являющейся группой буквенно-цифровых символов, которые представляют собой какой-либо текст, число или код.
Символы, находящиеся в такой строке, обычно кодируются в коде АЗС!1 (табл. 8.1). Если требуется использовать какой-либо текст многократно, то ему присваивается переменная в форме буквы с последующим знаком доллара (3). Переменная, которая представляет данные в коде АЗСП, называется текстовой переменной. Как уже указывалось в предыдущих разделах, числовые переменные (цифры, выраженные в 352 Глава б Таблица б.1. Коды А5С11 А5С!1 1десетичи.] Зиек Звак А5С11 1десетичи.) !О А В С Е Р Ст Н 1 К М подача строки возврат пробел 1 3 е а Ы О Р Я К 5 Т Ч цс Х '1' 2 коде, отличном от АБС11) представляются только одной буквой или буквой и цифрой (от 0 до 9). Текстовые переменные можно обрабатывать с помощью операторов КЕАР, 1.ЕТ и РИХТ, при этом программа существенно упрощается, особенно в случае обработки административных данных.
Выше уже приводился пример с накладными, где при описании изделий такие параметры, как вес, единицы из- 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 !3 32 33 34 35 36 37 38 39 40 4! 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 Языки ярограяяирования высокого ировня — Бейсик мерений, тип упаковки, имя и адрес клиента, обрабатываются наиболее эффективно именно с помощью текстовых переменных. Максимальное число символов, из которых состоит текст, в общем случае равно 15. Если это число почему-либо нас не удовлетворяет, то следует сообщить об этом микроЭВМ с помощью оператора Р)М (от английского слова Рппепз(оп— размерность).
Этот оператор помещается в программе перед строкой символов и имеет вид: Р)М А$ (5) В$ (30). При такой записи для А$ будет зарезервировано 5 символов, а для В$ — 30 символов. Для иллюстрании обработки строк символов можно привести следующий пример: )н) ЕЮ 10 Р1М А $ (19), В $ (7), Х $ (1б), Х $ (20) 20 КЕАР А$, В$, Х$ ЗО РК1НТ А$, В$, Х$ 40 1НР()Т 2$ 50 РК15)Т 2$ 60 РАТА „УМНОЖЕНИЕ", „ДЕЛЕНИЕ" „ИЗВЛЕЧЕНИЕ КОРНЯ" 70 ЕНР КПЧ УМНОЖЕНИЕ ДЕЛЕНИЕ ИЗВЛЕЧЕНИЕ КОРНЯ й ВОЗВЕДЕНИЕ В СТЕПЕНЬ ВОЗВЕДЕНИЕ В СТЕПЕНЬ Эта программа начинается с задания размерности различных текстовых переменных.
Длина текста указывается в скобках после соответствующей переменной. Заметьте, что текстовые переменные, находящиеся в строке 10, разделены запятой. Аналогичное разделение наблюдается также и для данных в строке 20, где оператор КЕАР считывает соответствующие тексты из файла данных.
В строке ЗО происходит распечатка этих текстовых переменных по команде РК1ЫТ. В строке 40 программа выполняет команду 11)Р(1Т, после которой она останавливается и в нее с помощью клавиатуры вводится переменная к$ . В данном примере вводятся слова «возведение в степень» и нажимается клавиша КЕТ()КН. После этого программа продолжается и на следующей строке будут напечатаны слова «возведение в степень». По команде 1НРБТ программа останавливается и система посылает запрос (?), в ответ на который с клавиатуры вводится требуемый текст.
Переменная зб4 Глава б Е$ не должна превышать 20 символов, включая пробелы, так как в строке 10 этой переменной присвоена размерность, равная 20. Если ввести более длинный текст, то программа «об. режет» его после 20-го символа. Для обработки текстовых переменных существует ряд специальных функций 1.ЕИ, ЕЕГТб, ИОНТ3 и М1Р3, которые отсутствуют в стандартном варианте Бейсика. Оператор (.Ек) задает длину строки с символами, т. е.
число символов в тексте, включая пробелы. Подобная функция требуется для того, чтобы принтер мог напечатать текст определенной длины. С помощью функции 1.ЕХ задается длина текстовой строки, после распечатки строки длиной в 1ЕХ символов принтер переходит на следующую строку. Функции 1ЕЕТ3 и ИОНТ3 можно использовать для того, чтобы наложить ограничение на какое-либо слово или текст. Функция 1ЕГТ3, после которой указывается текстовая переменная и число символов (и), позволяет выбрать из соответствующего текста «левую» его часть длиной в и символов. Функция К1ОНТф извлекает из текста его «правую» часть, а функция М1Р3 — «среднюю».
Последнюю функцию можно применить в том случае, когда в середине строки находится переменная (например, цена изделия, зависящая от объема заказа), которую мы собираемся затем обрабатывать на микроЭВМ. Другой пример (из области платежей): «Вы еще можете купить на оставшиеся... рублей», где количество рублей зависит от величины денежного остатка. Величины подставляемых денежных сумм зависят от конкретных условий и для каждого клиента определяются отдельно.
Прн этом текст «Вы еще можете купить на оставшиеся... рублей» остается всегда неизменным. С помощью функции М1Р3 денежная сумма извлекается из строки и обрабатывается отдельно перед тем, как она будет напечатана в тексте накладной. Применение этих операторов можно проиллюстрировать с помощью следующих примеров. Пример применения функции 1.ЕН: 100 КЕАР А3 110 1.ЕТ Х=1.ЕХ(А3) 120 РК1НТ Х 130 РАТА „ТРАНЗИСТОРЫ" 140 ЕНР КОН 12 С помощью оператора КЕАР из файла данных считывается текст А3, в данном случае ТРАНЗИСТОРЫ. В строке 110 длина текста определена символически в виде текстовой пе- Языки программирования высокого уровня — Бейсик ременной, в строке 120 этот текст распечатывается по команде РЯ1ХТ. Пример применения функции ЬЕГТ$: 100 БЕАР А$ 110 1.ЕТ Х$ =1.ЕРТ$ (А$, 8) 120 РК1ХТ Х$ 130 РАТА „БУТЫЛКА ВИНА" 140 ЕХР й(1Х БУТЫЛКА В данном примере восемь символов выбираются из левой части текстовой строки и затем распечатываются.
Эти символы (БУТЫЛКА ВИНА) образуют слово БУТЫЛКА. Как уже отмечалось выше, таким же образом можно выбрать из текста некоторую его правую часть, используя для этой цели оператор В16НТ$ Пример применения функции М1Р$: 100 ЕЕАР А$ 110 1.ЕТ Х$ М1Р$ (А$, 3, 5) 120 РИХТ Х$ 130 РАТА „В АБСП-КОДЕ" 140 ЕХР К(1Х АБСН В данном примере с помощью оператора М1Р$ из текста „В АБСН-КОДЕ" извлекается фрагмент АБСН.
Первая цифра после А$ указывает позицию первого символа, который извлекается из А$, а вторая цифра указывает число извлекаемых символов. Если требуется произвести цифровую обработку чисел, находящихся в строке символов, то после вызова эти числа сначала преобразуются из АБС11-кода в десятичный код.
Такое преобразование осуществляет оператор ЧАЬ (ЧАЬпе — величина). Обратную опрацию производит функция БТк$, которая превращает число в строку АЗСН-символов. Пример применения функции ЧА1.: 100 БЕАР А$ 110 1.ЕТ Х$ =1.ЕРТ$ (А$, 3) 120 ЬЕТ т'=ЧАЬ(Х$) 130 РИХТ У 140 РАТА „159 ДИОДОВ" Глава б 150 ЕНР КР5! 159 Здесь вызывается А3 и с помощью ).ЕРТ3 извлекается АЬСП-число 159, которое находится в тексте «159 ДИОДОВ». В строке 120 получаются десятичные значения для символов 159 с помощью оператора ).ЕТУ3=ЪгА) (Х3), в результате чего число 159, представленное в коде АЗСП, преобразуется в десятичное число 159.
Следующий пример: 100 1.ЕТ Х3 =ЗТК3 (159) 110 РЙ1МТ Х3 120 Ей!Р К() Ы 159 Здесь функция ЯТЯМИ преобразует десятичное число 159 в строку АЯСП-символов, которая состоит из символов 1, 5 и 9. Помимо операторов УАЬ и ЗТК3, известны также операторы АЗС и СНК3, предназначенные для преобразования какого-либо символа в АЗСП-число и АЯСП-числа в символ соответственно. Здесь АЗСП-код задается в десятичных величинах, при этом преобразования относятся к одному символу. Если требуется преобразовать несколько символов, то для этого следует использовать циклическую процедуру.
Если аргументом оператора АЯС является строка символов, то при каждом вызове будет преобразован только первый символ. Пример применения функции АЯС: 10 БЕАР А3 20 1.ЕТ У=АЯС(А3) 30 РЙ1г(Т У 40 РАТА „ВАЗ1С" 50 Ей)Р КУ5! В данной процедуре АЗСП-код для первой буквы слова «ВАЗ)С» преобразуется в десятичное число, а именно чи;- ло 66, которое является числовым значением буквы В в АЗСП- иоде. Пример применения функции СНК3: Явьми программирования вь1евкого уровня — Бейсик 357 10 1 ЕТ Х= — 65 20 УВ =СНК97 (Х) 30 РК1!х)Т У3 40 Е19Р эс1113! В этом примере десятичная величина (65) преобразуется и АЗС11-символ, в данном случае в букву А.