Вопрос № 96780:
Здравствуйте уважаемые эксперты!
Не могу понять в чём отличие использования функции с аргументами и без. Вот пример элементарной программы без аргументов:
#include <iostream>
#include <conio.h>
using names...
Вопрос № 96.780
Здравствуйте уважаемые эксперты!
Не могу понять в чём отличие использования функции с аргументами и без. Вот пример элементарной программы без аргументов:
#include <iostream>
#include <conio.h>
using namespace std;
int summa ()
{
int sum, a, b;
cout << "Vvedite pervoe chislo
";
cin >> a;
cout << "Vvedite vtoroe chislo
";
cin >> b;
sum = a + b;
return sum;
}
void main ()
{
cout << "summa = " << summa ();
getch ();
}
Как видно из примера, после ввода двух чисел будет выведен результат, что и было нужно.
А теперь таже самая программа с аргументами:
#include <iostream>
#include <conio.h>
using namespace std;
int summa (int a, int b)
{
int sum;
cout << "Vvedite pervoe chislo
";
cin >> a;
cout << "Vvedite vtoroe chislo
";
cin >> b;
sum = a + b;
return sum;
}
void main ()
{
cout << "summa = " << summa ();
getch ();
}
Если оставить так, то компилятор сообщит о том, что функция не должна иметь нулевой аргумент:
error C2660: 'summa' : function does not take 0 arguments
Если попытаться присвоить значения сразу:
int summa (int a=9, int b=7)
То программа с компилируется и выведет сумму тех чисел, которые я ввёл с клавиатуры, а те значения которые я присвоил в скобках будут проигнорированы. Отсюда вопрос, какой смысл несут эти аргументы в скобках? Если не видно, что они используются по назначению. Или приведите пожалуйста ПРОСТОЙ пример когда их использование необходимо.
Отвечает: Алексей Демаков
Здравствуйте, Чирков Вячеслав Александрович!
Аргументы функции используются для передачи значения между функциями. В вашем примере и вод значений и их использование находятся в функции summa(). А что если вводиться a и b должны в функции main(), а результат должен вычисляться в summa()?
В этом случае
int sum, a, b;
cout << "Vvedite pervoe chislo
";
cin >> a;
cout << "Vvedite vtoroe chislo
";
cin >> b;
переедет в main(), вызов будет выглядеть как
summa(a,b)
а определение функции summa так:
int summa (int a, int b)
{
return a + b;
}
Вроде, простой пример.
Если алгоритм работы функции summa() более сложный, а используется (вызывается) она в нескольких местах, то выигрыш от использования функции увеличивается - пишем ее один раз, а используем - несколько.
Ответ отправил: Алексей Демаков (статус: Студент)
Ответ отправлен: 30.07.2007, 23:57
Отвечает: estiGi
Здравствуйте, Чирков Вячеслав Александрович!
Ну и на счет параметров по умолчанию, т.е. объявления функции как
int summa (int a=9, int b=7)
это означает, что вы можете hgthtlfdfnm? а можете не передавать в функцию параметры. Если передадите, то параметры по-умоляанию (9 и 7) будут заменены на те, которые вы передали. Вы можете передать только один параметр (первый), а второй не передавать.
И они не проигнорированы, как вы думаете. Вы же меняете их значения, вписывая в них новые данные далее в программе. Попробуйте перед вызовом cin>> сделать
cout << a << " " << b
вы увидите те значения, которые вы установили по-умолчанию, т.е. 9 и 7 - если, конечно, вы вызовете функцию , не передавая им какие-то другие параметры.
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 31.07.2007, 00:17
Отвечает: Valodya
Здравствуйте, Чирков Вячеслав Александрович!
Если точнее, то сообщение гласит - функция не принимает 0 аргументов, другими словами - Вы должны передать в неё два аргумента, согласно её прототипу(объявлению).
Эти аргументы несут вполне определённый смысл: их использует функция в качестве входных параметров. Соответсвенно их использование необходимо только в тех случаях, когда надо передать определённые внешние данные (параметры) в функцию.
Ваш пример и будет выводить введённые с клавы значения, ибо они перезаписывают первоначальные значения переменных a и b.
Слегка переделал Ваш пример:
Приложение:
Ответ отправил: Valodya (статус: 1-ый класс)
Ответ отправлен: 31.07.2007, 08:26
Отвечает: kool
Здравствуйте, Чирков Вячеслав Александрович!
Все правильно компилер говорит -
ф-ция должна иметь два аргумента. Вы ее сами перед этим
так описали:int summa (int a, int b).Нужно так см. приложение.
Смысл параметров (аргументов) функции каждый видит сам.
Если они вам не нужны - не используете. В этой проге они
действительно лишние, т.к. что бы им не присваивали фу-ция
их изменит. Но если по человечески делать ввод с клавы вне ф-ции,
то они могут очень пригодиться. Удачи!
Приложение:
--------- I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 31.07.2007, 19:49
Отвечает: Garmash Dima
Здравствуйте, Чирков Вячеслав Александрович!
Функция int summa (int a, int b) должна иметь 2 аргумента.
Функция int summa (int a, int b=2) должна иметь 1 аргумент, а второй аргумент можно не вводить.
Функция int summa (int a=2, int b=2) может не иметь аргументов, но аргумент можно ввести.
в вашем случае нужно сделать так, как написано в приложении.
это необходимо для универсальности.можно эту же функцию использовывать в других программах,
например скложить 2 вычисленных компьютором числа.
Приложение:
Ответ отправил: Garmash Dima (статус: 1-ый класс)
Ответ отправлен: 01.08.2007, 06:30