Что такое аргумент и каким он может быть? каково значение слова «аргумент»?

Тест

Задание №1: Что не так со следующим фрагментом кода?

void multiply(int a, int b)
{
return a * b;
}

int main()
{
std::cout << multiply(7, 8) << std::endl;
return 0;
}

1
2
3
4
5
6
7
8
9
10

voidmultiply(inta,intb)

{

returna *b;

}
 

intmain()

{

std::cout<<multiply(7,8)<<std::endl;

return;

}

Задание №2: Какие здесь есть две проблемы?

#include <iostream>

int multiply(int a, int b)
{
int product = a * b;
}

int main()
{
std::cout << multiply(5) << std::endl;
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12

#include <iostream>
 

intmultiply(inta,intb)

{

intproduct=a *b;

}
 

intmain()

{

std::cout<<multiply(5)<<std::endl;

return;

}

Задание №3: Какой результат выполнения следующей программы?

#include <iostream>

int add(int a, int b, int c)
{
return a + b + c;
}

int multiply(int a, int b)
{
return a * b;
}

int main()
{
std::cout << multiply(add(3, 4, 5), 5) << std::endl;
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#include <iostream>
 

intadd(inta,intb,intc)

{

returna+b+c;

}
 

intmultiply(inta,intb)

{

returna *b;

}
 

intmain()

{

std::cout<<multiply(add(3,4,5),5)<<std::endl;

return;

}

Задание №4: Напишите функцию doubleNumber(), которая принимает целое число в качестве параметра, удваивает его, а затем возвращает результат обратно в caller.

Задание №5: Напишите полноценную программу, которая принимает целое число от пользователя (используйте ), удваивает его с помощью функции doubleNumber() из предыдущего задания, а затем выводит результат на экран.

График функции

А еще это означает, что решать уравнение для всех возможных значений х нет необходимости. Для функции можно построить график, т.е. отобразить зависимость у от х визуально. Для этого используется плоская система координат с осями х и у. Соответственно по оси х откладывается значение переменной х, а по оси у значение переменной у, определенной для этого значения х.

В простых случаях, т.е. когда между переменными существует линейная зависимость, для построения графика достаточно знать координаты 2 точек. Например для функции f(x) = 2х в пределах от 0 до 4 график будет выглядеть так:

Что такое аргумент и каким он может быть? каково значение слова "аргумент"?

Рисунок 538.1. График функции f(x) = 2x.

Сначала мы определяем значения функции для нижнего (х = 0) и верхнего (х = 4) пределов: f(0) = 2·0 = 0, f(4) = 2·4 = 8. Эти результаты и будут координатами точек (показаны на рисунке 538.1 красным цветом), через которые проходит график функции. Прямая, соединяющая эти точки (показана на рисунке 538.1 синим цветом) — это и есть график рассматриваемой функции.

Таким образом, для всех промежуточных значений х, а это могут быть не только натуральные (т.е. целые) числа, мы можем определять значения у по графику. Для этого достаточно провести вертикальную линию из точки, обозначающей значение х, до графика (показан на рисунке 538.1 синей линией), а затем провести горизонтальную линию из точки пересечения вертикальной линии и графика. Пересечение горизонтальной линии с осью у покажет значение переменной у для соответствующего значения х. На рисунке 538.1 подобные действия не показаны, чтобы не усложнять график.

Более того, понятие функции применимо и к простым уравнениям, содержащим только одну неизвестную, а потому постоянную величину, и для таких уравнений тоже можно построить график. Например, уравнение у = 7 — 2 можно записать так: у = f(x) = 5 и тогда графиком функции будет прямая горизонтальная линия, проходящая на высоте 5 делений от оси х.

А теперь несколько слов о том, зачем все это может понадобиться например при изучении теоретической механики или теории сопротивления материалов.

При расчете строительных конструкций, например балок, необходимо определить значение поперечных сил и моментов, действующих в различных сечениях балки, а также углы поворота и перемещения нейтральной оси балки. Для этого строятся эпюры поперечных сил, моментов, углов поворота и прогиба. Так вот эти эпюры и есть графики соответствующих функций.

При этом длина балки l измеряется по оси х, соответственно нижний предел функции х = 0, а верхний предел функции х = l.

Например уравнение моментов М(х) = qlx/2 — qx2/2 при действии на балку равномерно распределенной нагрузки в обще виде можно записать так:

у = f(x) = qlx/2 — qx2/2 (538.6)

Но на этом увлекательный мир уравнений, а также функций, их аргументов и т.п. не заканчивается, а только начинается. Следующий уровень сложности — это дифференциальные уравнения, когда одна из неизвестных величин является производной или дифференциалом второй неизвестной величины, но это уже отдельная большая тема.

Ответы

Чтобы просмотреть ответ, кликните на него мышкой.

Ответ №1

Функция multiply() имеет тип возврата void, что означает, что эта функция не возвращает значения. Но, так как она всё равно пытается возвратить значение с помощью оператора return, мы получим ошибку от компилятора. Функция должна иметь тип возврата int.

Ответ №2

Проблема №1: main() передаёт один аргумент в multiply(), но multiply() имеет два параметра.

Проблема №2: multiply() вычисляет результат и присваивает его локальной переменной, которую не возвращает обратно в main(). А поскольку тип возврата функции multiply() — int, то мы получим ошибку (в некоторых компиляторах) или неожиданные результаты (в остальных компиляторах).

Ответ №3

Функция multiply() принимает следующие параметры: и . Сначала процессор обрабатывает , т.е. . Затем уже выполняет операцию умножения, результатом которой является . Ответ: 60.

Ответ №4

int doubleNumber(int a)
{
return 2 * a;
}

1
2
3
4

intdoubleNumber(inta)

{

return2*a;

}

Ответ №5

#include <iostream>

int doubleNumber(int a)
{
return 2 * a;
}

int main()
{
int a;
std::cout<<«Enter a number: «;
std::cin >> a;
std::cout << doubleNumber(a) << std::endl;
return 0;
}

/*
// Следующее решение является альтернативным:
int main()
{
int a;
std::cout<<«Enter a number: «;
std::cin >> a;
a = doubleNumber(a);
std::cout << a << std::endl;
return 0;
}
*/

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

#include <iostream>
 

intdoubleNumber(inta)

{

return2*a;

}
 

intmain()

{

inta;

std::cout<<«Enter a number: «;

std::cin>>a;

std::cout<<doubleNumber(a)<<std::endl;

return;

}
 
/*
// Следующее решение является альтернативным:
int main()
{
   int a;
   std::cout<<«Enter a number: «;
   std::cin >> a;
   a = doubleNumber(a);
   std::cout << a << std::endl;
   return 0;
}
*/

Примечание: У вас могут быть и другие решения заданий №4 и №5 — это ок. В программировании есть много случаев, когда одну задачу можно решить несколькими способами.

Когда начинают учить алгебру в школе?

Что такое аргумент и каким он может быть? каково значение слова "аргумент"?

Разделение математики на несколько областях определило для алгебры решение определенных уравнений, под названием алгебраические уравнения. Что такое алгебра как предмет можно узнать только в 7-ом классе. Именно тогда вместе привычной математики появляется два отдельных предмета: алгебра и геометрия. Изучение начинается с простых понятий, также как и в случае других учебных процессов, все строится от простого материала к сложному.

7 класс оптимальное время для того, чтобы узнать, что такое алгебра. Вместо обычных операций с числами осуществляется переход на переменные. Так проще понять общие законы арифметики, научиться работать с неизвестными и функциями. Алгебру можно разделить на 5 отдельных категорий:

— общая алгебра

— элементарная алгебра

— линейная алгебра

— универсальная алгебра

— алгебраическая комбинаторика.

Школьная программа подразумевает изучение исключительно элементарной категории. Элементарная алгебра занимается изучением операций с вещественными числами. Перемененные и постоянные обозначены в алгебре символами в виде букв. С их помощью происходит преображение уравнений и математических выражений на основе четких правил.

Функция

Даже такие относительно простые уравнения как (538.5), решать 100 раз очень долго. А ведь уравнения бывают гораздо более сложными, а область определения практически бесконечной.

Для таких случаев и придумано понятие функции. Т.е. функция — это не только обозначение связи между неизвестными переменными, но еще и как бы обозначение действий, которые необходимо совершить для определения значения функции. Возможно поэтому и выбрано название «функция», от латинского functio — исполнение, совершение, осуществление.

При этом математическая запись следующего вида:

у = f(x) = x · 2 (538.5.2)

означает, что у является функцией аргумента х, а для определения значения функции — переменной у — достаточно значение аргумента функции — независимой переменной х — умножить на 2.

Переменные неизвестные величины

Иногда жизнь ставит перед нами более сложные задачи. Например, мы по-прежнему хотим купить 2 пирожка, но еще не определились с выбором, так как пирожков с различной начинкой на рынке много и цена у них разная, от 3 до 30 рублей, а денег в кармане мало.

В этом случае с точки зрения математики разная цена пирожков становится переменной величиной х, а требуемая сумма денег для покупки пирожков — переменной величиной у, зависящей от значения переменной х. Языком математики эту зависимость можно выразить так:

у = 2 · х (538.5)

Т.е если один пирожок стоит 3 рубля, то нам для приобретения 2 пирожков потребуется как и прежде 6 рублей, а если мы хотим купить 2 пирожка, стоящих по 30 рублей каждый, то нам потребуется уже 60 рублей. Это конечно еще не высшая математика, но очень близко к тому.

В данном случае переменная х — возможная цена пирожка — это аргумент функции (или аргумент продавца, расхваливающего различные начинки пирожков). От нашего желания купить пирожков побольше и подешевле цена никак не зависит, поэтому переменная х является независимой переменной. А вот переменная у — необходимое количество денег, которое мы готовы потратить на покупку 2 пирожков, зависит и от нашего желания сэкономить и от значения переменной х.

Часто переменные величины называются просто переменными, а уравнения с двумя переменными — функциональными уравнениями.

Ещё примеры

Рассмотрим ещё несколько вызовов функций:

#include <iostream>

int add(int a, int b)
{
return a + b;
}

int multiply(int c, int d)
{
return c * d;
}

int main()
{
std::cout << add(7, 8) << std::endl; // внутри функции add(): a = 7, b = 8, значит a + b = 15
std::cout << multiply(4, 5) << std::endl; // внутри функции multiply(): c = 4, d = 5, значит c * d = 20

// Мы можем передавать целые выражения в качестве аргументов
std::cout << add(2 + 3, 4 * 5) << std::endl; // внутри функции add(): a = 5, b = 20, значит a + b = 25

// Мы можем передавать переменные в качестве аргументов
int x = 4;
std::cout << add(x, x) << std::endl; // будет 4 + 4

std::cout << add(1, multiply(2, 3)) << std::endl; // будет 1 + (2 * 3)
std::cout << add(1, add(2, 3)) << std::endl; // будет 1 + (2 + 3)

return 0;
}

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

#include <iostream>
 

intadd(inta,intb)

{

returna+b;

}
 

intmultiply(intc,intd)

{

returnc *d;

}
 

intmain()

{

std::cout<<add(7,8)<<std::endl;// внутри функции add(): a = 7, b = 8, значит a + b = 15

std::cout<<multiply(4,5)<<std::endl;// внутри функции multiply(): c = 4, d = 5, значит c * d = 20

// Мы можем передавать целые выражения в качестве аргументов

std::cout<<add(2+3,4*5)<<std::endl;// внутри функции add(): a = 5, b = 20, значит a + b = 25

// Мы можем передавать переменные в качестве аргументов

intx=4;

std::cout<<add(x,x)<<std::endl;// будет 4 + 4

std::cout<<add(1,multiply(2,3))<<std::endl;// будет 1 + (2 * 3)

std::cout<<add(1,add(2,3))<<std::endl;// будет 1 + (2 + 3)

return;

}

Результат выполнения программы:

С первыми двумя вызовами всё понятно.

В третьем вызове, параметрами являются выражения, которые сначала нужно обработать. и результат присваивается переменной . и результат присваивается переменной . Результатом выполнения функции является значение .

Следующая пара относительно лёгкая для понимания:

int x = 4;
std::cout << add(x, x) << std::endl; // будет 4 + 4

1
2

intx=4;

std::cout<<add(x,x)<<std::endl;// будет 4 + 4

Здесь уже и . Поскольку , то . Результат — .

Теперь рассмотрим вызов посложнее:

std::cout << add(1, multiply(2, 3)) << std::endl; // будет 1 + (2 * 3)

1 std::cout<<add(1,multiply(2,3))<<std::endl;// будет 1 + (2 * 3)

При выполнении этого процессор должен определить значения параметров и функции add(). С параметром всё понятно — мы передаем значение (). А вот чтобы определить значение параметра , нам необходимо выполнить операцию умножения: , результат — . Затем возвращает число , которое и выводится на экран.

Короче говоря:

Последний вызов может показаться немного сложным из-за того, что параметром функции add() является другой вызов add():

std::cout << add(1, add(2, 3)) << std::endl; // будет 1 + (2 + 3)

1 std::cout<<add(1,add(2,3))<<std::endl;// будет 1 + (2 + 3)

Но здесь всё аналогично примеру выше. Перед тем, как процессор вычислит внешний вызов функции add(), он должен обработать внутренний вызов функции . . Затем процессор обрабатывает функцию , результатом которой является значение . Затем передается в std::cout.

Короче говоря:

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

Во многих случаях нам нужно будет передавать данные в вызываемую функцию, чтобы она могла с ними как-то взаимодействовать. Например, если мы хотим написать функцию умножения двух чисел, то нам нужно каким-то образом сообщить функции, какие это будут числа. В противном случае, как она узнает, что на что перемножать? Здесь нам на помощь приходят параметры и аргументы.

Параметр функции — это переменная, которая используется в функции, и значение которой предоставляет caller (вызывающий объект). Параметры указываются при объявлении функции в круглых скобках. Если их много, то они перечисляются через запятую, например:

// Эта функция не имеет параметров
void doPrint()
{
std::cout << «In doPrint()» << std::endl;
}

// Эта функция имеет один параметр типа int: a
void printValue(int a)
{
std::cout << a << std::endl;
}

// Эта функция имеет два параметра типа int: a и b
int add(int a, int b)
{
return a + b;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

// Эта функция не имеет параметров

voiddoPrint()

{

std::cout<<«In doPrint()»<<std::endl;

}
 
// Эта функция имеет один параметр типа int: a

voidprintValue(inta)

{

std::cout<<a<<std::endl;

}
 
// Эта функция имеет два параметра типа int: a и b

intadd(inta,intb)

{

returna+b;

}

Параметры каждой функции действительны только внутри этой функции. Поэтому, если printValue() и add() имеют параметр с именем , то это не означает, что произойдет конфликт имен. Эти параметры считаются независимыми и никак не взаимодействуют друг с другом.

Аргумент функции — это значение, которое передается из caller-а в функцию и которое указывается в скобках при вызове функции в caller-е:

printValue(7); // 7 – это аргумент функции printValue()
add(4, 5); // 4 и 5 – это аргументы функции add()

1
2

printValue(7);// 7 – это аргумент функции printValue()

add(4,5);// 4 и 5 – это аргументы функции add()

Обратите внимание, аргументы также перечисляются через запятую. Количество аргументов должно совпадать с количеством параметров, иначе компилятор выдаст сообщение об ошибке