Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
1

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

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

Как вернуть из функции несколько значений?
Привет :) Собственно говоря вопрос понятен из темы) Вот код, не знаю как...

Как из функции вернуть несколько значений?
Здравствуйте)! Не могу понять как из функции вернуть несколько...

Как из функции вытащить несколько значений.
Люди помогите,не могу нигде найти, как из функции вытащить несколько значений.

Как функции возвратить ссылку на объект?
//Есть некая функция что писать перед функцией??? Инт написал. int func(){ //...

Как принять и возвратить массив в другой функции?
пример: прототип функции ??? int main() { создаём функцию которая...

27
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:19 2
Цитата Сообщение от Артем1909 Посмотреть сообщение
То есть нужно возвратить значения массива U. Подскажите как это лучше сделать?
Передать его в функцию.
0
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:22  [ТС] 3
Мне нужно чтобы эта функция возвращала 3 эти значения с помощью return.
0
Croessmah
++Ͻ
14616 / 8368 / 1578
Регистрация: 27.09.2012
Сообщений: 20,563
Записей в блоге: 2
Завершенные тесты: 1
16.09.2013, 17:23 4
Цитата Сообщение от Артем1909 Посмотреть сообщение
Мне нужно чтобы эта функция возвращала 3 эти значения с помощью return.
ну сделайте тогда структуру
0
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:25  [ТС] 5
у меня не получается, можешь помочь? препод сказал, что можно также с помощью указателей...
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:27 6
Цитата Сообщение от Артем1909 Посмотреть сообщение
Мне нужно чтобы эта функция возвращала 3 эти значения с помощью return.
Задание такое? Три, и через return?
0
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:28  [ТС] 7
Да, сказали, что можно с помощью указателей возвратить значения массива U. Но я не знаю как это сделать
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
16.09.2013, 17:29 8
возвращай std::tuple<int, int, int>
0
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:30  [ТС] 9
Что это? Надо с помощью return
0
Croessmah
++Ͻ
14616 / 8368 / 1578
Регистрация: 27.09.2012
Сообщений: 20,563
Записей в блоге: 2
Завершенные тесты: 1
16.09.2013, 17:39 10
Цитата Сообщение от Артем1909 Посмотреть сообщение
что можно с помощью указателей возвратить значения массива U
Конечно можно:
1) Выделить память динамически, скопировать туда значения массива, потом забыть освободить память и получить утечку памяти.
2) Возвратить указатель на локальный массив, и получить UB при использовании этого указателя.
3) Сделать, например, сам массив статическим и возвратить указатель на него, но тогда каждый вызов будет перезаписывать старые данные.
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:39 11
Цитата Сообщение от Артем1909 Посмотреть сообщение
можно с помощью указателей возвратить значения массива U. Но я не знаю как это сделать
Я тоже.
0
Артем1909
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 7
16.09.2013, 17:42  [ТС] 12
Можешь подсказать, как тогда лучше написать?

Добавлено через 59 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
Конечно можно:
1) Выделить память динамически, скопировать туда значения массива, потом забыть освободить память и получить утечку памяти.
2) Возвратить указатель на локальный массив, и получить UB при использовании этого указателя.
3) Сделать, например, сам массив статическим и возвратить указатель на него, но тогда каждый вызов будет перезаписывать старые данные.
Можешь подсказать, как тогда лучше написать?
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:45 13
Вернуть указатель на динамический массив.
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
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;
}
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 17:54 15
Цитата Сообщение от Voivoid Посмотреть сообщение
Ни в коем случае. Зачем на ровном месте все усложнять.
Где указатель, который нужно вернуть?
Цитата Сообщение от Артем1909 Посмотреть сообщение
с помощью указателей возвратить значения массива U
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
16.09.2013, 17:56 16
Цитата Сообщение от alsav22 Посмотреть сообщение
Где указатель, который нужно вернуть?
Это плохой выбор для решения данной проблемы
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 18:01 17
Цитата Сообщение от Voivoid Посмотреть сообщение
Это плохой выбор для решения данной проблемы
Задание такое (если, конечно, такое). Я бы вообще ничего не возвращал, а передал бы массив в функцию. Предложите другой, через возврат указателя.
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
16.09.2013, 18:03 18
В задании указано, что нужно просто возвратить три значения.
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
16.09.2013, 18:04 19
Цитата Сообщение от alsav22 Посмотреть сообщение
Предложите другой, через возврат указателя.
C++
1
2
3
4
5
6
int* getArray()
{
int* ret = new int[3];
...
return ret;
}
только не забыть потом удалить
0
alsav22
5442 / 4837 / 831
Регистрация: 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 Посмотреть сообщение
Вернуть указатель на динамический массив.
0
16.09.2013, 18:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 18:08

Как возвратить созданый динамический двухмерный массив из функции в main?
Надо из функции mtx возвртить матрицу в главную функцию. Матрица создаеться и...

Несколько значений функции
Здравствуйте. Нужно написать рекурсивную функцию, к-ая возвращает наибольный...

Вернуть несколько значений из функции С++
Здравствуйте!!! Нужна помощь. В общем есть ДЛЛ написанная мною на плюсах в VS...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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