менту x по заданому значенню функції y при відомому значенні n
В
Де: n> 1, x> 0
При n> 1 функція є монотонно зростаючою, значення аргументу x можна визначити за допомогою методу половинного ділення. У чому полягає це метод? p> 1. Знаходимо відрізок [x1, x2], який задовольняє умові: f (x1) <= y <= f (x2).
2. Ділимо отриманий відрізок навпіл: xt = (x1 + x2)/2 і определеяется в якій половині відрізка знаходиться x. Для цього порівнюємо два значення: f (x1) і y. p> 3. Отриманий відрізок знову ділимо навпіл, процес повторюється до тих пір, поки різниця x1 і x2 чи не стане менше заданого значення eps.
При розробці алгоритму даної програми використовуємо метод покрокової деталізації.
1 етап. Загальна структура програми:
Програма:
Ввести y, n, eps
Визначити x
Вивести x, y
Кінець.
2 етап. Деталізуємо операцію визначення x:
Визначити x
Визначити x1 таке, що f (x1) <= y
Визначити x2 таке, що f (x2)> = y
Визначити x на інтервалі [x1, x2]
Все.
3 етап. Деталізуємо операцію визначення x1. Значення x1 підбираємо таким чином, щоб виконувалася умова f (x1) <= y. Відомо, що x> 0, отже, беремо будь-яке значення x, наприклад x1 = 1 і будемо його пследовательно зменшувати, допустимо в 2 рази. Таким чином визначимо значення x1, яке задовольняє даним умові:
Визначити x1:
x1: = 1
цикл - поки f (x1)> y
x1: = x1/2
Всі - цикл
Всі
4 етап. Деталізуємо операцію визначення x2. Значення x2 визначаємо аналогічно x1, але вихідне значення будемо послідовно збільшувати в 2 рази.
Визначити x2:
x2: = 1
цикл - поки f (x2)
x2: = x2 * 2
Всі - цикл
Все.
5 етап. Деталізуємо операцію визначення x. Визначення x виконується послідовним скороченням відрізка [x1, x2].
Визначити x:
цикл - поки x2-x1> eps
скоротити відрізок [x1, x2]
все - цикл
Все.
6 етап. Деталізуємо операцію скорочення відрізка [x1, x2]. Інтервал визначення x скорочуємо діленням навпіл і відкидаємо половину, яка не задовольняє умові f (x1) <= y <= f (x2):
Скоротити інтервал визначення x:
xt = (x1 + x2)/2
якщо f (xt)> y
то x2: = xt
інакше x1: = xt
все - якщо
Все.
Таким чином, за 6 етапів розроблений наступний алгоритм:
Програма:
Ввести y, n, eps
x1: = 1
цикл - поки f (x1)> y
x1: = x1/2
все - цикл
x2: = 1
цикл - поки f (x2)
x2: = x2 * 2
все - цикл
цикл - поки x2-x1> eps
xt: = (x1 + x2)/2
якщо f (xt)> y
то x2: = xt
інакше x1: = xt
все - якщо
все - цикл
Вивести xt, y
Кінець.
Таким чином, на кожному етапі вирішується просте завдання, що полегшує розробку алгоритму. Для вирішення даної задачі був використаний псевдокод, але можна використовувати і блок - схеми алгоритмів
Плюси і мінуси методик програмування
Після того, як ми розібралися в суті обох методик, давайте розглянемо, які зручності ми отримуємо від їх використання, і з якими проблемами стикаємося.
Програмування знизу вгору
Програмування зверху вниз
Переваги
Можна об'єднати одночасно кілька підпрограм або модулів, так як часто одна підпрограма більш високого рівня в проекті замінює відразу декілька драйверів.
Серйозні помилки з великою ймовірністю відшукуються вже на ранніх стадіях проекту.
Підпрограми, що розробляються на ранній стадії роботи над проектом, часто виявляються надзвичайно корисними і в інших випадках. Зазвичай такі низькорівневі підпрограми об'єднують в власні бібліотеки.
На будь-якому етапі ми можемо працювати всього з одного підпрограмою, а це дозволяє легше налагоджувати і змінювати код.
Залежність від машинних ресурсів у Загалом виходить менше, так як тільки на пізніх етапах проекту ми працюємо з великим обсягом коду.
Простіше дотримуватися єдиних правил при створенні різних версій програми. При цьому створювати корисні приватні підверсії також виявляється зручно.
Тестування виявляється більш систематичним.
Недоліки
Вже реалізовані, налагоджені й протестовані модулі іноді доводиться відкидати, якщо в викликають частинах програми виявилися непереборні помилки, і необхідно переробляти цілий блок.
Якщо виявляється, що модуль низького рівня неможливо реалізувати, як замислювалося, іноді дов...