По-цифровое извлечение квадратного корня - QBasic

Узнай цену своей работы

Формулировка задачи:

Дано натуральное число. Требуется извлечь (вычислить) по одной цифре квадратный корень. Алгоритм основан на формуле 1. Согласно этой формуле, число разбивается по две цифры справа налево. 2. Начальное значение числа а определяется сравнением с квадратами чисел 3. После чего вычисляется каждая цифра b отдельно, одна за другой. Вопросы 1. Можно ли упростить прилагаемую программу? 2. Как обобщить данную программу на вещественные числа?
Листинг программы
  1. REM
  2. REM SQR(3000000) = 1732.0508
  3. REM
  4. CLS
  5. DIM d AS LONG
  6. DIM d2 AS LONG
  7. DIM sqrt AS LONG
  8. DIM a(9) AS LONG
  9. d = 3000000
  10. n = INT(LOG(d) / LOG(100))
  11. m = n
  12. DO WHILE d > 0
  13. a(i) = d \ 100 ^ n
  14. d = d MOD 100 ^ n
  15. i = i + 1
  16. n = n - 1
  17. LOOP
  18. d2 = a(0)
  19. i = 1
  20. DO WHILE i ^ 2 > d2
  21. i = i + 1
  22. LOOP
  23. d2 = d2 - i
  24. sqrt = i
  25. i = 1
  26. DO
  27. d2 = 100 * d2 + a(i)
  28. a = 20 * sqrt
  29. j = 0
  30. DO UNTIL (a + j) * j > d2
  31. j = j + 1
  32. LOOP
  33. j = j - 1
  34. d2 = d2 - (a + j) * j
  35. sqrt = 10 * sqrt + j
  36. i = i + 1
  37. LOOP UNTIL d2 > 20000000
  38. m1 = INT(LOG(sqrt) / LOG(10))
  39. PRINT sqrt * 10 ^ (m - m1)
  40. END

Решение задачи: «По-цифровое извлечение квадратного корня»

textual
Листинг программы
  1. CLS
  2.  
  3. DIM d AS LONG
  4. DIM d2 AS LONG
  5. DIM sqrt AS LONG
  6. DIM a(9) AS LONG
  7.  
  8. d = 3000000
  9. n = INT(LOG(d) / LOG(100))
  10. m = n
  11.  
  12. DO WHILE d > 0
  13.    a(i) = d \ 100 ^ n
  14.    d = d MOD 100 ^ n
  15.    i = i + 1
  16.    n = n - 1
  17. LOOP
  18.  
  19. d2 = a(0)
  20. i = 1
  21. DO WHILE i ^ 2 > d2
  22.    i = i + 1
  23. LOOP
  24. d2 = d2 - i
  25. sqrt = i
  26.  
  27. i = 1
  28. DO
  29.    d2 = 100 * d2 + a(i)
  30.    b = 20 * sqrt
  31.    j = 0
  32.  
  33.    DO UNTIL (b + j) * j > d2
  34.       j = j + 1
  35.    LOOP
  36.  
  37.    j = j - 1
  38.    d2 = d2 - (b + j) * j
  39.    sqrt = 10 * sqrt + j
  40.    i = i + 1
  41. LOOP UNTIL d2 > 20000000
  42.  
  43. m1 = INT(LOG(sqrt) / LOG(10))
  44. PRINT sqrt * 10 ^ (m - m1)
  45. END

Объяснение кода листинга программы

В этом коде задача сводится к вычислению квадратного корня числа d, представленного в двоичной системе счисления, с помощью цикла DO-LOOP.

  1. Переменные:
    • d - исходное число
    • n - степень двойки, полученная путем деления логарифма d по основанию 100 на логарифм 100
    • m - копия значения n
    • a(i) - массив для хранения остатков от деления d на 100 в степени n
    • d2 - текущее значение d, записанное в двоичной системе счисления
    • i - счетчик для перебора массива a(i)
    • b - множитель для вычисления значения d2
    • j - счетчик для вычисления квадратного корня d2
  2. Циклы:
    • Внешний цикл DO-LOOP используется для вычисления остатков от деления d на 100 в степени n и записи их в массив a(i). Значение d уменьшается на каждом шаге цикла, пока оно не станет меньше 100 в степени n.
    • Внутренний цикл DO-LOOP используется для вычисления квадратного корнера d2. Значение i увеличивается на каждом шаге цикла, пока (b + j) * j не станет больше d2.
  3. Вычисление квадратного корня:
    • Значение d2 уменьшается на (b + j) * j на каждом шаге внутреннего цикла DO-LOOP.
    • Значение sqrt увеличивается на 10 * j на каждом шаге внешнего цикла DO-LOOP.
  4. Вывод результата:
    • Значение sqrt умножается на 10 в степени (m - m1) и выводится на экран. Здесь m1 - это целая часть логарифма sqrt по основанию 10.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы