Практика алгоритмизации 3

Задача №10 из этого списка

<?php
$X = 0.4;
$N = 15;

function functionLn($first, $second){
    $result = $first;
    for($i=2; $i<=$second; $i++){
        $result += singleIterValue($first, $i);
    }
    return $result;
}

function singleIterValue($first, $second){
    $sign = $minus = -1;
    $B = $first;
    for ($i=2; $i<=$second; $i++){
        if($i<$second){
            $sign *= $minus;  
        }
        $B *= $first; 
    }
    $result = $sign * $B / $second;
    return $result; 
}

echo functionLn($X, $N);
?>

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

ко всем функциям просьба писать phpdoc (это облегчит проверку)

_____________
матфак вгу и остальная классика =)

melisa's picture

для начала давайте попробуем навести порядок в обозначениях, иначе разберётся в этом только
Сальвадор Дали :)

  1. $result = $sign * $B / $second;

    Приведите к единому регистру все переменные

  2. function functionLn($first, $second){

    Избегайте бессмысленных названий, типа первый, второй, результат, значение. Это
    абстрактные слова, и в таком случае уж лучше назвать переменные $a и $b (тогда придётся
    добавить комментарии к смыслообразующим строкам кода). Если возможно, нужно дать
    переменной имя, проливающее свет на то, ЧТО лежит в ней. Например, $exponent.

    function functionLn()

    Соответственно название функции должно отвечать на вопрос ЧТО ДЕЛАЕТ.

  3. $sign = $minus = -1;

    Не называйте переменные с помощью транслитерации. Уж лучше пусть это будет
    $numberSignToAskItRepeatedly. Хотя в данном случае, если я правильно проникла
    в логику, можно вообще не создавать лишнюю переменную:

    if($i<$second){
        $sign *= (-1);
    }
  4. Пишите комментарии. Даже если Вы назвали переменные, как Вам кажется, очень прозрачно.
    Если алгоритм сложный, состоит из нескольких частей, "озаглавьте" их:
    // Умножаем наше значение на (-1) на 1 раз меньше, чем число
    // само на себя
    // Этим мы добьёмся того, что все значения, возводимые в 
    // нечётную степень, будут отрицательными.
    if($i<$second){
        $sign *= (-1);
    }

    Поясните, я правильно поняла смысл данного условия?