Помогите решить две задачки на php

Реализовать абстрактный класс BaseMath содержащий 3 метода: exp1($a, $b, $c) и exp2($a, $b, $c),getValue(). Метода exp1 реализует расчет по формуле a*(b^c). Метода exp2 реализует расчет по формуле (a/b)^c. Метод getValue() возвращает результат расчета класса наследника.

Реализовать класс F1 наследующий методы BaseMath, содержащий конструктор с параметрами ($a, $b, $c) и метод getValue(). Класс реализует расчет по формуле f=(a*(b^c)+(((a/c)^b)%3)^min(a,b,c)).

abstract class BaseMath {

    public function exp1($a, $b, $c) {
        return a*(b**c);
    }
    
    public function exp2($a, $b, $c) {
        return (a/b)**c;
    }
    
    abstract function getValue() {

    } 
}
class F1 extends BaseMath {
    
}

Ответы (1 шт):

Автор решения: Вадим Александру
/**
 * Class BaseMath
 */
abstract class BaseMath
{

  /**
   * @param $a
   * @param $b
   * @param $c
   * @return float|int
   */
  public function exp1($a, $b, $c)
  {
    return $a * pow($b, $c);
  }

  /**
   * @param $a
   * @param $b
   * @param $c
   * @return float|int
   */
  public function exp2($a, $b, $c)
  {
    return pow($a / $b, $c);
  }

  /**
   * @return float|int
   */
  abstract function getValue();
  
}


/**
 * Class F1
 */
class F1 extends BaseMath
{

  private $a, $b, $c;

  /**
   * F1 constructor.
   * @param $a
   * @param $b
   * @param $c
   */
  public function __construct($a, $b, $c)
  {
    
    /*
     * Из-за деления, необходимо сделать проверку $b === 0
     * В принципе, если это не делать, то исключение вы получите 
     * при вызове метода exp2. Но я думаю удобнее получить ее на этапе 
     * создания экземпляра
     */
    
    if(0 === $b) {
      throw new InvalidArgumentException('$b не может быть нулем');
    }
    
    $this->a = $a;
    $this->b = $b;
    $this->c = $c;
  }

  /**
   * @return float|int
   */
  function getValue()
  {
    return $this->exp1($this->a, $this->b, $this->c) +
      pow($this->exp2($this->a, $this->b, $this->c) % 3, min($this->a, $this->b,$this->c));
  }
}


/**
 * Более лаконичный вариант, без трех полей
 *
 * Class F2
 */
class F2 extends BaseMath
{

  /**
   * @var array 
   */
  private $params;

  /**
   * F2 constructor.
   * @param $a
   * @param $b
   * @param $c
   */
  public function __construct($a, $b, $c)
  {

    if(0 === $b) {
      throw new InvalidArgumentException('$b не может быть нулем');
    }
    
      $this->params = [$a, $b, $c];
  }

  /**
   * @return float|int
   */
  function getValue()
  {
    return $this->exp1(...$this->params) + pow($this->exp2(...$this->params) % 3, min($this->params));
  }
}
→ Ссылка