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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
#1

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

16.09.2013, 17:13. Просмотров 1383. Ответов 27
Метки нет (Все метки)

Функция, реализующая обобщенный алгоритм Евклида. Нужно вернуть 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 .........
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 17:13     Как возвратить несколько значений в функции?
Посмотрите здесь:

C++ Несколько значений функции
C++ Как возвратить созданый динамический двухмерный массив из функции в main?
как принять и возвратить массив в другой функции C++
Возвратить object в экспортируемой функции dll C++
Возвратить массив из функции C++
Возвратить массив из функции C++
C++ Как из функции вытащить несколько значений.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5413 / 4809 / 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
Модератор
Эксперт CЭксперт С++
12728 / 7188 / 802
Регистрация: 27.09.2012
Сообщений: 17,729
Записей в блоге: 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
5413 / 4809 / 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
672 / 275 / 12
Регистрация: 31.03.2013
Сообщений: 1,338
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
Модератор
Эксперт CЭксперт С++
12728 / 7188 / 802
Регистрация: 27.09.2012
Сообщений: 17,729
Записей в блоге: 2
Завершенные тесты: 1
16.09.2013, 17:39     Как возвратить несколько значений в функции? #10
Цитата Сообщение от Артем1909 Посмотреть сообщение
что можно с помощью указателей возвратить значения массива U
Конечно можно:
1) Выделить память динамически, скопировать туда значения массива, потом забыть освободить память и получить утечку памяти.
2) Возвратить указатель на локальный массив, и получить UB при использовании этого указателя.
3) Сделать, например, сам массив статическим и возвратить указатель на него, но тогда каждый вызов будет перезаписывать старые данные.
alsav22
5413 / 4809 / 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
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:45     Как возвратить несколько значений в функции? #13
Вернуть указатель на динамический массив.
Voivoid
672 / 275 / 12
Регистрация: 31.03.2013
Сообщений: 1,338
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
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:54     Как возвратить несколько значений в функции? #15
Цитата Сообщение от Voivoid Посмотреть сообщение
Ни в коем случае. Зачем на ровном месте все усложнять.
Где указатель, который нужно вернуть?
Цитата Сообщение от Артем1909 Посмотреть сообщение
с помощью указателей возвратить значения массива U
Voivoid
672 / 275 / 12
Регистрация: 31.03.2013
Сообщений: 1,338
16.09.2013, 17:56     Как возвратить несколько значений в функции? #16
Цитата Сообщение от alsav22 Посмотреть сообщение
Где указатель, который нужно вернуть?
Это плохой выбор для решения данной проблемы
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 18:01     Как возвратить несколько значений в функции? #17
Цитата Сообщение от Voivoid Посмотреть сообщение
Это плохой выбор для решения данной проблемы
Задание такое (если, конечно, такое). Я бы вообще ничего не возвращал, а передал бы массив в функцию. Предложите другой, через возврат указателя.
Voivoid
672 / 275 / 12
Регистрация: 31.03.2013
Сообщений: 1,338
16.09.2013, 18:03     Как возвратить несколько значений в функции? #18
В задании указано, что нужно просто возвратить три значения.
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 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++
Как в условие if (ch !=.) внести несколько значений? C++
Как из функции вернуть несколько значений? C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5413 / 4809 / 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     Как возвратить несколько значений в функции?
Ответ Создать тему
Опции темы

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