По-цифровое извлечение квадратного корня - QBasic
Формулировка задачи:
Дано натуральное число. Требуется извлечь (вычислить)
по одной цифре квадратный корень. Алгоритм основан на
формуле
1. Согласно этой формуле, число разбивается по две цифры
справа налево.
2. Начальное значение числа а определяется сравнением с
квадратами чисел
3. После чего вычисляется каждая цифра b отдельно, одна за
другой.
Вопросы
1. Можно ли упростить прилагаемую программу?
2. Как обобщить данную программу на вещественные числа?
Решение задачи: «По-цифровое извлечение квадратного корня»
textual
Листинг программы
CLS DIM d AS LONG DIM d2 AS LONG DIM sqrt AS LONG DIM a(9) AS LONG d = 3000000 n = INT(LOG(d) / LOG(100)) m = n DO WHILE d > 0 a(i) = d \ 100 ^ n d = d MOD 100 ^ n i = i + 1 n = n - 1 LOOP d2 = a(0) i = 1 DO WHILE i ^ 2 > d2 i = i + 1 LOOP d2 = d2 - i sqrt = i i = 1 DO d2 = 100 * d2 + a(i) b = 20 * sqrt j = 0 DO UNTIL (b + j) * j > d2 j = j + 1 LOOP j = j - 1 d2 = d2 - (b + j) * j sqrt = 10 * sqrt + j i = i + 1 LOOP UNTIL d2 > 20000000 m1 = INT(LOG(sqrt) / LOG(10)) PRINT sqrt * 10 ^ (m - m1) END
Объяснение кода листинга программы
В этом коде задача сводится к вычислению квадратного корня числа d, представленного в двоичной системе счисления, с помощью цикла DO-LOOP.
- Переменные:
- d - исходное число
- n - степень двойки, полученная путем деления логарифма d по основанию 100 на логарифм 100
- m - копия значения n
- a(i) - массив для хранения остатков от деления d на 100 в степени n
- d2 - текущее значение d, записанное в двоичной системе счисления
- i - счетчик для перебора массива a(i)
- b - множитель для вычисления значения d2
- j - счетчик для вычисления квадратного корня d2
- Циклы:
- Внешний цикл DO-LOOP используется для вычисления остатков от деления d на 100 в степени n и записи их в массив a(i). Значение d уменьшается на каждом шаге цикла, пока оно не станет меньше 100 в степени n.
- Внутренний цикл DO-LOOP используется для вычисления квадратного корнера d2. Значение i увеличивается на каждом шаге цикла, пока (b + j) * j не станет больше d2.
- Вычисление квадратного корня:
- Значение d2 уменьшается на (b + j) * j на каждом шаге внутреннего цикла DO-LOOP.
- Значение sqrt увеличивается на 10 * j на каждом шаге внешнего цикла DO-LOOP.
- Вывод результата:
- Значение sqrt умножается на 10 в степени (m - m1) и выводится на экран. Здесь m1 - это целая часть логарифма sqrt по основанию 10.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д