Как ускорить вычислительные процессы программы? - QBasic

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

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

Чтобы сделать быструю программу, в которой много вычислений, Надо по возможности не делать эти вычисления в самой программе, а вставить в программу уже готовые значения. Вот яркий пример: Требуется вычислить sin1° + sin2° + ... + sin90° Чтобы определить затраченное время, в программе эти вычисления повторяются 100 000 раз. Для сравнения смотрите вторую программу, которая делает тоже самое, но все синусы вычислены заранее
Листинг программы
  1. DEFSNG S, X
  2. DEFLNG I, N
  3. CLS
  4. FOR n = 1 TO 100000
  5. s = 0
  6. FOR i = 1 TO 90
  7. s = s + SIN(i / 180 * 3.141592)
  8. NEXT i
  9. NEXT n
  10. PRINT s
  11. END
Программа 2 (соперник)
Листинг программы
  1. DEFSNG S, X
  2. DEFLNG I, N
  3. CLS
  4. DATA .0174524 , 3.489949E-02 , 5.233594E-02 , 6.975646E-02
  5. DATA 8.715572E-02 , .1045284 , .1218693 , .1391731 , .1564344
  6. DATA .1736481 , .190809 , .2079117 , .224951 , .2419218 , .258819
  7. DATA .2756373 , .2923717 , .3090169 , .3255681 , .3420201 , .3583679
  8. DATA .3746065 , .3907311 , .4067366 , .4226182 , .4383711 , .4539904
  9. DATA .4694715 , .4848095 , .4999999 , .515038 , .5299191 , .5446389
  10. DATA .5591928 , .5735763 , .5877851 , .6018149 , .6156614 , .6293203
  11. DATA .6427875 , .6560589 , .6691305 , .6819983 , .6946583 , .7071066
  12. DATA .7193397 , .7313536 , .7431447 , .7547095 , .7660443 , .7771459
  13. DATA .7880107 , .7986354 , .8090169 , .8191519 , .8290375 , .8386704
  14. DATA .848048 , .8571672 , .8660253 , .8746196 , .8829475 , .8910064
  15. DATA .8987939 , .9063077 , .9135454 , .9205047 , .9271837 , .9335803
  16. DATA .9396926 , .9455185 , .9510564 , .9563047 , .9612616 , .9659258
  17. DATA .9702957 , .97437 , .9781476 , .9816271 , .9848077 , .9876883
  18. DATA .9902681 , .9925461 , .9945219 , .9961947 , .997564 , .9986295
  19. DATA .9993908 , .9998477 , 1
  20. FOR n = 1 TO 10000
  21. s = 0
  22. FOR i = 1 TO 90
  23. READ x
  24. s = s + x
  25. NEXT i
  26. RESTORE
  27. NEXT n
  28. PRINT s
  29. END
Время выполнения первой программы = 85 сек Время выполнения второй программы = 55 сек Как видите вторая программа выполняется быстрее первой в 1,5 раза Желая узнать какого эффекта можно достигнуть если взять функцию чуть сложнее, не меняя самой программы, я использовал следующую функцию: SIN(i / 180 * 3.141592) + LOG(i) - LOG(i) (по сути та же задача, логарифмы в нагрузку) Время вычисления составило 169 сек - в ТРОЕ (!!) больше, чем у программы (55 сек), где все сосчитано. Пусть каждый сделает для себя вывод .... Успехов всем!

Решение задачи: «Как ускорить вычислительные процессы программы?»

textual
Листинг программы
  1. DEFSNG S, X
  2. DEFLNG I, N
  3. CLS
  4. DIM sn(1 TO 90)
  5. FOR i = 1 TO 90
  6.    sn(i) = SIN(i / 180 * 3.141593)
  7. NEXT i
  8.  
  9. FOR n = 1 TO 100000
  10.    s = 0
  11.    FOR i = 1 TO 90
  12.       s = s + SN(i)
  13.    NEXT i
  14. NEXT n
  15. PRINT s
  16. END

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

В этом коде на языке QBasic выполняется следующее:

  1. Установка значений переменных:
    • Установка константы S (вероятно, это значение не меняется в ходе выполнения программы).
    • Установка константы X (вероятно, это значение не меняется в ходе выполнения программы).
    • Установка счётчика I для цикла.
    • Установка счётчика N для цикла.
  2. Инициализация массива:
    • Объявление массива sn(1 TO 90) (возможно, это массив для хранения результатов вычислений).
    • Заполнение массива sn значениями синуса от 0 до 90 градусов с шагом 1 градус (предполагается, что функция SIN доступна и возвращает значение синуса).
  3. Вычисление суммы:
    • Установка начального значения переменной s равным 0.
    • Цикл по индексам массива sn.
    • Приращение значения переменной s на значение элемента массива sn(i).
  4. Повторение вычислений:
    • Цикл, выполняющийся 100 000 раз (возможно, это нужно для получения более точного результата).
    • Внутри цикла - повторение вычисления суммы.
  5. Вывод результата:
    • Вывод значения переменной s (вероятно, это сумма синусов).

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


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

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

14   голосов , оценка 3.929 из 5

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

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

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