Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/121: Рейтинг темы: голосов - 121, средняя оценка - 4.68
1 / 1 / 0
Регистрация: 04.05.2015
Сообщений: 42
1

Как вернуть два значения из функции?

18.11.2015, 21:55. Показов 23092. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят, нужно вернуть из функции два значения. Подскажите как. Без массива

C#
1
2
3
4
5
6
7
8
public double Diaginals()
        {
            
            double d1 =  Math.Sqrt(Math.Pow(((get_A_x()) - (get_C_x())), 2) + Math.Sqrt(Math.Pow(((get_A_y()) - (get_C_y())), 2)));
            double d2 = Math.Sqrt(Math.Pow(((get_B_x()) - (get_D_x())), 2) + Math.Sqrt(Math.Pow(((get_B_y()) - (get_D_y())), 2)));
          
           
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2015, 21:55
Ответы с готовыми решениями:

Как вернуть из функции два значения
Доброго времени суток! Подскажите, пожалуйста, как вернуть два значения: row и column из функции....

Как вернуть из функции два значения?
Подскажите,как вернуть из ф-ции 2 значения .Вроде ,как то можно с помощью pair ,но как здесь это...

Вернуть из функции два значения
функция должна находить максимальное и минимальное значение используя классы template <class T> T...

Как вернуть два значения из метода?
Как вернуть два значения из метода? При таком коде выдаёт предупреждение cs0162. public static...

16
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
18.11.2015, 22:02 2
C#
1
2
3
4
5
public void Diaginals(out double d1, out double d2)
{
    d1 = //...
    d2 = //...
}
0
116 / 115 / 64
Регистрация: 03.06.2013
Сообщений: 582
18.11.2015, 22:03 3
а можно так :
C#
1
2
3
4
5
 public double Diaginals(out double d1)
{
    d1 = //...
    return d2 = //...
}
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.11.2015, 22:16 4
Можно так:
C#
1
2
3
4
        public Tuple<double, double> GetValues()
        {
            return Tuple.Create(1d, 2d);
        }
Добавлено через 24 секунды
Цитата Сообщение от _Denis__ Посмотреть сообщение
вернуть из функции
Вернуть из метода.

Добавлено через 2 минуты
Можно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public class SomePair
    {
        public SomePair()
        {
        }
 
        public SomePair(double value1, double value2)
        {
            Value1 = value1;
            Value2 = value2;
        }
 
        public double Value1 { get; set; }
 
        public double Value2 { get; set; }
    }
C#
1
2
3
4
        public SomePair GetValues()
        {
            return new SomePair(1d, 2d);
        }
Добавлено через 1 минуту
Правда второй вариант имеет смысл, если называть свойства осмысленно, иначе от Tuple не особо отличается.

Добавлено через 4 минуты
Кстати, для этого конкретного случая подошла бы структура, а не класс. Два типа значений (value type) потому что. Хотя зависит от того, как это будет использоваться.
0
116 / 115 / 64
Регистрация: 03.06.2013
Сообщений: 582
18.11.2015, 22:28 5
Если человеку надо один это сделать зачем ему отдельный класс и структура.

Добавлено через 1 минуту
С Turple<> соглашусь, что отличный метод, особенно если нужно вернуть значений штук 5.
0
foo();
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
18.11.2015, 22:29 6
Цитата Сообщение от MaxSlim Посмотреть сообщение
особенно если нужно вернуть значений штук 5.
массив!?
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
18.11.2015, 23:05 7
Цитата Сообщение от rattrapper Посмотреть сообщение
массив!?
нет, ибо
Цитата Сообщение от _Denis__ Посмотреть сообщение
Без массива
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
19.11.2015, 08:16 8
Цитата Сообщение от MaxSlim Посмотреть сообщение
Если человеку надо один это сделать зачем ему отдельный класс и структура.
Я где-то уговаривал использовать отдельный класс? Смотря какой проект и вообще от ситуации зависит. Я на работе вносил изменения в один большой проект, так как на работе принцип простой (новая работа) - разбирайся сам. То когда ты вносишь изменения толком не понимая что для чего в этой программе и видишь, как в метод передают Dictionary, Value которого это KeyValuePair, то чтобы ничего не перепутать и не накосячить объявляешь класс, в котором создаёшь 3 именованных свойства и теперь этот класс, как Value у Dictionary (вместо KeyValuePair). Ну и дальше используешь везде этот класс. И с таким подходом уже нереально, что-то дальше напутать, чем с бесконечным множеством вложеных каких-то непонятных пар ключей значений.

Добавлено через 3 минуты
Всякие Tuple и 5 значений удобно использовать особенно во всяких лямбдах, когда ты чётков видишь, что ты только что в Tuple запихал и рядом в другой лямбде это оттуда вытаскиваешь. Ну и ещё некоторые ситуации.

Добавлено через 3 минуты
Я об этом:
C#
1
2
3
4
5
6
7
8
9
            Task.Factory.StartNew(() =>
            {
                return Tuple.Create(1, 2, 3, 4, 5);
            }).ContinueWith(
            task =>
            {
                Tuple<int, int, int, int, int> tuple = task.Result;
 
            }, TaskScheduler.FromCurrentSynchronizationContext());
Добавлено через 3 минуты
Цитата Сообщение от Casper-SC Посмотреть сообщение
чем с бесконечным множеством вложеных каких-то непонятных пар ключей значений.
Многие почему-то не понимают или забивают, что важна читабельность кода, чтобы сразу было всё понятно. А не понты - смотрите, как я умею использовать словарь и знаю о структуре такой-то и давайте я этот словарь прокину ещё в 10 методов и вы думайте потом там, что я прокинул (причём самый первыйметод гигантский, в котром происходят манипуляции с этим словарём в 5 разных циклах, каждый размером с мой монитор в высоту.

Это если ты пишешь софт, то проблем нет. А если потом его изучать другому человеку, то это будет, как минимум, неудобно.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.11.2015, 09:02 9
Цитата Сообщение от MaxSlim Посмотреть сообщение
С Turple<> соглашусь, что отличный метод, особенно если нужно вернуть значений штук 5.
Если человеку нужно вернуть значений 5, то тупл тут как раз-таки вообще не к месту. Плохо, что их сделали до 8 параметров, на 3-4 надо было остановиться.

Цитата Сообщение от _Denis__ Посмотреть сообщение
Ребят, нужно вернуть из функции два значения. Подскажите как. Без массива
Выше написали, свой класс/стандартный Tuple<>. Все эти out с точки зрения ООП полная ересь.
0
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
19.11.2015, 09:13 10
а страдать ООП головного мозга еще большая ересь, кто знает может у него обычная задача в которой ООП как лишняя 3 нога
как вариант использовать в функции класса ref (C# Reference) для параметра(ов)
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.11.2015, 09:17 11
агерон, какая разница, ооп или нет? в ФП так вообще функция мало того, что должна возвращать только одно значение, так еще и состояния не должна иметь.

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

Открою тайну: ref и out в язык добавили только для того, чтобы проще было вызывать PInvoke-код.
0
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
19.11.2015, 09:55 12
_Denis__, держи студент

C#
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
public void Diaginals(ref double d1, ref double d2)
{  
    double Ax = get_B_x();
    double Bx = get_B_x();
    double Cx = get_C_x();
    double Dx = get_D_x();
 
    double Ay = get_B_y();
    double By = get_B_y();
    double Cy = get_C_y();
    double Dy = get_D_y();  
    
    double d1 = DistanceBetweenPoints(Ax,Cx,Ay,Cy);
    double d2 = DistanceBetweenPoints(Bx,Dx,By,Dy); 
}
 
public double DistanceBetweenPoints(double x1, double x2, double y1, double y2)
{
    double x1x2 = x1 - x2;
    double y1y2 = y1 - y2;
    
    double SqrX1X2 = Math.Pow(x1x2, 2);
    double SqrY1Y2 = Math.Pow(x1x2, 2);
    
    double result = Math.Sqrt(SqrX1X2 + SqrY1Y2);
    
    return result;
}
Слона то мы в лавке и не приметили все мы такие функциональные и ООП - шные, а обычную формулу по вычислению расстояния между 2 точками за множеством скобок не увидели, лучше бы студенту обьяснили почему такой код это плохо и как нужно было отрефакторить код

Psilon а может нужно спуститься с небес на грешну землю и признать что за вашу так любимую функциональщину просто не платят в массе своей денег?

и что каждому инструменту свое время и место, а не выпячивать ООП - шность языка во главу угла

Добавлено через 5 минут
P. S. передача параметра по ссылке это не новое изобретение и ref и out оставлены для совместимости не просто так может вспомним что такое стек и как с ним работать да и бинарный код с асмом тоже забывать не стоит
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.11.2015, 10:02 13
Цитата Сообщение от агерон Посмотреть сообщение
P. S. передача параметра по ссылке это не новое изобретение и ref и out оставлены для совместимости не просто так может вспомним что такое стек и как с ним работать да и бинарный код с асмом тоже забывать не стоит
А, так мы по производительности теперь будем рассуждать?

А по производительности тоже лучше структуры использовать, ибо кэш-линия всего лишь 64 байта, а т.к. локальные данные компилятор может как угодно раскладывать, не факт, что они попадут за один memory call, когда как структура всегда будет.

Хотя о чем я говорю, от void-метода с ref-параметрами веет таким седым винапи, что страшно становится

Добавлено через 46 секунд
Цитата Сообщение от агерон Посмотреть сообщение
бинарный код с асмом тоже забывать не стоит
бинарный код с асмом - это кстати для красного словца вставлено? Ибо это одно и то же.
0
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
19.11.2015, 10:23 14
Бинарный (Двоичный код) , Что такое ассемблер к сожалению бинарный код и ассемблер это не одно и тоже и я не призываю на них писать я просто прошу не забывать что такое Процедурная парадигма т. к. реализацию к примеру сетевого стека 4 уровня OSI на oCaml не напишешь, еще раз повторяю каждому инструменту свое время и место в данной конкретной задаче ref или out отлично решают проблему возврата результатов вычислений без излишней сложности в виде ООП, на последок прошу вспомните что такое бритва Оккама и угомонитись
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
19.11.2015, 10:43 15
Цитата Сообщение от агерон Посмотреть сообщение
аждому инструменту свое время и место в данной конкретной задаче ref или out отлично решают проблему возврата результатов вычислений без излишней сложности в виде ООП
чисто мое мнение: out уместен только в методах типа
C#
1
2
3
4
bool TryParse(
    string s,
    out DateTime result
)
или типа такого
C#
1
2
3
4
bool SomeMethod(
    string s,
    out string error
)
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.11.2015, 11:04 16
Цитата Сообщение от агерон Посмотреть сообщение
Бинарный (Двоичный код) , Что такое ассемблер
Во-первых ссылаться на википедию как авторитетный источник - так себе идея.
Во-вторых Ассемблер по-определению это просто мнемоничесая запись двоичного кода. То есть add eax ebx и 0241244 это одно и то же, просто записанное на разных языках. Корова и Cow - это тоже разные понятия?
В-третьих oCaml тьюринг-полный язык, и на нем можно написать все что угодно, хоть винду со всеми фреймворками впридачу.

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

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

Ну да, я помню тоже на первом курсе счетчик цикла всегда делал byte, и возмущался, что обычные программисты - транжиры!!! - делают его int, тратя в 4!!!! раза больше места, хотя значение переменной всегда уложится в byte... Потом немного поумнел, но это другая история.
0
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
19.11.2015, 11:26 17
1) видимо вы внятно не читали указанные ссылки

будь у меня на то желание можно написать программу и в троичном (-1,0,1) коде + для него же придумать свой ассемблер,
2.1) ассемблер язык - язык мнемоник упрощающих кодирование инструкций в троичном коде
2.2) ассемблер - программу сборщик обьектных модулей
2.3) линковщик (редактор связей) который из обьектных модулей соберет исполняемый файл
по секрету скажу в том же c# есть и ассемблер и линковщик, ассемблер - IL.exe а вот линковщик не помню как называется
3) ну давайте дерзайте пишите, но только полнофункциональную версию со всеми плюшками, а я возьму побольше колы и попкорна и посмотрю на этот бессмысленный и беспощадный цирк а потом скачаю что то Linux подобное если мне захочеться поэксперементировать, не забывайте что по мере написания ОС на oCaml вам нужно
a) одеваться
b) питаться
c) оплачивать счета
KolibriOS вот тут таки пытаються на асме что то делать и даже получается, ну думаю у вас как программиста на супер удобном функциональном языке уйдет ну лет 25-30 и вы выйдете на уровень поддержки железа как в современной Kolibri
только не забывайте про пункты a) b) c)

еще раз повторяю не флудите и не пытайтесь доказать что вы правы, вы не правы изначально т. к. несмотря на то что C# ООП язык, сама предоставленная задача по вычислению 2 дробных чисел по известным формулам в ООП не нуждается, а значит ООП и функциональщина именно в данном конкретном случае никому не нужный и вредный оверхед
0
19.11.2015, 11:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2015, 11:26
Помогаю со студенческими работами здесь

Как вернуть два значения через return?
Вот пример. Мне нужно с помощью функции zero записать в х0=0 , а в х1=1. вооооот, вообщем я хз...

Как вернуть 2 значения из функции?
Добрый день. У меня такой вопрос - как в этой проге можно вернуть 2 значения из функции? #include...

Как вернуть сразу 2 значения из функции?
Есть функция, которая генерирует 2 параметра. Как сделать так, чтобы функция их вернула? Оба сразу?

Как вернуть сразу 2 значения массива в функции?
Собственно дан у меня например массив &quot;aa&quot;, где l-левая граница, а r-правая. При выполнении кода...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru