Главная
Простейшие операторы
Операторы условия
Циклы
Массивы
Массивы II
Строки
Функции I
Функции II

Параметры функций

Параметры функции указываются в скобках. Например: function newf(a, b, c) { }. Рассмотрим эту тему на примере программы, позволяющей по известному значению одной тригонометрической функции найти значения всех остальных функций (синуса, косинуса, тангенса, котангенса, секанса, косеканса).
Об алгоритме. Сначала пользователь должен ввести какая функция ему известна, а уже потом мы будем вычислять остальные значения:
<script>
f=prompt("Введите название известной вам функции:\n1 - синус; 2 - косинус; 3 - тангенс; 4 - котангенс; 5 - секанс; 6 - косеканс", "Вводить только цифры");
x=prompt("Введите значение этой функции в радианах", "В качестве десятичного разделителя используйте точку");
f=Number(f);
x=Number(x);
switch (f) {
case 1: sin(x); break;
case 2: cos(x); break;
case 3: tg(x); break;
case 4: ctg(x); break;
case 5: sec(x); break;
case 6: cosec(x); break;
}
function sin(x) {
sinx=x;
cosx=Math.sqrt(1-sinx*sinx);
tgx=sinx/cosx;
ctgx=cosx/sinx;
secx=1/cosx;
cosecx=1/sinx;
results(sinx, cosx, tgx, ctgx, secx, cosecx);
}

function cos(x) {
cosx=x;
sinx=Math.sqrt(1-cosx*cosx);
tgx=sinx/cosx;
ctgx=cosx/sinx;
secx=1/cosx;
cosecx=1/sinx;
results(sinx, cosx, tgx, ctgx, secx, cosecx);
}

function tg(x) {
tgx=x;
ctgx=1/tgx;
cosx=1/Math.sqrt(1+tgx*tgx);
sinx=1/Math.sqrt(1+ctgx*ctgx);
secx=1/cosx;
cosecx=1/sinx;
results(sinx, cosx, tgx, ctgx, secx, cosecx);
}

function ctg(x) {
ctgx=x;
tgx=1/ctgx;
cosx=1/Math.sqrt(1+tgx*tgx);
sinx=1/Math.sqrt(1+ctgx*ctgx);
secx=1/cosx;
cosecx=1/sinx;
results(sinx, cosx, tgx, ctgx, secx, cosecx);
}

function sec(x) {
secx=x;
cosx=1/secx;
sinx=Math.sqrt(1-cosx*cosx);
tgx=sinx/cosx;
ctgx=cosx/sinx;
cosecx=1/sinx;
results(sinx, cosx, tgx, ctgx, secx, cosecx);
}

function cosec(x) {
cosecx=x;
sinx=1/cosecx;
cosx=Math.sqrt(1-sinx*sinx);
tgx=sinx/cosx;
ctgx=cosx/sinx;
secx=1/cosx;
results(sinx, cosx, tgx, ctgx, secx, cosecx);
}

function results(a, b, c, d, e, f) {
alert("sinx="+a+"\ncosx="+b+"\ntgx="+c+"\nctgx="+d+"\nsecx="+e+"\ncosecx="+f);
}
</script>
Вызывая функции sin(), cos() и др., мы им передавали значение аргумента x (sin(x)), те, в свою очередь, принимали это значение в переменную x (function sin(x)). Вызывая же функцию results(), мы передали ей значения sinx, cosx, tgx, ctgx, secx, cosecx (results(sinx, cosx, tgx, ctgx, secx, cosecx)), та же приняла их в переменные a, b, c, d, e, f (function results(a, b, c, d, e, f)). Т.обр., название параметра при передаче может не совпадать с названием параметра этой функции. Упражнение 34
Составить программу, которая вычисляет полусумму минимальных элементов в двух строках составленной из случайных чисел матрицы 10×10. Номера строк вводит пользователь.

Рекурсия

Рекурсия - это та же функция, но, которая вызывает сама себя. Наиболее популярный пример на рекурсию - программа, вычисляющая факториал числа n. Напомним, что n!=1·2·3·...·n ⇔ n!=n·(n−1)·...·3·2·1 ⇔ n!=n(n−1)!; 0!=1!=1. Т.е. можно вызывать одну и ту же функцию, меняя значение ее аргумента на единицу:
<script>
n=prompt("Введите число для вычисления его факториала");
n=Number(n);
alert(factorial(n+1));
function factorial(n) {
var x;
if ((n==0) || (n==1)) {return(1)}
else {
--n;
return(n*factorial(n));
}
}
</script>
Пользуясь оператором return() в конце функции, мы не просто возвращаем значение переменной, но и вновь вызываем функцию.
Посмотрите, как мы первый раз вызвали функцию - через метод alert(). Именно такой способ вызова функции называется вызовом функции. Тавтология?! Можете смело пропустить то, что будет написано ниже: к JavaScript'у это значение не имеет. Так вот, вообще в программировании существуют функции и процедуры. Они, как правило, объявляются разными операторами и действуют по-разному. Первые должны присваиваться переменным (например, a=somefunction()), ну или находиться в другом методе, как в случае с алертом.
Процедуры же объявляются отдельной строкой, как оператор (someprocedure();). До последней программы мы пользовались процедурами. В JavaScript процедуры и функции были объединены. Это удобно - не надо думать, что выбирать.
Упражнение 35
"Интересная прогрессия". Вычислить сумму n первых элементов такой последовательности: 1, 1, 2, 4, 7, 11, 16, 22, 29, 37, ... Т.е. разность между первым и вторым элементом равна 0, а разность между каждыми следующими элементами растет в арифметической прогрессии с разностью 1. n вводит пользователь.
[В начало]
Hosted by uCoz