Вычисление модуля числа

      Комментарии к записи Вычисление модуля числа отключены

Главная Форумы Программирование Язык Пифагор Примеры Вычисление модуля числа

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 1 неделя, 6 дн. назад.

  • Автор
    Сообщения
  • #4173

    math.abs << funcdef X {
      [((X, 0):[<, >=]):?]^(
        {X:-},
        X
      ):. >> return;
    }

    Аргумент сравнивается с нулем – в зависимости от результата возвращается либо X, либо -X. Т.к. -X является вычислением, которое не выполняется при некоторых условиях – этот фрагмент кода помещен в задержанный список. Возможна и другая реализация, без задержанных списков:

    // Функция, возвращающая абсолютное значение аргумента
    math.abs << funcdef Param {
      lt<< (Param,0):<;
      Param:[-:lt] >>return;
    };

    Функция abs вычисляет модуль числа, для этого:

    • выполняет сравнение аргумента (Param) с нулем — формирует список (Param,0) и применяет к нему операцию сравнения. Результат сравнения — логическое значение (0 или 1) записывает в переменную lt;
    • в зависимости от результатов сравнения возвращает либо -Param, либо Param. К оператору «минус» применяется значение lt, при этом если lt равно 1 — то в результате будет получен «минус» без изменений, а в противном случае (при нулевом значении) — пустую операцию – «точка». Результат выполнения этой операции помещается в задержанный список, который в данном случае лишь задает приоритет выполнения;
    • список (из одного элемента), содержащий либо операцию «минус», либо «точка», подается на значение Param, в результате формируется -Param или Param.

    Тесты для функции:

    math.test.abs << funcdef {
      Cases << [
        ("negative", ( -123:math.abs, 123):equals),
        ("positive", ( 2:math.abs, 2):equals),
        ("zero", ( 0:math.abs, 0):equals)
      ];
      return << Cases;
    }

Для ответа в этой теме необходимо авторизоваться.