Урок 5. Математические функции в PHP
Теория
Методы и функции: abs, sqrt, pow, round, ceil, floor, min, max, rand, mt_rand
Функция abs
Функция abs вычисляет модуль числа (т.е. из отрицательного делает положительное).
Синтаксис: abs(число).
Пример. Функция вычислит модуль от числа -15:
<?echo abs(-15)?>
Результат: 15.
Функция sqrt
Функция sqrt находит квадратный корень числа.
Синтаксис: sqrt(число).
Пример. Функция вычислит квадратный корень 16:
<?echo sqrt(16)?>
Результат: 4.
Пример. Функция вычислит квадратный корень 5:
<?echo sqrt(5)?>
Результат: 2.2360679774998.
Функция pow
Функция pow возводит число в заданную степень.
Синтаксис: pow(число,степень).
Пример. Функция возведет число 2 в степень 3:
<?echo pow(2,3)?>
Результат: 8.
Функция round
Функция round округляет число по правилам математического округления.
Синтаксис: round(число,[сколько знаков оставить в дробной части]).
2-й необязательный параметр может быть как положительным, так и отрицательным (в этом случае он указывает сколько знаков оставить в целой части).
Пример. Округлить дробь до целого:
<?echo round(3.4)?>
Результат: 3.
Пример. Округлить дробь до целого:
<?echo round(3.5)?>
Результат: 4.
Пример. Округлить дробь до целого:
<?echo round(3.6)?>
Результат: 4.
Пример. В данном примере функция округлит число до 2 знаков в дробной части:
<?echo round(12.45678,2)?>
Результат:12.46.
Пример. В данном примере функция округлит число до 3 знаков в дробной части:
<?echo round(12.45678,3)?>
Результат: 12.457.
Функция ceil
Функция ceil округляет дробь в большую сторону до целого.
Это значит, что независимо от цифры в начале дробной части, дробь все-равно округлится с увеличением целой части на 1.
К примеру, 12.1 округлится к 13.
Синтаксис: ceil(число).
Пример. Функция округлит 5.1 в большую сторону и вернет 6:
<?echo ceil(5.1)?>
Результат: 6.
Функция floor
Функция floor округляет дробь в меньшую сторону.
Это значит, что независимо от цифры в начале дробной части, дробь все-равно округлится без увеличения целой части на 1.
К примеру, 12.9 округлится к 12.
Синтаксис: floor(число).
Пример. Функция округлит 4.9 в меньшую сторону и вернет 4:
<?echo floor(4.9)?>
Результат: 4.
Функция min
Функция min находит самое маленькое число из переданных ей параметрами или самое маленькое число среди элементов массива.
Синтаксис: min(1 число,2 число…); min([массив чисел]).
Пример. Функция вернет наименьшее среди заданных чисел:
<?echo min(1,2,3)?>
Результат: 1.
Пример. Функция вернет наименьшее значение массива:
<?echo min([1,2,3])?>
Результат: 1.
Функция max
Функция max находит самое большое число из переданных ей параметрами или самое большое число среди элементов массива.
Синтаксис: max(1 число,2 число…); max([массив чисел]).
Пример. Функция вернет наибольшее среди заданных чисел:
<?echo max(1,2,3)?>
Результат: 3.
Пример. Функция вернет наибольшее значение массива:
<?echo max([1,2,3])?>
Результат: 3.
Функция rand и mt_rand
Функция rand и mt_rand генерирует случайное целое число в заданном промежутке.
Вам также может пригодиться функция mt_getrandmax, которая возвращает наибольшее возможное случайное значение числа.
Синтаксис: rand и mt_rand(с какого числа,до какого числа).
Пример. Функция сгерерирует случайное число от 5 до 9 (при обновлении страницы число каждый раз будет разным):
<?echo rand(1,4)?>
Результат: 2.
<?echo mt_rand(5,9)?>
Результат: 7.
Практика
Примеры решения задач
Округление и ассоциативный массив
Задача. Найдите корень из числа 1000. Округлите его в большую и меньшую стороны. В массив $arr запишите 1-м элементом корень из числа, 2-м элементом - округление в меньшую сторону, 3-м элементом - в большую.
Решение: корень из числа найдем функцией sqrt. Далее, чтобы округлить число в меньшую строну, воспользуемся функцией floor, а чтобы в большую - функцией ceil:
<?$sqrt=sqrt(1000);//Найдем корень и запишем его в $sqrt
echo floor($sqrt);//Округлим в меньшую сторону
echo ceil($sqrt)//Округлим в большую сторону
?>
Теперь результаты необходимо записать в массив. Сделать это можно 2 способами: объявить через [], либо просто воспользоваться присваиванием $arr[]='htm';$arr[]='php' и так далее.
1 способ:
<?$sqrt=sqrt(1000)
$arr=[$sqrt,floor($sqrt),ceil($sqrt)]?>
2 способ:
<?
$sqrt=sqrt(1000)
$arr[]=$sqrt;$arr[]=floor($sqrt);$arr[]=ceil($sqrt)?>
Массив случайных чисел
Задача. Заполните массив 30-ю случайными числами от 1 до 10.
Решение: для решения воспользуемся циклом for - прокрутим его 30 раз, записывая при каждом проходе случайное число в новый элемент массива.
Случайные числа будем получать через функцию mt_rand.
Чтобы число записалось в новый элемент массива, следует сделать так: $arr[]=1;$arr[]=2; - 1-е число запишется в 0-й элемент массива, а 2-е - в 1-й (с ключом 1). В случае со случайными числами это будет выглядеть так:
<?//Каждое из чисел будет записываться в новый элемент массива:
$arr[]=mt_rand(1,10);$arr[]=mt_rand(1,10);$arr[]=mt_rand(1,10)?>
Напоминаю о том, что ключи можно не оставлять пустыми, а делать своими:
<?//Используем свои ключи, а не автоматические:
$arr['1 ключ']=mt_rand(1,10);$arr['2 ключ']=mt_rand(1,10);$arr['3 ключ']=mt_rand(1,10)?>
При большом желании мы можем вручную сделать 30 таких строчек - и задача решена. Но пусть лучше за нас это сделает цикл:
<?//Переменная $i нужна, чтобы цикл сделал 30 итераций (проходов)
for($i=1;$i<=30;$i++){$arr[]=mt_rand(1,10);}
var_dump($arr)
//Пообновляйте страницу, вы увидите как меняется массив, так как он заполняется случайными числами.
?>
array(30) { [0]=> int(10) [1]=> int(9) [2]=> int(5) [3]=> int(3) [4]=> int(3) [5]=> int(10) [6]=> int(4) [7]=> int(10) [8]=> int(2) [9]=> int(2) [10]=> int(6) [11]=> int(6) [12]=> int(4) [13]=> int(2) [14]=> int(7) [15]=> int(7) [16]=> int(2) [17]=> int(4) [18]=> int(10) [19]=> int(9) [20]=> int(3) [21]=> int(4) [22]=> int(1) [23]=> int(9) [24]=> int(9) [25]=> int(8) [26]=> int(5) [27]=> int(4) [28]=> int(6) [29]=> int(5) }
Задачи для решения
Работа с %
Даны переменные $a=10 и $b=3. Найдите остаток от деления $a на $b.
0.33333333333333
Даны переменные $a и $b. Проверьте, что $a делится без остатка на $b. Если это так - выведите 'Делится без остатка' и результат деления, иначе выведите 'Делится с остатком' и остаток от деления.
a=10, b=5
Делится без остатка. Результат = 2
a=10, b=9
Делится с остатком 0.11111111111111
Работа со степенью и корнем
Для решения задач данного блока вам понадобятся следующие функции: sqrt, pow.
Возведите 2 в 10 степень. Результат запишите в переменную $s.
1024
Найдите квадратный корень из предыдущей переменной $s.
32
Найдите квадратный корень из 245.
15.652475842499
Дан массив с элементами [4,2,5,19,13,0,10]. Найдите корень из суммы квадратов его элементов. Для решения воспользуйтесь циклом foreach.
№ элемента | Элемент | Элемент в квадрате | Элемент в квадрате нарастающим итогом |
---|---|---|---|
1 | 4 | 16 | 16 |
2 | 2 | 4 | 20 |
3 | 5 | 25 | 45 |
4 | 19 | 361 | 406 |
5 | 13 | 169 | 575 |
6 | 0 | 0 | 575 |
7 | 10 | 100 | 675 |
Сумма квадратов = 675
Корень из суммы квадратов = 25.980762113533
Работа с функциями округления
Для решения задач данного блока вам понадобятся следующие функции: round, ceil, floor.
Найдите квадратный корень из 379. Результат округлите до целых, до десятых, до сотых.
Найдите квадратный корень из 587. Округлите результат в большую и меньшую сторону, запишите результаты округления в ассоциативный массив с ключами 'floor' и 'ceil'.
Работа с min и max
Для решения задач данного блока вам понадобятся следующие функции: min, max.
Даны числа [4,-2,5,19,-130,0,10]. Найдите минимальное и максимальное число.
Работа с рандомом
Для решения задач данного блока вам понадобятся следующие функции: mt_rand.
Выведите на экран случайное число от 1 до 100.
Заполните массив 10-ю случайными числами. Подсказка: нужно воспользоваться циклами for или while. Показать решение.
Работа с модулем
Для решения задач данного блока вам понадобятся следующие функции: abs.
Даны переменные $a и $b. Найдите найдите модуль разности $a и $b. Проверьте работу скрипта самостоятельно для различных $a и $b.
Дан массив в числами, к примеру [1,2,-1,-2,3,-3]. Создайте из него новый массив так, чтобы отрицательные числа стали положительными, то есть у нас должен получиться такой массив: [1,2,1,2,3,3].
Задачи
Дано число, например 30. У этого числа есть делители (числа, на которое оно делится без остатка). Делители числа 30: 1, 2, 3, 5, 6, 10, 15, 30. Задача сделать массив делителей числа 30 (число может быть любым, не обязательно 30).
Дан массив [1,2,3,4,5,6,7,8,9,10]. Узнайте, сколько 1-х элементов массива нужно сложить, чтобы сумма получилась больше 10.