I can read parts of them (multiplication, division, decimals, sigma, variables)
but I have troubles when going off to implement them in code.
Что ж, я думаю, что крайне важно, чтобы вы были в состоянии разбить интересующую вас формулу на составляющие ее части, и если вы можете понять, как кодировать эти кусочки по отдельности, вы находитесь вположение, чтобы затем склеить их обратно в виде кода.
Давайте возьмем в качестве примера манхэттенское расстояние между двумя точками в двумерном пространстве с фиксированной (x, y)
системой координат.Вы хотите написать функцию, которая получит две точки и даст вам манхэттенское расстояние между этими точками.Давайте воздержимся от использования объектно-ориентированных концепций и предположим, что у вас есть четыре входные переменные:
x1, the x-coordinate of the first point
y1, the y-coordinate of the first point
x2, the x-coordinate of the second point
y2, the y-coordinate of the second point
Так что наша функция будет выглядеть как
function mdistance (x1, y1, x2, y2) {
???
}
Что должно быть внутрифункция (тело функции) выглядит?Теперь мы проверяем математическую формулу, которую хотим переписать как код.Версия Википедии (в разделе «Формальное описание») рассматривает случай произвольных измерений - мы тоже можем это сделать, но пока мы рассматриваем только 2-мерный случай.Таким образом, их n
равно 2, насколько нам известно, и мы хотим вычислить |x1 - x2| + |y1 - y2|
.Это результат потери сигма-нотации в пользу выражения, описывающего сумму с двумя слагаемыми.Но мы до сих пор не выяснили, как |a - b|
можно выразить в компьютерном коде.
Так что теперь функция может выглядеть как
function mdistance (x1, y1, x2, y2) {
return bars(x1, x2) + bars(y1, y2);
}
И это, насколько это возможно,хорошо, потому что мы выделили то, что еще не знаем, как сделать, как другую функцию, называемую bars()
.Как только мы определим bars()
, функция mdistance()
будет работать нормально, конечно, при условии, что наше определение для bars()
является разумным.Таким образом, проблема состоит в том, чтобы просто определить bars()
.Разбивая проблему на составные части, мы упростили нашу работу, потому что нам нужно просто заставить каждую часть работать - что проще, чем заставить все работать сразу.
Так как же bars()
должно бытьопределены?Ну, |a - b|
просто выражает идею "абсолютное значение a - b
".PHP имеет встроенную функцию для абсолютного значения действительного числа;это abs()
.Итак, мы определяем bars()
следующим образом:
function bars (a, b) {
return abs(a - b);
}
Теперь наша функция mdistance()
будет работать так, как мы хотим.