Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Gregory_Mas
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 26
#1

Несколько значений функции - C++

06.10.2012, 11:30. Просмотров 1076. Ответов 6
Метки нет (Все метки)

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

Непосредственно код:
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
42
43
#include "stdafx.h"
#include <iostream>
#include <ctime>
 
using namespace System;
using namespace std;
 
int m [1000];
 
 
int rec(int i, int max)
{
    int k,x;
    bool a;
    if ((i-1)!=-1)
    {
    i=i-1;
    k=m[i];
    return m[i] > max ? rec (i,m[i]) : rec (i,max);
    }
    else return max;
    
}
 
 
int main()
{
    srand(time(NULL));
    int n,i,j,max;
    cout<<"Vvedite razmernost massiva: "<<endl;
    cin>>n;
    for (i=0; i<=n; i++)
    {
        m[i]=rand()%100;
        cout<<m[i]<<" ";
    }
    i=(n+1);
    max=rec(i,0);
    cout<<endl;
    cout<<max;
    cin.get();
    cin.get();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2012, 11:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Несколько значений функции (C++):

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

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

Как возвратить несколько значений в функции? - C++
Функция, реализующая обобщенный алгоритм Евклида. Нужно вернуть 3 значения: gcd, x и y. То есть нужно возвратить значения массива U....

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

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

Вычисление таблицы значений заданной функции для N значений X в заданном интервале - C++
составить алгоритм и программу вычесления таблицы значений заданной функции для N значений X, меняющихся от Xнач с заданным шагом HX, и M...

6
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
06.10.2012, 12:50 #2
std::pair вам в руки.
1
Gregory_Mas
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 26
06.10.2012, 13:51  [ТС] #3
Эээмм... Что за паир?) Вот я немного доделал программку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int rec(int i, int max, int ind)
{
    int k,x;
    bool a;
    if ((i-1)!=-1)
    {
    i=i-1;
    k=m[i];
    return m[i] > max ? rec (i,m[i],i) : rec (i,max,ind);
    }
    else 
    {
        pair<int,int> p1(max,ind);
        return max;
    
}

Как теперь вывести эту пару?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
06.10.2012, 14:42 #4
Нет же. pair — это как раз тип данных "два значения". Фактически, это структура с двумя полями: first и second, хранящими ваши два значения. Возвращать её же вам надо.
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
#include <iostream>
#include <utility>
 
/* (Неэффективный и неустойчивый к дуракам) рекурсивный поиск
 * максимума в массиве array в пределах [from; to)
 */
template <typename T>
std::pair<T, size_t> rec_max(const T array[], size_t from, size_t to)
{
  if (from != to - 1) {
    std::pair<T, size_t> first(array[from], from);
    std::pair<T, size_t> rest = rec_max(array, from + 1, to);
    return first.first > rest.first ? first : rest;
  }
  else {
    return std::pair<T, size_t>(array[from], from);
  }
}
 
int main()
{
  int array[] = {1, 2, 5, 3, 4};
  std::pair<int, size_t> max = rec_max(array, 0, 5);
  std::cout << "Max: " << max.first << " @ " << max.second;
}
0
Gregory_Mas
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 26
06.10.2012, 15:11  [ТС] #5
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Нет же. pair — это как раз тип данных "два значения". Фактически, это структура с двумя полями: first и second, хранящими ваши два значения.
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
#include <iostream>
#include <utility>
 
/* (Неэффективный и неустойчивый к дуракам) рекурсивный поиск
 * максимума в массиве array в пределах [from; to)
 */
template <typename T>
std::pair<T, size_t> rec_max(const T array[], size_t from, size_t to)
{
  if (from != to - 1) {
    std::pair<T, size_t> first(array[from], from);
    std::pair<T, size_t> rest = rec_max(array, from + 1, to);
    return first.first > rest.first ? first : rest;
  }
  else {
    return std::pair<T, size_t>(array[from], from);
  }
}
 
int main()
{
  int array[] = {1, 2, 5, 3, 4};
  std::pair<int, size_t> max = rec_max(array, 0, 5);
  std::cout << "Max: " << max.first << " @ " << max.second;
}
ох ты, целая куча нового... Можете пояснить значения template <typename T>, std:air<T, size_t> rec_max(const T array[], size_t from, size_t to) (и отдельно про size_t, так как переменную я че-то не признаю), и rest?

Добавлено через 22 минуты
Вах! Программа выводит все правильно после того, как я изменил функцию так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int rec(int i, int max, int ind)
{
    int k,x;
    bool a;
    if ((i-1)!=-1)
    {
    i=i-1;
    k=m[i];
    return m[i] > max ? rec (i,m[i],i) : rec (i,max,ind);
    }
    else 
    {
        pair<int,int> p1(max,ind);
        cout<<endl;
        cout<<p1.first;
        cout<<" "<<p1.second;
        return max;
    }
}
Благодарю за подсказку с типом pair, теперь буду знать о его существовании. Но все же после успеха пояснения нужны, мало ли, когда понадобятся.
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
06.10.2012, 16:32 #6
template <typename T> перед функцией означает шаблон функции. То есть функция может принимать массив (T array[]) любого типа: это может быть int, double и т. п.

size_t — специально обученный тип со смыслом "размер чего-то" (фактически это unsigned int). Его использование просто является чем-то вроде хорошего тона для индексов.

rec_max возвращает пару (максимальное значение, его индекс). Соответственно, в ветках ифа разбирается два варианта: если массив из одного элемента (else-ветка), то возвращаем этот один элемент; если в массиве больше элементов, то максимум — это большее из first и rest значение. first — это первый элемент просматриваемой части массива (с индексом from), rest — это максимальный среди всех остальных элементов (с индексами от from + 1 до to – 1). rest-то и вычисляется рекурсивно.
1
Gregory_Mas
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 26
06.10.2012, 16:42  [ТС] #7
еще раз спасибо. Pair'ом так и не получилось воспользоваться, ибо куча буков смутила.

Опять переделал программу, теперь функция возвращает нужные значения через структуры (а не просто выводит его).
0
06.10.2012, 16:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2012, 16:42
Привет! Вот еще темы с ответами:

Вывести таблицу значений функции y=f(x) для всех значений x в пределах - C++
Вывести таблицу значений функции y=f(x) для всех значений x в пределах от a до b с шагом h. Значение действительного параметра k вводится с...

Напечатать таблицу значений функции для всех значений аргумента из диапазона [1..10] c шагом 0.1 - C++
Написать функцию, вычисляющую значение математической функции Y(x)=cos(x)+1 для всех значений аргумента из диапазона c шагом 0.1

Несколько значений в Return - C++
Как с помощью Return передать несколько значений, не создавая глобальных переменных? :scratch:

Как в условие if (ch !=.) внести несколько значений? - C++
Добрый день! В программе создаю условие if(ch!='w')cout&lt;&lt;&quot;Error&quot;; Как можно записать условие(если это вообще возможно), когда...


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

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

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