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

Как возвратить несколько значений в функции? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:13     Как возвратить несколько значений в функции? #1
Функция, реализующая обобщенный алгоритм Евклида. Нужно вернуть 3 значения: gcd, x и y. То есть нужно возвратить значения массива U. Подскажите как это лучше сделать?

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
__int64 Low2(__int64 a, __int64 b)
{   if (a<0 || b<0)
    printf("\nUslovie ne vipolneno. Zadaite a ili b zanovo");
    else 
    {
    if (a<b)
    {
        int z;
        z=a; a=b; b=z;
    }
 
    int U[3], V[3], T[3], q, k;
    U[0]=a; U[1]=1; U[2]=0;
    V[0]=b; V[1]=0; V[2]=1;
 
    do
    {
        q=U[0]/V[0];
        T[0]=U[0]%V[0];
        T[1]=U[1]-q*V[1];
        T[2]=U[2]-q*V[2];
        int i;
        for (i=0; i<=2; i++)
        {
        U[i]=V[i];
        V[i]=T[i];
        }
    }
    while (V[0]>0);
    return .........
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:19     Как возвратить несколько значений в функции? #2
Цитата Сообщение от Артем1909 Посмотреть сообщение
То есть нужно возвратить значения массива U. Подскажите как это лучше сделать?
Передать его в функцию.
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:22  [ТС]     Как возвратить несколько значений в функции? #3
Мне нужно чтобы эта функция возвращала 3 эти значения с помощью return.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
16.09.2013, 17:23     Как возвратить несколько значений в функции? #4
Цитата Сообщение от Артем1909 Посмотреть сообщение
Мне нужно чтобы эта функция возвращала 3 эти значения с помощью return.
ну сделайте тогда структуру
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:25  [ТС]     Как возвратить несколько значений в функции? #5
у меня не получается, можешь помочь? препод сказал, что можно также с помощью указателей...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:27     Как возвратить несколько значений в функции? #6
Цитата Сообщение от Артем1909 Посмотреть сообщение
Мне нужно чтобы эта функция возвращала 3 эти значения с помощью return.
Задание такое? Три, и через return?
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:28  [ТС]     Как возвратить несколько значений в функции? #7
Да, сказали, что можно с помощью указателей возвратить значения массива U. Но я не знаю как это сделать
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
16.09.2013, 17:29     Как возвратить несколько значений в функции? #8
возвращай std::tuple<int, int, int>
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:30  [ТС]     Как возвратить несколько значений в функции? #9
Что это? Надо с помощью return
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
16.09.2013, 17:39     Как возвратить несколько значений в функции? #10
Цитата Сообщение от Артем1909 Посмотреть сообщение
что можно с помощью указателей возвратить значения массива U
Конечно можно:
1) Выделить память динамически, скопировать туда значения массива, потом забыть освободить память и получить утечку памяти.
2) Возвратить указатель на локальный массив, и получить UB при использовании этого указателя.
3) Сделать, например, сам массив статическим и возвратить указатель на него, но тогда каждый вызов будет перезаписывать старые данные.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:39     Как возвратить несколько значений в функции? #11
Цитата Сообщение от Артем1909 Посмотреть сообщение
можно с помощью указателей возвратить значения массива U. Но я не знаю как это сделать
Я тоже.
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:42  [ТС]     Как возвратить несколько значений в функции? #12
Можешь подсказать, как тогда лучше написать?

Добавлено через 59 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
Конечно можно:
1) Выделить память динамически, скопировать туда значения массива, потом забыть освободить память и получить утечку памяти.
2) Возвратить указатель на локальный массив, и получить UB при использовании этого указателя.
3) Сделать, например, сам массив статическим и возвратить указатель на него, но тогда каждый вызов будет перезаписывать старые данные.
Можешь подсказать, как тогда лучше написать?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:45     Как возвратить несколько значений в функции? #13
Вернуть указатель на динамический массив.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
16.09.2013, 17:50     Как возвратить несколько значений в функции? #14
Цитата Сообщение от alsav22 Посмотреть сообщение
Вернуть указатель на динамический массив.
Ни в коем случае. Зачем на ровном месте все усложнять.

Вариант 1:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
std::tuple<int, int, int> func() {
  int a = 0;
  int b = 1;
  int c = 2;
  return std::make_tuple( a, b, c );
}
 
int main() {
 
  std::tuple<int, int, int> r = func();
  int a = std::get<0>( r );
  int b = std::get<1>( r );
  int c = std::get<2>( r );
 
  return 0;
}
Вариант 2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct data {
  int a;
  int b;
  int c;
};
 
data func() {
  data s;
  s.a = 1;
  s.b = 2;
  s.c = 3;
  return s;
}
 
int main() {
 
  data r = func();
  int a = r.a;
  int b = r.b;
  int c = r.c;
 
  return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:54     Как возвратить несколько значений в функции? #15
Цитата Сообщение от Voivoid Посмотреть сообщение
Ни в коем случае. Зачем на ровном месте все усложнять.
Где указатель, который нужно вернуть?
Цитата Сообщение от Артем1909 Посмотреть сообщение
с помощью указателей возвратить значения массива U
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
16.09.2013, 17:56     Как возвратить несколько значений в функции? #16
Цитата Сообщение от alsav22 Посмотреть сообщение
Где указатель, который нужно вернуть?
Это плохой выбор для решения данной проблемы
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 18:01     Как возвратить несколько значений в функции? #17
Цитата Сообщение от Voivoid Посмотреть сообщение
Это плохой выбор для решения данной проблемы
Задание такое (если, конечно, такое). Я бы вообще ничего не возвращал, а передал бы массив в функцию. Предложите другой, через возврат указателя.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
16.09.2013, 18:03     Как возвратить несколько значений в функции? #18
В задании указано, что нужно просто возвратить три значения.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
16.09.2013, 18:04     Как возвратить несколько значений в функции? #19
Цитата Сообщение от alsav22 Посмотреть сообщение
Предложите другой, через возврат указателя.
C++
1
2
3
4
5
6
int* getArray()
{
int* ret = new int[3];
...
return ret;
}
только не забыть потом удалить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 18:08     Как возвратить несколько значений в функции?
Еще ссылки по теме:

C++ Как из функции вытащить несколько значений.
C++ Вернуть несколько значений из функции С++
C++ Как функции возвратить ссылку на объект?

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 18:08     Как возвратить несколько значений в функции? #20
Цитата Сообщение от Raali Посмотреть сообщение
C++
1
2
3
4
5
6
int* getArray()
{
int* ret = new int[3];
...
return ret;
}
только не забыть потом удалить
Чем это отличается от моего предложения?
Цитата Сообщение от alsav22 Посмотреть сообщение
Вернуть указатель на динамический массив.
Yandex
Объявления
16.09.2013, 18:08     Как возвратить несколько значений в функции?
Ответ Создать тему
Опции темы

Текущее время: 22:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru