Разработка

Отправим число из командной строки в переменную $a. Стягивающиеся отрезки в программе можно задать при помощи двух числовых переменных — $left и $right. Ещё пригодится переменная $mid для середины отрезка. Но, поскольку в деле участвуют Черепаха и Заяц, мы объявим два комплекта переменных — черепаший и заячий. Это будут переменные $tleft, $tright, $tmid и $hleft, $hright, $hmid:

my $a=shift;

my $tleft=my $hleft=0;
my $tright=my $hright=(1+$a)/2;
my ($tmid, $hmid);

Левые границы черепашьего и заячьего отрезка инициализируются нулями, а правые — числом, заведомо большим, чем квадратный корень.

Завершает программу цикл, завершающийся при совпадении середин черепашьего и заячьего отрезков, и команда вывода этих совпадающих значений:

while()
{
	$tmid=($tleft+$tright)/2;
	($tmid**2<$a? $tleft: $tright)=$tmid;

	for(0, 1)
	{
		$hmid=($hleft+$hright)/2;
		($hmid**2<$a? $hleft: $hright)=$hmid;
	}

	last if $tmid==$hmid;
}

print "$tmid\n";

Внутри цикла совершаются шаги половинного деления: для Черепахи одиночный, а для Зайца — двойной (для чего применяется вложенный цикл for(0, 1) двукратного действия). Обратите внимание на необычное использование оператора выбора ?: в левой части присваивания. Это лаконичная альтернатива следующего кода:

if($tmid**2<$a)
{
	$tleft=$tmid;
}
else
{
	$tright=$tmid;
}

Обе реализации метода Ньютона, с использованием метода Флойда и без него, оказываются совсем простыми. Мы сразу отсылаем читателя к текстам готовых программ в разделе «Метод Ньютона».

Информатика-54© А. Н. Швец