Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Gregory_Mas
3 / 3 / 1
Регистрация: 06.10.2012
Сообщений: 26
#1

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

06.10.2012, 11:30. Просмотров 1128. Ответов 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++):

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

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

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

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

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

Вычислить значение заданной функции. Осуществить вывод значений аргумента и результатов вычислений значений функции в за
Вычислить значение заданной функции. Осуществить вывод значений аргумента и...

6
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
06.10.2012, 12:50 #2
std::pair вам в руки.
1
Gregory_Mas
3 / 3 / 1
Регистрация: 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
~ Эврика! ~
1245 / 994 / 74
Регистрация: 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 / 1
Регистрация: 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
~ Эврика! ~
1245 / 994 / 74
Регистрация: 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 / 1
Регистрация: 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
Привет! Вот еще темы с решениями:

Вычисление таблицы значений заданной функции для N значений X в заданном интервале
составить алгоритм и программу вычесления таблицы значений заданной функции для...

Вывести таблицу значений функции y=f(x) для всех значений x в пределах
Вывести таблицу значений функции y=f(x) для всех значений x в пределах от a до...

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

Осуществить вывод значений аргумента и результатов вычислений значений функции в заданном диапазоне с заданным шагом
1)Задание: Вычислить значение заданной функции. Осуществить вывод значений...


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

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

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