Задача 47. Использование вспомогательных алгоритмов. Поиск минимального из двух значений 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Задача 47. Использование вспомогательных алгоритмов. Поиск минимального из двух значений



Условие задачи. Даны вещественные числа a, b, c. Вычислить F = min (a, b)/(2* min (a /2, c / b)) + min (a, b, c)/ min (a + b,2* c).

Для вычисления F требуется нахождение минимума из двух значений и минимума из трех значений, причем несколько раз для разных наборов значений. Теоретически данное вычисление можно реализовать через ряд последовательных и вложенных условных структур, где выбор наименьшего из трех производится рядом вложенных попарных сравнений, однако такой алгоритм будет очень сильно ветвящимся, громоздким и относительно сложным для программной реализации. При этом алгоритм определения минимума из трех аргументов можно свести к вложенному обращению к алгоритму определения минимума из двух аргументов: min(a, b, c) = min(min(a,b),c), так как если сначала найти минимум из первых двух чисел, а затем сравнить его с третьим и определить наименьшее из них, то это и будет наименьшее из трех чисел. В результате требуется 5 раз найти минимальное из различных пар чисел.

Правило выбора меньшего значения из двух чисел a и b можно сформулировать следующим образом: если a < b, то возвращаем значение a, если a > b, то возвращаем значение b, если a = b, то возвращаем значение, равное a (и, следовательно, также равное b). Поскольку при равенстве чисел a и b все равно, какое именно из значений возвращать, то правило выбора можно переформулировать: если a < b, то возвращаем значение a, иначе (если a ≥ b) возвращаем значение b. Оформим данное правило в виде отдельного поименованного алгоритма, получающего на входе из внешнего (обращающегося к нему) алгоритма значения чисел a и b, и возвращающего при своем завершении наименьшее из полученных значений в вызывавший алгоритм. Для большей определенности, в процессе выполнения наименьшее значение будет сохраняться в отдельной переменной min. В качестве «имени» алгоритма 47.1 поиска наименьшего значения из двух чисел будем использовать «min2». Запишем алгоритм с использованием введенных обозначений:

Структурированная запись алгоритма 47.1

1. Получить от вызывающего алгоритма значения переменных a и b.

2. Если a < b, то min = a, иначе min = b.

3. Передать вызывающему алгоритму значение переменной min.

Схема алгоритма 47.1

 

Для того, чтобы с помощью этого алгоритма найти минимум для разных пар данных, воспользуемся алгоритмической конструкцией «обращение к ранее определенному поименованному алгоритму», при этом будем при каждом обращении передавать на вход алгоритма соответствующие значения. Алгоритмы, возвращающие некоторое конкретное значение непосредственно в точку обращения к ним, часто называют алгоритмами функций. Данные, передаваемые из вызывающего алгоритма к ранее определенному называют аргументами (или параметрами) алгоритма, возвращаемые (для алгоритмов функций) – результатом работы алгоритма. Для определенности будем считать, что порядок перечисления аргументов при определении поименованного алгоритма и при обращении к нему совпадает: первое значение при обращении будет соответствовать первому значению при определении алгоритма.

Для дальнейшего сокращения записи обращений к алгоритму функции (и приближении к математической форме записи, а также к форме, принятой во многих языках программирования), будем обозначать такое обращение как имя_алгоритма(передаваемый_аргумент1, передаваемый_аргумент2, …). При этом использование такого обращения в выражении означает использование в данном выражении значения, возвращаемого алгоритмом-функцией. Например, var1 = alg1(arg1, arg2) будет означать «присвоить переменной var1 результат, возвращаемый алгоритмом alg1, если ему в качестве первого аргумента было передано значение переменной arg1, а в качестве второго – значение переменной arg2. С использованием данных обозначений запишем алгоритм решения исходно поставленной задачи:



Поделиться:


Последнее изменение этой страницы: 2021-04-12; просмотров: 147; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.2.78 (0.006 с.)