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

Можно ли через метод типа int вернуть 2 значения (return)?

10.05.2017, 20:48. Показов 13299. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем возникла такая проблема. Создал 2 метода для решения дискриминантного уравнения. Один метод сделал который ничего не возвращает, но принимает 3 значения (а б с), а другой возвращает значение и принимает.
И в этом методе решил сделать ЕСЛИ дискриминант больше нуля, то должно вывести 2 корня. Если равно нулю, то один. Вообщем если в уравнении нужно вывести 2 корня, не могу понять как это организовать? Если это возможно, можете не говорить способ, а лишь намекнуть, как можно это провернуть. (если возможен такой вариант)
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2017, 20:48
Ответы с готовыми решениями:

Можно ли вывести сразу 2 значения int из функции через return?
Можно ли вывести сразу 2 значения из функции int через return ? Например функция находит X1 и X2...

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

Что это isOk(int s),setAge(int g){if(isOk(g){age=g;return true;}else{.;return false;}}.getName(){return name;}?
package com.company; import java.io.Serializable; public class person implements Serializable {...

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

22
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17784 / 13903 / 5324
Регистрация: 17.03.2014
Сообщений: 28,453
Записей в блоге: 1
10.05.2017, 20:49 2
Лучший ответ Сообщение было отмечено bozzly как решение

Решение

bozzly, используй массив
1
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
10.05.2017, 20:50 3
Цитата Сообщение от bozzly Посмотреть сообщение
как можно это провернуть
Использовать для вывода корней массив, к примеру.
1
19 / 5 / 1
Регистрация: 28.03.2015
Сообщений: 74
10.05.2017, 20:55  [ТС] 4
Спасибо большое вам
И как я до этого не додумался)) эх.. Либо тупой, либо опыта мало)) учусь только
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
10.05.2017, 20:59 5
можно еще кортеж использовать
1
Эксперт .NET
 Аватар для kolorotur
17794 / 12945 / 3381
Регистрация: 17.09.2011
Сообщений: 21,229
10.05.2017, 20:59 6
В седьмой версии можно так:
C#
1
2
3
4
5
6
7
8
9
(int, int) Discriminant()
{
   int x1 = ...;
   int x2 = ...;
 
   return (x1, x2);
}
 
(int x1, int x2) = Discriminant();
3
19 / 5 / 1
Регистрация: 28.03.2015
Сообщений: 74
10.05.2017, 20:59  [ТС] 7
Цитата Сообщение от FateOri Посмотреть сообщение
можно еще кортеж использовать
Я скорее всего до этого еще не дошел, поэтому не знаю что это такое
0
Эксперт .NET
 Аватар для insite2012
5546 / 4309 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
10.05.2017, 21:00 8
Цитата Сообщение от FateOri Посмотреть сообщение
можно еще кортеж использовать
А я бы создал структуру с нужными полями и ее бы и вернул из метода.
2
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
10.05.2017, 21:01 9
Цитата Сообщение от bozzly Посмотреть сообщение
Я скорее всего до этого еще не дошел, поэтому не знаю что это такое
код сразу выше написали))
если не 7 версия то через Tuple

Добавлено через 48 секунд
Цитата Сообщение от insite2012 Посмотреть сообщение
А я бы создал структуру с нужными полями и ее бы и вернул из метода.
тоже хороший вариант наверное даже лучше чем предложенные раньше
1
134 / 130 / 107
Регистрация: 17.03.2009
Сообщений: 364
10.05.2017, 21:06 10
С Tuple
C#
1
2
3
4
5
6
7
8
        static Tuple<double, double> QuadraticEquation(double a, double b, double c = 0)
        {
            
            var d = b * b - 4 * a * c;
            if (d < 0) return new Tuple<double, double>(Double.NaN, Double.NaN);
            if (Math.Abs(d) < 1e-15) return new Tuple<double, double>((-b+Math.Sqrt(d))/(2*a), Double.NaN);
            return new Tuple<double, double>((-b + Math.Sqrt(d)) / (2 * a), (-b - Math.Sqrt(d)) / (2 * a));
        }
С массивом
C#
1
2
3
4
5
6
7
        static double[] QuadraticEquation(double a, double b, double c = 0)
        {
            var d = b * b - 4 * a * c;
            if (d < 0) return new double[] { };
            if (Math.Abs(d) < 1e-15) return new double[] {(-b + Math.Sqrt(d)) / (2 * a)};
            return new double[] {(-b + Math.Sqrt(d)) / (2 * a), (-b - Math.Sqrt(d)) / (2 * a)};
        }
1
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
10.05.2017, 22:30 11
Пока вышеуказанные выпендриваются стандартами кода, я подмечу, что Дискриминант может вообще не иметь корней если результат < 0, по тому более целесообразно использовать List<int>
0
134 / 130 / 107
Регистрация: 17.03.2009
Сообщений: 364
10.05.2017, 22:36 12
Цитата Сообщение от iDReeM Посмотреть сообщение
что Дискриминант может вообще не иметь корней
Сильная фраза!
1
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
10.05.2017, 22:55 13
iDReeM, Коллекцию нужно возвращать тогда, когда мы заранее не знаем количество возвращаемых элементов. В данном случае возвращать массив - это из разряда задавать пол человека через int. В нашем случае, как сказал выше insite2012, нужен просто пользовательский тип с 2 свойствами. При необходимости можно генерировать исключение или возвращать null.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17784 / 13903 / 5324
Регистрация: 17.03.2014
Сообщений: 28,453
Записей в блоге: 1
10.05.2017, 22:59 14
sldp, на мой взгляд массив тут лучше подходит т.к. он четко сигнализирует есть ли решение (Length>0) и сколько корней у уравнения (Length==1 || Length==2).
0
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
10.05.2017, 23:13 15
Цитата Сообщение от sldp Посмотреть сообщение
iDReeM, Коллекцию нужно возвращать тогда, когда мы заранее не знаем количество возвращаемых элементов. В данном случае возвращать массив - это из разряда задавать пол человека через int. В нашем случае, как сказал выше insite2012, нужен просто пользовательский тип с 2 свойствами. При необходимости можно генерировать исключение или возвращать null.
мы вычисляем корни дискриминанта, мы заранее не знаем сколько у него корней и есть ли они вообще.
C#
1
2
3
4
5
List<int> Discriminant = GetDiscriminant(a,b,c);
if(Discriminant == null)
    //списка нет. нет корней
else
    //вывод списка - выведет все найденные корни, сколько бы их нибыло, 1 или 2.
1
Эксперт .NET
 Аватар для insite2012
5546 / 4309 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
10.05.2017, 23:18 16
Цитата Сообщение от OwenGlendower Посмотреть сообщение
массив тут лучше подходит т.к. он четко сигнализирует есть ли решение (Length>0) и сколько корней у уравнения (Length==1 || Length==2).
А мне кажется наоборот... Хотя каждый делает по своему. В примере ниже использовался расчет mishau, так что за точность вычислений не ручаюсь.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication11 {
    class Program {
        static void Main(string[] args) {
            QuadraticResult result = GetQuadraticResult(10.3, 47.8, 2);
            if (!result.IsRootable) {
                Console.WriteLine("No roots for that numbers!");
            }
            else {
                Console.WriteLine("RootA: {0}, RootB: {1}", result.RootA, result.RootB);
            }
            Console.ReadLine();
        }
        static QuadraticResult GetQuadraticResult(double a, double b, double c = 0) {
            QuadraticResult result = new QuadraticResult();
            double d = b * b - 4 * a * c;
            if (d < 0) {
                result.IsRootable = false;
                return result;
            }
            result.IsRootable = true;
            if (Math.Abs(d) < 1e-15) {
                result.RootA = result.RootB = (-b + Math.Sqrt(d)) / (2 * a);
            }
            else {
                result.RootA = (-b + Math.Sqrt(d)) / (2 * a);
                result.RootB = (-b - Math.Sqrt(d)) / (2 * a);
            }
            return result;
        }
    }
    class QuadraticResult {
        public bool IsRootable { get; set; }
        public double RootA { get; set; }
        public double RootB { get; set; }
    }
}
0
134 / 130 / 107
Регистрация: 17.03.2009
Сообщений: 364
11.05.2017, 00:17 17
Цитата Сообщение от insite2012 Посмотреть сообщение
В примере ниже использовался расчет mishau, так что за точность вычислений не ручаюсь.
В моем случае работает Бритва Оккама (не плоди лишнего).

В первом примере с Tuple, в случае отрицательного дискриминанта, его поля принимают значения Double.NaN, что означает отсутствие корней. В случае нулевого дискриминанта, второе поле Tuple - Item2 - принимает значение Double.NaN, а в первом - Item1 - находится единственный корень. Иначе, в полях Item1 и Item2 содержатся оба корня

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


С массивом мне нравится больше.

Цитата Сообщение от iDReeM Посмотреть сообщение
мы вычисляем корни дискриминант
Ну вот опять...
0
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
11.05.2017, 00:22 18
Цитата Сообщение от mishau Посмотреть сообщение
Ну вот опять...
копировать-вставить (уставший)
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
11.05.2017, 08:42 19
Цитата Сообщение от OwenGlendower Посмотреть сообщение
sldp, на мой взгляд массив тут лучше подходит т.к. он четко сигнализирует есть ли решение (Length>0) и сколько корней у уравнения (Length==1 || Length==2).
Так всегда будет же два корня. при d = 0 тоже два корня, но одинаковых(или можно сказать один, но с кратностью 2). многочлен же 2го порядка = 2 корня.
Для d<0 либо не забываем про комплексные числа, либо возвращаем null.
2
 Аватар для iDReeM
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
11.05.2017, 09:43 20
Цитата Сообщение от sldp Посмотреть сообщение
Так всегда будет же два корня.
d == 0
• 1 корень
d > 0
• 2 корня
d < 0
• 0 корней

математику прогуливал? карл
0
11.05.2017, 09:43
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2017, 09:43
Помогаю со студенческими работами здесь

Как передать объекты типа (значения класса) в метод и вернуть анонимный тип, чтобы сделать с ним что-нибудь
Всем привет В принципе, просто хочу понять схему, как это возможно (то, что в описании темы)...

Значения типа int нельзя присвоить сущности типа int
Значения типа int нельзя присвоить сущности типа int. Как изменить код, что бы было правильно?...

Как вернуть только верхнее значение стека через return
Есть рекурсивная функция, которая возвращает определенное значение. Вопрос - как вернуть только...

Вернуть значение типа int за счет директив препроцессора
основной текстовый документ. #include &quot;mystring.h&quot; #include &lt;iostream&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru