166_______________________________

j% = 0 'заготовка для делимого FOR i% == first% TO last% 'начало цикла деления

j% = j% * Р + a(i%) 'очередная часть делимого a(i%) = j% \ Q 'очередная цифра частного j% = j% MOD Q 'очередная цифра остатка NEXT i% 'конец цикла деления IF а(first%) = О THEN first% = first% + 1

'коррекция номера разряда

Здесь в а(±%) записаны цифры делителя начиная со значения индекса first% и кончая значением индекса last%. В результате работы этой программы цифры частного будут находиться в том же массиве, а значение остатка в j%.

Используя полученное значение остатка для формирования очередной цифры кода в цикле по вышеописанному алгоритму, мы решим задачу перевода из десятичной в шестнадцатеричную при Р=Ю и Q=16 и перевода из шестнадцатеричной в десятичную при р=16 и о=10. В нижеприведенных текстах программ вы можете найти эти циклы DO. . .LOOP, выход из которых производится после того, как индекс первого разряда превысит индекс последнего. В этом же цикле производится формирование строкового представления числа в новой системе. По окончании цикла эта строка выводится на экран под командой вызова утилиты.

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

Для ввода числа производится чтение с экрана (точнее из ЗУ дисплея) всей строки, в которой записана вызывающая команда. Лишние пробелы справа удаляются и все строчные буквы переводятся в прописные. После этого производится поиск позиции имени команды в строке и выделение строкового представления числа. Если числовой параметр отсутствует, то об этом выдается сообщение и выполнение программы завершается. (Для правильной работы программы между командой и числовым параметром должно быть не менее 2 пробелов). Затем определяется количество разрядов и в цикле производится запись числовых значений цифр каждого из разрядов в массив. Если хотя бы одна из цифр введена неверно, то выдается сообщение об ошибке и выполнение программы завершается.

Дальнейшие пояснения вряд ли могут что-то прояснить, необходимо самостоятельно проработать, ввести и отладить нижеприведенные тексты

УТИЛИТЫ Н TO_D. ВАЗ

DIM а(1 ТО 40) AS INTEGER 'массив для ввода цифр digits$ = "0123456789ABCDEF" 'шаблон для цифр МХСОМ$ = "" 'заготовка для ввода j% = CSKbIN - 3 'положение команды на экране FOR i% = 1 ТО 80 'начало цикла чтения МУСОМ$ = МГСОМ$ + CHR$( SCREEN (3%, i%) )

'ввод очередного символа NEXT i% 'конец цикла чтения LOCATE j% + 3 'возврат курсора на место