Глядя на рис. 44, несложно прийти к выводу, что искать максимальную площадь,
перебирая варианты, начиная с первого, необходимо лишь до тех пор, пока площадь в
процессе вычислений увеличивается. Как только она начнёт снижаться, необходимо
закончить перебор и выйти из цикла перебора вариантов. Ниже представлен скрипт
rectangle.mq4, в котором реализован такой алгоритм.
//--------------------------------------------------------------------
// rectangle.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
//--------------------------------------------------------------------
int
L=1000, // Заданная длина нити
A, // Первая сторона прямоугольн.
B, // Вторая сторона прямоугольн.
S, // Площадь прямоугольника
a,b,s; // Текущие значения
//--------------------------------------------------------------------
for(a=1; a<L/2; a++) // Заголовок оператора цикла
{ // Скобка начала тела цикла
b=(L/2) - a; // Текущее значение сторон
s=a * b; // Текущее значение площади
if (s<=S) // Выбираем большее значение
break; // Выходим за пределы цикла
A=a; // Запоминаем лучшее значение
B=b; // Запоминаем лучшее значение
S=s; // Запоминаем лучшее значение
} // Скобка конца тела цикла
//--------------------------------------------------------------------
Alert("Максимальная площадь = ",S," A=",A," B=",B);// Сообщение
return; // Оператор выхода из функции
}
//--------------------------------------------------------------------
Проследим, как эта программа работает. В начале программы объявлены и
прокомментированы переменные. В пределах цикла for реализуется собственно алгоритм
решения задачи. В Выражении_1 задано начальное значение размера стороны а
прямоугольника, равное 1. В соответствии с Условием, перебор ведётся до тех пор, пока
размер стороны прямоугольника а остаётся меньше половины длины нити. Выражение_2
предписывает увеличивать размер стороны прямоугольника а на каждом шаге итерации.
165