Помогите решить две задачки на 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));
}
}