Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.82
d2funlife
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 17
#1

Вывод значения двух переменных - C++

02.08.2011, 23:28. Просмотров 7358. Ответов 33
Метки нет (Все метки)

есть к примеру :

шаблон функции (параметры)
{ что то делаеться и return двух переменных}

вызов : cout<<шаблон функции(аргументы);

выводит только одну перемнную, как сделать что б выводило обе ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2011, 23:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод значения двух переменных (C++):

Поменять значения двух переменных, не используя третью - C++
Как поменять значения двух переменных, не используя третью? Написать функцию swap, которая бы осуществляла данный обмен для целочисленных...

Создать функции нахождения максимального значения из двух переменных - C++
#include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;cstdlib&gt; using namespace std; double H(double A, double B, double C) { int...

Поменять местами значения двух переменных, не используя дополнительной - C++
4.Напишите программу,которая меняет местами значения двух переменных в памяти. В задаче 4 попробуйте найти решение которое не использует...

Как поменять значения двух переменных не используя дополнительную переменную? - C++
Как поменять значения двух переменных не используя дополнительную переменную?

Поменять местами значения двух переменных, используя один указатель - C++
Это вообще реально? С двумя указателями вот так, с вероятностью ошибки т. к. засылаем на неизвестный адрес. #include &lt;iostream.h&gt; ...

Решение задачи Абрамяна: поменять местами значения двух переменных - C++
Алгоритм и коды программы

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Сыроежка
Заблокирован
03.08.2011, 00:12 #16
В общем случае считается плохим интерфейсом, когда функция ничего не возвращает, а через ее параметры передаются в вызывающую функцию несколько значений. Желательно избегать этого. Кроме того такую функцию нельзя использовать в выражениях. То есть к такому интерфейсу прибегают в крайних случаях, коогда ничего лучшего придумать не могут.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
03.08.2011, 00:13 #17
Цитата Сообщение от Сыроежка Посмотреть сообщение
Это вы заблуждаетесь и путаете понятия! Ваша функция ничего не возвращает! Учите понятие возвращаемого значения функции. Ваша функция объявлена с возвращаемым типом void. Вы путаете возвращаемое значение функции с передачей значений через параметры. А это не одно и тоже. Так что не учите ученых!
А давай ты мне не будешь говорить про значения возвращаемые функцией.
Если ты хотел сказать что-то умное - то надо сказать понятным языком, так чтобы все поняли.
А как ты сказал - так я тебе и возразил.
Из функции можно вернуть далеко не одну переменную!
Цитата Сообщение от Сыроежка Посмотреть сообщение
Нельзя из функции вернуть две переменные!
0
Сыроежка
Заблокирован
03.08.2011, 00:22 #18
Цитата Сообщение от lazybiz Посмотреть сообщение
А давай ты мне не будешь говорить про значения возвращаемые функцией.
Если ты хотел сказать что-то умное - то надо сказать понятным языком, так чтобы все поняли.
А как ты сказал - так я тебе и возразил.
Либо выражайся понятным языком, либо лучше промолчи. Из функции можно вернуть далеко не одну переменную!
Я то как раз сказал грамотно! Функция не возвращает свои параметры. Функция возвращает значение, тип которого задан в ее объявлении и передается через оператор return. Я понимаю, что со своей колокольни отрывочных знаний С++ вы воспринимаете правильные ответы, как неправильные. Я вам настоятельно советую разобраться с понятием "возвращаемого значения функции"!
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
03.08.2011, 00:34 #19
Цитата Сообщение от Сыроежка Посмотреть сообщение
Функция возвращает значение, тип которого задан в ее объявлении и передается через оператор return.
Да ты сам суть своего вопроса даже не понимаешь... Про return и слова не было, были слова про то что можно ли/нельзя вернуть из функции несколько значений.
Если есть желание то пиши вызывающую и вызываемую функции, а я при всех тебе покажу как это делается.
0
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
03.08.2011, 00:43 #20
возвращать = return (по-англицки)
по-моему все более чем очевидно. не говоря уже про то, что ТС сразу спросил, как вернуть из ф-ции, используя return, на что и получил ответ.

В общем случае считается плохим интерфейсом, когда функция ничего не возвращает, а через ее параметры передаются в вызывающую функцию несколько значений. Желательно избегать этого. Кроме того такую функцию нельзя использовать в выражениях. То есть к такому интерфейсу прибегают в крайних случаях, коогда ничего лучшего придумать не могут.
а можно немного раскрыть эти слова? не совсем понял в чем именно негатив)
0
Сыроежка
Заблокирован
03.08.2011, 00:56 #21
Цитата Сообщение от lazybiz Посмотреть сообщение
Да ты сам суть своего вопроса даже не понимаешь... Про return и слова не было, были слова про то что можно ли/нельзя вернуть из функции несколько значений.
Если ты на столько упертый то я тебе могу это публично доказать. Если есть желание то пиши вызывающую и вызываемую функции, а я при всех тебе покажу как это делается.
Тяжело иметь дело с человеком, который безграмотен, а потому пользуется не определленными в данной области терминами, а своими обывательскими представлениями.

Во-первыХ. термин "возвращаемое значение функции" определен в стандарте языка С++/С. То есть это вполне тконкретное определение, а не ваши какие-то собственные представления.

Но даже если учесть, что вы не знаете стандарта языка С++/С, а исходите из ваших отрывочных сведений о языке, полученных из разных источников, то хотя бы следовало понимать значение слова "возвращать" с точки зрения обычной семантики разговорного языка. Возвращать можно то, что получид. Например, вы мне дали тысячу рублей, я их вам возвращаю. То есть что получил, то и можно вернуть.
Теперь обратимся к вызову функции. У функции объявлены параметры. Эти параметры являются локальными переменными функции. Повторяю, если сразу же не поняли, локальными переменными функции. Их область жизни - это тело функции. В данном конкретном примере, когда вы передаете указатели на что-то, то эти указатели являются локальными переменнымпи функции. А все локальные переменные функции удаляются ее после завершения ее работы! То есть вы передали функции указатели, а она их вам не возвратила, а удалила!

Чечтно говоря, мне более не хочется с вами вступать в дискуссию, потому что вы вполне строго определенные понятия языка С++/С, описанные в стандарте, заменяете своими обывательскими представлениями. Я настоятельно советую вам обратиться к стандарту и прочитать там, что такое "возвращаемые значения функции".
0
Jupiter
03.08.2011, 01:14
  #22

Не по теме:

ребята, хватит оффтопить и придираться к словам, хотите согнать зло? идите в раздел C# или Java там можно отрываться по полной

0
Сыроежка
Заблокирован
03.08.2011, 01:50 #23
Цитата Сообщение от Paporotnik Посмотреть сообщение
возвращать = return (по-англицки)
по-моему все более чем очевидно. не говоря уже про то, что ТС сразу спросил, как вернуть из ф-ции, используя return, на что и получил ответ.


а можно немного раскрыть эти слова? не совсем понял в чем именно негатив)
Это связано именно с понятием возврращаемоого значения функции. Обычно функции используются в выражениях, и значением функции в выражении является возвращаемое ее значение. Ежели функция имеет тип возвращаемого значения void, то обычно мы считаем, что функция ничего не возвращает, то есть что нас не интересует возвращаемое значение функции. Это интуитивно понятно при чтении кода.

Представьте себе вызов функции

int *p1;
int *p2;
...
...
f( p1, p2 );


Можете вы по такому вызову определить, возвращает ли что-то функция или нет?! Очевидно, что по этому коду совершенно нельзя ничего сказать, меняет ли функция какие-то значения в вызывающем коде. Это аналогично тому отрицательному эффекту, когда в какой-то функции вы обращаетесь к глобальным переменным. То есть видя такой вызов функции, человек, читающий код, не может сказать, какие побочные изменения совершает функция. Вы даже не можете сказать, а удаляет ли функция память, на которую указывают указатели, или нет?
Естественно вам надо будет сомнтреть описание функции. Если вы сделаете это поверхностно, увидев, что функция возвращает void, то вы можете подумать, что побочных эффектов у функции нет, так как обычно имеет место практика возвращать void, если результат работы функции не важен.
Такой код очень тяжело читать, особенно если у подобной функции много параметров. Какие параметры создают побочные эффекты, а какие нет? Поэтому чтобы понять код, вам придется отвлекаться на детальное чтение описания функции. То есть такой код не является интуитивно понятным.
0
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
03.08.2011, 02:04 #24
ну, если читаемость является определяющей, то такой
C++
1
2
3
int p1,p2;
...
f(&p1,&p2);
вариант лучше?
0
Сыроежка
Заблокирован
03.08.2011, 02:07 #25
Я приведу пример из своей практике, когда работал в достаточно крупном проекте. Там была функция, которая возвращала void, а в качестве паракметра среди прочего принимала указатель на структуру, выделенную в динамической области памяти. В зависимости от других параметров данная структура определенным облразом менялась. Но была там одна ветка в этой функции, когда эта структура удалялась! И поэтому когда в вызывающем коде продолжали работать с указателем на эту структуру, то программа аварийно завершалась. И ошибка возникала не в том месте, где должна была бы возникнуть, а совершшенно в другом месте. Дело в том, что удаляемая память не срразу же перезаписывалась благодаря последующему запросу на выделение памяти, а потому некоторое время с ней можно было работать. Такую ошибку очень трудно найти! Так как читающий код, видя вызов такой функции, не мог предположить, что значение указателя станет недействительным. если бы эта функция вместо void возвращала бы тот же самый указатель, который ей передали в качестве параметра, то тогда бы можно было бы сделать проверку на то, что он равен NULL. Но этого не было сделано. В результате на поиск ошибки ушла целая неделя!
0
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
03.08.2011, 02:13 #26
могу привести в пример С-шную библиотеку NXOpen к UGS NX. там ооочень много ф-ций работает по такому принципу и довольно редко используется возврат какой-либо структуры, если возврат вообще есть.
0
easybudda
Модератор
Эксперт CЭксперт С++
9625 / 5573 / 947
Регистрация: 25.07.2009
Сообщений: 10,707
03.08.2011, 02:49 #27
Цитата Сообщение от lazybiz Посмотреть сообщение
Ой как же ты заблуждаешься, Сыроеженька....
Нет, не заблуждается. Уже обосновали.

Цитата Сообщение от Сыроежка Посмотреть сообщение
В общем случае считается плохим интерфейсом, когда функция ничего не возвращает, а через ее параметры передаются в вызывающую функцию несколько значений. Желательно избегать этого. Кроме того такую функцию нельзя использовать в выражениях. То есть к такому интерфейсу прибегают в крайних случаях, коогда ничего лучшего придумать не могут.
А вот с этим абсолютно не согласен! К примеру: accept() - к чему бы тут ещё что-то придумывать?
Цитата Сообщение от Сыроежка Посмотреть сообщение
Но была там одна ветка в этой функции, когда эта структура удалялась!
Это не значит, что сам метод передачи параметров по ссылке порочен, просто накосячил кто-то... В этом плане Си-Диез лучше использовать - там мелкомягкие умники практически все потенциально опасные конструкции взяли, да запретили...

Добавлено через 10 минут
Цитата Сообщение от d2funlife Посмотреть сообщение
выводит только одну перемнную, как сделать что б выводило обе ?
если назначение функции - выводить что-то в поток, почему бы ей этот самый поток параметром не передавать и внутри неё хоть два, хоть двадцать значений выводить?..
1
Сыроежка
Заблокирован
03.08.2011, 20:36 #28
Цитата Сообщение от Paporotnik Посмотреть сообщение
могу привести в пример С-шную библиотеку NXOpen к UGS NX. там ооочень много ф-ций работает по такому принципу и довольно редко используется возврат какой-либо структуры, если возврат вообще есть.
Вы поверхностно относитесь. библиотека - это один проект, где интерфейс унифицирован. То есть когда разрабатывалась библиотека, решался вопрос об общем интерфейсе для нее. Кроме того часто в С пишут в объектно-ориентированном стиле, когда некоторую структуру данных рассмпатривают как объект, и указатель на эту структуру данных передают в вызов каждой функции. Либо такая структура, которая хранит состояние системы, является глобальной. Поэтому для анализа вызова какой-нибудь функции проекта используется не возвращаемое значение, а обращение к этой глобальной структуре, чтобы получить статус состояния.

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

Что касается исходной задачи, то возникает вопрос: а почему что-то там рассчитывается для двух раздельных переменных?! Почему не для одной, или не для трех переменных? наверное эти переменные как-то связаны между собой? Допустим, они представляют собой точку плоскости. Тогда почему не использовать абстракцию Point, и не передавать ее функцию вместо двух отдельных переменных? Кроме того, а если нам нужно не менять исходные значения, а получить вычисленные выражения, чтобы их с чем-то там сравнить, то что тогда делать?! Все это приводит к выводу, что интерфейс данной функции крайне неудачный.

Добавлено через 5 минут
Цитата Сообщение от easybudda Посмотреть сообщение
А вот с этим абсолютно не согласен! К примеру: accept() - к чему бы тут ещё что-то придумывать?
Как раз этот тот случай, когда другого выхода у разработчиков не было. Вы просто оставили без внимания, что здесь передаются указатели на структуры, то есть это тот тяжелый случай, когда в функцю необходимо передать много параметров, и многие многие значение передаются в вызывающий код через параметры. То есть ваш пример на самом деле подтверждает мое высказывание.
0
d2funlife
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 17
05.08.2011, 01:53  [ТС] #29
Цитата Сообщение от easybudda Посмотреть сообщение
если назначение функции - выводить что-то в поток, почему бы ей этот самый поток параметром не передавать и внутри неё хоть два, хоть двадцать значений выводить?..
А наглядный пример можно ?
0
easybudda
Модератор
Эксперт CЭксперт С++
9625 / 5573 / 947
Регистрация: 25.07.2009
Сообщений: 10,707
05.08.2011, 02:12 #30
Цитата Сообщение от d2funlife Посмотреть сообщение
А наглядный пример можно ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class PlusMinus {
    int a;
    int b;
public:
    PlusMinus(int _a = 0, int _b = 0) : a(_a), b(_b) {}
    friend std::ostream & operator << (std::ostream & ost, const PlusMinus & fc){
        ost << fc.a << " + " << fc.b << " = " << (fc.a + fc.b) << std::endl;
        ost << fc.a << " - " << fc.b << " = " << (fc.a - fc.b) << std::endl;
        
        return ost;
    }
};
 
int main(){
    int a, b;
    
    while ( std::cout << "A = " && std::cin >> a && std::cout << "B = " && std::cin >> b )
        std::cout << PlusMinus(a, b) << "One more time..." << std::endl;
    
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2011, 02:12
Привет! Вот еще темы с ответами:

Поменять местами значения двух переменных без использования дополнительной переменной - C++
4. Написать программу, которая меняет местами значения двух переменных без использования дополнительной переменной.

Написать программу, которая меняет местами значения двух переменных с использованием дополнительной переменной. - C++
3. Написать программу, которая меняет местами значения двух переменных с использованием дополнительной переменной. Пункт 5.16 Правил:...

Поменять местами значения целых переменных х и у не используя дополнительных переменных - C++
Знаю, что это очень простая задача, но никак не могу сделать, пожалуйста помогите!!! Поменять местами значения целых переменных х и у не...

Вывести результат двух операций с использованием двух переменных - C++
Такие дела: надо ввести с клавиатуры 4 переменные, используя только 2 int, и посчитать результат двух выражений Есть такой вариант, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.08.2011, 02:12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru