-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path18.1.php
97 lines (88 loc) · 2.57 KB
/
18.1.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
class ArrayAvgHelper
{
/**
* Находит сумму первых
* степеней элементов массива
*
* @param int[] $arr
* @return int|float
*/
public function getAvg1($arr): int|float
{
$power = 1;
return $this->calcSqrt($this->getSum($arr, $power), $power);
}
/**
* Находит сумму вторых степеней
* элементов массива и извлекает
* из нее квадратный корень
*
* @param int[] $arr
* @return float|int
*/
public function getAvg2($arr): int|float
{
$power = 2;
return $this->calcSqrt($this->getSum($arr, $power), $power);
}
/**
* Находит сумму третьих степеней
* элементов массива и извлекает
* из нее кубический корень
*
* @param int[] $arr
* @return int|float
*/
public function getAvg3($arr): int|float
{
$power = 3;
return $this->calcSqrt($this->getSum($arr, $power), $power);
}
/**
* Находит сумму четвертых степеней
* элементов массива и извлекает
* из нее корень четвертой степени:
*
* @param int[] $arr
* @return int|float
*/
public function getAvg4(array $arr): int|float
{
$power = 4;
return $this->calcSqrt($this->getSum($arr, $power), $power);
}
/**
* Вспомогательный метод, который параметром
* принимает массив и степень и возвращает
* сумму степеней элементов массива.
*
* @param int[] $arr
* @param int $power
* @return int|float
*/
private function getSum(array $arr, int $power): int|float
{
$sum = 0;
foreach ($arr as $value) {
$sum += $value ** $power;
}
return $sum;
}
/**
* Вспомогательный метод, который параметром
* принимает целое число и степень и возвращает
* корень заданной степени из числа.
*
* @param int|float $num
* @param int $power
* @return int|float
*/
private function calcSqrt(int|float $num, int $power)
{
if ($power === 1) {
return $num;
}
return $num ** (1 / $power);
}
}