Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 812
от 05.08.2007, 00:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 499, Экспертов: 66
В номере:Вопросов: 1, Ответов: 5


Вопрос № 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)

То программа с компилируется и выведет сумму тех чисел, которые я ввёл с клавиатуры, а те значения которые я присвоил в скобках будут проигнорированы. Отсюда вопрос, какой смысл несут эти аргументы в скобках? Если не видно, что они используются по назначению. Или приведите пожалуйста ПРОСТОЙ пример когда их использование необходимо.

Спасибо!
Отправлен: 30.07.2007, 23:38
Вопрос задал: Чирков Вячеслав Александрович (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Алексей Демаков
Здравствуйте, Чирков Вячеслав Александрович!

Аргументы функции используются для передачи значения между функциями. В вашем примере и вод значений и их использование находятся в функции 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.54 beta от 01.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное