Практикум по среде и языку QBasic 165

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

Задача перевода состоит в том, чтобы по известному набору из м цифр A(I) при заданных р и Q вычислить набор цифр B(J) (и их количество N) по условию равенства их значений, вычисленных по вышеприведенным формулам.

1 Поясним сказанное на примере конкретной задачи. Каким образом десятичное число 225 перевести в шестнадцатеричную систему? Снова воспользуемся спичками. Выложим сначала 2 кучки по сто спичек, затем 2 кучки по десять спичек и еще 5 спичек. Таким образом мы смоделируем первую формулу. Теперь объединим все спички в одну кучу. В результате количество спичек сохранилось, а код количества пропал. Попытаемся теперь из этого количества получить его шестнадцатеричный код, раскладывая спички в кучки по 16 штук. Получилось 14 кучек и еще одна спичка. Значит шестнадцатеричный код этого количества спичек D1. Если бы количество кучек было больше 15 (в шестнадцатеричной системе самая большая цифра F), то пришлось бы складывать кучи, в каждую из которых входит по 16 кучек (то есть по 256 штук).

Два алгоритма решения задачи заложены в самих формулах. Если вычисления производятся в системе счисления с основанием Q, то искомый код получается прямым вычислением значения по первой формуле. С точки зрения уменьшения количества умножений первую формулу удобнее использовать в измененном виде (схема Горнера):

(. . «А(1)*Р + А(2))*Р + А(3))*Р . . . +А(М-1))*Р + А(М) .

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

• присвоить делимому значение исходного числа,

• произвести целочисленное деление на Q, при этом очередная цифра равна остатку,

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

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